Yapay Zeka Görüntü Sensörü#
giriiş#
aivision sınıfı, V5 Yapay Zeka Görüntüleme Sensöründen gelen verileri kontrol etmek ve bunlara erişmek için kullanılır. Yapay Zeka Görüntüleme 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 |
|---|---|---|
|
|
Yapay Zeka Görüntü Sensörünün bağlı olduğu Akıllı Bağlantı Noktası, |
|
|
Sensöre kaydedilecek bir veya daha fazla algılama türü:
|
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 |
|
1 |
|
2 |
|
3 |
|
4 |
|
5 |
|
6 |
|
7 |
|
8 |
|
VEX V5 Robotik Yarışması Yüksek Riskli
Kimlik Numarası |
Yapay Zeka Sınıflandırması |
|---|---|
0 |
|
1 |
|
2 |
|
VEX V5 Robotik Yarışması Geri Bildirimi
Kimlik Numarası |
Yapay Zeka Sınıflandırması |
|---|---|
0 |
|
1 |
|
VEX V5 Robotik Yarışması Geçersiz Kılma
Kimlik Numarası |
Yapay Zeka Sınıflandırması |
|---|---|
0 |
|
1 |
|
2 |
|
3 |
|
4 |
|
Ö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 V5 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 );
Parameters6 — Bir Nesne Tanımlayıcısı kullanarak anlık görüntü alır.
int32_t takeSnapshot( const objdesc &desc, int32_t count = 8 );
Parametre |
Tip |
Tanım |
|---|---|---|
|
|
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. |
|
|
|
|
|
Belirli bir nesneyi tespit etmek için kullanılan tanımlayıcı. Doğrudan
|
|
|
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.
objectsdizi her çağrıda yenilenir.countolarak 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 V5 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—takeSnapshottarafı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.
AIVisionSensor.objectCount
Bileşen |
Tanım |
|---|---|
|
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.
AIVisionSensor.largestObject
Bileşen |
Tanım |
|---|---|
|
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.
AIVisionSensor.objects[index].property
Bileşen |
Tanım |
|---|---|
|
Yapay zeka görüntü sensörü örneğinizin adı. |
|
Dizideki nesne indeksi. İndeks |
|
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:
Yapay Zeka Sınıflandırmaları için bu, seçilen yapay zeka modeli tarafından tanımlanan kimliğe karşılık gelir.
AprilTag kimlikleri için bu, tespit edilen AprilTag kimlik numarasını (0–36) temsil eder.
Ö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);
}
