KI-Vision-Sensor#
Einführung#
Der IQ AI Vision Sensor kann Objekte, Farben und AprilTag-IDs erkennen und verfolgen. Dadurch kann der Roboter seine Umgebung analysieren, Objekten folgen und auf Basis der erfassten visuellen Daten reagieren.
In den folgenden Beispielen wird der konfigurierte IQ AI Vision Sensor mit ai_vision_1bezeichnet, und die konfigurierten Farbsignaturobjekte, wie z. B. RED_BOX, werden in allen nachfolgenden Beispielen in dieser API-Dokumentation verwendet, wenn auf AiVision Klassenmethoden verwiesen wird.
Nachfolgend finden Sie eine Liste aller Methoden:
Getter – Daten vom IQ AI Vision Sensor abrufen.
take_snapshot— Erfasst Daten für eine bestimmte Signatur.installed— Gibt an, ob der IQ AI Vision Sensor mit dem IQ (2. Generation) Gehirn verbunden ist.
Eigenschaften — Objektdaten, die von take_snapshot zurückgegeben werden.
.exists— Gibt an, ob das Objekt in der aktuellen Erkennung existiert..width— Breite des erkannten Objekts..height— Höhe des erkannten Objekts..centerX— X-Position des Objektmittelpunkts..centerY— Y-Position des Objektmittelpunkts..angle— Ausrichtung des Farbcodes oder der AprilTag-ID..originX— X-Position der oberen linken Ecke des Objekts..originY— Y-Position der oberen linken Ecke des Objekts..id— Klassifizierung oder Tag-ID des Objekts..score— Konfidenzwert für KI-Klassifizierungen.
Konstruktoren – Sensoren manuell initialisieren und konfigurieren.
Getter#
take_snapshot#
take_snapshot filtert Daten aus dem Frame des IQ AI Vision Sensors zu einer einzelnen Signatur – einer gespeicherten Beschreibung von etwas, das der Sensor erkennen kann, wie z. B. ein vorab trainiertes Objekt, eine AprilTag-ID oder eine konfigurierte Farbsignatur oder ein Farbcode – und gibt ein Tupel zurück.
Farbsignaturen und Farbcodes müssen zuerst im Vision Utility konfiguriert werden, bevor sie mit dieser Methode verwendet werden können.
The tuple stores objects ordered from largest to smallest by width, starting at index 0. Each object’s properties can be accessed using its index. An empty tuple is returned if no matching objects are detected.
Usage:
ai_vision_1.take_snapshot(SIGNATURE)
Parameter |
Beschreibung |
|---|---|
|
Filtert den Datensatz so, dass nur Daten der angegebenen Signatur enthalten sind. Verfügbare Signaturen sind:
|
|
Optional. Legt die maximale Anzahl der zurückzugebenden Objekte zwischen 1 und 24 fest (Standardwert: 8). |
# Move forward if an object is detected
while True:
objects = ai_vision_1.take_snapshot(AiVision.ALL_AIOBJS)
if objects[0].exists:
drivetrain.drive_for(FORWARD, 50, MM)
wait(50, MSEC)
Note: The returned tuple can be sorted by any property, not just width, using Python’s sorted function. For example, sorting by AprilTag ID:
# Print each detected AprilTag ID in ascending order by ID
while True:
apriltags = sorted(ai_vision_1.take_snapshot(AiVision.ALL_TAGS), key=id)
for tag in apriltags:
print(tag.id)
wait(1, SECONDS)
Oder stattdessen nach Höhe sortieren:
# Print each detected AprilTag ID in ascending order by height
while True:
apriltags_by_height = sorted(ai_vision_1.take_snapshot(AiVision.ALL_TAGS), key=lambda tag: tag.height)
for tag in apriltags_by_height:
print(tag.height)
wait(1, SECONDS)
KI-Klassifizierungen#
Der IQ AI Vision Sensor kann verschiedene Objekte anhand bestimmter KI-Klassifizierungen erkennen. Je nachdem, welches KI-Klassifizierungsmodell bei der Konfiguration des AI Vision Sensors im Gerätefenster ausgewählt wird, werden unterschiedliche Objekte erkannt. Folgende Modelle stehen derzeit zur Verfügung:
Klassenzimmergegenstände
Identifikationsnummer |
KI-Klassifizierung |
|---|---|
0 |
|
1 |
|
2 |
|
3 |
|
4 |
|
5 |
|
6 |
|
7 |
|
8 |
|
VEX IQ Robotics Wettbewerb Mix & Match
Identifikationsnummer |
KI-Klassifizierung |
|---|---|
0 |
|
1 |
|
2 |
|
3 |
|
VEX IQ Robotics Wettbewerb – Jetzt durchstarten
Identifikationsnummer |
KI-Klassifizierung |
|---|---|
0 |
|
1 |
|
2 |
|
Farbsignaturen#
Eine Farbsignatur ist eine einzigartige Farbe, die der IQ AI Vision Sensor erkennen kann. Mithilfe dieser Signaturen kann der IQ AI Vision Sensor Objekte anhand ihrer Farbe erkennen und verfolgen. Sobald eine Farbsignatur konfiguriert ist, kann der Sensor Objekte mit dieser spezifischen Farbe in seinem Sichtfeld identifizieren. Farbsignaturen werden in Verbindung mit take_snapshot verwendet, um farbige Objekte in Echtzeit zu verarbeiten und zu erkennen.
Um eine konfigurierte Farbsignatur in einem Projekt zu verwenden, muss ihr Name aus dem Namen des Sensors, zwei Unterstrichen und dem Namen der Farbsignatur bestehen. Beispiel: ai_vision_1__RED_BOX.
# Display if any objects match the RED_BOX signature
while True:
brain.screen.set_cursor(1, 1)
brain.screen.clear_row(1)
# Change to any configured Color Signature
red_box = ai_vision_1.take_snapshot(ai_vision_1__RED_BOX)
if red_box[0].exists:
brain.screen.print("Color detected!")
wait(100, MSEC)
Farbcodes#
Ein Farbcode ist ein strukturiertes Muster aus Farbsignaturen in einer bestimmten Reihenfolge. Mithilfe dieser Codes kann der IQ AI Vision Sensor vordefinierte Farbmuster erkennen. Farbcodes eignen sich zur Identifizierung komplexer Objekte oder zur Erstellung eindeutiger Markierungen für die autonome Navigation.
Um einen konfigurierten Farbcode in einem Projekt zu verwenden, muss sein Name aus dem Namen des Sensors, zwei Unterstrichen und dem Namen des Farbcodes bestehen. Beispiel: ai_vision_1__BOX_CODE.
# Display if any objects match the BOX_CODE code
while True:
brain.screen.set_cursor(1, 1)
brain.screen.clear_row(1)
# Change to any configured Color Code
box_code = ai_vision_1.take_snapshot(ai_vision_1__BOX_CODE)
if box_code[0].exists:
brain.screen.print("Code detected!")
wait(100, MSEC)
installed#
installed gibt einen booleschen Wert zurück, der angibt, ob der IQ AI Vision Sensor aktuell mit dem IQ (2. Generation) Brain verbunden ist.
True— Der IQ AI Vision Sensor ist mit dem IQ (2. Generation) Gehirn verbunden.False— Der IQ AI Vision Sensor ist nicht mit dem IQ (2. Generation) Gehirn verbunden.
Usage:
ai_vision_1.installed()
Parameter |
Beschreibung |
|---|---|
Diese Methode hat keine Parameter. |
# Display a message if the AI Vision Sensor is connected
if ai_vision_1.installed():
brain.screen.print("Installed!")
Eigenschaften#
Es gibt zehn Eigenschaften, die zu jedem Objekt gehören, das nach der Verwendung von take_snapshot in einem tuple gespeichert wird.
Alle Eigenschaftswerte außer .id und .score beschreiben Position und Größe des erkannten Objekts im Sichtfeld des IQ AI Vision Sensors zum Zeitpunkt der Verwendung von take_snapshot Diese Werte werden in Pixeln gemessen, basierend auf der Auflösung des Sensors von 320 x 240 Pixeln.
.exists#
.exists gibt einen booleschen Wert zurück, der angibt, ob der Index im Tupel existiert oder nicht.
True— Der Index existiert.False— Der Index existiert nicht.
# Check if at least two objects are detected
while True:
brain.screen.clear_screen()
brain.screen.set_cursor(1, 1)
objects = ai_vision_1.take_snapshot(AiVision.ALL_AIOBJS)
if objects[0].exists:
if objects[1].exists:
brain.screen.print("At least 2")
else:
brain.screen.print("Less than 2")
wait(50, MSEC)
.width#
.width gibt die Breite des erkannten Objekts in Pixeln zurück, eine ganze Zahl zwischen 1 und 320.
# Approach an object until it's at least 100 pixels wide
while True:
objects = ai_vision_1.take_snapshot(AiVision.ALL_AIOBJS)
if objects[0].exists:
if objects[0].width < 100:
drivetrain.drive(FORWARD)
else:
drivetrain.stop()
wait(50, MSEC)
.height#
.height gibt die Höhe des erkannten Objekts in Pixeln zurück, eine ganze Zahl zwischen 1 und 240.
# Approach an object until it's at least 90 pixels tall
while True:
objects = ai_vision_1.take_snapshot(AiVision.ALL_AIOBJS)
if objects[0].exists:
if objects[0].height < 90:
drivetrain.drive(FORWARD)
else:
drivetrain.stop()
wait(50, MSEC)
.centerX#
.centerX gibt die x-Koordinate des Mittelpunkts des erkannten Objekts in Pixeln zurück, eine ganze Zahl zwischen 0 und 320.
# Turn until an object is directly in front of the sensor
drivetrain.set_turn_velocity(10, PERCENT)
drivetrain.turn(RIGHT)
while True:
objects = ai_vision_1.take_snapshot(AiVision.ALL_AIOBJS)
if objects[0].exists:
if 140 < objects[0].centerX < 180:
drivetrain.stop()
wait(10,MSEC)
.centerY#
.centerY gibt die y-Koordinate des Mittelpunkts des erkannten Objekts in Pixeln zurück, eine ganze Zahl zwischen 0 und 240.
# Approach an object until the object's center is
# high enough in the field of view
while True:
objects = ai_vision_1.take_snapshot(AiVision.ALL_AIOBJS)
if objects[0].exists:
if objects[0].centerY < 150:
drivetrain.drive(FORWARD)
else:
drivetrain.stop()
wait(50, MSEC)
.angle#
.angle gibt die Orientierung des erkannten Farbcodes oder der AprilTag-ID in Grad zurück, eine ganze Zahl zwischen 0 und 359.
# Turn left or right depending on how a
# configured Color Code is rotated
while True:
box_code = ai_vision_1.take_snapshot(ai_vision_1__BOX_CODE)
if box_code[0].exists:
if 50 < box_code[0].angle < 100:
drivetrain.turn(RIGHT)
elif 270 < box_code[0].angle < 330:
drivetrain.turn(LEFT)
else:
drivetrain.stop()
else:
drivetrain.stop()
wait(50, MSEC)
.originX#
.originX gibt die x-Koordinate der oberen linken Ecke des Begrenzungsrahmens des erkannten Objekts in Pixeln zurück, eine ganze Zahl zwischen 0 und 320.
# Display if an object is to the left or the right
while True:
brain.screen.clear_screen()
brain.screen.set_cursor(1,1)
objects = ai_vision_1.take_snapshot(AiVision.ALL_AIOBJS)
if objects[0].exists:
if objects[0].originX < 120:
brain.screen.print("To the left!")
else:
brain.screen.print("To the right!")
else:
brain.screen.print("No objects")
wait(100, MSEC)
.originY#
.originY gibt die y-Koordinate der oberen linken Ecke des Begrenzungsrahmens des erkannten Objekts in Pixeln zurück, eine ganze Zahl zwischen 0 und 240.
# Display if an object is close or far
while True:
brain.screen.clear_screen()
brain.screen.set_cursor(1,1)
objects = ai_vision_1.take_snapshot(AiVision.ALL_AIOBJS)
if objects[0].exists:
if objects[0].originY < 110:
brain.screen.print("Close")
else:
brain.screen.print("Far")
.id#
.id returns the ID of the detected AI Classification or AprilTag ID as an integer. AI Classifications depend on the model that is configured in the AI Vision Utility.
Bei einer AprilTag-ID repräsentiert die Eigenschaft .id die erkannte AprilTag-ID-Nummer im Bereich von 0 bis 36. Bei einer KI-Klassifizierung entspricht die Eigenschaft .id der vordefinierten ID im Abschnitt KI-Klassifizierungen.
# Move forward when AprilTag ID 1 is detected
while True:
apriltags = ai_vision_1.take_snapshot(AiVision.ALL_TAGS)
if apriltags[0].exists:
if apriltags[0].id == 1:
robot.drive(FORWARD)
else:
drivetrain.stop()
wait(50, MSEC)
.score#
.score gibt den Konfidenzwert der erkannten KI-Klassifizierung als ganze Zahl zwischen 1 und 100 zurück.
Ein niedrigerer Wert bedeutet, dass der Sensor weniger sicher ist, welches Objekt erkannt wurde, während ein höherer Wert bedeutet, dass der Sensor sicherer ist.
# Display if a score is confident
while True:
objects = ai_vision_1.take_snapshot(AiVision.ALL_AIOBJS)
brain.screen.clear_screen()
brain.screen.set_cursor(1, 1)
if objects[0].exists:
if objects[0].score > 95:
brain.screen.print("Confident")
else:
brain.screen.print("Not confident")
wait(50, MSEC)
Konstruktoren#
Konstruktoren werden verwendet, um manuell AiVision, Colordescund Codedesc Objekte zu erstellen, die für die Konfiguration des IQ AI Vision Sensors außerhalb von VEXcode erforderlich sind.
AI Vision Sensor#
AiVision erstellt einen IQ AI Vision Sensor.
Verwendung
Vision(port, sigs)
Parameter |
Beschreibung |
|---|---|
|
An welchen Smart Port (1 bis 12) ist der IQ AI Vision Sensor angeschlossen? |
|
Optional. Der Name einer oder mehrerer Signaturen:
|
Beispiel
ai_vision_1 = AiVision(Ports.PORT1, AiVision.ALL_AIOBJS)
# Move forward if an object is detected
while True:
objects = ai_vision_1.take_snapshot(AiVision.ALL_AIOBJS)
if objects[0].exists:
drivetrain.drive_for(FORWARD, 50, MM)
wait(50, MSEC)
Color Signature#
Colordesc erzeugt eine Farbsignatur. Bis zu sieben verschiedene Farbsignaturen können gleichzeitig auf einem IQ AI Vision Sensor gespeichert werden.
Verwendung:
Colordesc(index, uMin, uMax, uMean, vMin, vMax, vMean, rgb, type)
Parameter |
Beschreibung |
|---|---|
|
Der Index des Objekts |
|
Der Wert von |
|
Der Wert von |
|
Der Wert von |
|
Der Wert von |
|
Der Wert von |
|
Der Wert von |
|
Der Wert von |
|
Der Wert von |
Um die Werte für die Erstellung einer Farbsignatur zu erhalten, öffnen Sie das Vision Utility. Sobald eine Farbsignatur konfiguriert ist, kopieren Sie die Parameterwerte aus dem Konfigurationsfenster.
Beispiel
# Create a new Signature RED_BOX with the Colordesc class
RED_BOX = Colordesc(1, 10121, 10757, 10439,-1657, -1223, -1440,2.5, 1)
# Create a new AI Vision Sensor "ai_vision_1" with the AiVision
# class, with the RED_BOX Signature.
ai_vision_1 = AiVision(Ports.PORT1, 100, RED_BOX)
# Move forward if a red object is detected
while True:
red_object = ai_vision_1.take_snapshot(RED_BOX)
if red_object[0].exists:
drivetrain.drive_for(FORWARD, 10, MM)
wait(5, MSEC)
Color Code#
Codedesc erstellt einen Farbcode. Zur Verwendung sind mindestens zwei bereits definierte Farbsignaturen erforderlich. Auf einem Bildverarbeitungssensor können bis zu acht verschiedene Farbcodes gleichzeitig gespeichert werden.
Verwendung:
Codedesc(sig1, sig2, sig3, sig4, sig5)
Parameter |
Beschreibung |
|---|---|
|
Eine zuvor erstellte Farbsignatur. |
|
Eine zuvor erstellte Farbsignatur. |
|
Optional. Eine zuvor erstellte Farbsignatur. |
|
Optional. Eine zuvor erstellte Farbsignatur. |
|
Optional. Eine zuvor erstellte Farbsignatur. |
Beispiel
# Create two new Signatures for a red and blue box
RED_BOX = Colordesc(1, 10121, 10757, 10439,-1657, -1223, -1440, 2.5, 1)
BLUE_BOX = Colordesc(2, -4443, -3373, -3908,6253, 7741, 6997, 2.5, 1)
# Create a Color Code for a red box to the left of a blue box
RED_BLUE = Codedesc(RED_BOX, BLUE_BOX)
# Create a new AI Vision Sensor "ai_vision_1" with the AiVision
# class, with the RED_BOX and BLUE_BOX Signatures.
ai_vision_1 = AiVision(Ports.PORT1, RED_BOX, BLUE_BOX)
# Display a message if Color Code is detected
while True:
brain.screen.set_cursor(1, 1)
brain.screen.clear_row(1)
# Change to any configured Color Code
box_code = ai_vision_1.take_snapshot(RED_BLUE)
if box_code[0].exists:
brain.screen.print("Code detected!")
wait(100, MSEC)