Yapay Zeka Vizyonu#
giriiş#
VEX AIM Kodlama Robotunun Yapay Zeka Görsel Sensörü, nesneleri, renkleri ve AprilTag kimliklerini algılar ve izler. Bu sayede robot, çevresini analiz edebilir, nesneleri takip edebilir ve algılanan görsel verilere göre tepki verebilir.
Yapay Zeka Görüntü Sensörünün çözünürlüğü 320×240 pikseldir. Başlangıç noktası (0, 0) sol üst köşede yer almaktadır ve sensörün merkezi aşağıdaki şemada gösterildiği gibi (160, 120) konumundadır:

Aşağıda tüm yöntemler ve özelliklerin listesi bulunmaktadır:
İşlemler — Yapay Zeka Görüntüleme kamerası görüntüsünü göster veya gizle.
show_aivision— Yapay Zeka Görüntü akışını robotun ekranında görüntüler.hide_aivision— Yapay Zeka Görüntüsü akışını ekrandan gizler.tag_detection— AprilTag ID algılamayı açar veya kapatır.
Alıcılar — Robotun bir nesneyi tutup tutmadığını algılar.
get_data— Belirli bir imza için tespit edilen nesnelerin bir demetini döndürür.has_sports_ball— Robotun bir spor topuna sahip olup olmadığını döndürür.has_any_barrel— Robotun herhangi bir varil türüne sahip olup olmadığını döndürür.has_blue_barrel— Robotun mavi bir varile sahip olup olmadığını döndürür.has_orange_barrel— Robotun turuncu bir varile sahip olup olmadığını döndürür.
Özellikler — get_data’den döndürülen nesne verileri.
exists— Nesnenin mevcut algılamada Boolean olarak var olup olmadığı.width— Tespit edilen nesnenin genişliği.height— Tespit edilen nesnenin yüksekliği.centerX— Nesnenin merkezinin X konumu.centerY— Nesnenin merkezinin Y konumu.bearing— Robotun ön tarafına göre yatay açı.rotation— Nesnenin yönü.originX— Nesnenin sol üst köşesinin X konumu.originY— Nesnenin sol üst köşesinin Y konumu.id— Nesnenin sınıflandırma veya etiket kimliği.score— Yapay Zeka Sınıflandırmaları için Güven Puanı.type— Nesnenin türünü döndürür (Yapay Zeka, Etiket, Renk veya Kod).
Yapıcılar — Renk imzalarını ve kodlarını tanımlayın.
Renk İmzası Oluştur — RGB ve ton/doygunluk aralıklarına dayalı yeni bir Renk İmzası oluşturur.
Renk Kodu Oluştur — Birden fazla Renk İmzasını tek bir Renk Kodunda birleştirir.
Eylemler#
show_aivision#
show_aivision komutu, yapay zeka görüş sensörünün canlı veri akışını robotun ekranında görüntüler. Canlı veri akışı, ekrandaki diğer tüm görüntüleri veya metinleri kaplayacaktır.
Not: hide_aivision akışı gizlemek için kullanılmadığı sürece ekranda başka hiçbir görüntü veya metin görüntülenmeyecektir.
Usage:
robot.screen.show_aivision()
Parametreler |
Tanım |
|---|---|
Bu yöntemin parametresi yoktur. |
# Watch the AI Vision Sensor detect AI Classifications
# and AprilTag IDs as you move the robot
robot.screen.show_aivision()
hide_aivision#
hide_aivision komutu, yapay zeka görüş sensörünün canlı veri akışını robotun ekranından kaldırır.
Usage:
robot.screen.hide_aivision()
Parametreler |
Tanım |
|---|---|
Bu yöntemin parametresi yoktur. |
# View the AI Vision Sensor's feed for five seconds
robot.screen.show_aivision()
wait(5, SECONDS)
robot.screen.hide_aivision()
tag_detection#
tag_detection , AprilTag ID algılamasını etkinleştirir veya devre dışı bırakır; durum bir Boolean değeridir.
Bu sensör, Circle21h7 ailesinden 0 ile 36 arasındaki AprilTag kimliklerini algılayabilir.
Usage:
robot.vision.tag_detection(state)
Parametreler |
Tanım |
|---|---|
|
Değerler şunlardır: |
robot.screen.set_font(PROP30)
# Cut off AprilTag ID detection after 5 seconds
while True:
if timer.time(SECONDS) > 5:
robot.vision.tag_detection(False)
robot.screen.clear_screen()
robot.screen.set_cursor(3, 1)
apriltags = robot.vision.get_data(ALL_TAGS)
if apriltags[0].exists:
robot.screen.print("AprilTag ID detected!")
else:
robot.screen.print("Nothing detected!")
wait(0.1, SECONDS)
Getters#
get_data#
get_data , AI Vision Sensor çerçevesindeki verileri tek bir imzaya filtreler — sensörün tanıyabileceği bir şeyin kaydedilmiş açıklaması, örneğin önceden eğitilmiş bir nesne, bir AprilTag Kimliği veya yapılandırılmış bir Renk İmzası veya Renk Kodu — ve bir tuple döndürür.
Renk İmzaları ve Renk Kodları bu yöntemle kullanılabilmeleri için öncelikle Yapay Zeka Görsel Yardımcı Programında yapılandırılmalıdır.
Tuple, 0 indeksinden başlayarak, genişliğe göre en büyükten en küçüğe doğru sıralanmış nesneleri saklar. Her nesnenin properties özelliklerine indeksi kullanılarak erişilebilir. Eşleşen nesne bulunmazsa boş bir tuple döndürülür.
Usage:
robot.vision.get_data(signature, count)
Parametreler |
Tanım |
|---|---|
|
Veri kümesini yalnızca belirtilen imzaya ait verileri içerecek şekilde filtreler. Mevcut imzalar şunlardır:
|
|
İsteğe bağlı. Döndürülebilecek maksimum nesne sayısını 1 ile 24 arasında ayarlar (varsayılan: 8). |
Not: 5 ila 37 arasındaki AprilTag kimlikleri, AIM Yazdırılabilirler adresinden yazdırılan AprilTag kimlikleri kullanılarak elde edilebilir.
# Move forward if a sports ball is detected
while True:
ball = robot.vision.get_data(SPORTS_BALL)
if ball[0].exists:
robot.move_for(10, 0)
wait(50, MSEC)
Note: The returned tuple can be sorted by any property, not just width, using Python’s sorted function. For example, sorting by AprilTag ID:
# Print each detected AprilTag ID in ascending order by ID
while True:
apriltags = sorted(robot.vision.get_data(ALL_TAGS), key=id)
for tag in apriltags:
print(tag.id)
wait(1, SECONDS)
Ya da bunun yerine yüksekliğe göre sıralama:
# Print each detected AprilTag ID in ascending order by height
while True:
apriltags_by_height = sorted(robot.vision.get_data(ALL_TAGS), key=lambda tag: tag.height)
for tag in apriltags_by_height:
print(tag.height)
wait(1, SECONDS)
Verileri Görüntüleme#
get_data tarafından döndürülen demeti yazdırmak, tespit edilen tüm nesnelerin tüm özelliklerinin bir listesini görüntüler:
# Display properties of all detected AprilTag IDs
while True:
vision_data = robot.vision.get_data(ALL_TAGS)
if vision_data[0].exists:
break
wait(0.25, SECONDS)
print(vision_data)

Yapay Zeka Sınıflandırmaları#
AIM Yapay Zeka Görüntüleme Sensörü, bu yapay zeka sınıflandırmalarını algılayabilir:
Kimlik Numarası |
Yapay Zeka Sınıflandırması |
İmza |
|---|---|---|
0 |
Top |
|
1 |
Mavi Varil |
|
2 |
Turuncu Varil |
|
3 |
AIM Robot |
|
Renk İmzaları#
Renk imzası, yapay zeka görüş sensörünün tanıyabileceği benzersiz bir renktir. Bu imzalar, sensörün nesneleri renklerine göre algılamasına ve izlemesine olanak tanır. Bir Renk İmzası yapılandırıldıktan sonra, sensör görüş alanındaki o belirli renkteki nesneleri tanımlayabilir. Renk imzaları, renkli nesneleri gerçek zamanlı olarak işlemek ve algılamak için get_data ile birlikte kullanılır.

# Display if any objects match the Red_Box signature
while True:
robot.screen.set_cursor(1, 1)
robot.screen.clear_row(1)
# Change to any configured Color Signature
ai_objects = robot.vision.get_data(Red_Box)
if ai_objects[0].exists:
robot.screen.print("Color signature detected!")
Renk Kodları#
Renk kodu, belirli bir düzende düzenlenmiş 2 ila 4 renk imzasından oluşan yapılandırılmış bir desendir. Bu kodlar, yapay zeka görüş sensörünün önceden tanımlanmış renk desenlerini tanımasını sağlar. Renk kodları, karmaşık nesneleri tanımlamak veya otonom navigasyon için benzersiz işaretler oluşturmak için kullanışlıdır.

# Display if any objects match the BlueRed code
while True:
robot.screen.set_cursor(1, 1)
robot.screen.clear_row(1)
# Change to any configured Color Code
ai_objects = robot.vision.get_data(BlueRed)
if ai_objects[0].exists:
robot.screen.print("Color code detected!")
has_sports_ball#
has_sports_ball , robotun şu anda bir spor topuna sahip olup olmadığını gösteren bir Boolean değeri döndürür.
True— Robotun bir spor topu var.False— Robotun spor topu yok.
Usage:
robot.has_sports_ball()
Parametreler |
Tanım |
|---|---|
Bu yöntemin parametresi yoktur. |
# Kick when the robot has a sports ball
while True:
if robot.has_sports_ball():
robot.kicker.kick(MEDIUM)
wait(50, MSEC)
has_any_barrel#
has_any_barrel , robotun şu anda herhangi bir varile sahip olup olmadığını gösteren bir Boolean değeri döndürür.
True— Robotun bir varili var.False— Robotun bir namlusu yok.
Usage:
robot.has_any_barrel()
Parametreler |
Tanım |
|---|---|
Bu yöntemin parametresi yoktur. |
# Push a barrel away when detected
while True:
if robot.has_any_barrel():
robot.kicker.place()
wait(50, MSEC)
has_blue_barrel#
has_blue_barrel , robotun şu anda mavi bir varile sahip olup olmadığını gösteren bir Boolean değeri döndürür.
True— Robotun mavi bir gövdesi var.False— Robotun mavi bir gövdesi yok.
Usage:
robot.has_blue_barrel()
Parametreler |
Tanım |
|---|---|
Bu yöntemin parametresi yoktur. |
# Push a blue barrel away when detected
while True:
if robot.has_blue_barrel():
robot.kicker.place()
wait(50, MSEC)
has_orange_barrel#
has_orange_barrel , robotun şu anda turuncu bir varile sahip olup olmadığını gösteren bir Boolean değeri döndürür.
True— Robotun turuncu bir gövdesi var.False— Robotun turuncu bir gövdesi yok.
Usage:
robot.has_orange_barrel()
Parametreler |
Tanım |
|---|---|
Bu yöntemin parametresi yoktur. |
# Push an orange barrel away when detected
while True:
if robot.has_orange_barrel():
robot.kicker.place()
wait(50, MSEC)
Özellikler#
robot.vision.get_data yöntemi kullanıldıktan sonra, her nesneyle birlikte bir demette saklanan on iki özellik vardır.
.id, .scoreve .type dışındaki tüm özellik değerleri, robot.vision.get_data kullanıldığı anda algılanan nesnenin konumunu, boyutunu, yönünü veya açısını tanımlar. Bu değerler, sensörün 320 x 240 piksel çözünürlüğüne bağlı olarak piksel veya derece cinsinden ölçülür.

.exists#
.exists ifadesi, indeksin demette olup olmadığını gösteren bir Boolean değer döndürür.
True— Dizin mevcut.False— Dizin mevcut değil.
# Check if at least two objects are detected
while True:
robot.screen.clear_screen()
robot.screen.set_cursor(1, 1)
ai_objects = robot.vision.get_data(ALL_CARGO)
if ai_objects[0].exists:
if ai_objects[1].exists:
robot.screen.print("At least 2")
else:
robot.screen.print("Less than 2")
wait(0.1, SECONDS)
.width#
.width algılanan nesnenin piksel cinsinden genişliğini döndürür; bu, 1 ile 320 arasında bir tam sayıdır.
Not: Piksel değerleri sensörün koordinat sistemine göre belirlenir. Referans için Giriş bölümündeki diyagrama bakınız.

# Move towards a Blue Barrel until its width is
# larger than 100 pixels
while True:
barrel = robot.vision.get_data(BLUE_BARREL)
if barrel[0].exists:
if barrel[0].width < 100:
robot.move_at(0)
else:
robot.stop_all_movement()
wait(50, MSEC)
.height#
.height fonksiyonu, tespit edilen nesnenin piksel cinsinden yüksekliğini döndürür; bu değer 1 ile 240 arasında bir tamsayıdır.
Not: Piksel değerleri sensörün koordinat sistemine göre belirlenir. Referans için Giriş bölümündeki diyagrama bakınız.

# Move towards a Blue Barrel until its height is
# larger than 100 pixels
while True:
barrel = robot.vision.get_data(BLUE_BARREL)
if barrel[0].exists:
if barrel[0].height < 100:
robot.move_at(0)
else:
robot.stop_all_movement()
wait(50, MSEC)
.centerX#
.centerX tespit edilen nesnenin merkezinin x koordinatını piksel cinsinden döndürür; bu, 0 ile 320 arasında bir tam sayıdır.
Not: Piksel değerleri sensörün koordinat sistemine göre belirlenir. Referans için Giriş bölümündeki diyagrama bakınız.

# Turn slowly until a Blue Barrel is centered in
# front of the robot
robot.set_turn_velocity(30)
robot.turn(RIGHT)
while True:
barrel = robot.vision.get_data(BLUE_BARREL)
if barrel[0].exists:
if 140 < barrel[0].centerX < 180:
robot.stop_all_movement()
wait(10,MSEC)
.centerY#
.centerY fonksiyonu, tespit edilen nesnenin merkezinin y koordinatını piksel cinsinden döndürür; bu değer 0 ile 240 arasında bir tamsayıdır.
Not: Piksel değerleri sensörün koordinat sistemine göre belirlenir. Referans için Giriş bölümündeki diyagrama bakınız.

# Move towards a Blue Barrel until its
# center y-coordinate is more than 140 pixels
while True:
barrel = robot.vision.get_data(BLUE_BARREL)
if barrel[0].exists:
if barrel[0].centerY < 140:
robot.move_at(0)
else:
robot.stop_all_movement()
wait(50, MSEC)
.bearing#
.bearing bir nesnenin AI Vision Sensor’ün görüş alanının merkezinin solunda veya sağında ne kadar uzakta olduğunu derece cinsinden temsil eden ondalık bir değer (float) döndürür. 0 değeri merkezde olduğunu, pozitif değerler nesnenin sağda olduğunu ve negatif değerler nesnenin solda olduğunu gösterir.
# Turn to keep the Blue Barrel directly in front
robot.set_turn_velocity(40)
while True:
vision_data = robot.vision.get_data(BLUE_BARREL)
if vision_data[0].exists:
if vision_data[0].bearing > 5:
robot.turn(RIGHT)
elif vision_data[0].bearing < -5:
robot.turn(LEFT)
else:
robot.stop_all_movement()
else:
robot.stop_all_movement()
wait(0.1, SECONDS)
.rotation#
.rotation nesnenin yapay zeka görüş sensörünün görüntüleme düzlemindeki yönünü 0 ile 359 derece arasında ölçerek döndürür. Bir renk kodu, renkleri yatay bir çizgide sıralandığında 0°’dir (örneğin, Kırmızı-Mavi). Renkler döndürülürse, açı değişir (örneğin, Mavi-Kırmızı sıralaması 180° döndürür).
Aşağıdaki örnekte, renk kodu sol tarafta kırmızı, sağ tarafta mavi olacak şekilde yapılandırılmıştır.
Bu görselde, kırmızının üzerine mavi koymak, orijinal renk kodunu 270 derece sağa döndürmeye eşdeğerdir.

# Slide left or right depending on how a Color Code (BlueRed)
# is rotated on the vertical plane
while True:
# Original Color Code is Red to the left, Blue to the right
code = robot.vision.get_data(BlueRed)
if code[0].exists:
# Check if Color Code is now Red on top of Blue
if 50 < code[0].rotation < 100 :
robot.move_at(90)
# Check if Color Code is now Blue on top of Red
elif 270 < code[0].rotation < 330 :
robot.move_at(270)
else:
robot.stop_all_movement()
else:
robot.stop_all_movement()
wait(50, MSEC)
.originX#
.originX tespit edilen nesnenin sınırlayıcı kutusunun sol üst köşesinin x koordinatını piksel cinsinden döndürür; bu, 0 ile 320 arasında bir tam sayıdır.
Not: Piksel değerleri sensörün koordinat sistemine göre belirlenir. Referans için Giriş bölümündeki diyagrama bakınız.

# Display if an Orange Barrel is to the
# left or the right
while True:
robot.screen.clear_screen()
robot.screen.set_cursor(1,1)
orange_barrel = robot.vision.get_data(ORANGE_BARREL)
if orange_barrel[0].exists:
if orange_barrel[0].originX < 160:
robot.screen.print("To the left!")
else:
robot.screen.print("To the right!")
wait(50, MSEC)
.originY#
.originY tespit edilen nesnenin sınırlayıcı kutusunun sol üst köşesinin y koordinatını piksel cinsinden döndürür; bu, 0 ile 240 arasında bir tam sayıdır.
Not: Piksel değerleri sensörün koordinat sistemine göre belirlenir. Referans için Giriş bölümündeki diyagrama bakınız.

# Display if an Orange Barrel is close or far
# from the robot
while True:
robot.screen.clear_screen()
robot.screen.set_cursor(1, 1)
orange_barrel = robot.vision.get_data(ORANGE_BARREL)
if orange_barrel[0].exists:
if orange_barrel[0].originY < 80:
robot.screen.print("Far")
else:
robot.screen.print("Close")
wait(50, MSEC)
.id#
.id tespit edilen yapay zeka sınıflandırmasının veya AprilTag kimliğinin tamsayı değerini döndürür.
Bir AprilTag ID için, .id özelliği, 0 ile 37 aralığındaki tespit edilen AprilTag ID numarasını temsil eder. Bir AI Sınıflandırması için, .id özelliği, AI Sınıflandırmaları bölümünde önceden tanımlanmış ID’ye karşılık gelir.
# Move forward when AprilTag ID 1 is detected
while True:
apriltags = robot.vision.get_data(ALL_TAGS)
if apriltags[0].exists:
if apriltags[0].id == 1:
robot.move_at(0)
else:
robot.stop_all_movement()
wait(50, MSEC)
.score#
.score , tespit edilen yapay zeka sınıflandırmasının güven skorunu 1 ile 100 arasında bir tamsayı olarak döndürür.
Daha düşük bir puan, sensörün tespit edilen nesne konusunda daha az emin olduğunu, daha yüksek bir puan ise sensörün daha emin olduğunu gösterir.
# Look confident if an Orange Barrel is detected
while True:
barrel = robot.vision.get_data(ORANGE_BARREL)
if barrel[0].exists:
if barrel[0].score > 95:
robot.screen.show_emoji(CONFIDENT)
else:
robot.screen.hide_emoji()
wait(50, MSEC)
.type#
.type , algılanan nesnenin türünü gösteren bir tamsayı döndürür. Bu değeri, tür numarası veya karşılık gelen adlandırılmış sabit kullanarak karşılaştırabilirsiniz:
Nesne Türü |
Dahil Edilen Nesneler |
|---|---|
|
— Spor topları |
|
— AprilTag Kimlikleri |
|
— Renk imzaları |
|
— Renk kodları |
# Display if an AprilTag ID or AI Classification
# is detected
while True:
robot.screen.clear_screen()
robot.screen.set_cursor(1, 1)
vision_data = robot.vision.get_data(ALL_VISION)
if vision_data[0].exists:
if vision_data[0].type == AiVision.AI_OBJECT:
robot.screen.print("AI Object!")
elif vision_data[0].type == AiVision.TAG_OBJECT:
robot.screen.print("AprilTag ID!")
wait(0.1, SECONDS)
# Display a list of all detected objects
while True:
robot.screen.clear_screen()
robot.screen.set_cursor(1, 1)
vision_data = robot.vision.get_data(ALL_VISION)
if vision_data[0].exists:
for obj in vision_data:
if obj.type == AiVision.AI_OBJECT:
robot.screen.print("- AI Object")
elif obj.type == AiVision.TAG_OBJECT:
robot.screen.print("- AprilTag ID")
robot.screen.next_row()
wait(0.1, SECONDS)
İnşaatçılar#
Creating a Color Signature#
Yeni bir Renk İmzası, Colordesc yapıcı fonksiyonu kullanılarak oluşturulur ve ardından color_description yöntemi kullanılarak Yapay Zeka Görsel Sensörüne kaydedilir. Bir Colordesc nesnesi, sensör için algılanabilir 7 renk imzasından 1’ini tanımlar, ancak etkili olması için color_description kullanılarak açıkça ayarlanmalıdır.
Colordesc Kullanımı:
Colordesc(index, red, green, blue, hangle, hdsat)
Parametre |
Tanım |
|---|---|
|
Renk İmzası indeksini temsil eden 1 ile 7 arasında bir tamsayı. İki Renk İmzası aynı indeksi kullanıyorsa, ikincisi birincisini geçersiz kılar. |
|
Kırmızı rengin bileşenini temsil eden 0 ile 255 arasında bir tamsayı. |
|
Renk bileşeninin yeşil değerini gösteren 0 ile 255 arasında bir tamsayı. |
|
Rengin mavi bileşeni için 0 ile 255 arasında bir tamsayı. |
|
1 ile 40 arasında derece cinsinden renk tonu aralığını temsil eden ondalık sayı. |
|
Doygunluk aralığını temsil eden 0,10 ile 1,00 arasında bir ondalık sayı. |
color_description Kullanımı:
robot.vision.color_description(object)
Parametre |
Tanım |
|---|---|
|
Algılanabilir Renk İmzası olarak ayarlanacak |
# Detect a red object
red_box = Colordesc(1, 207, 19, 25, 10.00, 0.20)
robot.vision.color_description(red_box)
while True:
robot.screen.clear_screen()
robot.screen.set_cursor(1, 1)
red_boxes = robot.vision.get_data(red_box)
if red_boxes[0].exists:
robot.screen.print("Red detected!")
else:
robot.screen.print("No red detected.")
wait(0.2, SECONDS)
Creating a Color Code#
Yeni bir Renk Kodu, Codedesc yapıcı yöntemi kullanılarak oluşturulur ve ardından code_description yöntemi kullanılarak etkinleştirilir. Bir Renk Kodu, 2 ila 4 mevcut Colordesc nesneyi, Yapay Zeka Görsel Sensörünün bir dizi olarak algılayabileceği tek bir tanımlayıcıda gruplandırır, ancak etkili olması için code_description kullanılarak açıkça ayarlanmalıdır.
Codedesc Kullanımı:
Codedesc(index, c1, c2, c3, c4, c5)
Parametre |
Tanım |
|---|---|
|
Renk kodunun indeksi, 1’den 8’e kadar. Not: Aynı indekse sahip iki adet |
|
Koddaki ilk |
|
Koddaki ikinci |
|
İsteğe bağlı. Üçüncü bir |
|
İsteğe bağlı. Dördüncü bir |
code_description Kullanımı:
robot.vision.code_description(object)
Parametre |
Tanım |
|---|---|
|
Algılanabilir Renk Kodu olarak kaydedilecek bir |
# Create Color Signatures
red_box = Colordesc(1, 207, 19, 25, 10.00, 0.20)
purple_box = Colordesc(2, 98, 18, 227, 10.00, 0.20)
robot.vision.color_description(red_box)
robot.vision.color_description(purple_box)
# Detect a red_purple Color Code
red_purple = Codedesc(1, red_box, purple_box)
robot.vision.code_description(red_purple)
while True:
robot.screen.clear_screen()
robot.screen.set_cursor(1, 1)
code_objects = robot.vision.get_data(red_purple)
if code_objects[0].exists:
robot.screen.print("Code detected!")
else:
robot.screen.print("No code detected.")
wait(0.2, SECONDS)