VEXcode EXP Python에서 AI 비전 센서 사용

이 문서에서는 Python에서 AI Vision 센서를 사용하는 데 사용할 수 있는 기능에 대한 개요와 사용 방법에 대한 간단한 지침을 제공합니다. AI 비전 센서를 사용하는 과정에서 데이터 획득, 획득한 객체의 양 확인, 데이터에서 사용할 객체 선택, 객체에서 가져올 데이터의 4단계를 학습합니다.

AI Vision 센서로 시각적 데이터 획득

주변의 정보를 수집하기 위해 AI 비전 센서는 현재 보고 있는 이미지를 촬영합니다. 지정된Visual Signature 로 식별되는 모든 개체는 튜플에 저장되며, 이 튜플은 다른 함수에서 사용할 수 있습니다.

take_snapshot

take_snapshot 명령을 사용할 때 생성되는 튜플을 저장할 변수를 생성해야 합니다. 개의 시각적 서명 을 매개변수로 사용하려면 먼저 구성해야 합니다. 기능을 사용할 때 서명 매개변수를 센서 이름, 이중 밑줄, 그 뒤에 시각적 서명 이름으로 지정하십시오.유틸리티 exm.PNG

Vision_objects = ai_vision_6.take_snapshot(ai_vision_6__Blue)
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__Blue)

Brain.screen.clear_screen()
Brain.screen.set_cursor(1, 1)

Brain.screen .print("객체 개수:", len(vision_objects))
대기(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__Blue)

# 새로운 정보를 표시할 수 있도록 화면을 지우고 재설정합니다.
Brain.screen.clear_screen()
Brain. screen.set_cursor(1, 1)

if len(vision_objects) > 0:
# 발견된 개체 수를 인쇄합니다.
Brain.screen.next_row()
Brain.screen.print("object count:", len(vision_objects ))
대기(0.5, 초)

튜플과 함께 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__Blue)

# 새로운 정보를 표시할 수 있도록 화면을 지우고 재설정합니다.
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("객체 없음")
대기(0.5, SECONDS)

이 예제에서 코드는 ai.vision.largest_object() 함수를 사용하여 감지된 가장 큰 객체의 .centerX 속성을 반환하고 인쇄하기 전에 객체가 존재하는지 확인합니다.

비전_객체[0]

튜플에서 데이터를 가져오는 또 다른 방법은 튜플을 저장하는 변수를 직접 호출하는 것입니다. 괄호 안에 데이터를 추출하려는 개체의 인덱스를 지정합니다. 반환된 객체 튜플은 항상 가장 큰 객체를 인덱스 0에 먼저 나열합니다. 그 후, 객체는 가장 큰 것부터 가장 작은 것 순으로 정렬됩니다.

while True: 
# 감지된 객체의 튜플을 생성하기 위해 스냅샷을 찍습니다.
Vision_objects = ai_vision_6.take_snapshot(ai_vision_6__Blue)

# 새로운 정보를 표시할 수 있도록 화면을 지우고 재설정합니다.
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__Blue)
# 새 정보를 표시할 수 있도록 화면을 지우고 재설정합니다.
Brain.screen.clear_screen()
Brain.screen .set_cursor(1, 1)

ifvision_objects[0].exists:
Brain.screen.print("x:",vision_objects[0].centerX)
else:
Brain.screen.print("객체 없음" )
대기(0.1, 초)

이 예에서 코드는 .exists 속성을 확인하고, true를 반환하면 .centerX 속성 값을 Brain에 인쇄합니다. 속성이 false를 반환하면 객체가 없다고 인쇄됩니다.

For more information, help, and tips, check out the many resources at VEX Professional Development Plus

Last Updated: