Vision IA#
Introduction#
Le capteur de vision IA peut détecter et suivre les objets, les couleurs et les identifiants AprilTag. Cela permet au robot d’analyser son environnement, de suivre les objets et de réagir en fonction des données visuelles détectées.
Cette page utilise ai_vision_1, RED_BOX, et BOX_CODE comme exemples de noms pour le capteur de vision IA, la signature couleur et le code couleur, respectivement. Remplacez-les par vos propres noms configurés, selon vos besoins.
Vous trouverez ci-dessous la liste de toutes les méthodes :
Générateurs – Récupérer les données du capteur de vision IA.
take_snapshot– Capture les données pour une signature spécifique.installed– Indique si le capteur de vision AI est connecté au cerveau V5.
Propriétés – Données de l’objet renvoyées par take_snapshot.
.exists– Indique si l’objet existe dans la détection actuelle..width– Largeur de l’objet détecté..height– Hauteur de l’objet détecté..centerX– Position X du centre de l’objet..centerY– Position Y du centre de l’objet..angle– Orientation du code couleur..originX– Position X du coin supérieur gauche de l’objet..originY– Position Y du coin supérieur gauche de l’objet..id– Classification ou identifiant d’étiquette de l’objet..score– Score de confiance pour les classifications d’IA.
Constructeurs – Initialisez et configurez manuellement le capteur de vision IA et ses signatures.
Getters#
take_snapshot#
take_snapshot filtre les données de l’image du capteur de vision AI en une seule signature — une description enregistrée de quelque chose que le capteur peut reconnaître, comme un objet pré-entraîné, un ID AprilTag ou une signature de couleur ou un code couleur configuré — et renvoie un tuple.
Les Signatures de couleur et les Codes de couleur doivent d’abord être configurés dans l’utilitaire Vision avant de pouvoir être utilisés avec cette méthode.
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)
Paramètres |
Description |
|---|---|
|
Filtre l’ensemble de données pour n’inclure que les données de la signature spécifiée. Les signatures disponibles sont :
|
|
Facultatif. Définit le nombre maximal d’objets pouvant être renvoyés, de 1 à 24. La valeur par défaut est 8. |
# Drive 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)
Remarque : Le tuple renvoyé peut être trié selon n’importe quelle propriété, et pas seulement la largeur, à l’aide de la fonction sorted de Python. Par exemple, tri par ID AprilTag :
# 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)
Ou en triant par hauteur :
# 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)
Classifications IA#
Le capteur de vision IA peut détecter différents objets selon certaines classifications IA. En fonction du modèle de classification IA sélectionné lors de la configuration du capteur dans la fenêtre « Périphériques », différents objets seront détectés. Les modèles actuellement disponibles sont :
Éléments de la salle de classe
Numéro d’identification |
Classification par IA |
|---|---|
0 |
|
1 |
|
2 |
|
3 |
|
4 |
|
5 |
|
6 |
|
7 |
|
8 |
|
Compétition de robotique VEX V5 à enjeux élevés
Numéro d’identification |
Classification par IA |
|---|---|
0 |
|
1 |
|
2 |
|
Report de la compétition de robotique VEX V5
Numéro d’identification |
Classification par IA |
|---|---|
0 |
|
1 |
|
Dérogation pour la compétition de robotique VEX V5
Numéro d’identification |
Classification par IA |
|---|---|
0 |
|
1 |
|
2 |
|
3 |
|
4 |
|
Signatures de couleur#
Une signature de couleur est une couleur unique que le capteur de vision IA peut reconnaître. Ces signatures permettent au capteur de détecter et de suivre les objets en fonction de leur couleur. Une fois la signature de couleur configurée, le capteur peut identifier les objets de cette couleur spécifique dans son champ de vision. Les signatures de couleur sont utilisées avec take_snapshot pour traiter et détecter les objets colorés en temps réel.
Pour utiliser une signature de couleur configurée dans un projet, son nom doit être composé du nom du capteur, de deux traits de soulignement, puis du nom de la signature de couleur. Par exemple : 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)
Codes de couleur#
Un code couleur est un motif structuré composé de signatures chromatiques agencées selon un ordre précis. Ces codes permettent au capteur de vision IA de reconnaître des motifs de couleurs prédéfinis. Les codes couleur sont utiles pour identifier des objets complexes ou créer des marqueurs uniques pour la navigation autonome.
Pour utiliser un code couleur configuré dans un projet, son nom doit être composé du nom du capteur, de deux traits de soulignement, puis du nom du code couleur. Par exemple : 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 renvoie une valeur booléenne indiquant si le capteur de vision AI est actuellement connecté au cerveau V5.
True– Le capteur de vision IA est connecté au cerveau V5.False– Le capteur de vision IA n’est pas connecté au cerveau V5.
Usage:
ai_vision_1.installed()
Paramètres |
Description |
|---|---|
Cette méthode ne comporte aucun paramètre. |
# Display a message if the AI Vision Sensor is connected
if ai_vision_1.installed():
brain.screen.print("Installed!")
Propriétés#
Il existe dix propriétés qui sont incluses avec chaque objet stocké dans un tuple après l’utilisation de take_snapshot.
All property values except .id and .score describe the detected object’s position and size in the AI Vision Sensor’s view at the moment take_snapshot was used. These values are measured in pixels, based on the sensor’s 320 by 240 pixel resolution.
.exists#
.exists renvoie une valeur booléenne indiquant si l’index existe ou non dans le tuple.
True– L’index existe.False– L’index n’existe pas.
# 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 renvoie la largeur de l’objet détecté en pixels, qui est un entier compris entre 1 et 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 renvoie la hauteur de l’objet détecté en pixels, qui est un entier compris entre 1 et 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 renvoie la coordonnée x du centre de l’objet détecté en pixels, qui est un entier compris entre 0 et 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 renvoie la coordonnée y du centre de l’objet détecté en pixels, qui est un entier compris entre 0 et 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 renvoie l’orientation du code couleur ou de l’identifiant AprilTag détecté en degrés, qui est un entier compris entre 0 et 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 renvoie la coordonnée x du coin supérieur gauche de la boîte englobante de l’objet détecté en pixels, qui est un entier compris entre 0 et 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 renvoie la coordonnée y du coin supérieur gauche de la boîte englobante de l’objet détecté en pixels, qui est un entier compris entre 0 et 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 renvoie l’ID de la classification IA détectée ou l’ID AprilTag sous forme d’entier.
Pour un identifiant AprilTag, la propriété .id représente le numéro d’identifiant AprilTag détecté dans la plage de 0 à 36. Pour une classification IA, la propriété .id correspond à l’identifiant prédéfini dans la section Classifications IA.
# 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 renvoie le score de confiance de la classification IA détectée sous forme d’un entier compris entre 1 et 100.
Un score plus bas signifie que le capteur est moins sûr de l’objet détecté, tandis qu’un score plus élevé signifie que le capteur est plus sûr de lui.
Constructeurs#
Les constructeurs sont utilisés pour créer manuellement AiVision, Colordesc, et Codedesc , qui sont nécessaires pour configurer le capteur de vision AI en dehors de VEXcode.
AiVision#
AiVision crée un capteur de vision IA.
Usage
Vision(smartport, sigs)
Paramètres |
Description |
|---|---|
|
Le port intelligent auquel le capteur de vision IA est connecté est indiqué sous la forme |
|
Facultatif. Nom d’une ou plusieurs signatures, séparées par des virgules (
|
# Create the Color Signatures
RED_BOX = Colordesc(1, 255, 0, 0, 20, 0.9)
BLUE_BOX = Colordesc(0, 26, 255, 0, 20, 0.9)
# Create the Color Code
RED_BLUE = Codedesc(RED_BOX, BLUE_BOX)
"""
Create an AI Vision Sensor with the following signatures:
- RED_BLUE
- AiVision.ALL_TAGS - for AprilTag IDs
"""
ai_vision_1 = AiVision(Ports.PORT1, RED_BLUE, AiVision.ALL_TAGS)
Colordesc#
La fonction Colordesc crée une signature de couleur. Jusqu’à sept signatures de couleur différentes peuvent être stockées simultanément sur un capteur de vision IA.
Usage:
Colordesc(index, red, green, blue, hangle, hdsat)
Paramètre |
Description |
|---|---|
|
L’index de l’objet |
|
La valeur rouge de la couleur, de 0 à 255. |
|
La valeur verte de la couleur, de 0 à 255. |
|
La valeur bleue de la couleur, de 0 à 255. |
|
La variation de teinte admissible est exprimée en degrés sur le cercle chromatique (1–40). Plus la valeur est élevée, plus l’écart par rapport à la teinte de base est important. |
|
L’écart de saturation admissible, de 0,10 à 1,00. Cette valeur représente la fraction de la plage de saturation totale dans laquelle la couleur peut varier (par exemple, 0,10 = ±10 % de saturation). |

"""
Create a Color Signature with the following values:
- index: 1
- red: 255
- green: 0
- blue: 0
- hangle: 20
- hdsat: 0.9
"""
# Create a red Color Signature
RED_BOX = Colordesc(1, 255, 0, 0, 20, 0.9)
Codedesc#
Codedesc creates a Color Code. It requires at least two already defined Color Signatures in order to be used. Up to eight different Color Codes can be stored on a Vision Sensor at once.
Usage:
Codedesc(sig1, sig2, sig3, sig4, sig5)
Paramètre |
Description |
|---|---|
|
A previously created Color Signature. |
|
A previously created Color Signature. |
|
Facultatif. Une Signature de couleur créée précédemment. |
|
Facultatif. Une Signature de couleur créée précédemment. |
|
Facultatif. Une Signature de couleur créée précédemment. |
# Create the Color Signatures
RED_BOX = Colordesc(1, 255, 0, 0, 20, 0.9)
BLUE_BOX = Colordesc(0, 26, 255, 0, 20, 0.9)
# Create a Color Code with the Color Signatures
BOX_CODE = Codedesc(RED_BOX, BLUE_BOX)
Tagdesc#
La commande Tagdesc crée un identifiant AprilTag. Vous pouvez l’utiliser pour définir des identifiants AprilTag identifiables, ce qui rend votre code plus clair et plus facile à lire.
Usage:
Tagdesc(id)
Paramètre |
Description |
|---|---|
|
L’identifiant AprilTag à utiliser. |
# Set AprilTag ID 7 to be the "goal"
goal = Tagdesc(7)