Kódování s využitím AI Vision Sensor ve VEXcode EXP C++

Ujistěte se, že máte u senzoru AI Vision nakonfigurováno barevných podpisů a barevných kódů , aby je bylo možné použít s vašimi bloky. Chcete-li se dozvědět více o tom, jak je nakonfigurovat, můžete si přečíst níže uvedené články:

Senzor AI Vision dokáže také detekovat klasifikace AI a AprilTags. Chcete-li se dozvědět, jak tyto režimy detekce povolit, přejděte sem:

Chcete-li se dozvědět více podrobností o těchto jednotlivých příkazech a o tom, jak je používat ve VEXcode, přejděte na stránky API.


Získejte vizuální data pomocí senzoru s umělou inteligencí

Každý příkaz senzoru AI Vision bude začínat názvem nakonfigurovaného senzoru AI Vision. Pro všechny příklady v tomto článku bude název použitého senzoru AI Vision Sensor AIVision.

poříditSnímek

Metoda takeSnapshot pořídí snímek toho, co AI Vision Sensor aktuálně vidí, a z tohoto snímku načte data, která pak lze použít v projektu. Při pořízení snímku je třeba určit, o jaký typ objektu má senzor AI Vision shromažďovat data:

  • ABarevný podpis neboBarevný kód
    • Tyto vizuální podpisy začínají názvem senzoru AI Vision, dvojitým podtržítkem a poté názvem vizuálního podpisu, například: AIVision1__Blue.
  • Klasifikace AI - aivision::ALL_AIOBJS
  • dubenŠtítky- aivision::ALL_TAGS

Pořízením snímku se vytvoří pole všech detekovaných objektů, které jste zadali. Například, pokud byste chtěli detekovat „modrou“ barevnou signaturu a senzor AI Vision Sensor detekoval 3 různé modré objekty, data ze všech tří by se vložila do pole.

V tomto příkladu je pořízen snímek „modré“ barevné signatury ze senzoru AI Vision s názvem AIVision1. Zobrazuje počet detekovaných objektů v poli a každých 0,5 sekundy pořizuje nový snímek.

while (true) {
// Získá snímek všech objektů modré barvy.
AIVision.takeSnapshot(AIVision1__Blue);

// Před načtením dat zkontrolujeme, zda byl ve snímku detekován objekt.
Pokud (AIVision.objectCount > 0) {

Brain.Screen.clearScreen();
Brain.Screen.setCursor(1, 1);
Brain.Screen.print(AIVision1.objectCount);
}
wait(5, ms);
}

objekty

Každý objekt ze snímku má různé vlastnosti, které lze použít k hlášení informací o daném objektu. Metoda objects umožňuje přístup k těmto vlastnostem.

Dostupné vlastnosti jsou následující:

  • identifikační číslo
  • střed X a střed Y
  • původX a původY
  • šířka
  • výška
  • úhel
  • existuje
  • skóre

Pro přístup k vlastnosti objektu použijte název senzoru AI Vision, následovaný metodou objektu a nakonec indexem objektu.

Index objektu označuje vlastnost, kterou konkrétní objekt chcete načíst. Po pořízení snímku senzor AI Vision automaticky seřadí objekty podle velikosti. Největšímu objektu je přiřazen index 0, menší objekty dostávají vyšší indexová čísla.

Například volání šířky největšího objektu by bylo AIVision1.objects[0].width.

identifikační číslo

Vlastnost id je k dispozici pouze pro AprilTags a klasifikace AI.

Nástroj AI Vision Utility sleduje tři AprilTagy. Každá značka je identifikována, umístěna a ohraničena, což naznačuje, že ji systém sleduje. ID AprilTag v tomto příkladu mají hodnoty 0, 3 a 9.

ProAprilTagpředstavuje vlastnost id detekovanéidentifikační číslo AprilTag(s)

Identifikace konkrétních AprilTags umožňuje selektivní navigaci. Svého robota můžete naprogramovat tak, aby se pohyboval směrem k určitým značkám, zatímco jiné ignoroval, a efektivně je tak využíval jako ukazatele pro automatickou navigaci.

Nástroj AI Vision sleduje čtyři objekty, dva BuckyBally a dva Ringy. Každý objekt je identifikován, lokalizován a označen okrajem, což naznačuje, že jej systém sleduje. Nástroj si zaznamená ID objektu, v tomto příkladu je to červená koule, modrá koule, zelený kruh a červený kruh.

Proklasifikací AIpředstavuje vlastnost id specifický typ detekované klasifikace AI.

Identifikace specifických Klasifikace umělé inteligenceumožňuje robotovi soustředit se pouze na konkrétní objekty, například se chtít pohybovat pouze směrem k červenému Buckyballu, nikoli k modrému.

Další informace o duben, štítcích a , klasifikacích AI a o tom, jak povolit jejich detekci v nástroji AI Vision Utility, naleznete v těchto článcích.

střed X a střed Y

Toto jsou středové souřadnice detekovaného objektu v pixelech.

Zobrazen je senzor AI Vision, který sleduje modrý Buckyball. Buckyball má kolem sebe sledovací obdélník a popisek výše ukazuje, že má pozici X 176 a pozici Y 117. Střed sledovacího obdélníku je zvýrazněn, aby se ukázalo, že poloha je měřena od středu.

Souřadnice CenterX a CenterY pomáhají s navigací a určováním polohy. Snímač AI Vision má rozlišení 320 x 240 pixelů.

Je zobrazen senzor AI Vision, který sleduje dvě modré kostky. Kostky mají kolem sebe sledovací obdélníky a jedna je mnohem blíže k fotoaparátu. Bližší má pozici Y 184 a vzdálenější má pozici Y 70.

Vidíte, že objekt blíže k senzoru AI Vision bude mít nižší souřadnici CenterY než objekt, který je dále.

V tomto příkladu, protože střed pohledu senzoru AI Vision je (160, 120), robot se bude otáčet doprava, dokud souřadnice středu X detekovaného objektu nebude větší než 150 pixelů, ale menší než 170 pixelů.

while (true) {
  // Získá snímek všech objektů modré barvy.
  AIVision.takeSnapshot(AIVision__Blue);

  // Před načtením dat zkontrolujeme, zda byl ve snímku detekován objekt.
  pokud (AIVision.objectCount > 0) {

    pokud (AIVision.objects[0].centerX > 150.0 && 170.0 > AIVision.objects[0].centerX) {
      Pohon.zatáčení(vpravo);
    } else {
      Pohon.zastavení();
    }
  }
  čekání(5, ms);
}

původX a původY

OriginX a OriginY jsou souřadnice v levém horním rohu detekovaného objektu v pixelech.

Zobrazen je senzor AI Vision, který sleduje modrý Buckyball. Buckyball má kolem sebe sledovací obdélník a popisek výše ukazuje, že má pozici X 176 a pozici Y 117. Levý horní roh sledovacího obdélníku je zvýrazněn, aby se ukázalo, že počáteční poloha se měří od jeho levého horního rohu.

Souřadnice OriginX a OriginY pomáhají s navigací a určováním polohy. Kombinací této souřadnice se šířkou a výškou objektu můžete určit velikost ohraničovacího rámečku objektu. To může pomoci se sledováním pohybujících se objektů nebo s navigací mezi objekty.

šířka a výška

Toto je šířka nebo výška detekovaného objektu v pixelech.

Zobrazen je senzor AI Vision, který sleduje modrý Buckyball. Buckyball má kolem sebe sledovací obdélník a výše uvedený popisek ukazuje, že má šířku 80 pixelů a výšku 78 pixelů. Červené šipky zvýrazňují sledovací obdélník a ukazují jeho šířku a výšku.

Rozměry šířky a výšky pomáhají identifikovat různé objekty. Například Buckyball bude mít větší výšku než Ring.

Je zobrazen senzor AI Vision, který sleduje dvě modré kostky. Kostky mají kolem sebe sledovací obdélníky a jedna je mnohem blíže k fotoaparátu. Bližší má šířku 144 a výšku 113 a vzdálenější má šířku 73 a výšku 84.

Šířka a výška také označují vzdálenost objektu od senzoru AI Vision. Menší rozměry obvykle znamenají, že je objekt dále, zatímco větší rozměry naznačují, že je blíž.

V tomto příkladu se pro navigaci používá šířka objektu. Robot se bude přibližovat k objektu, dokud jeho šířka nedosáhne určité velikosti, než se zastaví.

while (true) {
  // Získá snímek všech objektů Blue.
  AIVision.takeSnapshot(AIVision1__Blue);

  // Před načtením dat zkontrolujeme, zda byl ve snímku detekován objekt.
  pokud (AIVision.objectCount > 0) {

    pokud (AIVision.objects[0].width < 250.0) {
      Pohon.drive(vpřed);
    } else {
      Pohon.stop();
    }
  }
  čekání(5, ms);
}

úhel

Animace červeného a zeleného čtverce otáčejících se společně pro demonstraci 360 stupňů úhlové hodnoty.

Vlastnost úhlu je k dispozici pouze probarevné kódy a, AprilTags
.
Toto představuje, zda je detekovaný barevný kód nebo AprilTag orientován odlišně.

Zobrazuje se senzor AI Vision, který sleduje barevný kód – zelenou a poté modrou. Videozáznam ukazuje zelenou kostku naskládanou na modré kostce. Hodnota úhlu barevného kódu je zvýrazněna a ukazuje 87 stupňů, což znamená, že barevný kód je orientován svisle.

Můžete vidět, zda je robot orientován odlišně vzhledem kBarevný kód neboAprilTag , a podle toho činit navigační rozhodnutí.

Zobrazuje se senzor AI Vision, který sleduje barevný kód – zelenou a poté modrou. Videozáznam ukazuje zelenou kostku vedle modré kostky, ale ve srovnání se senzorem jsou v neobvyklém úhlu. Hodnota úhlu barevného kódu je zvýrazněna a je 0 stupňů, což znamená, že úhel barevného kódu nelze přečíst.

Například pokud není barevný kód detekován ve správném úhlu, pak robot nemusí být schopen objekt, který představuje, správně zvednout.

skóre

Vlastnost skóre se používá při detekciklasifikací AI pomocí senzoru AI Vision.

Nástroj AI Vision sleduje čtyři objekty, dva BuckyBally a dva Ringy. Každý objekt je identifikován, lokalizován a označen okrajem, což naznačuje, že jej systém sleduje. Nástroj také uvádí skóre klasifikace AI každého objektu, v tomto příkladu je každé skóre 99 %.

Skóre spolehlivosti udává, jak si je senzor AI Vision jistý svou detekcí. Na tomto obrázku je 99% jistota v identifikaci klasifikací umělé inteligence těchto čtyř objektů. Toto skóre můžete použít k zajištění toho, aby se váš robot zaměřoval pouze na vysoce spolehlivé detekce.

existuje

Vlastnost exists se používá k detekci

To vám umožní zkontrolovat, zda byly v předchozím snímku detekovány nějaké detekované objekty. Tato vlastnost vrátí hodnotu True, pokud objekt existuje, a hodnotu False, pokud objekt neexistuje.


Počet objektů

Metoda objectCount vrací počet detekovaných objektů v posledním snímku.

Je zobrazen senzor AI Vision, který sleduje dvě modré kostky. Kostky mají kolem sebe sledovací obdélníky a jedna je mnohem blíže k fotoaparátu.

V tomto příkladu byly detekovány dva objekty sbarevnou charakteristikou „Modrá“. Oba budou vloženy do pole při použití metody takeSnapshot.

Tento úryvek kódu průběžně aktualizuje EXP Brain o počet detekovaných objektů. Na základě uvedeného příkladu bude opakovaně odesílat hodnotu 2, což znamená, že byly detekovány dva objekty.

while (true) {
// Získání snímku všech objektů Blue.
AIVision.takeSnapshot(AIVision__Blue);

Brain.Screen.clearScreen();
Brain.Screen.setCursor(1, 1);

// Před načtením dat zkontrolujeme, zda byl ve snímku detekován objekt.
pokud (AIVision.objectCount > 0) {
Brain.Screen.print(AIVision1.objectCount);
}
wait(5, ms);
}

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

Last Updated: