Korzystanie z czujnika wizyjnego AI w VEXcode EXP C++

W tym artykule omówiono funkcje dostępne do korzystania z czujnika wizyjnego AI w języku Python wraz z prostymi instrukcjami, jak z nich korzystać. Poznasz cztery kroki w procesie korzystania z AI Vision Sensor – pozyskiwanie danych, sprawdzanie ilości uzyskanych obiektów, wybieranie, jakiego obiektu z danych użyć i jakie dane z obiektu wyciągnąć.

Uzyskaj dane wizualne za pomocą czujnika wizyjnego AI

Aby zebrać informacje z otoczenia, czujnik wizyjny AI tworzy obraz tego, na co aktualnie patrzy. Wszelkie obiekty, które identyfikuje za pomocą określonegopodpisu wizualnego są przechowywane wewnętrznie w czujniku wizyjnym AI, z którego można następnie korzystać w innych funkcjach.

.Zrób zdjęcie

Dowolne podpisów wizualnych będzie musiało zostać skonfigurowanych, zanim będzie można ich użyć jako parametru. Korzystając tej metody, określ parametr podpisu jako nazwę czujnika, podwójne podkreślenie, a następnie nazwę podpisu wizualnego.

narzędzie exm.PNG

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

Przykład

W tym przykładzie zastosowano metodę do wyszukiwania dowolnych obiektów odpowiadających sygnaturze wizualnej „Blue” . Następnie kod wyświetli liczbę obiektów znalezionych dla tego podpisu wizualnego .

int main() {
while (true) {
// Zrób migawkę, aby sprawdzić wykryte obiekty
AIVision6.takeSnapshot(Blue);

// Wyczyść ekran/zresetuj, abyśmy mogli wyświetlić nowe informacje
Brain.Screen.clearScreen();
Mózg.Screen.setCursor(1, 1);

// Wydrukuj liczbę wykrytych obiektów
Brain.Screen.print("liczba obiektów: %d", AIVision6.objectCount);

czekaj (0,5, sekundy);
}
}

Określ, ile obiektów zostało wykrytych

Ponieważ metoda .takeSnapshot może wykryć jednocześnie wiele obiektów z tym samym podpisem wizualnym , liczbę wykrytych obiektów można sprawdzić za pomocą właściwości .objectCount.

Mózg.Screen.Print(„%d”, AIVision1.objectCount)

Przykład

W tym przykładzie właściwość .objectCount została użyta do sprawdzenia, czy w ostatnim zrzucie wykryto co najmniej 1 podpis wizualny , a następnie wypisanie wartości true lub false, jeśli wykryto obiekt. Jeśli wykryto obiekt, drukuje liczbę wykrytych obiektów.

int main() {
while (true) {
// Zrób migawkę, aby sprawdzić wykryte obiekty
AIVision6.takeSnapshot(Blue);

// Wyczyść ekran/zresetuj, abyśmy mogli wyświetlić nowe informacje
Brain.Screen.clearScreen();
Mózg.Screen.setCursor(1, 1);

// jeśli znaleziono obiekty, wypisz ile obiektów
if (AIVision6.objectCount > 0) {
Brain.Screen.newLine();
Brain.Screen.print("liczba obiektów: %d", AIVision6.objectCount);
}

czekaj (0,5, sekundy);
}
}

Wybierz obiekt, z którego chcesz pobrać dane

Istnieją dwie metody wyodrębniania danych z czujnika wizyjnego AI. Jednym z podejść jest bezpośrednie pobranie informacji z największego obiektu wykrytego podczas najnowszego użycia metody .takeSnapshot przy użyciu właściwości AIVision.largestObject. Druga metoda wykorzystuje właściwość AIVision.objects[] i określa indeks obiektu.

AIVision.largestObject

ai.vision.largest_object() to właściwość umożliwiająca dostęp do największego obiektu.

int main() {
while (true) {
// Zrób migawkę, aby sprawdzić wykryte obiekty
AIVision6.takeSnapshot(BlueBox);

// Wyczyść ekran/zresetuj, abyśmy mogli wyświetlić nowe informacje
Brain.Screen.clearScreen();
Mózg.Screen.setCursor(1, 1);

// Jeśli znaleziono obiekty, wydrukuj lokalizację
if (AIVision6.objects[0].exists) {
Brain.Screen.print("Centrum X: %d, AIVision6.largestObject[0].centerX);
} else {
Brain.Screen.print("brak obiektu");
}

czekaj (0,5, sekundy);
}
}

Obiekty AIVision

Inną metodą pobierania danych jest określenie indeksu obiektu, z którego chcesz wyodrębnić dane. Migawka zwraca wykryte obiekty, przy czym największy obiekt ma najpierw indeks 0 i porządkuje obiekty od największego do najmniejszego.

int main() {
while (true) {
// Zrób migawkę, aby sprawdzić wykryte obiekty
AIVision6.takeSnapshot(BlueBox);

// Wyczyść ekran/zresetuj, abyśmy mogli wyświetlić nowe informacje
Brain.Screen.clearScreen();
Mózg.Screen.setCursor(1, 1);

// Jeśli znaleziono obiekty, wydrukuj lokalizację
if (AIVision6.objects[0].exists) {
Brain.Screen.print("Centrum X: %d, AIVision6.objects[0].centerX);
} else {
Brain.Screen.print("brak obiektu");
}

czekaj (0,5, sekundy);
}
}

Wybierz, jakie dane mają zostać pobrane z obiektu

Z każdego obiektu można wywołać osiem właściwości.

  • .wysokość
  • .szerokość
  • .centrumX
  • .centrumY
  • .pochodzenieX
  • .pochodzenieY
  • .kąt
  • .istnieje

.wysokość

Właściwość .height zwraca wysokość wykrytego obiektu w pikselach.

Użyj tego kodu, aby zwrócić właściwość .height:

AIVision6.objects[0].wysokość

Właściwość .height zwróci wartość z zakresu od 0 do 240 pikseli.

.szerokość

Właściwość .width zwraca szerokość wykrytego obiektu w pikselach.

Użyj tego kodu, aby zwrócić właściwość .width:

AIVision6.objects[0].width

Właściwość .width zwróci wartość z zakresu od 0 do 320.

.centrumX

Właściwość podaje współrzędną X środka wykrytego podpisu wizualnego.

Użyj tego kodu, aby zwrócić właściwość .centerX:

AIVision6.objects[0].centerX

Właściwość .centerX zwróci liczbę z zakresu od 0 do 320.

.centrumY

Właściwość podaje współrzędną Y środka wykrytego podpisu wizualnego.

Użyj tego kodu, aby zwrócić właściwość .centerY:

AIVision6.objects[0].centerY

Właściwość .centerY zwróci liczbę z zakresu od 0 do 240.

.pochodzenieX

Właściwość .originX raportuje współrzędną X lewego górnego rogu wykrytego podpisu wizualnego.

Użyj tego kodu, aby zwrócić właściwość .originX:

AIVision6.objects[0].originX

Właściwość .originXzwróci liczbę z zakresu od 0 do 320.

.pochodzenieY

Właściwość .originY raportuje współrzędną Y lewego górnego rogu wykrytego podpisu wizualnego.

Użyj tego kodu, aby zwrócić właściwość .originY:

AIVision6.objects[0].originY

Właściwość .originYzwróci liczbę z zakresu od 0 do 240.

.kąt

Właściwość .angle zwraca wartość kąta kodu koloru .

Użyj tego kodu, aby zwrócić właściwość .angle:

AIVision6.objects[0].kąt

Właściwość .angle zwraca wykrytą orientację kodu koloru w zakresie od 0 do 359,99 stopni.

.istnieje

.exists to właściwość logiczna, która zwraca wartość true, jeśli jest to prawidłowy obiekt. 

Zwróci wartość false, jeśli obiekt jest nieprawidłowy, na przykład w przypadku użycia ujemnej liczby całkowitej. Jeśli obiekt jest nieprawidłowy, wszystkie inne właściwości zwrócą 0 jako wartość.

int main() {
while (true) {
// Zrób migawkę, aby sprawdzić wykryte obiekty
AIVision6.takeSnapshot(BlueBox);

// Wyczyść ekran/zresetuj, abyśmy mogli wyświetlić nowe informacje
Brain.Screen.clearScreen();
Mózg.Screen.setCursor(1, 1);

// Jeśli znaleziono obiekty, wydrukuj lokalizację
if (AIVision6.objects[0].exists) {
Brain.Screen.print("Centrum X: %d, AIVision6.objects[0].centerX);
} else {
Brain.Screen.print("brak obiektu");
}

czekaj (0,5, sekundy);
}
}

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

Last Updated: