Cảm biến thị giác AI#

Giới thiệu#

Cảm biến thị giác IQ 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.

Đối với các ví dụ bên dưới, Cảm biến Thị giác IQ AI đã cấu hình sẽ được đặt tên là ai_vision_1và các đối tượng Chữ ký Màu đã cấu hình, chẳng hạn như RED_BOX, sẽ được sử dụng trong tất cả các ví dụ tiếp theo trong toàn bộ tài liệu API này khi đề cập đến AiVision.

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 IQ AI.

  • take_snapshot — Thu thập dữ liệu cho một chữ ký cụ thể.

  • installed — Cảm biến thị giác IQ AI có được kết nối với bộ não IQ (thế hệ thứ 2) 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 hoặc ID AprilTag.

  • .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ác cảm biến.

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

  • Colordesc — Tạo Chữ ký màu.

  • Codedesc — Tạo mã màu.

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 IQ 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 IQ 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 - Tất cả Phân loại AI được phát hiện tùy thuộc vào mô hình được cấu hình trong Tiện ích Thị giác AI.
  • 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: 8).

# Move 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 IQ AI có thể phát hiện các vật thể 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 vật thể khác nhau sẽ được phát hiện. Các mô hình hiện có sẵn là:

Đồ dùng trong lớp học

Số ID

Phân loại AI

0

ClassroomElements.BLUE_BALL

1

ClassroomElements.GREEN_BALL

2

ClassroomElements.RED_BALL

3

ClassroomElements.BLUE_RING

4

ClassroomElements.GREEN_RING

5

ClassroomElements.RED_RING

6

ClassroomElements.BLUE_CUBE

7

ClassroomElements.GREEN_CUBE

8

ClassroomElements.RED_CUBE

Cuộc thi Robot VEX IQ kết hợp nhiều yếu tố

Số ID

Phân loại AI

0

GameElementsMixAndMatch.BEAM

1

GameElementsMixAndMatch.BLUE_PIN

2

GameElementsMixAndMatch.RED_PIN

3

GameElementsMixAndMatch.ORANGE_PIN

Nâng tầm cuộc thi robot VEX IQ

Số ID

Phân loại AI

0

GameElementsLevelUp.BLUE_BEANBAG

1

GameElementsLevelUp.RED_BEANBAG

2

GameElementsLevelUp.YELLOW_BEANBAG

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 IQ AI có thể nhận ra. Những chữ ký này cho phép Cảm biến Thị giác IQ 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 IQ AI nhận diện các mẫu màu được xác định trước. Mã màu rất 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 IQ AI hiện có được kết nối với Bộ xử lý IQ (thế hệ thứ 2) hay không.

  • True — Cảm biến thị giác IQ AI được kết nối với bộ não IQ (thế hệ thứ 2).

  • False — Cảm biến thị giác IQ AI không được kết nối với bộ não IQ (thế hệ thứ 2).

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 IQ 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. Phân loại AI phụ thuộc vào mô hình được cấu hình trong Tiện ích Tầm nhìn AI.

Đố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.

# Display if a score is confident
while True:
    objects = ai_vision_1.take_snapshot(AiVision.ALL_AIOBJS)
    brain.screen.clear_screen()
    brain.screen.set_cursor(1, 1)
    if objects[0].exists:
        if objects[0].score > 95:
            brain.screen.print("Confident")
    else:
        brain.screen.print("Not confident")

    wait(50, MSEC)

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 IQ AI bên ngoài VEXcode.

AI Vision Sensor#

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

Cách sử dụng

Vision(port, sigs)

Thông số

Sự miêu tả

port

Cảm biến thị giác IQ AI được kết nối với cổng thông minh nào, từ 1 đến 12?

sigs

Tùy chọn. Tên của một hoặc nhiều chữ ký:

  • 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

Ví dụ

ai_vision_1 = AiVision(Ports.PORT1, AiVision.ALL_AIOBJS)

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

Color Signature#

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 IQ AI cùng một lúc.

Cách sử dụng:

Colordesc(index, uMin, uMax, uMean, vMin, vMax, vMean, rgb, type)

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 ghi đè lên đối tượng đầu tiên.

uMin

Giá trị từ uMin trong Tiện ích Thị giác.

uMax

Giá trị từ uMax trong Tiện ích Thị giác.

uMean

Giá trị từ uMean trong Tiện ích Thị giác.

vMin

Giá trị từ vMin trong Tiện ích Thị giác.

vMax

Giá trị từ vMax trong Tiện ích Thị giác.

vMean

Giá trị từ vMean trong Tiện ích Thị giác.

rgb

Giá trị từ rgb trong Tiện ích Thị giác.

type

Giá trị từ type trong Tiện ích Thị giác.

Để lấy các giá trị tạo Chữ ký màu, hãy vào Tiện ích Thị giác. Sau khi Chữ ký màu được cấu hình, hãy sao chép các giá trị tham số từ cửa sổ Cấu hình.

Ví dụ

# Create a new Signature RED_BOX with the Colordesc class
RED_BOX = Colordesc(1, 10121, 10757, 10439,-1657, -1223, -1440,2.5, 1)
# Create a new AI Vision Sensor "ai_vision_1" with the AiVision
# class, with the RED_BOX Signature.
ai_vision_1 = AiVision(Ports.PORT1, 100, RED_BOX)

# Move forward if a red object is detected
while True:
    red_object = ai_vision_1.take_snapshot(RED_BOX)
    if red_object[0].exists:
        drivetrain.drive_for(FORWARD, 10, MM)
    wait(5, MSEC)

Color Code#

Codedesc tạo ra một Mã Màu. Nó yêu cầu ít nhất hai Chữ Ký Màu đã được định nghĩa 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.

Cách sử dụng:

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.

Ví dụ

# Create two new Signatures for a red and blue box
RED_BOX = Colordesc(1, 10121, 10757, 10439,-1657, -1223, -1440, 2.5, 1)
BLUE_BOX = Colordesc(2, -4443, -3373, -3908,6253, 7741, 6997, 2.5, 1)
# Create a Color Code for a red box to the left of a blue box
RED_BLUE = Codedesc(RED_BOX, BLUE_BOX)
# Create a new AI Vision Sensor "ai_vision_1" with the AiVision
# class, with the RED_BOX and BLUE_BOX Signatures.
ai_vision_1 = AiVision(Ports.PORT1, RED_BOX, BLUE_BOX)

# Display a message if Color Code is detected
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(RED_BLUE)
    if box_code[0].exists:
        brain.screen.print("Code detected!")
        wait(100, MSEC)