Tầm nhìn AI#

Giới thiệu#

Cảm biến thị giác AI có thể phát hiện và theo dõi các vật thể, màu sắc và ID AprilTag. Điều này cho phép robot phân tích môi trường xung quanh, bám theo vật thể và phản ứng dựa trên dữ liệu hình ảnh được phát hiện.

Trang này sử dụng ai_vision_1, RED_BOX, và BOX_CODE làm ví dụ về tên Cảm biến Thị giác AI, Chữ ký Màu và Mã Màu tương ứng. Hãy thay thế chúng bằng tên do bạn cấu hình nếu cần.

Dưới đây là danh sách tất cả các phương pháp:

Bộ thu thập dữ liệu – Lấy dữ liệu từ cảm biến thị giác AI.

  • take_snapshot – Ghi lại dữ liệu cho một chữ ký cụ thể.

  • installed – Cảm biến thị giác AI có được kết nối với bộ não V5 hay không.

Thuộc tính – Dữ liệu đối tượng được trả về từ take_snapshot.

  • .exists – Liệu đối tượng có tồn tại trong lần phát hiện hiện tại hay không.

  • .width – Chiều rộng của đối tượng được phát hiện.

  • .height – Chiều cao của vật thể được phát hiện.

  • .centerX – Vị trí X của tâm đối tượng.

  • .centerY – Vị trí Y của tâm đối tượng.

  • .angle – Hướng của Mã màu.

  • .originX – Vị trí X của góc trên bên trái của đối tượng.

  • .originY – Vị trí Y của góc trên bên trái của đối tượng.

  • .id – Phân loại hoặc ID thẻ của đối tượng.

  • .score – Điểm tin cậy cho Phân loại AI.

Hàm khởi tạo – Tự tay khởi tạo và cấu hình Cảm biến Thị giác AI và các chữ ký của nó.

Người nhận#

take_snapshot#

take_snapshot lọc dữ liệu từ khung hình của Cảm biến Thị giác AI thành một chữ ký duy nhất — một mô tả đã lưu về thứ mà cảm biến có thể nhận ra, chẳng hạn như một đối tượng được đào tạo trước, ID AprilTag hoặc Chữ ký Màu hoặc Mã Màu được cấu hình — và trả về một tuple.

Chữ ký màu và Mã màu phải được cấu hình trước trong Tiện ích Thị giác trước khi có thể sử dụng chúng với phương pháp này.

The tuple stores objects ordered from largest to smallest by width, starting at index 0. Each object’s properties can be accessed using its index. An empty tuple is returned if no matching objects are detected.

Usage:
ai_vision_1.take_snapshot(SIGNATURE)

Thông số

Sự miêu tả

SIGNATURE

Lọc tập dữ liệu để chỉ bao gồm dữ liệu có chữ ký đã cho. Các chữ ký có sẵn là:

  • Chữ ký màu hoặc Mã màu - Tên của Cảm biến Thị giác AI, hai dấu gạch dưới, và sau đó là tên của Chữ ký màu hoặc Mã màu. Ví dụ: ai_vision_1__RED_BOX.
  • AiVision.ALL_AIOBJS - Hình lập phương, vòng và quả cầu.
  • AiVision.ALL_TAGS - Tất cả ID AprilTag.

count

Tùy chọn. Thiết lập số lượng tối đa các đối tượng có thể được trả về từ 1 đến 24. Mặc định là 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)

Note: The returned tuple can be sorted by any property, not just width, using Python’s sorted function. For example, sorting by 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)

Hoặc sắp xếp theo chiều cao:

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

Phân loại AI#

Cảm biến thị giác AI có thể phát hiện các đối tượng khác nhau theo các phân loại AI nhất định. Tùy thuộc vào mô hình phân loại AI được chọn khi cấu hình Cảm biến thị giác AI trong cửa sổ Thiết bị, các đối tượng khác nhau sẽ được phát hiện. Các mô hình hiện có sẵn là:

Các yếu tố trong lớp học

Số ID

Phân loại 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

Cuộc thi robot VEX V5 đầy kịch tính

Số ID

Phân loại AI

0

MOBILE_GOAL

1

RED_RING

2

BLUE_RING

Phản hồi về cuộc thi robot VEX V5

Số ID

Phân loại AI

0

BLUE_BLOCK

1

RED_BLOCK

Chế độ ghi đè cuộc thi robot VEX V5

Số ID

Phân loại AI

0

RED_BLUE_PIN

1

BLUE_YELLOW_PIN

2

RED_YELLOW_PIN

3

YELLOW_PIN

4

CUP

Màu sắc đặc trưng#

Chữ ký màu là một màu duy nhất mà Cảm biến Thị giác AI có thể nhận ra. Những chữ ký này cho phép Cảm biến Thị giác AI phát hiện và theo dõi các đối tượng dựa trên màu sắc của chúng. Sau khi Chữ ký màu được cấu hình, cảm biến có thể xác định các đối tượng có màu cụ thể đó trong trường nhìn của nó. Chữ ký màu được sử dụng với take_snapshot để xử lý và phát hiện các đối tượng có màu trong thời gian thực.

Để sử dụng Chữ ký màu đã cấu hình trong một dự án, tên của nó phải là tên của cảm biến, hai dấu gạch dưới, và sau đó là tên của Chữ ký màu. Ví dụ: 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)

Mã màu#

Mã màu là một mẫu cấu trúc được tạo thành từ các chữ ký màu được sắp xếp theo một thứ tự cụ thể. Các mã này cho phép Cảm biến Thị giác AI nhận diện các mẫu màu được xác định trước. Mã màu hữu ích để xác định các đối tượng phức tạp hoặc tạo ra các dấu hiệu độc đáo cho điều hướng tự động.

Để sử dụng Mã Màu đã cấu hình trong một dự án, tên của mã màu đó phải là tên của cảm biến, hai dấu gạch dưới, và sau đó là tên của Mã Màu. Ví dụ: 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 trả về giá trị Boolean cho biết liệu Cảm biến Thị giác AI hiện có được kết nối với Bộ xử lý V5 hay không.

  • True – Cảm biến thị giác AI được kết nối với bộ xử lý V5.

  • False – Cảm biến thị giác AI không được kết nối với bộ xử lý V5.

Usage:
ai_vision_1.installed()

Thông số

Sự miêu tả

Phương pháp này không có tham số.

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

Của cải#

Có mười thuộc tính được bao gồm trong mỗi đối tượng được lưu trữ trong một tuple sau khi take_snapshot được sử dụng.

Tất cả các giá trị thuộc tính ngoại trừ .id và .score mô tả vị trí và kích thước của đối tượng được phát hiện trong tầm nhìn của Cảm biến Thị giác AI tại thời điểm take_snapshot được sử dụng. Các giá trị này được đo bằng pixel, dựa trên độ phân giải 320 x 240 pixel của cảm biến.

.exists#

.exists trả về giá trị Boolean cho biết chỉ mục có tồn tại trong bộ dữ liệu hay không.

  • True – Chỉ mục tồn tại.

  • False – Chỉ mục không tồn tại.

# 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 trả về chiều rộng của đối tượng được phát hiện tính bằng pixel, là một số nguyên nằm giữa 1 và 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 trả về chiều cao của đối tượng được phát hiện tính bằng pixel, là một số nguyên nằm giữa 1 và 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 trả về tọa độ x của tâm đối tượng được phát hiện tính bằng pixel, là một số nguyên nằm giữa 0 và 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 trả về tọa độ y của tâm đối tượng được phát hiện tính bằng pixel, là một số nguyên nằm giữa 0 và 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 trả về hướng của Mã màu hoặc ID AprilTag được phát hiện tính bằng độ, là một số nguyên nằm giữa 0 và 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 trả về tọa độ x của góc trên bên trái của khung bao quanh đối tượng được phát hiện tính bằng pixel, là một số nguyên nằm giữa 0 và 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 trả về tọa độ y của góc trên bên trái của khung bao quanh đối tượng được phát hiện tính bằng pixel, là một số nguyên nằm giữa 0 và 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 trả về ID của Phân loại AI hoặc ID AprilTag được phát hiện dưới dạng số nguyên.

Đối với ID AprilTag, thuộc tính .id biểu thị số ID AprilTag được phát hiện trong phạm vi từ 0 đến 36. Đối với Phân loại AI, thuộc tính .id tương ứng với ID được xác định trước trong phần Phân loại 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 trả về điểm tin cậy của phân loại AI được phát hiện dưới dạng số nguyên từ 1 đến 100.

Điểm số thấp hơn có nghĩa là cảm biến ít tự tin hơn về vật thể được phát hiện, trong khi điểm số cao hơn có nghĩa là cảm biến tự tin hơn.

Các hàm tạo#

Các hàm tạo được sử dụng để tạo thủ công các đối tượng AiVision, Colordesc, và Codedesc , cần thiết để cấu hình Cảm biến Thị giác AI bên ngoài VEXcode.

AiVision#

AiVision tạo ra một cảm biến thị giác AI.

Cách sử dụng

Vision(smartport, sigs)

Thông số

Sự miêu tả

smartport

Cổng thông minh mà cảm biến thị giác AI được kết nối, được viết dưới dạng Ports.PORTx , trong đó x là số thứ tự của cổng.

sigs

Tùy chọn. Tên của một hoặc nhiều chữ ký, được phân tách bằng dấu phẩy (,):

  • Chữ ký màu
  • Mã màu
  • AiVision.ALL_TAGS – Tất cả ID AprilTag
  • AiVision.ALL_AIOBJS – Tất cả phân loại AI

# 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 tạo ra một Chữ ký Màu. Có thể lưu trữ tối đa bảy Chữ ký Màu khác nhau trên Cảm biến Thị giác AI cùng một lúc.

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

Tham số

Sự miêu tả

index

Chỉ số của đối tượng Colordesc , từ 1 đến 7.
Lưu ý: Việc tạo hai đối tượng Colordesc có cùng số chỉ số sẽ khiến đối tượng thứ hai được tạo ghi đè lên đối tượng đầu tiên.

red

Giá trị màu đỏ nằm trong khoảng từ 0 đến 255.

green

Giá trị màu xanh lá cây nằm trong khoảng từ 0 đến 255.

blue

Giá trị màu xanh lam nằm trong khoảng từ 0 đến 255.

hangle

Độ lệch màu cho phép được biểu thị bằng phạm vi độ trên vòng tròn màu (1–40). Giá trị càng cao cho phép độ lệch quay so với màu cơ bản càng lớn.

hdsat

Độ lệch độ bão hòa cho phép, từ 0,10 đến 1,00. Giá trị này thể hiện tỷ lệ phần trăm độ bão hòa tối đa mà màu sắc có thể thay đổi (ví dụ: 0,10 = ±10% độ bão hòa).

Một vòng tròn màu hiển thị toàn bộ quang phổ màu được dán nhãn bằng các giá trị độ xung quanh chu vi, tăng dần theo từng bước 30 độ từ 0° ở trên cùng đến 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 tạo ra Mã Màu. Nó yêu cầu ít nhất hai Chữ Ký Màu đã được xác định trước để có thể sử dụng. Có thể lưu trữ tối đa tám Mã Màu khác nhau trên Cảm Biến Thị Giác cùng một lúc.

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

Tham số

Sự miêu tả

sig1

A previously created Color Signature.

sig2

A previously created Color Signature.

sig3

Optional. A previously created Color Signature.

sig4

Optional. A previously created Color Signature.

sig5

Optional. A previously created Color Signature.

# 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 tạo ra một ID AprilTag. Bạn có thể sử dụng nó để định nghĩa các ID AprilTag có thể nhận dạng được, giúp mã của bạn rõ ràng và dễ đọc hơn.

Usage:
Tagdesc(id)

Tham số

Sự miêu tả

id

Mã ID AprilTag cần sử dụng.

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