Capteur de vision IA#

Introduction#

Le capteur de vision IQ AI 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.

Pour les exemples ci-dessous, le capteur de vision IQ AI configuré sera nommé ai_vision_1, et les objets de signature de couleur configurés, tels que RED_BOX, seront utilisés dans tous les exemples suivants de cette documentation API lors de la référence aux méthodes de classe AiVision.

Vous trouverez ci-dessous la liste de toutes les méthodes :

Générateurs — Récupérez les données du capteur de vision IQ AI.

  • take_snapshot — Capture les données pour une signature spécifique.

  • installed — Indique si le capteur de vision IQ AI est connecté au cerveau IQ (2e génération).

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 ou de l’identifiant AprilTag.

  • .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 les capteurs.

  • AiVision — Crée un capteur de vision IA IQ.

  • Colordesc — Crée une signature de couleur.

  • Codedesc — Crée un code couleur.

Getters#

take_snapshot#

take_snapshot filtre les données de la trame du capteur de vision IQ 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

SIGNATURE

Filters the dataset to only include data of the given signature. Available signatures are:

  • Color Signatures or Color Codes - The name of the IQ AI Vision Sensor, two underscores, and then the Color Signature’s or Color Code’s name. For example: ai_vision_1__RED_BOX.
  • AiVision.ALL_AIOBJS - All detected AI Classifications depending on the model configured in the AI Vision Utility.
  • AiVision.ALL_TAGS - All AprilTag IDs.

count

Facultatif. Définit le nombre maximal d’objets pouvant être renvoyés, de 1 à 24 (par défaut : 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)

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 IQ peut détecter différents objets selon certaines classifications d’IA. En fonction du modèle de classification d’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 :

Objets de classe

Numéro d’identification

Classification par IA

0

ClassroomElements.BLUE_BALL

1

ClassroomElements.GREEN_BALL

2

ClassroomElements.RED_BALL

3

ClassroomElements.BLUE_RING

4

ClassroomElements.GREEN_RING

5

ClassroomElements.RED_RING

6

ClassroomElements.BLUE_CUBE

7

ClassroomElements.GREEN_CUBE

8

ClassroomElements.RED_CUBE

Compétition de robotique VEX IQ : Combinaisons possibles

Numéro d’identification

Classification par IA

0

GameElementsMixAndMatch.BEAM

1

GameElementsMixAndMatch.BLUE_PIN

2

GameElementsMixAndMatch.RED_PIN

3

GameElementsMixAndMatch.ORANGE_PIN

VEX IQ Robotics Competition Level Up

Numéro d’identification

Classification par IA

0

GameElementsLevelUp.BLUE_BEANBAG

1

GameElementsLevelUp.RED_BEANBAG

2

GameElementsLevelUp.YELLOW_BEANBAG

Signatures de couleur#

A Color Signature is a unique color that the IQ AI Vision Sensor can recognize. These signatures allow the IQ AI Vision Sensor to detect and track objects based on their color. Once a Color Signature is configured, the sensor can identify objects with that specific color in its field of view. Color signatures are used with take_snapshot to process and detect colored objects in real-time.

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 IQ AI 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 un booléen indiquant si le capteur de vision IQ AI est actuellement connecté au cerveau IQ (2e génération).

  • True — Le capteur de vision IQ AI est connecté au cerveau IQ (2e génération).

  • False — Le capteur de vision IQ AI n’est pas connecté au cerveau IQ (2e génération).

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 IQ 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’identifiant de la classification IA ou de l’identifiant AprilTag détecté, sous forme d’entier. Les classifications IA dépendent du modèle configuré dans l’utilitaire AI Vision.

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.

# 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)

Constructeurs#

Les constructeurs sont utilisés pour créer manuellement AiVision, Colordesc, et Codedesc , qui sont nécessaires pour configurer le capteur de vision IQ AI en dehors de VEXcode.

AI Vision Sensor#

AiVision crée un capteur de vision IA IQ.

Usage

Vision(port, sigs)

Paramètres

Description

port

À quel port intelligent le capteur de vision IQ AI est-il connecté, de 1 à 12.

sigs

Facultatif. Nom d’une ou plusieurs signatures :

Exemple

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#

La commande 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 IQ AI.

Usage:

Colordesc(index, uMin, uMax, uMean, vMin, vMax, vMean, rgb, type)

Paramètre

Description

index

L’index de l’objet Colordesc , de 1 à 7. Remarque : La création de deux objets Colordesc avec le même numéro d’index entraînera l’écrasement du premier par le deuxième objet créé.

uMin

La valeur de uMin dans l’utilitaire Vision.

uMax

La valeur de uMax dans l’utilitaire de vision.

uMean

La valeur de uMean dans l’utilitaire Vision.

vMin

La valeur de vMin dans l’utilitaire Vision.

vMax

La valeur de vMax dans l’utilitaire Vision.

vMean

La valeur de vMean dans l’utilitaire Vision.

rgb

La valeur de rgb dans l’utilitaire Vision.

type

La valeur de type dans l’utilitaire Vision.

Pour obtenir les valeurs nécessaires à la création d’une signature de couleur, accédez à l’utilitaire Vision. Une fois la signature de couleur configurée, copiez les valeurs des paramètres depuis la fenêtre de configuration.

Exemple

# 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#

La commande Codedesc crée un code couleur. Elle nécessite au moins deux signatures de couleur prédéfinies pour être utilisée. Un capteur de vision peut stocker jusqu’à huit codes couleur différents simultanément.

Usage:

Codedesc(sig1, sig2, sig3, sig4, sig5)

Paramètre

Description

sig1

A previously created Color Signature.

sig2

A previously created Color Signature.

sig3

Facultatif. Une Signature de couleur créée précédemment.

sig4

Facultatif. Une Signature de couleur créée précédemment.

sig5

Facultatif. Une Signature de couleur créée précédemment.

Exemple

# 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)