AI 비전#

소개#

AI 비전 센서는 사물, 색상 및 AprilTag ID를 감지하고 추적할 수 있습니다. 이를 통해 로봇은 주변 환경을 분석하고, 물체를 추적하며, 감지된 시각 데이터를 기반으로 반응할 수 있습니다.

이 페이지에서는 AI 비전 센서, 색상 시그니처 및 색상 코드의 예시 이름으로 각각 ai_vision_1, RED_BOX, BOX_CODE 를 사용합니다. 필요에 따라 직접 설정한 이름으로 변경하십시오.

다음은 모든 방법 목록입니다.

데이터 가져오기 - AI 비전 센서에서 데이터를 가져옵니다.

  • take_snapshot – 특정 서명에 대한 데이터를 캡처합니다.

  • installed – AI 비전 센서가 V5 브레인에 연결되어 있는지 여부.

속성 – take_snapshot에서 반환된 객체 데이터.

  • .exists – 현재 감지에 객체가 존재하는지 여부.

  • .width – 감지된 객체의 너비.

  • .height – 감지된 객체의 높이.

  • .centerX – 객체 중심의 X 위치.

  • .centerY – 객체 중심의 Y 위치.

  • .angle – 색상 코드의 방향.

  • .originX – 객체의 왼쪽 상단 모서리의 X 위치.

  • .originY – 객체의 왼쪽 상단 모서리의 Y 위치.

  • .id – 객체의 분류 또는 태그 ID.

  • .score – AI 분류에 대한 신뢰도 점수.

생성자 – AI 비전 센서와 해당 시그니처를 수동으로 초기화하고 구성합니다.

  • AiVision – AI 비전 센서를 생성합니다.

  • Colordesc – 색상 시그니처를 생성합니다.

  • Codedesc – 색상 코드를 생성합니다.

  • Tagdesc – AprilTag ID를 생성합니다.

게터스#

take_snapshot#

take_snapshot 은 AI 비전 센서의 프레임에서 데이터를 단일 서명(사전 학습된 객체, AprilTag ID 또는 구성된 색상 서명이나 색상 코드와 같이 센서가 인식할 수 있는 것에 대한 저장된 설명)으로 필터링하고 튜플을 반환합니다.

색상 서명 및 색상 코드는 이 방법을 사용하기 전에 먼저 Vision Utility에서 구성해야 합니다.

튜플은 인덱스 0부터 시작하여 너비가 큰 순서부터 작은 순서로 정렬된 객체를 저장합니다. 각 객체의 속성은 해당 인덱스를 사용하여 접근할 수 있습니다. 일치하는 객체가 감지되지 않으면 빈 튜플이 반환됩니다.

Usage:
ai_vision_1.take_snapshot(SIGNATURE)

매개변수

설명

SIGNATURE

지정된 서명에 해당하는 데이터만 포함하도록 데이터 세트를 필터링합니다. 사용 가능한 서명은 다음과 같습니다.

  • 색상 서명 또는 색상 코드 - AI 비전 센서 이름, 두 개의 밑줄, 그리고 색상 서명 또는 색상 코드 이름입니다. 예: ai_vision_1__RED_BOX.
  • AiVision.ALL_AIOBJS - 큐브, 링, 공.
  • AiVision.ALL_TAGS - 모든 AprilTag ID.

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)

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)

또는 높이 순으로 정렬할 수도 있습니다.

# 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 비전 센서는 특정 AI 분류에 따라 다양한 객체를 감지할 수 있습니다. 장치 창에서 AI 비전 센서를 구성할 때 선택한 AI 분류 모델에 따라 감지되는 객체가 달라집니다. 현재 사용 가능한 모델은 다음과 같습니다.

교실 구성 요소

신분증 번호

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 비전 센서가 인식할 수 있는 고유한 색상입니다. 이러한 시그니처를 통해 AI 비전 센서는 색상을 기반으로 객체를 감지하고 추적할 수 있습니다. 컬러 시그니처가 구성되면 센서는 시야 내에서 해당 특정 색상의 객체를 식별할 수 있습니다. 컬러 시그니처는 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 비전 센서가 현재 V5 브레인에 연결되어 있는지 여부를 나타내는 부울 값을 반환합니다.

  • 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!")

속성#

take_snapshot을 사용한 후 tuple에 저장된 각 객체에는 10개의 속성이 포함됩니다.

.id 및 .score 을 제외한 모든 속성 값은 take_snapshot 사용된 시점에서 AI 비전 센서의 시야 내에서 감지된 객체의 위치와 크기를 나타냅니다. 이 값들은 센서의 320x240 픽셀 해상도를 기준으로 픽셀 단위로 측정됩니다.

.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 감지된 객체 중심의 x 좌표를 픽셀 단위로 반환하며, 이 값은 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 감지된 객체 중심의 y 좌표를 픽셀 단위로 반환하며, 이 값은 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 ID의 방향을 도 단위로 반환하며, 이는 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 감지된 객체의 경계 상자의 왼쪽 상단 모서리의 x 좌표를 픽셀 단위로 반환하며, 이는 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 감지된 객체의 경계 상자의 왼쪽 상단 모서리의 y 좌표를 픽셀 단위로 반환하며, 이는 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 감지된 AI 분류 또는 AprilTag ID를 정수로 반환합니다.

AprilTag ID의 경우 .id 속성은 0~36 범위의 감지된 AprilTag ID 번호를 나타냅니다. AI 분류의 경우 .id 속성은 AI 분류 섹션에 있는 미리 정의된 ID에 해당합니다.

# 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 사이의 정수로 반환합니다.

점수가 낮을수록 센서가 감지한 물체에 대해 확신도가 낮다는 의미이고, 점수가 높을수록 센서가 더 확신한다는 의미입니다.

건설업자#

생성자는 VEXcode 외부에서 AI 비전 센서를 구성하는 데 필요한 AiVision, Colordesc및 Codedesc 객체를 수동으로 생성하는 데 사용됩니다.

AiVision#

AiVision AI 비전 센서를 생성합니다.

용법

Vision(smartport, sigs)

매개변수

설명

smartport

AI 비전 센서가 연결된 스마트 포트는 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 비전 센서에는 최대 7개의 서로 다른 컬러 시그니처를 동시에 저장할 수 있습니다.

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% 채도).

원형 색상환은 둘레에 도수 값이 표시되어 있으며, 맨 위쪽 0°에서 360°까지 30도씩 증가하는 전체 색조 스펙트럼을 보여줍니다.

"""
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 색상 코드를 생성합니다. 이를 사용하려면 이미 정의된 색상 시그니처가 최소 2개 필요합니다. 비전 센서에는 최대 8개의 서로 다른 색상 코드를 동시에 저장할 수 있습니다.

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를 생성합니다. 이 ID를 사용하여 식별 가능한 AprilTag ID를 정의하면 코드가 더 명확하고 읽기 쉬워집니다.

Usage:
Tagdesc(id)

매개변수

설명

id

사용할 AprilTag ID입니다.

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