Yapay Zeka Görüntü Sensörü#

giriiş#

aivision sınıfı, IQ (2. nesil) Yapay Zeka Görsel Sensöründen gelen verileri kontrol etmek ve bunlara erişmek için kullanılır. Yapay Zeka Görsel Sensörü şunları algılayabilir:

  • Yapay Zeka Sınıflandırmaları (örneğin oyun nesneleri)

  • Nisan Etiket Kimlikleri

  • Özel Renk İmzaları

  • Özel Renk Kodları

Nesneye ait konum, boyut, yönelim, sınıflandırma kimliği ve güven skoru gibi verileri sağlar.

Sensör, VEXcode içindeki AI Vision Utility’de seçilen yerleşik bir yapay zeka modeli kullanarak görsel bilgileri işler. Seçilen model, sensörün hangi yapay zeka sınıflandırmalarını algılayabileceğini belirler. VS Code kullanırken, yapay zeka modeli programınızda kullanılmadan önce VEXcode’da yapılandırılmalıdır. Algılanan nesneler, takeSnapshot çağrıldıktan sonra objects dizisi aracılığıyla döndürülür.

Sınıf Oluşturucuları#

aivision(
  int32_t index,
  Args&... sigs );

Parametreler#

Parametre

Tip

Tanım

index

int32_t

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

sigs

colordesc, codedesc, or AI constants

Sensöre kaydedilecek bir veya daha fazla algılama türü:

  • aivision::ALL_AIOBJS — Tüm Yapay Zeka Sınıflandırmaları
  • aivision::ALL_TAGS — Tüm AprilTag Kimlikleri
  • aivision::colordesc — Özel Renk İmzası
  • aivision::codedesc — Özel Renk Kodu

Yapay Zeka Modelleri ve Sınıflandırmaları#

Yapay Zeka Görüntüleme Sensörü, belirli Yapay Zeka Sınıflandırmalarıyla 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ılanabilir. Şu anda mevcut modeller şunlardır:

Sınıf Unsurları

Kimlik Numarası

Yapay Zeka Sınıflandırması

0

blueBall

1

greenBall

2

redBall

3

blueRing

4

greenRing

5

redRing

6

blueCube

7

greenCube

8

redCube

VEX IQ Robotik Yarışması Karışık ve Eşleştirme

Kimlik Numarası

Yapay Zeka Sınıflandırması

0

beam

1

bluePin

2

redPin

3

orangePin

VEX IQ Robotik Yarışması Seviye Atlıyor

Kimlik Numarası

Yapay Zeka Sınıflandırması

0

blueBeanBag

1

redBeanBag

2

yellowBeanBag

Örnekler#

// Create Color Signatures
aivision::colordesc AIVision1__greenBox(
    1,      // index
    85,     // red
    149,    // green
    46,     // blue
    23,     // hangle
    0.23 ); // hdsat

aivision::colordesc AIVision1__blueBox(
    2,      // index
    77,     // red
    135,    // green
    125,    // blue
    27,     // hangle
    0.29 ); // hdsat

// Create a Color Code from two color signatures
aivision::codedesc AIVision1__greenBlue(
    1,                    // code index
    AIVision1__greenBox,  // first color signature
    AIVision1__blueBox ); // second color signature

// Create the AI Vision Sensor instance
aivision AIVision1(
    PORT11,                  // Smart Port
    AIVision1__greenBlue,    // color code
    aivision::ALL_AIOBJS );  // enable AI Classifications

Üye Fonksiyonları#

aivision sınıfı aşağıdaki üye fonksiyonlarını içerir:

  • takeSnapshot — Belirli bir Renk İmzası, Renk Kodu, Yapay Zeka Sınıflandırma grubu veya AprilTag Kimlik grubu için verileri yakalar.

  • installed — Yapay Zeka Görsel Sensörünün IQ (2. nesil) Beynine bağlı olup olmadığını döndürür.

takeSnapshot çağrıldıktan sonra tespit edilen nesne verilerine erişmek için mevcut Özellikleri kullanın.

Herhangi bir aivision üye fonksiyonunu çağırmadan önce, aşağıda gösterildiği gibi bir aivision örneği oluşturulmalıdır:

/* This constructor is required when using VS Code.
AI Vision Sensor configuration is generated automatically
in VEXcode using the Device Menu. Replace the values
as needed. */


// Create Color Signatures
aivision::colordesc AIVision1__greenBox(
    1,      // index
    85,     // red
    149,    // green
    46,     // blue
    23,     // hangle
    0.23 ); // hdsat

aivision::colordesc AIVision1__blueBox(
    2,      // index
    77,     // red
    135,    // green
    125,    // blue
    27,     // hangle
    0.29 ); // hdsat

// Create a Color Code from two color signatures
aivision::codedesc AIVision1__greenBlue(
    1,                    // code index
    AIVision1__greenBox,  // first color signature
    AIVision1__blueBox ); // second color signature

// Create the AI Vision Sensor instance
aivision AIVision1(
    PORT1,                   // Smart Port
    AIVision1__greenBlue,    // color code
    aivision::ALL_AIOBJS );  // enable AI Classifications

takeSnapshot#

Yapay zekâ görüş sensöründen bir görüntü yakalar, seçilen yapay zekâ modeli veya yapılandırılmış renk imzaları kullanılarak işlenir ve objects dizisini günceller.

Each call refreshes the objects array with the most recent detection results. Objects are ordered from largest to smallest (by width), beginning at index 0. If no objects are detected objectCount will be 0 and objects[i].exists will be false.

1 — Bir nesne kimliği ve nesne türü kullanarak anlık görüntü alır.

int32_t takeSnapshot(
  uint32_t id,
  objectType type,
  uint32_t count );

2 — Renk İmzası kullanarak anlık görüntü alır.

int32_t takeSnapshot(
  const colordesc &desc,
  int32_t count = 8 );

3 — Renk Kodu kullanarak anlık görüntü alır.

int32_t takeSnapshot(
  const codedesc &desc,
  int32_t count = 8 );

4 — Bir AprilTag ID kullanarak anlık görüntü alır.

int32_t takeSnapshot(
  const tagdesc &desc,
  int32_t count = 8 );

5 — Bir Yapay Zeka Sınıflandırması kullanarak anlık görüntü alır.

int32_t takeSnapshot(
  const aiobjdesc &desc,
  int32_t count = 8 );

6 — Bir Nesne Tanımlayıcısı kullanarak anlık görüntü alır.

int32_t takeSnapshot(
  const objdesc &desc,
  int32_t count = 8 );

Parameters

Parametre

Tip

Tanım

id

uint32_t

(id, type, count) fonksiyonunu kullanırken algılanacak nesnenin tanımlayıcısı. Anlamı type:

  • colorObject — Renk Tanımlayıcı indeksi (1–7)
  • codeObject — Renk Kodu indeksi (1–8)
  • modelObject — Yapay Zeka Sınıflandırma Kimliği
  • tagObject — AprilTag Kimliği (0–36)

Not: VEXcode’da, Yapay Zeka Sınıflandırma adları (örneğin blueBall) doğrudan kullanılabilir. VS Code’da sayısal kimlik kullanılmalıdır.

type

objectType

idile ilişkili nesnenin kategorisini belirtir:

desc

colordesc &, codedesc &, tagdesc &, aiobjdesc &, or objdesc &

Belirli bir nesneyi tespit etmek için kullanılan tanımlayıcı. Doğrudan takeSnapshotiletilir, örneğin:

  • AIVision1.takeSnapshot(AIVision1__greenBox);
  • AIVision1.takeSnapshot(aivision::ALL_AIOBJS);
Önceden tanımlanmış tanımlayıcı sabitler:
  • aivision::ALL_TAGS — Tüm AprilTag Kimliklerini algılar
  • aivision::ALL_COLORS — Tüm yapılandırılmış Renk İmzalarını algılar
  • aivision::ALL_CODES — Tüm yapılandırılmış Renk Kodlarını algılar
  • aivision::ALL_AIOBJS — Tüm Yapay Zeka Sınıflandırmalarını algılar
  • aivision::ALL_OBJECTS — Sensörün tanıyabileceği her şeyi algılar

count

uint32_t / int32_t

Anlık görüntüden saklanabilecek maksimum nesne sayısı. Varsayılan değer 8’dir.

Dönüş Değeri

Belirtilen imzaya veya algılama türüne uyan algılanan nesne sayısını temsil eden int32_t değerini döndürür.

Not

  • Yapay zekâ destekli görüntü sensörünün, nesne verilerine erişilebilmesi için önce bir fotoğraf çekmesi gerekir.

  • objects dizi her çağrıda yenilenir.

  • count olarak belirtildiğinde, yalnızca tespit edilen en büyük nesneler (belirtilen miktara kadar) saklanır.

Yapay zeka sınıflandırmaları, VEXcode’daki Yapay Zeka Görüntüleme Yardımcı Programında seçilen modele bağlıdır.

Örnek

// Move forward if an object is detected
while (true) {
  AIVision1.takeSnapshot(aivision::ALL_AIOBJS);
  if (AIVision1.objects[0].exists) {
    Drivetrain.driveFor(forward, 50, mm);
  }
  wait(50, msec);
}

installed#

Yapay Zeka Görüntü Sensörünün IQ (2. nesil) Beynine bağlı olup olmadığını döndürür.

Kullanılabilir Fonksiyon

bool installed();

Parametre

Bu fonksiyon herhangi bir parametre almaz.

Dönüş Değeri

Yapay Zeka Görüntü Sensörünün bağlı olup olmadığını gösteren bir Boolean değeri döndürür:

  • true — Yapay Zeka Görüntü Sensörü bağlı.

  • false — Yapay Zeka Görüntü Sensörü bağlı değil.

// Display a message if the AI Vision Sensor is connected
if (AIVision1.installed()){
  Brain.Screen.print("Installed!");
}

Özellikler#

takeSnapshot çağrısı, Yapay Zeka Görsel Sensörünün algılama sonuçlarını günceller. Her anlık görüntü, istenen Yapay Zeka Sınıflandırması, Renk İmzası, Renk Kodu veya AprilTag Kimliği için algılanan nesneleri içeren objects dizisini yeniler.

Yapay zeka görme verilerine, AIVisionSensor.objects[index]depolanan nesnelerin özellikleri aracılığıyla erişilir; burada index , 0 başlar.

Nesneler, alanlarına göre en büyükten en küçüğe doğru sıralanmıştır.

Yapay Zeka Görüntü Sensörünün görüntü çözünürlüğü × 240. Nesne konumu ve boyut değerleri, sensörün mevcut görüşüne göre piksel birimlerinde rapor edilir.

Aşağıdaki özellikler mevcuttur:

  • objectCount — En son anlık görüntüden tespit edilen nesne sayısını döndürür.

  • largestObject — En son anlık görüntüden tespit edilen en büyük nesneyi seçer.

  • objects — takeSnapshot tarafından güncellenen tespit edilen nesneleri içeren dizi.

  • .exists — Nesne girişinin geçerli veri içerip içermediği.

  • .width — Algılanan nesnenin piksel cinsinden genişliği.

  • .height — Tespit edilen nesnenin piksel cinsinden yüksekliği.

  • .centerX — Nesnenin merkezinin piksel cinsinden X konumu.

  • .centerY — Nesnenin merkezinin piksel cinsinden Y konumu.

  • .originX — Nesnenin sol üst köşesinin piksel cinsinden X konumu.

  • .originY — Nesnenin sol üst köşesinin piksel cinsinden Y konumu.

  • .angle — Bir Renk Kodunun veya AprilTag Kimliğinin Derece cinsinden Yönü.

  • .id — Sınıflandırma Kimliği veya AprilTag Kimliği.

  • .score — Yapay Zeka Sınıflandırmaları için Güven Puanı.

objectCount#

objectCount fonksiyonu, objects dizisi içindeki öğe sayısını tam sayı olarak döndürür.

Syntax
AIVisionSensor.objectCount

Components

Bileşen

Tanım

AIVisionSensor

Yapay zeka görüntü sensörü örneğinizin adı.

Örnek

// Display the number of detected objects
while (true) {
  Brain.Screen.setCursor(1, 1);
  Brain.Screen.clearLine(1);
  AIVision1.takeSnapshot(aivision::ALL_AIOBJS);
  if (AIVision1.objects[0].exists) {
    Brain.Screen.print("%d", AIVision1.objectCount);
  }
  wait(50, msec);
}

largestObject#

largestObject objects dizisinden tespit edilen en büyük nesneyi alır.

Bu yöntem, indeks belirtmeden objects her zaman en büyük nesneyi elde etmek için kullanılabilir.

Syntax
AIVisionSensor.largestObject

Components

Bileşen

Tanım

AIVisionSensor

Yapay zeka görüntü sensörü örneğinizin adı.

Örnek

// Display the closest AprilTag ID
while (true) {
  Brain.Screen.setCursor(1, 1);
  Brain.Screen.clearLine(1);
  AIVision1.takeSnapshot(aivision::ALL_TAGS);
  if (AIVision1.objects[0].exists) {
    Brain.Screen.print("%d", AIVision1.largestObject.id);
  }
  wait(50, msec);
}

objects#

objects tespit edilen nesne özelliklerinin bir dizisini döndürür. Tek tek nesnelerin belirli özellik değerlerine erişmek için diziyi kullanın.

objects kullanıldıktan sonra takeSnapshot dizisinde saklanan her nesneyle birlikte on özellik bulunur.

id ve score dışındaki tüm özellik değerleri, takeSnapshot 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.

Syntax
AIVisionSensor.objects[index].property

Components

Bileşen

Tanım

AIVisionSensor

Yapay zeka görüntü sensörü örneğinizin adı.

index

Dizideki nesne indeksi. İndeks 0 başlar.

property

Mevcut nesne özelliklerinden biri.

.vardır#

.exists , belirtilen nesne dizininin geçerli bir tespit edilmiş nesne içerip içermediğini döndürür.

Erişim

SensorName.objects[index].exists

Dönüş Değeri

Belirtilen nesne dizininin geçerli bir tespit edilmiş nesne içerip içermediğini gösteren bir Boolean değer döndürür:

  • true — A valid object exists at the specified index.
  • false — No object exists at the specified index.

Örnek

// Move forward if an object is detected
while (true) {
  AIVision1.takeSnapshot(aivision::ALL_AIOBJS);
  if (AIVision1.objects[0].exists) {
    Drivetrain.driveFor(forward, 50, mm);
  }
  wait(50, msec);
}

.Genişlik#

.width , tespit edilen nesnenin genişliğini döndürür.

Erişim

SensorName.objects[index].width

Dönüş Değeri

Algılanan nesnenin piksel cinsinden genişliğini temsil eden int16_t değerini döndürür. Değer 1 ile 320 arasında değişir.

Örnek

// Approach an object until it's at least 100 pixels wide
while (true) {
  AIVision1.takeSnapshot(aivision::ALL_AIOBJS);

  if (AIVision1.objects[0].exists) {
    if (AIVision1.objects[0].width < 100) {
      Drivetrain.drive(forward);
    } else {
      Drivetrain.stop();
    }
  } else {
    Drivetrain.stop();
  }
  wait(50, msec);
}

.yükseklik#

.height , tespit edilen nesnenin yüksekliğini döndürür.

Erişim

SensorName.objects[index].height

Dönüş Değeri

Algılanan nesnenin piksel cinsinden yüksekliğini temsil eden int16_t değerini döndürür. Değer 1 ile 240 arasında değişir.

Örnek

// Approach an object until it's at least 90 pixels tall
while (true) {
  AIVision1.takeSnapshot(aivision::ALL_AIOBJS);

  if (AIVision1.objects[0].exists) {
    if (AIVision1.objects[0].height < 90) {
      Drivetrain.drive(forward);
    } else {
      Drivetrain.stop();
    }
  } else {
    Drivetrain.stop();
  }
  wait(50, msec);
}

.centerX#

.centerX , tespit edilen nesnenin merkezinin x koordinatını döndürür.

Erişim

SensorName.objects[index].centerX

Dönüş Değeri

Nesnenin merkezinin piksel cinsinden x koordinatını temsil eden int16_t değerini döndürür. Değer 0 ile 320 arasında değişir.

Örnek

// Turn until an object is directly in front of the sensor
Drivetrain.setTurnVelocity(10, percent);
Drivetrain.turn(right);
while (true) {
  AIVision1.takeSnapshot(aivision::ALL_AIOBJS);

  if (AIVision1.objects[0].exists) {
    if (AIVision1.objects[0].centerX > 140 && AIVision1.objects[0].centerX < 180) {
      Drivetrain.stop();
    }
  }
  wait(10, msec);
}

.centerY#

.centerY tespit edilen nesnenin merkezinin y koordinatını döndürür.

Erişim

SensorName.objects[index].centerY

Dönüş Değeri

Nesnenin merkezinin piksel cinsinden y koordinatını temsil eden int16_t değerini döndürür. Değer 0 ile 240 arasında değişir.

Örnek

// Approach an object until it's close to the sensor
while (true) {
  AIVision1.takeSnapshot(aivision::ALL_AIOBJS);

  if (AIVision1.objects[0].exists) {
    if (AIVision1.objects[0].centerY < 150) {
      Drivetrain.drive(forward);
    } else {
      Drivetrain.stop();
    }
  } else {
    Drivetrain.stop();
  }
  wait(50, msec);
}

.açı#

.angle , algılanan Renk Kodunun veya AprilTag Kimliğinin yönünü döndürür.

Erişim

SensorName.objects[index].angle

Dönüş Değeri

Algılanan Renk Kodunun veya AprilTag Kimliğinin dönüşünü derece cinsinden temsil eden float bir ondalık sayı döndürür. Değer 0 ile 359.9 arasında değişir.

Örnek

// Turn left or right depending on how a configured
// Color Code is rotated
while (true) {
  AIVision1.takeSnapshot(AIVision1__redBlue);
  if (AIVision1.objects[0].exists) {
    if (AIVision1.objects[0].angle > 50 && AIVision1.objects[0].angle < 100) {
      Drivetrain.turn(right);
    }
    else if (AIVision1.objects[0].angle > 270 && AIVision1.objects[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ı döndürür.

Erişim

SensorName.objects[index].originX

Dönüş Değeri

Nesnenin sınırlayıcı kutusunun başlangıç ​​noktasının x koordinatını piksel cinsinden temsil eden int16_t değerini döndürür. Değer 0 ile 320 arasında değişir.

Örnek

// Display if an object is to the left or the right
while (true) {
  Brain.Screen.clearScreen();
  Brain.Screen.setCursor(1, 1);
  AIVision1.takeSnapshot(aivision::ALL_AIOBJS);
  if (AIVision1.objects[0].exists) {
    if (AIVision1.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);
}

.orijinY#

.originY tespit edilen nesnenin sınırlayıcı kutusunun sol üst köşesinin y koordinatını döndürür.

Erişim

SensorName.objects[index].originY

Dönüş Değeri

Nesnenin sınırlayıcı kutusunun başlangıç ​​noktasının y koordinatını piksel cinsinden temsil eden bir int16_t int16_t 0 ile 240 arasında değişir.

Örnek

// Display if an object is close or far
while (true) {
  Brain.Screen.clearScreen();
  Brain.Screen.setCursor(1, 1);
  AIVision1.takeSnapshot(aivision::ALL_AIOBJS);
  if (AIVision1.objects[0].exists) {
    if (AIVision1.objects[0].originY < 110) {
      Brain.Screen.print("Close");
    } else {
      Brain.Screen.print("Far");
    }
  }
  wait(100, msec);
}

.İD#

.id , tespit edilen AprilTag ID’sini veya AI Sınıflandırma ID’sini döndürür.

Erişim

SensorName.objects[index].id

Dönüş Değeri

Tespit edilen nesnenin kimliğini temsil eden int32_t değerini döndürür:

Örnek

// Move forward when AprilTag ID 1 is detected
while (true) {
  AIVision1.takeSnapshot(aivision::ALL_TAGS);
  if (AIVision1.objects[0].exists) {
    if (AIVision1.objects[0].id == 1) {
      Drivetrain.drive(forward);
    }
  } else {
    Drivetrain.stop();
  }
  wait(50, msec);
}

.Gol#

.score , tespit edilen yapay zeka sınıflandırmasının güven skorunu döndürür.

Erişim

SensorName.objects[index].score

Dönüş Değeri

Algılanan yapay zeka sınıflandırmasının güven skorunu 1 ile 100 arasında gösteren int16_t değerini 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.

Örnek

// Display if a score is confident
while (true) {
  AIVision1.takeSnapshot(aivision::ALL_AIOBJS);

  if (AIVision1.objects[0].exists) {
    Brain.Screen.clearScreen();
    Brain.Screen.setCursor(1, 1);

    if (AIVision1.objects[0].score > 95) {
      Brain.Screen.print("Confident");
    } else {
      Brain.Screen.print("Not confident");
    }
  }
  wait(50, msec);
}