Este artículo proporciona una descripción general de las funciones disponibles para usar el sensor de visión de IA en Python, junto con instrucciones simples sobre cómo usarlas. Aprenderá los cuatro pasos en el proceso de uso del sensor de visión de IA: obtener datos, ver la cantidad de objetos obtenidos, seleccionar qué objeto de los datos usar y qué datos del objeto extraer.
Obtenga datos visuales con el sensor de visión AI
Para recopilar información de su entorno, el sensor de visión de IA toma una imagen de lo que está mirando actualmente. Cualquier objeto que identifique con la Firma Visual especificada se coloca en una tupla, que luego puede ser utilizada por otras funciones.
take_snapshot
Al usar el comando take_snapshot, deberá crear una variable para almacenar la tupla que crea. Cualquier Firma Visual deberá configurarse antes de que pueda usarse como parámetro. Al usar la función, especifique el parámetro de firma como el nombre del sensor, doble guion bajo, seguido del nombre de la firma visual.
vision_objects = ai_vision_6.take_snapshot(ai_vision_6__Azul)
vision_objects = ai_vision_6.take_snapshot(ai_vision_6__Rojo)
vision_objects = ai_vision_6.take_snapshot(ai_vision_6__Verde)
Las opciones para su Firma Visual también se completarán automáticamente en VEXcode después de comenzar a escribir el comienzo de los paréntesis.
Ejemplo
En este ejemplo, la variable Vision_Objects
almacena una tupla que contiene las firmas visuales detectadas del sensor de visión AI llamado ai_Vision_6
. Muestra el número de objetos detectados y captura una nueva instantánea cada 0,5 segundos.
while True:
# Toma una instantánea para crear una tupla de objetos detectados
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))
espera(0,5, SEGUNDOS)
Determinar cuántos objetos se detectaron
El comando len se puede usar con tuplas. Esto se puede usar para ver cuántos objetos ha almacenado el
comando take_snapshot en la tupla.
Es una buena práctica asegurarse siempre de haber detectado un objeto antes de intentar extraer cualquier información de la instantánea. Para ello, utilice el comando len con la variable que almacena la tupla.
len(vision_objects) > 0
Ejemplo
En este ejemplo, la variable Vision_Objects
almacena una tupla que contiene las firmas visuales detectadas del sensor de visión AI llamado ai_Vision_6
. Muestra el número de objetos detectados y captura una nueva instantánea cada 0,5 segundos. Sin embargo, si ha detectado un objeto, imprimirá cuántos objetos detectó.
while True:
# Take a snapshot to create a tuple of detected objects
vision_objects = ai_vision_6.take_snapshot (ai_vision_6__Blue)
# Clear the screen/reset so that we can display new information
brain.screen.clear_screen ()
brain.screen.set_cursor (1, 1)
if len(vision_objects) > 0:
# Print how many objects were found
brain.screen.next_row ()
brain.screen.print ("object count:", len(vision_objects))
wait(0.5, SECONDS)
Al usar el comando len con la tupla, también puede ver cuántos objetos se detectaron.
Seleccione de qué objeto obtener datos
Hay dos métodos para extraer datos de la tupla. Un enfoque es recuperar directamente la información del objeto más grande detectado en el uso más reciente del comando take_snapshot utilizando la
funciónai.vision.largest_object (). El otro método consiste en especificar la variable específica y el índice de objeto.
ai.vision.largest_object()
ai.vision.largest_object()
es una función auxiliar para acceder al objeto más grande de la tupla, pero solo funcionará con la instantánea más reciente.
while True:
# Take a snapshot to create a tuple of detected objects
vision_objects = ai_vision_6.take_snapshot (ai_vision_6__Blue)
# Clear the screen/reset so that we can display new information
brain.screen.clear_screen ()
brain.screen.set_cursor (1, 1)
# Check if an object exists before pulling data
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)
En este ejemplo, el código comprueba si existe un objeto antes de usar la
función ai.vision.largest_object () para devolver la propiedad .centerX del objeto detectado más grande e imprimirla.
vision_objects[0]
Otro método para extraer datos de una tupla es llamar a la variable que almacena la tupla directamente. Entre paréntesis, especifique el índice del objeto del que desea extraer datos. La tupla de objetos devuelta siempre enumera el objeto más grande primero en el índice 0. Posteriormente, los objetos se ordenan de mayor a menor.
while True:
# Take a snapshot to create a tuple of detected objects
vision_objects = ai_vision_6.take_snapshot (ai_vision_6__Blue)
# Clear the screen/reset so that we can display new information
brain.screen.clear_screen ()
brain.screen.set_cursor (1, 1)
# Check if an object exists before pulling data
if len(vision_objects) > 0:
brain.screen.print (Center X: ", vision_object[0] .centerX)
else:
brain.screen.print ("no object")
wait(0.5, SECONDS)
En este ejemplo, el código comprueba si existe un objeto antes de usar la función vision_object[0] para devolver la
propiedad .centerX del objeto de índice 0 e imprimirla.
Seleccione qué datos extraer de un objeto
Desde cada objeto, hay ocho propiedades que se pueden llamar.
.height
.width
.centerX
.centerY
.originX
.originY
.angle
.existe
.height
La propiedad .height devuelve la altura del objeto detectado en píxeles.
Utilice este código para devolver la propiedad .height:
vision_objects[0].height
La propiedad .height devolverá un valor entre 0 y 240 píxeles.
.width
La propiedad .width devuelve el ancho del objeto detectado en píxeles.
Utilice este código para devolver la propiedad .width:
vision_objects[0].width
La propiedad .width devolverá un valor entre 0 y 320.
.centerX
La propiedad .centerX informa de la coordenada X del centro de la Firma Visual detectada.
Utilice este código para devolver la propiedad .centerX:
vision_objects[0].centerX
La propiedad .centerX devolverá un número entre 0 y 320.
.centerY
La propiedad .centerY informa la coordenada Y del centro de la Firma Visual detectada.
Utilice este código para devolver la propiedad .centerY:
vision_objects[0].centerY
La propiedad .centerY devolverá un número entre 0 y 240.
.originX
La propiedad .originX informa de la coordenada X de la esquina superior izquierda de la Firma Visual detectada.
Utilice este código para devolver la propiedad .originX:
vision_objects[0].originX
La propiedad .originX devolverá un número entre 0 y 320.
.originY
La propiedad .originY informa la coordenada Y de la esquina superior izquierda de la firma visual detectada.
Utilice este código para devolver la propiedad .originY:
vision_objects[0].originY
La propiedad .originY devolverá un número entre 0 y 240.
.angle
La propiedad .angle devuelve el valor del ángulo del código de color.
Utilice este código para devolver la propiedad .angle:
vision_objects[0].angle
La propiedad .angle devuelve la orientación del código de color detectado, que oscila entre 0 y 359,99 grados.
.existe
.exists
es una propiedad booleana que devuelve true si es un objeto válido.
Devuelve false si el objeto no es válido, como si se utiliza un entero negativo. Si un objeto no es válido, todas las demás propiedades devolverán 0s como su valor.
while True:
# Take a snapshot to create aa tuple of detected objects
vision_objects = ai_vision_6.take_snapshot (ai_vision_6__Blue)
# clear the screen/reset so that we can display new information
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")
wait(0.1, SECONDS)
En este ejemplo, el código verifica la propiedad .exists, si devuelve true, imprimirá el valor de
la
propiedad .centerX en el cerebro. Si la propiedad .exists devuelve false, se imprimirá que no hay ningún objeto.