在 VEXcode V5 C++ 中使用 AI 視覺感測器

本文概述了可在 Python 中使用 AI 視覺感測器的函數,以及如何使用它們的簡單說明。 您將學習使用AI視覺感測器過程中的四個步驟:獲取資料、查看獲取的物件數量、從資料中選擇要使用的物件以及從物件中提取哪些資料。

使用AI視覺感測器獲取視覺數據

為了從周圍環境收​​集訊息,人工智慧視覺感測器會拍攝目前所看到的影像。 它用指定的視覺簽名 識別的任何物件都儲存在 AI 視覺感測器內部,然後可供其他功能使用。

.takeSnapshot

任何 視覺簽名 都需要先進行配置,然後才能用作參數。 使用此方法時,將簽章參數指定為感測器的名稱,雙下劃線,後面接著 視覺簽章的 名稱。

實用程式 exm.PNG

AIVision6.takeSnapshot(AIVision6__Blue)
AIVision6.takeSnapshot(AIVision6__Red)
AIVision6.takeSnapshot(AIVision6__Green)

例子

在此範例中,採用 方法來搜尋與「Blue」 Visual Signature對應的任何物件。 然後,程式碼將顯示為該 視覺簽名找到的物件的計數。

int main() {
while (true) {
// 拍攝快照以檢查偵測到的物件
AIVision6.takeSnapshot(Blue);

// 清除螢幕/重置,以便我們可以顯示新資訊
Brain.Screen.clearScreen();
Brain.Screen.setCursor(1, 1);

// 列印偵測到的物體數量
Brain.Screen.print("object count: %d", AIVision6.objectCount);

等待(0.5,秒);
}
}

確定要偵測到多少個物體

由於 .takeSnapshot 方法可以一次偵測具有相同 Visual Signature 的多個對象,因此您可以使用 .objectCount 屬性來了解已偵測到的物件數量。

Brain.Screen.Print(“%d”,AIVision1.objectCount)

例子

在此範例中, .objectCount 屬性用於檢查在上一個快照中是否至少偵測到 1 Visual Signature ,然後如果偵測到物件則列印 true 或 false。 如果偵測到物體,它會列印偵測到的物體總數。

int main() {
while (true) {
// 拍攝快照以檢查偵測到的物件
AIVision6.takeSnapshot(Blue);

// 清除螢幕/重置,以便我們可以顯示新資訊
Brain.Screen.clearScreen();
Brain.Screen.setCursor(1, 1);

// 若找到對象,則列印數量
if (AIVision6.objectCount > 0) {
Brain.Screen.newLine();
Brain.Screen.print("物件數量: %d", AIVision6.objectCount);
}

等待(0.5,秒);
}
}

選擇要從中取得資料的對象

有兩種方法可以從 AI 視覺感測器中提取資料。 一種方法是使用 AIVision.largestObject 屬性直接從最近使用 .takeSnapshot 方法時檢測到的最大物件中檢索資訊。 另一種方法是使用 AIVision.objects[] 屬性並指定物件索引。

AIVision.largestObject

ai.vision.largest_object() 是存取最大物件的屬性。

int main() {
while (true) {
// 拍攝快照以檢查偵測到的物件
AIVision6.takeSnapshot(BlueBox);

// 清除螢幕/重置,以便我們可以顯示新資訊
Brain.Screen.clearScreen();
Brain.Screen.setCursor(1, 1);

// 若找到物體,列印位置
if (AIVision6.objects[0].exists) {
Brain.Screen.print("Center X: %d, AIVision6.largestObject[0].centerX);
} else {
Brain.Screen.print("無物件");
}

wait(0.5, 秒);
}
}

AIVision.objects

提取資料的另一種方法是指定要從中提取資料的物件的索引。 快照傳回偵測到的對象,其中最大對象首先位於索引 0 處,並依從最大到最小的順序對對象進行排序。

int main() {
while (true) {
// 拍攝快照以檢查偵測到的物件
AIVision6.takeSnapshot(BlueBox);

// 清除螢幕/重置,以便我們可以顯示新資訊
Brain.Screen.clearScreen();
Brain.Screen.setCursor(1, 1);

// 若找到物體,列印位置
if (AIVision6.objects[0].exists) {
Brain.Screen.print("Center X: %d, AIVision6.objects[0].centerX);
} else {
Brain.Screen.print("無物件");
}

wait(0.5, 秒);
}
}

選擇要從物件中提取哪些數據

每個物件有八個可以調用的屬性。

  • 。高度
  • 。寬度
  • .centerX
  • .centerY
  • .originX
  • .originY
  • 。角度
  • .存在

。高度

.height 屬性傳回偵測到的物件的高度(以像素為單位)。

使用此程式碼傳回 .height 屬性:

AIVision6.objects[0].height

.height 屬性將傳回 0 到 240 像素之間的值。

。寬度

.width 屬性傳回偵測到的物件的寬度(以像素為單位)。

使用以下程式碼回傳 .width 屬性:

AIVision6.objects[0].width

.width 屬性將傳回 0 到 320 之間的值。

.centerX

.centerX 屬性報告偵測到的 視覺簽名中心的 X 座標。

使用以下程式碼回傳 .centerX 屬性:

AIVision6.objects[0].centerX

.centerX 屬性將傳回 0 到 320 之間的數字。

.centerY

.centerY 屬性報告偵測到的 視覺簽名中心的 Y 座標。

使用以下程式碼回傳 .centerY 屬性:

AIVision6.objects[0].centerY

.centerY屬性 將傳回 0 到 240 之間的數字。

.originX

.originX 屬性報告偵測到的 視覺簽名的最左上角的 X 座標。

使用此程式碼傳回 .originX 屬性:

AIVision6.objects[0].originX

.originX屬性將傳回 0 到 320 之間的數字。

.originY

.originY 屬性報告偵測到的 視覺簽名的最左上角的 Y 座標。

使用此程式碼傳回 .originY 屬性:

AIVision6.objects[0].originY

.originY屬性將傳回 0 到 240 之間的數字。

。角度

.angle 屬性傳回 顏色代碼的 角度值。

使用以下程式碼回傳 .angle 屬性:

AIVision6.objects[0].angle

.angle 屬性傳回偵測到的 顏色代碼的 方向,範圍從 0 到 359.99 度。

.存在

.exists 是一個布林屬性,如果它是有效對象,則傳回 true。 

如果物件無效,例如使用負整數,它將傳回 false。 如果某個物件無效,則所有其他屬性將傳回 0 作為其值。

int main() {
while (true) {
// 拍攝快照以檢查偵測到的物件
AIVision6.takeSnapshot(BlueBox);

// 清除螢幕/重置,以便我們可以顯示新資訊
Brain.Screen.clearScreen();
Brain.Screen.setCursor(1, 1);

// 若找到物體,列印位置
if (AIVision6.objects[0].exists) {
Brain.Screen.print("Center X: %d, AIVision6.objects[0].centerX);
} else {
Brain.Screen.print("無物件");
}

wait(0.5, 秒);
}
}

For more information, help, and tips, check out the many resources at VEX Professional Development Plus

Last Updated: