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

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

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

為了從周圍環境收​​集訊息,人工智慧視覺感測器會拍攝目前所看到的影像。 它用指定的Visual Signature 標識的任何物件都會放入一個元組中,然後可以由其他函數使用。

拍攝快照

使用 take_snapshot 指令時,您需要建立一個變數來儲存它所建立的元組。 任何視覺簽名 都需要先進行配置,然後才能用作參數。 使用函數時,將簽章參數指定為感測器名稱、雙下劃線,後面接著視覺簽章名稱。實用程式 exm.PNG

Vision_objects = ai_vision_6.take_snapshot(ai_vision_6__Blue)
Vision_objects = ai_vision_6.take_snapshot(ai_vision_6__Red)
Vision_objects = ai_vision_6.take_snapshot(ai_vision_6__Green)

當您開始輸入括號的開頭時,您的 Visual Signature 選項也會在 VEXcode 中自動填入。

例子

在此範例中,變數 Vision_objects 儲存一個元組,其中包含從名為 ai_vision_6的 AI 視覺感測器偵測到的 視覺簽章。 它顯示偵測到的物體數量,並每 0.5 秒擷取一個新快照。

while True: 

# 拍攝快照以建立偵測到的物件的元組
Vision_objects = ai_vision_6.take_snapshot(ai_vision_6__Blue)

Brain.screen.clear_screen()
Brain.screen.set_cursor(1, 1)

Brain. screen .print("物件計數:", len(vision_objects))
wait(0.5, 秒)

確定要偵測到多少個物體

len 指令可與元組一起使用。 這可用來檢視 take_snapshot 指令在元組中儲存了多少個物件。

最佳實踐是始終​​確保在嘗試從快照中提取任何資訊之前已檢測到物件。 為此,請使用 len 命令和儲存元組的變數。

len(視覺物件) > 0

例子

在此範例中,變數 Vision_objects 儲存一個元組,其中包含從名為 ai_vision_6的 AI 視覺感測器偵測到的 視覺簽章。 它顯示偵測到的物體數量,並每 0.5 秒擷取一個新快照。 但是,如果它偵測到一個對象,它將列印偵測到的對象數量。

while True: 
# 拍攝快照以建立偵測到的物件的元組
Vision_objects = ai_vision_6.take_snapshot(ai_vision_6__Blue)

# 清除螢幕/重置,以便我們可以顯示新資訊
Brain.screen.clear_screen()
Brain . screen.set_cursor(1, 1)

if len(vision_objects) > 0:
# 列印找到了多少個物體
Brain.screen.next_row()
Brain.screen.print("object count:", len( vision_objects) ))
等待(0.5, 秒)

透過對元組使用 len 指令,您還可以查看偵測到的物件數量。

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

有兩種方法可以從元組中提取資料。 一種方法是使用 ai.vision.largest_object() 函數直接從最近使用 take_snapshot 指令中偵測到的最大物件中擷取資訊。 另一種方法涉及指定特定變數和物件索引。

ai.vision.largest_object()

ai.vision.largest_object() 是一個輔助函數,用於存取元組中最大的對象,但僅適用於最新的快照。

while True: 
# 拍攝快照以建立偵測到的物件的元組
Vision_objects = ai_vision_6.take_snapshot(ai_vision_6__Blue)

# 清除螢幕/重置,以便我們可以顯示新資訊
Brain.screen.clear_screen()
Brain . screen.set_cursor(1, 1)

# 拉取資料前檢查物件是否存在
if len(vision_objects) > 0:
Brain.screen.print(Center X: ", ai_vision.largest_object().centerX)
else :
Brain.screen.print("無物件")
wait(0.5, 秒)

在此範例中,程式碼先檢查物件是否存在,然後使用 ai.vision.largest_object() 函數傳回偵測到的最大物件的 .centerX 屬性並列印它。

視覺物件[0]

從元組中提取資料的另一種方法是直接呼叫儲存元組的變數。 在括號中,指定要從中提取資料的物件的索引。 傳回的物件元組始終首先在索引 0 處列出最大的物件。 隨後,物件按從最大到最小的順序排列。

while True: 
# 拍攝快照以建立偵測到的物件的元組
Vision_objects = ai_vision_6.take_snapshot(ai_vision_6__Blue)

# 清除螢幕/重置,以便我們可以顯示新資訊
Brain.screen.clear_screen()
Brain . screen.set_cursor(1, 1)

# 拉取資料前檢查物件是否存在
if len(vision_objects) > 0:
Brain.screen.print(Center X: ", Vision_object[0].centerX)
else :
Brain.screen.print("無物件")
wait(0.5, SECONDS)

在此範例中,程式碼在使用 Vision_object[0] 函數傳回 0 索引物件的 .centerX 屬性並列印之前檢查物件是否存在。

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

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

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

。高度

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

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

視覺物件[0].高度

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

。寬度

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

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

視覺物件[0].寬度

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

.centerX

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

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

視覺物件[0].centerX

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

.centerY

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

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

視覺對象[0].centerY

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

.originX

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

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

視覺對象[0].originX

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

.originY

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

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

視覺對象[0].originY

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

。角度

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

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

視覺物件[0].角度

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

.存在

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

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

while True: 
# 拍攝快照以建立偵測到的物件的元組
Vision_objects = ai_vision_6.take_snapshot(ai_vision_6__Blue)
# 清除螢幕/重設以便我們可以顯示新資訊
Brain.screen.clear_screen()
Brain.screen .set_cursor(1, 1)

if Vision_objects[0].exists:
Brain.screen.print("x:", Vision_objects[0].centerX)
else:
Brain.screen.print("無物件" )
等待(0.1,秒)

在此範例中,程式碼檢查 .exists 屬性,如果傳回 true,則會將 .centerX 屬性值列印到 Brain。 如果 .exists 屬性傳回 false,則會列印不存在物件。

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

Last Updated: