Usando el sensor de visión AI en VEXcode EXP Python

Este artículo proporciona una descripción general de las funciones disponibles para usar AI Vision Sensor en Python, junto con instrucciones sencillas sobre cómo usarlas. Aprenderá los cuatro pasos en el proceso de uso del sensor de visión AI: 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 AI toma una imagen de lo que está mirando actualmente. Cualquier objeto que identifique con laFirma visual especificada se coloca en una tupla, que luego puede ser utilizada por otras funciones.

tomar instantáneas

Cuando utilice el comando take_snapshot , necesitará crear una variable para almacenar la tupla que crea. CualquierFirma visual deberá configurarse antes de poder usarse como parámetro. Cuando utilice la función, especifique el parámetro de firma como el nombre del sensor, doble guión bajo, seguido del nombre de la firma visual.examen de utilidad.PNG

vision_objects = ai_vision_6.take_snapshot(ai_vision_6__Azul)
vision_objects = ai_vision_6.take_snapshot(ai_vision_6__Red)
vision_objects = ai_vision_6.take_snapshot(ai_vision_6__Verde)

Las opciones para su Visual Signature también se completarán automáticamente en VEXcode después de que comience a escribir el comienzo del 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 la cantidad 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("recuento de objetos:", len(vision_objects))
esperar(0,5, SEGUNDOS)

Determinar cuántos objetos se detectaron

El comando len se puede utilizar con tuplas. Esto se puede utilizar 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 hacerlo, use 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 la cantidad 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: 
# Toma una instantánea para crear una tupla de objetos detectados
vision_objects = ai_vision_6.take_snapshot(ai_vision_6__Blue)

# Limpia la pantalla/reinicia para que podamos mostrar nueva información
Brain.screen.clear_screen()
Brain. screen.set_cursor(1, 1)

if len(vision_objects) > 0:
# Imprime cuántos objetos se encontraron
Brain.screen.next_row()
Brain.screen.print("recuento de objetos:", len(vision_objects ))
espera(0.5, SEGUNDOS)

Al usar el comando len con la tupla, también puedes 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 información del objeto más grande detectado en el uso más reciente del comando take_snapshot usando la función ai.vision.largest_object(). El otro método implica especificar la variable específica y el índice del objeto.

ai.vision.objeto_más grande()

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: 
# Toma una instantánea para crear una tupla de objetos detectados
vision_objects = ai_vision_6.take_snapshot(ai_vision_6__Blue)

# Limpia la pantalla/reinicia para que podamos mostrar nueva información
Brain.screen.clear_screen()
Brain. screen.set_cursor(1, 1)

# Comprobar si existe un objeto antes de extraer datos
if len(vision_objects) > 0:
Brain.screen.print(Center X: ", ai_vision.largest_object().centerX)
else :
cerebro.pantalla.print("sin objeto")
esperar(0,5, SEGUNDOS)

En este ejemplo, el código verifica si existe un objeto antes de usar la función ai.vision.largest_object() para devolver la propiedad .centerX del objeto más grande detectado e imprimirlo.

objetos_vision[0]

Otro método para extraer datos de una tupla es llamar directamente a la variable que almacena la tupla. Entre paréntesis, especifique el índice del objeto del que desea extraer datos. La tupla de objetos devuelta siempre enumera primero el objeto más grande en el índice 0. Posteriormente se ordenan los objetos de mayor a menor.

while True: 
# Toma una instantánea para crear una tupla de objetos detectados
vision_objects = ai_vision_6.take_snapshot(ai_vision_6__Blue)

# Limpia la pantalla/reinicia para que podamos mostrar nueva información
Brain.screen.clear_screen()
Brain. screen.set_cursor(1, 1)

# Verifique si existe un objeto antes de extraer datos
if len(vision_objects) > 0:
Brain.screen.print(Center X: ", vision_object[0].centerX)
else:
cerebro.pantalla.print("sin objeto")
esperar(0,5, SEGUNDOS)

En este ejemplo, el código verifica si existe un objeto antes de usar la función vision_object[0] para devolver la propiedad .centerX del objeto de índice 0 e imprimirlo.

Seleccione qué datos extraer de un objeto

De cada objeto, hay ocho propiedades que se pueden llamar.

  • .altura
  • .ancho
  • .centerX
  • .centroY
  • .originX
  • .origenY
  • .ángulo
  • .existe

.altura

La propiedad .height devuelve la altura del objeto detectado en píxeles.

Utilice este código para devolver la propiedad .height:

objetos_vision[0].altura

La propiedad .height devolverá un valor entre 0 y 240 píxeles.

.ancho

La propiedad .width devuelve el ancho del objeto detectado en píxeles.

Utilice este código para devolver la propiedad .width:

objetos_vision[0].ancho

La propiedad .width devolverá un valor entre 0 y 320.

.centerX

La propiedad .centerX informa la coordenada X del centro de la Firma Visualdetectada.

Utilice este código para devolver la propiedad .centerX:

objetos_vision[0].centerX

La propiedad .centerX devolverá un número entre 0 y 320.

.centroY

La propiedad .centerY informa la coordenada Y del centro de la Firma Visualdetectada.

Utilice este código para devolver la propiedad .centerY:

vision_objects[0].centerY

La propiedad .centerYdevolverá un número entre 0 y 240.

.originX

La propiedad .originX informa la coordenada X de la esquina superior izquierda de la firma visual detectada.

Utilice este código para devolver la propiedad .originX:

objetos_vision[0].originX

La propiedad .originXdevolverá un número entre 0 y 320.

.origenY

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 .originYdevolverá un número entre 0 y 240.

.ángulo

La propiedad .angle devuelve el valor del ángulo del código de colores.

Utilice este código para devolver la propiedad .angle:

objetos_vision[0].ángulo

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 verdadero si es un objeto válido. 

Devolverá falso si el objeto no es válido, como si se utiliza un número entero negativo. Si un objeto no es válido, todas las demás propiedades devolverán 0 como valor.

while True: 
# Tomar una instantánea para crear una tupla de objetos detectados
vision_objects = ai_vision_6.take_snapshot(ai_vision_6__Blue)
# borrar la pantalla/restablecer para que podamos mostrar nueva información
Brain.screen.clear_screen()
Brain.screen .set_cursor(1, 1)

si vision_objects[0].existe:
Brain.screen.print("x:", vision_objects[0].centerX)
else:
Brain.screen.print("sin objeto" )
espera(0.1, SEGUNDOS)

En este ejemplo, el código verifica la propiedad .exists ; si devuelve verdadero, imprimirá el valor de la propiedad .centerX en Brain. Si la propiedad .exists devuelve falso, imprimirá que no hay ningún objeto.

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

Last Updated: