Verwendung des AI Vision Sensors in VEXcode EXP Python

Dieser Artikel bietet einen Überblick über die verfügbaren Funktionen zur Verwendung des AI Vision Sensors in Python sowie einfache Anweisungen zu deren Verwendung. Sie lernen die vier Schritte im Prozess der Verwendung des AI Vision Sensors kennen – Daten abrufen, die Menge der erhaltenen Objekte sehen, auswählen, welches Objekt aus den Daten verwendet werden soll und welche Daten aus dem Objekt gezogen werden sollen.

Erhalten Sie visuelle Daten mit dem AI Vision Sensor

Um Informationen aus seiner Umgebung zu sammeln, macht der AI Vision Sensor ein Bild von dem, was er gerade betrachtet. Alle Objekte, die mit der angegebenenVisual Signature identifiziert werden, werden in ein Tupel eingefügt, das dann von anderen Funktionen verwendet werden kann.

Schnappschuss machen

Wenn Sie den Befehl take_snapshot verwenden, müssen Sie eine Variable erstellen, um das erstellte Tupel zu speichern. Allevisuellen Signaturen müssen konfiguriert werden, bevor sie als Parameter verwendet werden können. Geben Sie bei Verwendung der Funktion den Signaturparameter als Sensornamen mit doppeltem Unterstrich und anschließend den Namen der visuellen Signatur an.Dienstprogramm 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)

Die Optionen für Ihre Visuelle Signatur werden auch automatisch in VEXcode eingefügt, nachdem Sie mit der Eingabe des Anfangs der Klammern begonnen haben.

Beispiel

In diesem Beispiel speichert die Variable vision_objects ein Tupel mit den erkannten visuellen Signaturen vom AI Vision Sensor namens ai_vision_6. Es zeigt die Anzahl der erkannten Objekte an und erstellt alle 0,5 Sekunden einen neuen Schnappschuss.

while True: 

# Machen Sie einen Schnappschuss, um ein Tupel erkannter Objekte zu erstellen
vision_objects = ai_vision_6.take_snapshot(ai_vision_6__Blue)

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

brain.screen .print("object count:", len(vision_objects))
wait(0.5, SECONDS)

Bestimmen Sie, wie viele Objekte erkannt wurden

Der Befehl len kann mit Tupeln verwendet werden. Dies kann verwendet werden, um zu sehen, wie viele Objekte der Befehl take_snapshot im Tupel gespeichert hat.

Es empfiehlt sich, immer sicherzustellen, dass Sie ein Objekt erkannt haben, bevor Sie versuchen, Informationen aus dem Snapshot abzurufen. Verwenden Sie dazu den Befehl len mit der Variablen, die das Tupel speichert.

len(vision_objects) > 0

Beispiel

In diesem Beispiel speichert die Variable vision_objects ein Tupel mit den erkannten visuellen Signaturen vom AI Vision Sensor namens ai_vision_6. Es zeigt die Anzahl der erkannten Objekte an und erstellt alle 0,5 Sekunden einen neuen Schnappschuss. Wenn jedoch ein Objekt erkannt wurde, wird gedruckt, wie viele Objekte erkannt wurden.

while True: 
# Schnappschuss machen, um ein Tupel erkannter Objekte zu erstellen
vision_objects = ai_vision_6.take_snapshot(ai_vision_6__Blue)

# Bildschirm löschen/zurücksetzen, damit wir neue Informationen anzeigen können
brain.screen.clear_screen()
brain. screen.set_cursor(1, 1)

if len(vision_objects) > 0:
# Drucken, wie viele Objekte gefunden wurden
brain.screen.next_row()
brain.screen.print("object count:", len(vision_objects ))
warten(0,5, SEKUNDEN)

Durch die Verwendung des Befehls len mit dem Tupel können Sie auch sehen, wie viele Objekte erkannt wurden.

Wählen Sie aus, von welchem ​​Objekt Daten abgerufen werden sollen

Es gibt zwei Methoden zum Extrahieren von Daten aus dem Tupel. Ein Ansatz besteht darin, mithilfe der Funktion ai.vision.largest_object() Informationen direkt vom größten Objekt abzurufen, das bei der letzten Verwendung des Befehls take_snapshot erkannt wurde. Die andere Methode besteht darin, die spezifische Variable und den Objektindex anzugeben.

ai.vision.largest_object()

ai.vision.largest_object() ist eine Hilfsfunktion für den Zugriff auf das größte Objekt im Tupel, funktioniert jedoch nur mit dem aktuellsten Snapshot.

while True: 
# Schnappschuss machen, um ein Tupel erkannter Objekte zu erstellen
vision_objects = ai_vision_6.take_snapshot(ai_vision_6__Blue)

# Bildschirm löschen/zurücksetzen, damit wir neue Informationen anzeigen können
brain.screen.clear_screen()
brain. screen.set_cursor(1, 1)

# Überprüfen Sie, ob ein Objekt existiert, bevor Sie Daten abrufen
if len(vision_objects) > 0:
brain.screen.print(Center X: ", ai_vision.largest_object().centerX)
else :
brain.screen.print("no object")
wait(0.5, SECONDS)

In diesem Beispiel prüft der Code, ob ein Objekt vorhanden ist, bevor er die Funktion ai.vision.largest_object() verwendet, um die Eigenschaft .centerX des größten erkannten Objekts zurückzugeben und es zu drucken.

vision_objects[0]

Eine andere Methode, Daten aus einem Tupel abzurufen, besteht darin, die Variable, die das Tupel speichert, direkt aufzurufen. Geben Sie in Klammern den Index des Objekts an, aus dem Sie Daten extrahieren möchten. Das zurückgegebene Tupel von Objekten listet das größte Objekt immer zuerst bei Index 0 auf. Anschließend werden die Objekte vom größten zum kleinsten sortiert.

while True: 
# Schnappschuss machen, um ein Tupel erkannter Objekte zu erstellen
vision_objects = ai_vision_6.take_snapshot(ai_vision_6__Blue)

# Bildschirm löschen/zurücksetzen, damit wir neue Informationen anzeigen können
brain.screen.clear_screen()
brain. screen.set_cursor(1, 1)

# Überprüfen Sie, ob ein Objekt existiert, bevor Sie Daten abrufen
if len(vision_objects) > 0:
brain.screen.print(Center X: ", vision_object[0].centerX)
else:
brain.screen.print("no object")
wait(0.5, SECONDS)

In diesem Beispiel prüft der Code, ob ein Objekt vorhanden ist, bevor er die Funktion vision_object[0] verwendet, um die Eigenschaft .centerX des Indexobjekts 0 zurückzugeben und es zu drucken.

Wählen Sie aus, welche Daten aus einem Objekt abgerufen werden sollen

Von jedem Objekt können acht Eigenschaften aufgerufen werden.

  • .Höhe
  • .Breite
  • .centerX
  • .centerY
  • .originX
  • .originY
  • .Winkel
  • .existiert

.Höhe

Die Eigenschaft .height gibt zurück, wie hoch das erkannte Objekt in Pixeln ist.

Verwenden Sie diesen Code, um die Eigenschaft .height zurückzugeben:

vision_objects[0].height

Die Eigenschaft .height gibt einen Wert zwischen 0 und 240 Pixel zurück.

.Breite

Die Eigenschaft .width gibt zurück, wie breit das erkannte Objekt in Pixeln ist.

Verwenden Sie diesen Code, um die Eigenschaft .width zurückzugeben:

vision_objects[0].width

Die Eigenschaft .width gibt einen Wert zwischen 0 und 320 zurück.

.centerX

Die Eigenschaft .centerX gibt die X-Koordinate des Mittelpunkts der erkannten visuellen Signaturan.

Verwenden Sie diesen Code, um die Eigenschaft .centerX zurückzugeben:

vision_objects[0].centerX

Die Eigenschaft .centerX gibt eine Zahl zwischen 0 und 320 zurück.

.centerY

Die Eigenschaft .centerY gibt die Y-Koordinate der Mitte der erkannten visuellen Signaturan.

Verwenden Sie diesen Code, um die Eigenschaft .centerY zurückzugeben:

vision_objects[0].centerY

Die Eigenschaft .centerY gibt eine Zahl zwischen 0 und 240 zurück.

.originX

Die Eigenschaft .originX meldet die X-Koordinate der oberen linken Ecke der erkannten visuellen Signatur.

Verwenden Sie diesen Code, um die Eigenschaft .originX zurückzugeben:

vision_objects[0].originX

Die Eigenschaft .originXgibt eine Zahl zwischen 0 und 320 zurück.

.originY

Die Eigenschaft .originY meldet die Y-Koordinate der oberen linken Ecke der erkannten visuellen Signatur.

Verwenden Sie diesen Code, um die Eigenschaft .originY zurückzugeben:

vision_objects[0].originY

Die Eigenschaft .originYgibt eine Zahl zwischen 0 und 240 zurück.

.Winkel

Die Eigenschaft .angle gibt den Wert des Winkels des Farbcodes zurück.

Verwenden Sie diesen Code, um die Eigenschaft .angle zurückzugeben:

vision_objects[0].angle

Die Eigenschaft .angle gibt die Ausrichtung des erkannten -Farbcodes im Bereich von 0 bis 359,99 Grad zurück.

.existiert

.exists ist eine boolesche Eigenschaft, die true zurückgibt, wenn es sich um ein gültiges Objekt handelt. 

Es wird „false“ zurückgegeben, wenn das Objekt ungültig ist, beispielsweise wenn eine negative Ganzzahl verwendet wird. Wenn ein Objekt ungültig ist, geben alle anderen Eigenschaften Nullen als Wert zurück.

while True: 
# Machen Sie einen Schnappschuss, um ein Tupel erkannter Objekte zu erstellen
vision_objects = ai_vision_6.take_snapshot(ai_vision_6__Blue)
# Bildschirm löschen/zurücksetzen, damit wir neue Informationen anzeigen können
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" )
warten(0,1, SEKUNDEN)

In diesem Beispiel überprüft der Code die Eigenschaft .exists Wenn sie „true“ zurückgibt, gibt er den Eigenschaftswert .centerX an das Brain aus. Wenn die Eigenschaft .exists false zurückgibt, wird ausgegeben, dass kein Objekt vorhanden ist.

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

Last Updated: