Yapay Zeka Vizyonu#

giriiş#

Yapay zekâ destekli görüntü sensörü, nesneleri, renkleri ve AprilTag kimliklerini algılayıp takip edebiliyor. Bu sayede robot, çevresini analiz edebiliyor, nesneleri takip edebiliyor ve algılanan görsel verilere göre tepki verebiliyor.

Bu sayfada örnek yapay zeka görüntü sensörü, renk imzası ve renk kodu adları olarak sırasıyla ai_vision_1, RED_BOXve BOX_CODE kullanılmıştır. Bunları gerektiğinde kendi yapılandırdığınız adlarla değiştirin.

Aşağıda tüm yöntemlerin listesi bulunmaktadır:

Veri Alıcılar – Yapay Zeka Görüntü Sensöründen veri alın.

  • take_snapshot – Belirli bir imza için verileri yakalar.

  • installed – Yapay Zeka Görsel Sensörünün V5 Beynine bağlı olup olmadığı.

Özellikler – take_snapshot’den döndürülen nesne verileri.

  • .exists – Nesnenin mevcut tespitte 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.

  • .angle – Renk Kodunun 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ı.

Yapıcılar – Yapay Zeka Görüntü Sensörünü ve imzalarını manuel olarak başlatın ve yapılandırın.

  • AiVision – Bir Yapay Zeka Görüş Sensörü oluşturur.

  • Colordesc – Bir Renk İmzası Oluşturur.

  • Codedesc – Bir Renk Kodu Oluşturur.

  • Tagdesc – Bir AprilTag ID’si oluşturur.

Getters#

take_snapshot#

take_snapshot , AI Vision Sensor’ın ç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 önce Vision Utility’de yapılandırılmalıdır.

Bu demet, 0 indeksinden başlayarak genişliğe göre en büyükten en küçüğe doğru sıralanmış nesneleri saklar. Her nesnenin özelliklerine indeksi kullanılarak erişilebilir. Eşleşen nesne bulunmazsa boş bir demet döndürülür.

Usage:
ai_vision_1.take_snapshot(SIGNATURE)

Parametreler

Tanım

SIGNATURE

Veri kümesini yalnızca belirtilen imzaya ait verileri içerecek şekilde filtreler. Mevcut imzalar şunlardır:

  • Renk İmzaları veya Renk Kodları - Yapay Zeka Görsel Sensörünün adı, iki alt çizgi ve ardından Renk İmzasının veya Renk Kodunun adı. Örneğin: ai_vision_1__RED_BOX.
  • AiVision.ALL_AIOBJS - Küpler, halkalar ve toplar.
  • AiVision.ALL_TAGS - Tüm AprilTag Kimlikleri.

count

İsteğe bağlı. Döndürülebilecek maksimum nesne sayısını 1 ile 24 arasında ayarlar. Varsayılan değer 8’dir.

# Drive forward if an object is detected
while True:
    objects = ai_vision_1.take_snapshot(AiVision.ALL_AIOBJS)
    if objects[0].exists:
        drivetrain.drive_for(FORWARD, 50, MM)
    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(ai_vision_1.take_snapshot(AiVision.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(ai_vision_1.take_snapshot(AiVision.ALL_TAGS), key=lambda tag: tag.height)
    for tag in apriltags_by_height:
        print(tag.height)
    wait(1, SECONDS)

Yapay Zeka Sınıflandırmaları#

Yapay Zeka Görüntüleme Sensörü, belirli Yapay Zeka Sınıflandırmaları altında farklı nesneleri algılayabilir. Cihazlar penceresinde Yapay Zeka Görüntüleme Sensörünü yapılandırırken seçilen Yapay Zeka Sınıflandırma modeline bağlı olarak farklı nesneler algılanacaktır. Şu anda mevcut modeller şunlardır:

Sınıf Unsurları

Kimlik Numarası

Yapay Zeka Sınıflandırması

0

BLUE_BALL

1

GREEN_BALL

2

RED_BALL

3

BLUE_RING

4

GREEN_RING

5

RED_RING

6

BLUE_CUBE

7

GREEN_CUBE

8

RED_CUBE

VEX V5 Robotik Yarışması Yüksek Riskli

Kimlik Numarası

Yapay Zeka Sınıflandırması

0

MOBILE_GOAL

1

RED_RING

2

BLUE_RING

VEX V5 Robotik Yarışması Geri Bildirimi

Kimlik Numarası

Yapay Zeka Sınıflandırması

0

BLUE_BLOCK

1

RED_BLOCK

VEX V5 Robotik Yarışması Geçersiz Kılma

Kimlik Numarası

Yapay Zeka Sınıflandırması

0

RED_BLUE_PIN

1

BLUE_YELLOW_PIN

2

RED_YELLOW_PIN

3

YELLOW_PIN

4

CUP

Renk İmzaları#

Renk İmzası, Yapay Zeka Görsel Sensörünün tanıyabileceği benzersiz bir renktir. Bu imzalar, Yapay Zeka Görsel Sensörünü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 take_snapshot ile birlikte kullanılır.

Bir projede yapılandırılmış bir Renk İmzası kullanabilmek için, imzanın adı sensörün adından, iki alt çizgiden ve ardından Renk İmzasının adından oluşmalıdır. Örneğin: ai_vision_1__RED_BOX.

# Display if any objects match the RED_BOX signature
while True:
    brain.screen.set_cursor(1, 1)
    brain.screen.clear_row(1)
    # Change to any configured Color Signature
    red_box = ai_vision_1.take_snapshot(ai_vision_1__RED_BOX)
    if red_box[0].exists:
        brain.screen.print("Color detected!")
        wait(100, MSEC)

Renk Kodları#

Renk kodu, belirli bir düzende düzenlenmiş renk imzaları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.

Bir projede yapılandırılmış bir Renk Kodunu kullanabilmek için, kodun adı sensörün adından, iki alt çizgiden ve ardından Renk Kodunun adından oluşmalıdır. Örneğin: ai_vision_1__BOX_CODE.

# Display if any objects match the BOX_CODE code
while True:
    brain.screen.set_cursor(1, 1)
    brain.screen.clear_row(1)
    # Change to any configured Color Code
    box_code = ai_vision_1.take_snapshot(ai_vision_1__BOX_CODE)
    if box_code[0].exists:
        brain.screen.print("Code detected!")
        wait(100, MSEC)

installed#

installed yapay zeka görüntü sensörünün şu anda V5 Beynine bağlı olup olmadığını gösteren bir Boolean değeri döndürür.

  • True – Yapay Zeka Görüntü Sensörü V5 Beynine bağlıdır.

  • False – Yapay Zeka Görüntü Sensörü V5 Beynine bağlı değil.

Usage:
ai_vision_1.installed()

Parametreler

Tanım

Bu yöntemin parametresi yoktur.

# Display a message if the AI Vision Sensor is connected
if ai_vision_1.installed():
    brain.screen.print("Installed!")

Özellikler#

take_snapshot kullanıldıktan sonra tuple içinde saklanan her nesneye dahil edilen on özellik vardır.

.id ve .score dışındaki tüm özellik değerleri, take_snapshot kullanıldığı anda AI Vision Sensor’un görüş alanındaki algılanan nesnenin konumunu ve boyutunu tanımlar. Bu değerler, sensörün 320 x 240 piksel çözünürlüğüne bağlı olarak piksel 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:
    brain.screen.clear_screen()
    brain.screen.set_cursor(1, 1)
    objects = ai_vision_1.take_snapshot(AiVision.ALL_AIOBJS)

    if objects[0].exists:
        if objects[1].exists:
            brain.screen.print("At least 2")

        else:
            brain.screen.print("Less than 2")
    wait(50, MSEC)

.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.

# Approach an object until it's at least 100 pixels wide
while True:
    objects = ai_vision_1.take_snapshot(AiVision.ALL_AIOBJS)

    if objects[0].exists:
        if objects[0].width < 100:
            drivetrain.drive(FORWARD)
    else:
        drivetrain.stop()
    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.

# Approach an object until it's at least 90 pixels tall
while True:
    objects = ai_vision_1.take_snapshot(AiVision.ALL_AIOBJS)

    if objects[0].exists:
        if objects[0].height < 90:
            drivetrain.drive(FORWARD)
    else:
        drivetrain.stop()
    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.

# Turn until an object is directly in front of the sensor
drivetrain.set_turn_velocity(10, PERCENT)
drivetrain.turn(RIGHT)

while True:
    objects = ai_vision_1.take_snapshot(AiVision.ALL_AIOBJS)

    if objects[0].exists:
        if 140 < objects[0].centerX < 180:
            drivetrain.stop()
    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.

# Approach an object until the object's center is
# high enough in the field of view
while True:
    objects = ai_vision_1.take_snapshot(AiVision.ALL_AIOBJS)

    if objects[0].exists:
        if objects[0].centerY < 150:
            drivetrain.drive(FORWARD)
    else:
        drivetrain.stop()
    wait(50, MSEC)

.angle#

.angle algılanan Renk Kodunun veya AprilTag Kimliğinin yönünü derece cinsinden döndürür; bu değer 0 ile 359 arasında bir tamsayıdır.

# Turn left or right depending on how a
# configured Color Code is rotated
while True:
    box_code = ai_vision_1.take_snapshot(ai_vision_1__BOX_CODE)

    if box_code[0].exists:
        if 50 < box_code[0].angle < 100:
            drivetrain.turn(RIGHT)

        elif 270 < box_code[0].angle < 330:
            drivetrain.turn(LEFT)

        else:
            drivetrain.stop()
    else:
        drivetrain.stop()
    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.

# Display if an object is to the left or the right
while True:
    brain.screen.clear_screen()
    brain.screen.set_cursor(1,1)

    objects = ai_vision_1.take_snapshot(AiVision.ALL_AIOBJS)

    if objects[0].exists:
        if objects[0].originX < 120:
            brain.screen.print("To the left!")
        else:
            brain.screen.print("To the right!")
    else:
        brain.screen.print("No objects")
    wait(100, 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.

# Display if an object is close or far
while True:
    brain.screen.clear_screen()
    brain.screen.set_cursor(1,1)

    objects = ai_vision_1.take_snapshot(AiVision.ALL_AIOBJS)

    if objects[0].exists:
        if objects[0].originY < 110:
            brain.screen.print("Close")
        else:
            brain.screen.print("Far")

.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 36 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 = ai_vision_1.take_snapshot(AiVision.ALL_TAGS)

    if apriltags[0].exists:
        if apriltags[0].id == 1:
            robot.drive(FORWARD)
    else:
        drivetrain.stop()

    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.

İnşaatçılar#

Yapıcılar, VEXcode dışında AI Vision Sensor’ü yapılandırmak için gerekli olan AiVision, Colordescve Codedesc nesnelerini manuel olarak oluşturmak için kullanılır.

AiVision#

AiVision yapay zeka destekli bir görüntü sensörü oluşturur.

Kullanım

Vision(smartport, sigs)

Parametreler

Tanım

smartport

Yapay Zeka Görüntü Sensörünün bağlı olduğu Akıllı Bağlantı Noktası, Ports.PORTx şeklinde yazılır; burada x, bağlantı noktasının numarasıdır.

sigs

İsteğe bağlı. Virgülle ayrılmış bir veya daha fazla imzanın adı (,):

  • Renk İmzası
  • Renk Kodu
  • AiVision.ALL_TAGS – Tüm AprilTag Kimlikleri
  • AiVision.ALL_AIOBJS – Tüm Yapay Zeka Sınıflandırmaları

# Create the Color Signatures
RED_BOX = Colordesc(1, 255, 0, 0, 20, 0.9)
BLUE_BOX = Colordesc(0, 26, 255, 0, 20, 0.9)

# Create the Color Code
RED_BLUE = Codedesc(RED_BOX, BLUE_BOX)

"""
Create an AI Vision Sensor with the following signatures:
- RED_BLUE
- AiVision.ALL_TAGS - for AprilTag IDs
"""
ai_vision_1 = AiVision(Ports.PORT1, RED_BLUE, AiVision.ALL_TAGS)

Colordesc#

Colordesc , bir Renk İmzası oluşturur. Bir AI Vision Sensöründe aynı anda yedi farklı Renk İmzası saklanabilir.

Usage:
Colordesc(index, red, green, blue, hangle, hdsat)

Parametre

Tanım

index

Colordesc nesnesinin indeksi, 1 - 7 arasındadır.
Not: Aynı indeks numarasına sahip iki Colordesc nesnesi oluşturmak, oluşturulan ikinci nesnenin birincisini geçersiz kılmasına neden olur.

red

Kırmızı rengin 0 ile 255 arasındaki değeri.

green

Yeşil rengin değeri 0 ile 255 arasındadır.

blue

Mavi rengin 0 ile 255 arasındaki değeri.

hangle

Renk çemberinde derece cinsinden (1-40) izin verilen renk tonu varyansı. Daha yüksek değerler, temel renk tonundan daha geniş bir dönme sapmasına izin verir.

hdsat

İzin verilen doygunluk sapması, 0,10 ile 1,00 arasındadır. Bu değer, rengin tam doygunluk aralığının ne kadarında kayabileceğini gösterir (örneğin, 0,10 = ±%10 doygunluk).

Çevresinde derece değerleri ile etiketlenmiş, üstte 0°'den başlayıp 360°'ye kadar 30 derecelik artışlarla renklerin tam spektrumunu gösteren dairesel bir renk çemberi.

"""
Create a Color Signature with the following values:
- index: 1
- red: 255
- green: 0
- blue: 0
- hangle: 20
- hdsat: 0.9
"""
# Create a red Color Signature
RED_BOX = Colordesc(1, 255, 0, 0, 20, 0.9)

Codedesc#

Codedesc bir Renk Kodu oluşturur. Kullanılabilmesi için en az iki önceden tanımlanmış Renk İmzası gerektirir. Bir Görsel Sensörde aynı anda sekiz farklı Renk Kodu saklanabilir.

Usage:
Codedesc(sig1, sig2, sig3, sig4, sig5)

Parametre

Tanım

sig1

Daha önce oluşturulmuş bir Renk İmzası.

sig2

Daha önce oluşturulmuş bir Renk İmzası.

sig3

İsteğe bağlı. Daha önce oluşturulmuş bir Renk İmzası.

sig4

İsteğe bağlı. Daha önce oluşturulmuş bir Renk İmzası.

sig5

İsteğe bağlı. Daha önce oluşturulmuş bir Renk İmzası.

# Create the Color Signatures
RED_BOX = Colordesc(1, 255, 0, 0, 20, 0.9)
BLUE_BOX = Colordesc(0, 26, 255, 0, 20, 0.9)

# Create a Color Code with the Color Signatures
BOX_CODE = Codedesc(RED_BOX, BLUE_BOX)

Tagdesc#

Tagdesc bir AprilTag kimliği oluşturur. Bunu, tanımlanabilir AprilTag kimlikleri tanımlamak için kullanabilirsiniz; bu da kodunuzu daha anlaşılır ve okunması daha kolay hale getirir.

Usage:
Tagdesc(id)

Parametre

Tanım

id

Kullanılacak AprilTag ID’si.

# Set AprilTag ID 7 to be the "goal"
goal = Tagdesc(7)