VEXcode EXP C++에서 AI 비전 센서 사용

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

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

주변의 정보를 수집하기 위해 AI 비전 센서는 현재 보고 있는 이미지를 촬영합니다. 지정된시각적 서명 로 식별되는 모든 개체는 AI 비전 센서 내부에 저장되며, 이후 다른 기능에서 사용할 수 있습니다.

.takeSnapshot

개의 시각적 서명 을 매개변수로 사용하려면 먼저 구성해야 합니다. 이 방법을 사용할 때 서명 매개변수를 센서 이름, 이중 밑줄, 시각적 서명의 이름으로 지정하십시오.

유틸리티 exm.PNG

AIVision6.takeSnapshot(AIVision6__Blue)
AIVision6.takeSnapshot(AIVision6__Red)
AIVision6.takeSnapshot(AIVision6__Green)

이 예에서는 .takeSnapshot 메소드를 사용하여 "Blue" Visual Signature에 해당하는 객체를 검색합니다. 그런 다음 코드는 해당 시각적 서명에 대해 발견된 개체 수를 표시합니다.

int main() {
while (true) {
// 감지된 객체를 확인하기 위해 스냅샷을 찍습니다
AIVision6.takeSnapshot(Blue);

// 새로운 정보를 표시할 수 있도록 화면을 지우거나 재설정합니다
Brain.Screen.clearScreen();
Brain.Screen.setCursor(1, 1);

// 감지된 개체 수를 인쇄합니다
Brain.Screen.print("object count: %d", AIVision6.objectCount);

대기(0.5,초);
}
}

감지된 개체 수 확인

.takeSnapshot 메소드는 동일한 Visual Signature 가진 여러 개체를 한 번에 감지할 수 있으므로 .objectCount 속성을 사용하여 감지된 개체 수를 확인할 수 있습니다.

Brain.Screen.Print(“%d”, AIVision1.objectCount)

이 예에서는 .objectCount 속성을 사용하여 마지막 스냅샷에서 최소 1 Visual Signature 감지되었는지 확인한 다음 개체가 감지되면 true 또는 false를 인쇄합니다. 개체가 감지되면 총 감지된 개체 수를 인쇄합니다.

int main() {
while (true) {
// 감지된 객체를 확인하기 위해 스냅샷을 찍습니다
AIVision6.takeSnapshot(Blue);

// 새로운 정보를 표시할 수 있도록 화면을 지우거나 재설정합니다
Brain.Screen.clearScreen();
Brain.Screen.setCursor(1, 1);

// 객체가 발견된 경우 개수를 인쇄합니다.
if (AIVision6.objectCount > 0) {
Brain.Screen.newLine();
Brain.Screen.print("객체 개수: %d", AIVision6.objectCount);
}

대기(0.5,초);
}
}

데이터를 가져올 개체 선택

AI 비전 센서에서 데이터를 추출하는 방법은 두 가지가 있습니다. 한 가지 접근 방식은 AIVision.largestObject 속성을 사용하여 가장 최근에 사용된 .takeSnapshot 메서드에서 감지된 가장 큰 개체에서 정보를 직접 검색하는 것입니다. 다른 방법은 AIVision.objects[] 속성을 사용하고 객체 인덱스를 지정합니다.

AIVision.largestObject

ai.vision.largest_object() 가장 큰 객체에 접근하기 위한 속성입니다.

int main() {
while (true) {
// 감지된 객체를 확인하기 위해 스냅샷을 찍습니다
AIVision6.takeSnapshot(BlueBox);

// 새로운 정보를 표시할 수 있도록 화면을 지우거나 재설정합니다
Brain.Screen.clearScreen();
Brain.Screen.setCursor(1, 1);

// 객체가 발견되면 위치를 인쇄합니다.
if (AIVision6.objects[0].exists) {
Brain.Screen.print("Center X: %d, AIVision6.largestObject[0].centerX);
} else {
Brain.Screen.print("객체 없음");
}

wait(0.5, 초);
}
}

AIVision.객체

데이터를 가져오는 또 다른 방법은 데이터를 추출하려는 개체의 인덱스를 지정하는 것입니다. 스냅샷은 가장 큰 객체가 있는 감지된 객체를 먼저 인덱스 0에 반환하고 객체를 가장 큰 것부터 작은 것 순으로 정렬합니다.

int main() {
while (true) {
// 감지된 객체를 확인하기 위해 스냅샷을 찍습니다
AIVision6.takeSnapshot(BlueBox);

// 새로운 정보를 표시할 수 있도록 화면을 지우거나 재설정합니다
Brain.Screen.clearScreen();
Brain.Screen.setCursor(1, 1);

// 객체가 발견되면 위치를 인쇄합니다.
if (AIVision6.objects[0].exists) {
Brain.Screen.print("Center X: %d, AIVision6.objects[0].centerX);
} else {
Brain.Screen.print("객체 없음");
}

wait(0.5, 초);
}
}

객체에서 가져올 데이터 선택

각 개체에는 호출할 수 있는 8개의 속성이 있습니다.

  • .키
  • .너비
  • .centerX
  • .centerY
  • .originX
  • .originY
  • .각도
  • .존재한다

.키

.height 속성은 감지된 객체의 높이를 픽셀 단위로 반환합니다.

.height 속성을 반환하려면 다음 코드를 사용하세요.

AIVision6.objects[0].height

.height 속성은 0에서 240픽셀 사이의 값을 반환합니다.

.너비

.width 속성은 감지된 객체의 너비를 픽셀 단위로 반환합니다.

.width 속성을 반환하려면 다음 코드를 사용하세요.

AIVision6.objects[0].width

.width 속성은 0에서 320 사이의 값을 반환합니다.

.centerX

.centerX 속성은 감지된 Visual Signature중심의 X 좌표를 보고합니다.

.centerX 속성을 반환하려면 다음 코드를 사용하세요.

AIVision6.objects[0].centerX

.centerX 속성은 0에서 320 사이의 숫자를 반환합니다.

.centerY

.centerY 속성은 감지된 Visual Signature중심의 Y 좌표를 보고합니다.

.centerY 속성을 반환하려면 다음 코드를 사용하세요.

AIVision6.objects[0].centerY

.centerY속성 0에서 240 사이의 숫자를 반환합니다.

.originX

.originX 속성은 감지된 시각적 서명의 가장 왼쪽 위 모서리의 X 좌표를 보고합니다.

.originX 속성을 반환하려면 다음 코드를 사용하세요.

AIVision6.objects[0].originX

.originX속성은 0에서 320 사이의 숫자를 반환합니다.

.originY

.originY 속성은 감지된 시각적 서명의 가장 왼쪽 위 모서리의 Y 좌표를 보고합니다.

.originY 속성을 반환하려면 다음 코드를 사용하세요.

AIVision6.objects[0].originY

.originY속성은 0에서 240 사이의 숫자를 반환합니다.

.각도

.angle 속성은 색상 코드의 각도 값을 반환합니다.

.angle 속성을 반환하려면 다음 코드를 사용하세요.

AIVision6.objects[0].angle

.angle 속성은 감지된 색상 코드의 방향(0~359.99도 범위)을 반환합니다.

.존재한다

.exists 은 유효한 객체인 경우 true를 반환하는 부울 속성입니다. 

음의 정수가 사용되는 경우와 같이 객체가 유효하지 않은 경우 false를 반환합니다. 객체가 유효하지 않으면 다른 모든 속성은 해당 값으로 0을 반환합니다.

int main() {
while (true) {
// 감지된 객체를 확인하기 위해 스냅샷을 찍습니다
AIVision6.takeSnapshot(BlueBox);

// 새로운 정보를 표시할 수 있도록 화면을 지우거나 재설정합니다
Brain.Screen.clearScreen();
Brain.Screen.setCursor(1, 1);

// 객체가 발견되면 위치를 인쇄합니다.
if (AIVision6.objects[0].exists) {
Brain.Screen.print("Center X: %d, AIVision6.objects[0].centerX);
} else {
Brain.Screen.print("객체 없음");
}

wait(0.5, 초);
}
}

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

Last Updated: