이 문서에서는 Python에서 AI Vision 센서를 사용하는 데 사용할 수 있는 기능에 대한 개요와 사용 방법에 대한 간단한 지침을 제공합니다. AI 비전 센서를 사용하는 과정에서 데이터 획득, 획득한 객체의 양 확인, 데이터에서 사용할 객체 선택, 객체에서 가져올 데이터의 4단계를 학습합니다.
AI Vision 센서로 시각적 데이터 획득
주변의 정보를 수집하기 위해 AI 비전 센서는 현재 보고 있는 이미지를 촬영합니다. 지정된Visual Signature 로 식별되는 모든 개체는 튜플에 저장되며, 이 튜플은 다른 함수에서 사용할 수 있습니다.
take_snapshot
take_snapshot
명령을 사용할 때 생성되는 튜플을 저장할 변수를 생성해야 합니다. 개의 시각적 서명 을 매개변수로 사용하려면 먼저 구성해야 합니다. 기능을 사용할 때 서명 매개변수를 센서 이름, 이중 밑줄, 그 뒤에 시각적 서명 이름으로 지정하십시오.
비전 객체 = ai_vision_6.스냅샷 찍기(ai_vision_6__보라색)
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에서 자동 완성됩니다.
예
이 예에서 변수
ai_vision_6
라는 AI 비전 센서에서 감지된 시각적 서명 포함하는 튜플을 저장합니다. 감지된 개체 수를 표시하고 0.5초마다 새로운 스냅샷을 캡처합니다.
while True:
# 감지된 객체의 튜플을 생성하기 위해 스냅샷을 찍습니다
vision_objects = ai_vision_6.take_snapshot(ai_vision_6__Purple)
brain.screen.clear_screen()
brain.screen.set_cursor(1, 1)
brain.screen.print("객체 수:", len(vision_objects))
wait(0.5, SECONDS)
감지된 개체 수 확인
len
명령은 튜플과 함께 사용할 수 있습니다. 이는 take_snapshot
명령이 튜플에 저장한 개체 수를 확인하는 데 사용할 수 있습니다.
스냅샷에서 정보를 가져오기 전에 항상 개체가 감지되었는지 확인하는 것이 가장 좋습니다. 이렇게 하려면 튜플을 저장하는 변수와 함께 len
명령을 사용하세요.
len(vision_objects) > 0
예
이 예에서 변수
ai_vision_6
라는 AI 비전 센서에서 감지된 시각적 서명 포함하는 튜플을 저장합니다. 감지된 개체 수를 표시하고 0.5초마다 새로운 스냅샷을 캡처합니다. 그러나 개체를 감지한 경우 감지된 개체 수를 인쇄합니다.
while True:
# 감지된 객체의 튜플을 생성하기 위해 스냅샷을 찍습니다
vision_objects = ai_vision_6.take_snapshot(ai_vision_6__Purple)
# 새로운 정보를 표시할 수 있도록 화면을 지우거나 재설정합니다.
brain.screen.clear_screen()
brain.screen.set_cursor(1, 1)
if len(vision_objects) > 0:
# 발견된 객체의 수를 출력합니다.
brain.screen.next_row()
brain.screen.print("객체 수:", len(vision_objects))
wait(0.5, SECONDS)
튜플과 함께 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__Purple)
# 새로운 정보를 표시할 수 있도록 화면을 지우거나 재설정합니다
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, SECONDS)
이 예제에서 코드는 ai.vision.largest_object()
함수를 사용하여 감지된 가장 큰 객체의 .centerX
속성을 반환하고 인쇄하기 전에 객체가 존재하는지 확인합니다.
비전_객체[0]
튜플에서 데이터를 가져오는 또 다른 방법은 튜플을 저장하는 변수를 직접 호출하는 것입니다. 괄호 안에 데이터를 추출하려는 개체의 인덱스를 지정합니다. 반환된 객체 튜플은 항상 가장 큰 객체를 인덱스 0에 먼저 나열합니다. 그 후, 객체는 가장 큰 것부터 가장 작은 것 순으로 정렬됩니다.
while True:
# 감지된 객체의 튜플을 생성하기 위해 스냅샷을 찍습니다
vision_objects = ai_vision_6.take_snapshot(ai_vision_6__Purple)
# 새로운 정보를 표시할 수 있도록 화면을 지우거나 재설정합니다
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
속성을 반환하고 인쇄하기 전에 개체가 존재하는지 확인합니다.
객체에서 가져올 데이터 선택
각 개체에는 호출할 수 있는 8개의 속성이 있습니다.
.키
.너비
.centerX
.centerY
.originX
.originY
.각도
.존재한다
.키
.height
속성은 감지된 객체의 높이를 픽셀 단위로 반환합니다.
.height
속성을 반환하려면 다음 코드를 사용하세요.
Vision_objects[0].높이
.height
속성은 0에서 240픽셀 사이의 값을 반환합니다.
.너비
.width
속성은 감지된 객체의 너비를 픽셀 단위로 반환합니다.
.width
속성을 반환하려면 다음 코드를 사용하세요.
Vision_objects[0].width
.width
속성은 0에서 320 사이의 값을 반환합니다.
.centerX
.centerX
속성은 감지된 Visual Signature중심의 X 좌표를 보고합니다.
.centerX
속성을 반환하려면 다음 코드를 사용하세요.
Vision_objects[0].centerX
.centerX
속성은 0에서 320 사이의 숫자를 반환합니다.
.centerY
.centerY
속성은 감지된 Visual Signature중심의 Y 좌표를 보고합니다.
.centerY
속성을 반환하려면 다음 코드를 사용하세요.
Vision_objects[0].centerY
.centerY
속성 0에서 240 사이의 숫자를 반환합니다.
.originX
.originX
속성은 감지된 시각적 서명의 가장 왼쪽 위 모서리의 X 좌표를 보고합니다.
.originX
속성을 반환하려면 다음 코드를 사용하세요.
Vision_objects[0].originX
.originX
속성은 0에서 320 사이의 숫자를 반환합니다.
.originY
.originY
속성은 감지된 시각적 서명의 가장 왼쪽 위 모서리의 Y 좌표를 보고합니다.
.originY
속성을 반환하려면 다음 코드를 사용하세요.
Vision_objects[0].originY
.originY
속성은 0에서 240 사이의 숫자를 반환합니다.
.각도
.angle
속성은 색상 코드의 각도 값을 반환합니다.
.angle
속성을 반환하려면 다음 코드를 사용하세요.
Vision_objects[0].angle
.angle
속성은 감지된 색상 코드의 방향(0~359.99도 범위)을 반환합니다.
.존재한다
.exists
은 유효한 객체인 경우 true를 반환하는 부울 속성입니다.
음의 정수가 사용되는 경우와 같이 객체가 유효하지 않은 경우 false를 반환합니다. 객체가 유효하지 않으면 다른 모든 속성은 해당 값으로 0을 반환합니다.
while True:
# 감지된 객체의 튜플을 생성하기 위해 스냅샷을 찍습니다
vision_objects = ai_vision_6.take_snapshot(ai_vision_6__Purple)
# 새로운 정보를 표시할 수 있도록 화면을 지우거나 재설정합니다
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("no object")
wait(0.1, SECONDS)
이 예에서 코드는 .exists
속성을 확인하고, true를 반환하면 .centerX
속성 값을 Brain에 인쇄합니다. 속성이 false를 반환하면 객체가 없다고 인쇄됩니다.
.ID
.id
속성은 감지된 AprilTag의 또는 AI 분류의 식별 번호를 반환합니다.
AprilTag 의 id는 AprilTag 자체와 함께 발견될 수 있습니다.
현재 사용 가능한 AI 분류 는 다음과 같습니다.
교실 요소 | 경쟁 요소 (High Stakes '24-'25) |
---|---|
|
0 - 모바일 목표 |
1 - 녹색 공 |
1 - 레드 링 |
2 - 빨간 공 |
2 - 블루 링 |
3 - 블루 링 |
|
4 - 그린 링 |
|
5 - 레드 링 |
|
6 - 블루 큐브 |
|
7 - 그린 큐브 |
|
8 - 레드 큐브 |
비전 객체[0].id
.점수
.score
속성은 AI 분류에 대한 신뢰 백분율 값(최대 100%)을 반환합니다. 이 점수는 모델이 감지된 AI 분류에 대해 얼마나 확신하는지 나타냅니다. 점수 값이 높을수록 AI 분류의 정확도에 대한 확신도가 높아짐을 나타냅니다.
비전 객체[0].점수