AI Vision#

การแนะนำ#

เซ็นเซอร์ AI Vision สามารถตรวจจับและติดตามวัตถุ สี และรหัส AprilTag ได้ ทำให้หุ่นยนต์สามารถวิเคราะห์สภาพแวดล้อม ติดตามวัตถุ และตอบสนองตามข้อมูลภาพที่ตรวจพบได้

หน้านี้ใช้ ai_vision_1, RED_BOXและ BOX_CODE เป็นชื่อตัวอย่างของเซ็นเซอร์ AI Vision, ลายเซ็นสี และรหัสสี ตามลำดับ โปรดแทนที่ด้วยชื่อที่คุณกำหนดเองตามต้องการ

ด้านล่างนี้คือรายการวิธีการทั้งหมด:

ตัวรับข้อมูล – รับข้อมูลจากเซ็นเซอร์ AI Vision

  • take_snapshot – บันทึกข้อมูลสำหรับลายเซ็นเฉพาะ

  • installed – เซ็นเซอร์ AI Vision เชื่อมต่อกับ V5 Brain หรือไม่

คุณสมบัติ – ข้อมูลวัตถุที่ส่งคืนจาก take_snapshot

  • .exists – วัตถุนั้นมีอยู่ในการตรวจจับปัจจุบันหรือไม่

  • .width – ความกว้างของวัตถุที่ตรวจพบ

  • .height – ความสูงของวัตถุที่ตรวจพบ

  • .centerX – ตำแหน่ง X ของจุดศูนย์กลางของวัตถุ

  • .centerY – ตำแหน่ง Y ของจุดศูนย์กลางของวัตถุ

  • .angle – การวางแนวของรหัสสี

  • .originX – ตำแหน่ง X ของมุมบนซ้ายของวัตถุ

  • .originY – ตำแหน่ง Y ของมุมบนซ้ายของวัตถุ

  • .id – รหัสการจำแนกหรือแท็กของวัตถุ

  • .score – คะแนนความเชื่อมั่นสำหรับการจำแนกประเภท AI

ตัวสร้าง – ใช้ในการเริ่มต้นและกำหนดค่าเซ็นเซอร์ AI Vision และลายเซ็นต์ด้วยตนเอง

  • AiVision – สร้างเซ็นเซอร์ AI Vision

  • Colordesc – สร้างลายเซ็นสี

  • Codedesc – สร้างรหัสสี

  • Tagdesc – สร้าง AprilTag ID

ผู้รับ#

take_snapshot#

take_snapshot กรองข้อมูลจากเฟรมของ AI Vision Sensor ให้เป็นลายเซ็นเดียว — คำอธิบายที่บันทึกไว้ของบางสิ่งที่เซนเซอร์สามารถจดจำได้ เช่น วัตถุที่ฝึกฝนไว้ล่วงหน้า รหัส AprilTag หรือลายเซ็นสีหรือรหัสสีที่กำหนดค่าไว้ — และส่งคืน tuple

ลายเซ็นสี และ รหัสสี จะต้องได้รับการกำหนดค่าใน Vision Utility ก่อนจึงจะสามารถใช้กับวิธีนี้ได้

ทูเพิลนี้เก็บวัตถุที่เรียงลำดับจากใหญ่ที่สุดไปเล็กที่สุดตามความกว้าง โดยเริ่มต้นที่ดัชนี 0 สามารถเข้าถึง คุณสมบัติ ของแต่ละวัตถุได้โดยใช้ดัชนี หากไม่พบวัตถุที่ตรงกัน จะส่งคืนทูเพิลว่างเปล่า

Usage:
ai_vision_1.take_snapshot(SIGNATURE)

พารามิเตอร์

คำอธิบาย

SIGNATURE

กรองชุดข้อมูลเพื่อให้มีเฉพาะข้อมูลที่มีลายเซ็นที่กำหนดเท่านั้น ลายเซ็นที่ใช้ได้คือ:

  • ลายเซ็นสีหรือรหัสสี - ชื่อของเซ็นเซอร์ AI Vision ตามด้วยเครื่องหมายขีดล่างสองตัว แล้วตามด้วยชื่อของลายเซ็นสีหรือรหัสสี ตัวอย่างเช่น: ai_vision_1__RED_BOX.
  • AiVision.ALL_AIOBJS - ลูกบาศก์ วงแหวน และลูกบอล
  • AiVision.ALL_TAGS - รหัส AprilTag ทั้งหมด

count

ตัวเลือกเสริม กำหนดจำนวนสูงสุดของวัตถุที่สามารถส่งคืนได้ตั้งแต่ 1 ถึง 24 โดยค่าเริ่มต้นคือ 8

# 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)

หมายเหตุ: ทูเปิลที่ส่งคืนสามารถเรียงลำดับตาม คุณสมบัติ ใดก็ได้ ไม่ใช่แค่ความกว้าง โดยใช้ฟังก์ชัน sorted ของ Python ตัวอย่างเช่น การเรียงลำดับตาม 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)

หรือเรียงตามความสูงแทนก็ได้:

# 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)

การจำแนกประเภท AI#

เซ็นเซอร์ AI Vision สามารถตรวจจับวัตถุต่างๆ ภายใต้การจำแนกประเภท AI ที่แตกต่างกันได้ ขึ้นอยู่กับโมเดลการจำแนกประเภท AI ที่เลือกเมื่อกำหนดค่าเซ็นเซอร์ AI Vision ในหน้าต่างอุปกรณ์ วัตถุที่ตรวจจับได้ก็จะแตกต่างกันไป โมเดลที่มีให้เลือกในปัจจุบัน ได้แก่:

องค์ประกอบในห้องเรียน

หมายเลขประจำตัว

การจำแนกประเภท AI

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 เดิมพันสูง

หมายเลขประจำตัว

การจำแนกประเภท AI

0

MOBILE_GOAL

1

RED_RING

2

BLUE_RING

เลื่อนการแข่งขันหุ่นยนต์ VEX V5 ออกไป

หมายเลขประจำตัว

การจำแนกประเภท AI

0

BLUE_BLOCK

1

RED_BLOCK

การแข่งขันหุ่นยนต์ VEX V5 แบบพิเศษ

หมายเลขประจำตัว

การจำแนกประเภท AI

0

RED_BLUE_PIN

1

BLUE_YELLOW_PIN

2

RED_YELLOW_PIN

3

YELLOW_PIN

4

CUP

ลายเซ็นสี#

ลายเซ็นสีคือสีเฉพาะที่เซ็นเซอร์ AI Vision สามารถจดจำได้ ลายเซ็นเหล่านี้ช่วยให้เซ็นเซอร์ AI Vision สามารถตรวจจับและติดตามวัตถุตามสีของวัตถุได้ เมื่อกำหนดค่าลายเซ็นสีแล้ว เซ็นเซอร์จะสามารถระบุวัตถุที่มีสีเฉพาะนั้นในขอบเขตการมองเห็นได้ ลายเซ็นสีจะถูกใช้ร่วมกับ take_snapshot เพื่อประมวลผลและตรวจจับวัตถุสีแบบเรียลไทม์

ในการใช้ลายเซ็นสีที่กำหนดค่าไว้ในโปรเจกต์ ชื่อของลายเซ็นสีจะต้องเป็นชื่อของเซ็นเซอร์ ตามด้วยเครื่องหมายขีดล่างสองตัว แล้วตามด้วยชื่อของลายเซ็นสี ตัวอย่างเช่น: 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)

รหัสสี#

รหัสสีคือรูปแบบที่มีโครงสร้างซึ่งประกอบด้วยชุดสีที่เรียงลำดับอย่างเฉพาะเจาะจง รหัสเหล่านี้ช่วยให้เซ็นเซอร์ตรวจจับภาพ AI สามารถจดจำรูปแบบสีที่กำหนดไว้ล่วงหน้าได้ รหัสสีมีประโยชน์สำหรับการระบุวัตถุที่ซับซ้อนหรือการสร้างเครื่องหมายเฉพาะสำหรับการนำทางอัตโนมัติ

ในการใช้รหัสสีที่กำหนดค่าไว้ในโปรเจกต์ ชื่อของรหัสสีจะต้องเป็นชื่อของเซ็นเซอร์ ตามด้วยเครื่องหมายขีดล่างสองตัว แล้วตามด้วยชื่อของรหัสสี ตัวอย่างเช่น: 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 ส่งคืนค่าบูลีนที่ระบุว่าเซ็นเซอร์ AI Vision เชื่อมต่อกับ V5 Brain อยู่ในขณะนี้หรือไม่

  • True – เซ็นเซอร์ตรวจจับภาพ AI เชื่อมต่อกับสมอง V5 แล้ว

  • False – เซ็นเซอร์ตรวจจับภาพ AI ไม่ได้เชื่อมต่อกับสมอง V5

Usage:
ai_vision_1.installed()

พารามิเตอร์

คำอธิบาย

เมธอดนี้ไม่มีพารามิเตอร์

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

คุณสมบัติ#

มีคุณสมบัติสิบประการที่รวมอยู่ในวัตถุแต่ละชิ้นที่จัดเก็บใน tuple หลังจากใช้ take_snapshot

ค่าคุณสมบัติทั้งหมด ยกเว้น .id และ .score อธิบายตำแหน่งและขนาดของวัตถุที่ตรวจพบในมุมมองของเซ็นเซอร์ AI Vision ในขณะที่ take_snapshot ถูกใช้งาน ค่าเหล่านี้วัดเป็นพิกเซล โดยอิงจากความละเอียด 320 x 240 พิกเซลของเซ็นเซอร์

.exists#

.exists ที่ระบุว่าดัชนีนั้นมีอยู่ในทูเปิลหรือไม่

  • True – ดัชนีมีอยู่จริง

  • False – ดัชนีนี้ไม่มีอยู่จริง

# 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 ส่งคืนความกว้างของวัตถุที่ตรวจพบในหน่วยพิกเซล ซึ่งเป็นจำนวนเต็มระหว่าง 1 ถึง 320

# 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 จะส่งคืนค่าความสูงของวัตถุที่ตรวจพบในหน่วยพิกเซล ซึ่งเป็นจำนวนเต็มระหว่าง 1 ถึง 240

# 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 ของวัตถุที่ตรวจพบในหน่วยพิกเซล ซึ่งเป็นจำนวนเต็มระหว่าง 0 ถึง 320

# 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 ที่ตรวจพบในหน่วยพิกเซล ซึ่งเป็นจำนวนเต็มระหว่าง 0 ถึง 240

# 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 จะส่งคืนค่าการวางแนวของรหัสสีหรือรหัส AprilTag ที่ตรวจพบในหน่วยองศา ซึ่งเป็นจำนวนเต็มระหว่าง 0 ถึง 359

# 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 วัตถุที่ตรวจพบในหน่วยพิกเซล ซึ่งเป็นจำนวนเต็มระหว่าง 0 ถึง 320

# 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 พบในหน่วยพิกเซล ซึ่งเป็นจำนวนเต็มระหว่าง 0 ถึง 240

# 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 ส่งคืน ID ของการจำแนกประเภท AI ที่ตรวจพบหรือ AprilTag ID เป็นจำนวนเต็ม

สำหรับ AprilTag ID คุณสมบัติ .id แสดงถึงหมายเลข AprilTag ID ที่ตรวจพบในช่วง 0 ถึง 36 สำหรับการจำแนกประเภท AI คุณสมบัติ .id สอดคล้องกับ ID ที่กำหนดไว้ล่วงหน้าในส่วน การจำแนกประเภท AI

# 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 ส่งคืนค่าความเชื่อมั่นของการจำแนกประเภท AI ที่ตรวจพบเป็นจำนวนเต็มระหว่าง 1 ถึง 100

คะแนนที่ต่ำกว่าหมายความว่าเซ็นเซอร์มีความมั่นใจน้อยลงในการตรวจจับวัตถุ ในขณะที่คะแนนที่สูงกว่าหมายความว่าเซ็นเซอร์มีความมั่นใจมากขึ้น

ผู้สร้าง#

Constructors are used to manually create AiVision, Colordesc, and Codedesc objects, which are necessary for configuring the AI Vision Sensor outside of VEXcode.

AiVision#

AiVision สร้างเซ็นเซอร์ตรวจจับภาพด้วย AI

วิธีใช้

Vision(smartport, sigs)

พารามิเตอร์

คำอธิบาย

smartport

พอร์ตอัจฉริยะที่เชื่อมต่อกับเซ็นเซอร์ AI Vision จะเขียนในรูปแบบ Ports.PORTx โดยที่ x คือหมายเลขของพอร์ต

sigs

ไม่บังคับ ชื่อของลายเซ็นอย่างน้อยหนึ่งรายการ คั่นด้วยเครื่องหมายจุลภาค (,):

# 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 สร้างลายเซ็นสี สามารถจัดเก็บลายเซ็นสีได้มากถึงเจ็ดแบบพร้อมกันบนเซ็นเซอร์ AI Vision

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

พารามิเตอร์

คำอธิบาย

index

ดัชนีของวัตถุ Colordesc ตั้งแต่ 1 - 7
หมายเหตุ: การสร้างวัตถุ Colordesc สองชิ้นที่มีหมายเลขดัชนีเดียวกัน จะทำให้วัตถุชิ้นที่สองที่สร้างขึ้นมาแทนที่วัตถุชิ้นแรก

red

ค่าสีแดงอยู่ระหว่าง 0 ถึง 255

green

ค่าสีเขียวอยู่ระหว่าง 0 ถึง 255

blue

ค่าสีน้ำเงินอยู่ระหว่าง 0 ถึง 255

hangle

ค่าความคลาดเคลื่อนของเฉดสีที่ยอมรับได้จะแสดงเป็นช่วงองศาบนวงล้อสี (1–40) ค่าที่สูงขึ้นจะอนุญาตให้มีการเบี่ยงเบนจากเฉดสีพื้นฐานได้กว้างขึ้น

hdsat

ค่าเบี่ยงเบนความอิ่มตัวที่ยอมรับได้ อยู่ระหว่าง 0.10 ถึง 1.00 ค่านี้แสดงถึงสัดส่วนของช่วงความอิ่มตัวทั้งหมดที่สีอาจเปลี่ยนแปลงได้ (เช่น 0.10 = ±10% ความอิ่มตัว)

วงล้อสีวงกลมที่แสดงเฉดสีครบทุกเฉดพร้อมระบุค่าองศาไว้รอบขอบ โดยเพิ่มขึ้นทีละ 30 องศาจาก 0° ที่ด้านบนถึง 360°

"""
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 สร้างรหัสสี ต้องใช้ ลายเซ็นสี ที่กำหนดไว้แล้วอย่างน้อยสองรายการจึงจะสามารถใช้งานได้ สามารถจัดเก็บรหัสสีที่แตกต่างกันได้สูงสุดแปดรหัสในเซ็นเซอร์ตรวจจับภาพพร้อมกัน

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

พารามิเตอร์

คำอธิบาย

sig1

ลายเซ็นสี ที่สร้างไว้ก่อนหน้านี้

sig2

ลายเซ็นสี ที่สร้างไว้ก่อนหน้านี้

sig3

ไม่บังคับ ลายเซ็นสี ที่สร้างไว้ก่อนหน้านี้

sig4

ไม่บังคับ ลายเซ็นสี ที่สร้างไว้ก่อนหน้านี้

sig5

ไม่บังคับ ลายเซ็นสี ที่สร้างไว้ก่อนหน้านี้

# 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 สร้าง AprilTag ID คุณสามารถใช้มันเพื่อกำหนด AprilTag ID ที่ระบุได้ ซึ่งจะทำให้โค้ดของคุณชัดเจนและอ่านง่ายขึ้น

Usage:
Tagdesc(id)

พารามิเตอร์

คำอธิบาย

id

รหัส AprilTag ที่จะใช้

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