Programmierung mit dem KI-Vision-Sensor in VEXcode V5 Python

Stellen Sie sicher, dass Sie Farbsignaturen und Farbcodes mit Ihrem KI-Vision-Sensor konfiguriert haben, damit diese mit Ihren Blöcken verwendet werden können. Um mehr darüber zu erfahren, wie Sie diese konfigurieren können, lesen Sie die folgenden Artikel:

Der KI-Vision-Sensor kann auch KI-Klassifizierungen und AprilTags erkennen. Um zu erfahren, wie Sie diese Erkennungsmodi aktivieren, klicken Sie hier:

Um mehr über die einzelnen Befehle und deren Verwendung in VEXcode zu erfahren, besuchen Sie die API-Website.


Visuelle Daten mit dem KI-Vision-Sensor erfassen

Jeder Befehl des KI-Vision-Sensors beginnt mit dem Namen des konfigurierten KI-Vision-Sensors. In allen Beispielen dieses Artikels wird der Name des verwendeten KI-Vision-Sensors ai_vision_1lauten.

Schnappschuss aufnehmen

Die Methode take_snapshot erstellt ein Bild von dem, was der KI-Vision-Sensor aktuell sieht, und extrahiert Daten aus diesem Snapshot, die dann in einem Projekt verwendet werden können. Wenn eine Momentaufnahme erstellt wird, müssen Sie angeben, von welchem Objekttyp der KI-Vision-Sensor Daten erfassen soll:

  • AFarbsignatur oderFarbcode
    • Diese visuellen Signaturen beginnen mit dem Namen des KI-Vision-Sensors, gefolgt von zwei Unterstrichen und dem Namen der visuellen Signatur, zum Beispiel: ai_vision_1__Blue.
  • KI-Klassifizierungen - AiVision.ALL_AIOBJS
  • AprilTags- AiVision.ALL_TAGS

Durch das Erstellen eines Snapshots wird ein Tupel aller erkannten Objekte erzeugt, die Sie angegeben haben. Wenn Sie beispielsweise eine "Blau" Farbsignaturerkennen möchten und der KI-Vision-Sensor 3 verschiedene blaue Objekte erkennt, werden die Daten aller drei in das Tupel eingefügt.

In diesem Beispiel speichert die Variable vision_objects ein Tupel, das die erkannten "Purple"Farbsignaturen vom KI-Vision-Sensor mit dem Namen ai_vision_1enthält. Es zeigt die Anzahl der erkannten Objekte an und erstellt alle 0,5 Sekunden eine neue Momentaufnahme.

while True: 
# Erstelle eine Momentaufnahme aller violetten Farbsignaturen und speichere sie in vision_objects.
vision_objects = ai_vision_1.take_snapshot(ai_vision_1__Purple)

# Vor dem Abrufen der Daten prüfen, ob im Snapshot ein Objekt erkannt wurde.
if vision_objects[0].exists == True

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

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

Objekteigenschaften

Jedes Objekt in einem Snapshot besitzt unterschiedliche Eigenschaften, die zur Ermittlung von Informationen über dieses Objekt verwendet werden können. Folgende Objekte stehen zur Verfügung:

  • Ausweis
  • centerX und centerY
  • UrsprungX und UrsprungY
  • Breite
  • Höhe
  • Winkel
  • Punktzahl
  • existiert

Um auf eine Objekteigenschaft zuzugreifen, verwendet man den Variablennamen, der das Tupel speichert, gefolgt vom Objektindex.

Der Objektindex gibt an, welche spezifische Eigenschaft des Objekts Sie abrufen möchten. Nach der Aufnahme eines Fotos sortiert der KI-Vision-Sensor die Objekte automatisch nach Größe. Dem größten Objekt wird der Index 0 zugewiesen, kleinere Objekte erhalten höhere Indexnummern.

Beispielsweise würde der Aufruf der Breite des größten Objekts innerhalb der Variable vision_objects wie lauten: [0].width.

Ausweis

Die Eigenschaft id ist nur für AprilTags und KI-Klassifizierungen verfügbar.

Drei quadratische Identifikationsmarkierungen mit den IDs 0, 9 und 3, jeweils mit entsprechenden Koordinaten und Größenangaben in weißer Schrift. ID 0 befindet sich links, ID 9 rechts und ID 3 unten in der Mitte. Jeder Marker hat ein einzigartiges schwarz-weißes Muster innerhalb eines Quadrats.

Für einenAprilTagstellt die id Eigenschaft die erkannte(n)AprilTag(s) ID-Nummer(n) dar.

Die Identifizierung spezifischer AprilTags ermöglicht eine selektive Navigation. Sie können Ihren Roboter so programmieren, dass er sich auf bestimmte Markierungen zubewegt, während er andere ignoriert, und diese somit effektiv als Wegweiser für die automatisierte Navigation nutzen.

Auf dem Bild sind zwei Kugeln und zwei Ringe identifiziert, mit Beschriftungen, die ihre Position, Größe und Punktzahl angeben. Der rote Ball befindet sich links, der blaue Ball rechts, der grüne Ring unten links und der rote Ring unten rechts. Jedes Objekt ist mit einem weißen Rahmen umrandet, und Details wie X- und Y-Koordinaten, Breite, Höhe und eine Punktzahl von 99 % werden in weißer Schrift angezeigt.

BeiKI-Klassifizierungenstellt die Eigenschaft id den spezifischen Typ der erkannten KI-Klassifizierung dar.

Die Identifizierung spezifischer KI-Klassifizierungenermöglicht es dem Roboter, sich nur auf bestimmte Objekte zu konzentrieren, z. B. nur auf einen roten Buckyball zuzusteuern, nicht auf einen blauen.

Weitere Informationen zu AprilTags und AI Classifications und wie deren Erkennung im AI Vision Utility aktiviert werden kann, finden Sie in diesen Artikeln.

centerX und centerY

Dies sind die Mittelpunktkoordinaten des erkannten Objekts in Pixeln.

Ein blauer Buckyball wird von einem Computer-Vision-System verfolgt. Das Objekt ist mit einem weißen Quadrat umrandet, und innerhalb der Umrandung befindet sich ein kleineres rotes Quadrat, das ein zentriertes weißes Kreuz umschließt. In der oberen linken Ecke des Bildes befindet sich eine Beschriftung, die darauf hinweist, dass das Objekt blau ist, mit den Koordinaten X:176, Y:117 und den Abmessungen B:80, H:78.

Die CenterX- und CenterY-Koordinaten helfen bei der Navigation und Positionierung. Der KI-Vision-Sensor hat eine Auflösung von 320 x 240 Pixeln.

Zwei blaue, würfelförmige Objekte, die von einem Bildverarbeitungssystem verfolgt werden. Das obere Objekt ist mit den Koordinaten X:215, Y:70 und den Abmessungen W:73, H:84 beschriftet und mit einer weißen Umrandung und einem zentrierten weißen Kreuz versehen. Das untere Objekt ist mit den Koordinaten X:188, Y:184 und den Abmessungen W:144, H:113 beschriftet und zusätzlich weiß umrandet mit einem zentrierten weißen Kreuz.

Man kann erkennen, dass ein Objekt, das näher am KI-Vision-Sensor ist, eine niedrigere CenterY-Koordinate hat als ein Objekt, das weiter entfernt ist.

Da sich in diesem Beispiel der Mittelpunkt des Sichtfelds des KI-Vision-Sensors bei (160, 120) befindet, dreht sich der Roboter nach rechts, bis die CenterX-Koordinate eines erkannten Objekts größer als 150 Pixel, aber kleiner als 170 Pixel ist.

while True:
# Erstelle eine Momentaufnahme aller blauen Farbsignaturen und speichere sie in vision_objects.
vision_objects = ai_vision_1.take_snapshot(ai_vision_1__Blue)

# Vor dem Abrufen der Daten prüfen, ob im Snapshot ein Objekt erkannt wurde.
if vision_objects[0].exists == True

# Prüfen, ob sich das Objekt nicht im Zentrum des Sichtfelds des KI-Vision-Sensors befindet.
if vision_objects[0].centerX > 150 and 170 > vision_objects[0].centerX:

# Drehe dich weiter nach rechts, bis sich das Objekt in der Mitte des Sichtfelds befindet.
drivetrain.turn(RIGHT)
else:
drivetrain.stop()
wait(5, MSEC)

UrsprungX und UrsprungY

OriginX und OriginY sind die Koordinaten in der oberen linken Ecke des erkannten Objekts in Pixeln.

Ein blauer Buckyball wird von einem Bildverarbeitungssystem verfolgt. Das Objekt ist von einem weißen Rahmen umgeben, innerhalb dessen sich mittig ein weißes Kreuz befindet. Die Beschriftung oben links gibt die Farbe des Objekts als blau an, zusammen mit den Koordinaten X:176, Y:117 und den Abmessungen W:80, H:78. Ein kleines rotes Quadrat markiert die linke obere Ecke des Objekts.

Die Koordinaten OriginX und OriginY helfen bei der Navigation und Positionierung. Durch die Kombination dieser Koordinate mit der Breite und Höhe des Objekts lässt sich die Größe des Begrenzungsrahmens des Objekts bestimmen. Dies kann beim Verfolgen sich bewegender Objekte oder beim Navigieren zwischen Objekten hilfreich sein.

Breite und Höhe

Dies ist die Breite oder Höhe des erkannten Objekts in Pixeln.

Das Bild zeigt einen blauen Buckyball, der von einem weißen quadratischen Umriss umgeben ist. In der oberen linken Ecke befindet sich eine Beschriftung, die darauf hinweist, dass es sich um ein blaues Objekt handelt, mit den Koordinaten X:176, Y:117 und den Abmessungen B:80, H:78. Rote Pfeile markieren die Breite und Höhe des Objekts.

Die Breiten- und Höhenangaben helfen bei der Identifizierung verschiedener Objekte. Ein Buckyball ist beispielsweise höher als ein Ring.

Zwei blaue, würfelförmige Objekte werden von einem visuellen Erkennungssystem verfolgt. Der obere Würfel hat eine weiße Umrandung und eine Beschriftung, die seine Position mit X:215, Y:70 und die Abmessungen W:73, H:84 angibt. Der untere Würfel hat eine ähnliche weiße Umrandung mit der Beschriftung X:188, Y:184 und den Abmessungen W:144, H:113. Jeder Würfel hat ein zentriertes weißes Kreuz, das wahrscheinlich den Fokuspunkt für die Verfolgung anzeigt. Die Beschriftungen heben die Messwerte und Tracking-Daten für jedes Objekt hervor.

Breite und Höhe geben auch die Entfernung eines Objekts vom KI-Vision-Sensor an. Kleinere Messwerte bedeuten in der Regel, dass das Objekt weiter entfernt ist, während größere Messwerte darauf hindeuten, dass es näher ist.

In diesem Beispiel wird die Breite des Objekts zur Navigation verwendet. Der Roboter nähert sich dem Objekt so lange, bis die Breite eine bestimmte Größe erreicht hat, bevor er anhält.

while True:
# Erstelle eine Momentaufnahme aller blauen Farbsignaturen und speichere sie in vision_objects.
vision_objects = ai_vision_1.take_snapshot(ai_vision_1__Blue)

# Vor dem Abrufen der Daten prüfen, ob im Snapshot ein Objekt erkannt wurde.
if vision_objects[0].exists == True

# Prüfen, ob sich das größte Objekt in der Nähe des KI-Vision-Sensors befindet, indem seine Breite gemessen wird.
Wenn vision_objects[0].width < 250:

# Fahre näher an das Objekt heran, bis es breiter als 250 Pixel ist.
drivetrain.drive(FORWARD)
else:
drivetrain.stop()

wait(5, MSEC)

Winkel

Ein rotierendes GIF, das rote und grüne Blöcke zeigt. Wenn die Blöcke von Rot nach Grün perfekt horizontal ausgerichtet sind, wird ein Winkel von 0 Grad angezeigt. Wenn der rote Block senkrecht über dem grünen Block steht, beträgt der Winkel 90 Grad. Wenn die Blöcke horizontal von grün nach rot angeordnet sind, beträgt der Winkel 180 Grad. Wenn der grüne Block senkrecht über dem roten Block steht, beträgt der Winkel 20 Grad.

Die Eigenschaft ° Winkel ist nur für die Farbcodesund(AprilTags verfügbar

Dies bedeutet, dass der erkannte Farbcode (AprilTagoder ausgerichtet ist.

Ein Stapel aus zwei Würfeln, einem grünen oben und einem blauen unten, wird von einem Bildverarbeitungssystem verfolgt. Beide Würfel sind von einem weißen Rahmen umgeben, auf dem grünen Würfel befindet sich mittig ein weißes Kreuz. Die Beschriftung am unteren Bildrand zeigt Green_Blue A:87° an und gibt die erkannten Farben sowie eine Winkelmessung an. Darunter sind die Koordinaten als X:117, Y:186 mit den Abmessungen W:137, H:172 angegeben, die die Position und Größe der gestapelten Würfel im Rahmen darstellen.

Sie können überprüfen, ob der Roboter in Bezug auf den Farbcode oderAprilTag unterschiedlich ausgerichtet ist und entsprechend Navigationsentscheidungen treffen.

Zwei Würfel, ein grüner und ein blauer, werden nebeneinander platziert und von einem Bildverarbeitungssystem verfolgt. Beide Würfel sind von einem weißen Rahmen umgeben, in dessen Mitte sich ein weißes Kreuz befindet. Die Beschriftung oben links gibt Green_Blue A:0° an und bezieht sich auf die erkannten Farben und eine Winkelmessung. Darunter werden die Koordinaten als X:150, Y:102 mit den Abmessungen W:179, H:109 angezeigt, die die Position und Größe der Würfel innerhalb des Rahmens darstellen.

Wird beispielsweise einFarbcode nicht im richtigen Winkel erkannt, kann das von ihm dargestellte Objekt möglicherweise nicht richtig vom Roboter aufgenommen werden.

Punktzahl

Die Eigenschaft Score wird bei der Erkennung vonKI-Klassifizierungen mit dem KI-Vision-Sensor verwendet.

Das Bild zeigt vier Objekte, die von einem Bildverarbeitungssystem verfolgt werden: zwei Kugeln und zwei Ringe. Der rote Ball ist mit den Koordinaten X:122, Y:84, W:67, H:66 und einer Punktzahl von 99% gekennzeichnet. Der blaue Ball hat die Werte X:228, Y:86, W:70, H:68 und eine Punktzahl von 99%. Der grüne Ring hat die Koordinaten X:109, Y:186, W:98, H:92 und eine Punktzahl von 99%. Der rote Ring ist mit X:259, Y:187, W:89, H:91 beschriftet und hat eine Punktzahl von 99%. Jedes Objekt ist weiß umrandet, was die Genauigkeit der Verfolgung verdeutlicht.

Der Konfidenzwert gibt an, wie sicher sich der KI-Vision-Sensor bei seiner Erkennung ist. In diesem Bild ist die KI-Klassifizierung dieser vier Objekte zu 99 % sicher. Mithilfe dieser Punktzahl können Sie sicherstellen, dass sich Ihr Roboter nur auf Erkennungen mit hoher Treffsicherheit konzentriert.

existiert

Die Eigenschaft exists wird verwendet, um festzustellen, ob eine bestimmte visuelle Signatur im zuletzt aufgenommenen Snapshot erkannt wurde.

Damit können Sie überprüfen, ob im vorherigen Snapshot bereits Objekte erkannt wurden. Diese Eigenschaft gibt True zurück, wenn ein Objekt existiert, und False, wenn das Objekt nicht existiert.

 

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

Last Updated: