Skip to content

Interfaz gráfica que utiliza un módulo de visión artificial para detectar manos en tiempo real a través de una webcam para elegir entre diferentes opciones mediante signos.

Notifications You must be signed in to change notification settings

AlejandroMS1912/Vision_artificial_GUI

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 

Repository files navigation

Vision_artificial_GUI

Interfaz gráfica que utiliza un módulo de visión artificial para detectar manos en tiempo real a través de una webcam. Elige entre las diferentes opciones haciendo gestos con las manos

En este proyecto utilizaremos una heladería como ejemplo para crear un módulo de visión artificial que tramita sus pedidos escaneando en tiempo real los gestos que realiza el cliente con las manos.

Cuando el cliente hace el gesto correspondiente a cualquiera de las 3 opciones, se genera una elipse alrededor de la opción seleccionada que representa el tiempo de confirmación, cuando la elipse se completa la opción se selecciona y la interfaz acctualiza de pantalla

Seleccionar opción 1 Seleccionar opción 3 Seleccionar opción 2
1 2 3

Interfaz gráfica

Esta dividida en 3 bloques de imágenes que se superponen entre sí dependiendo de las elecciones del cliente:

1 Imagen de fondo
Es la base de la interfaz gráfica, en el rectángulo grande se mostrará el reproductor de la webcam en tiempo real, en el hueco vacío de la derecha se mostraran las diferentes pantallas con las opciones y en los círculos inferiores se mostrarán los iconos de cada selección. fondo
2 Pantallas de selección
Indican las opciones disponibles, en la primera imagen son sólo 2 mientras que en las siguientes son 3. Además la segunda y la tercera imagen dependen de la primera elección y la última muestra únicamente que el pedido se ha realizado con éxito. Todas estas variaciones hay que tenerlas en cuenta a la hora de crear la lógica del código. opciones
3 Iconos
Indican las selecciones hechas, al igual que con las opciones el segundo icono depende de la primera elección y por lo tanto habrá que aplicar esa lógica en el código. iconos

Lógica del código

En cuanto a la lógica del código, en primer lugar la imagen de la webcam se captura mediante el método videoCapture() de la librería de python opencv (cv2), este método básicamente lo que hace es capturar la imagen de la webcam en un formato de imagen. Para convertir esta imagen en un vídeo en tiempo real creamos un bucle infinito que muestre imágenes cada 1 milisegundo, es decir, le pedimos a nuestro ordenador que muestre el número máximo de frames por segundo que pueda.

Una vez tenemos este reproductor creado, lo ubicamos en el cuadrado de la interfaz gráfica y añadimos también la primera pantalla de opción y ya tenemos la interfaz gráfica lista para aplicar la visión artificial.

Para detectar las manos y los gestos que nos servirán de referencia para elegir entre una opción u otra utilizaremos el módulo de visión artificial HandTrackingModule de la librería de python cvzone

Con el método findHands() de la clase detector y con la imagen de la webcam, el número máximo de manos simultáneas que queremos detectar y el índice de confianza como inputs detectaremos la mano que captura la webcam y sus 20 puntos de referencia.

Finalmente el método fingersUp() también de la clase detector, con la mano detectada en el método anterior como input, deducirá si cada uno de los dedos está levantado o no dependiendo de la posición de sus puntos de referencia

Sabiendo si cada uno de los dedos está levantado (1 si lo está, 0 si no lo está) podemos empezar a construir los condicionales que formarán la lógica de nuestro código.

Por lo tanto, si todos los dedos están bajados (0) y el dedo índice esta levantado (1) quiere decir que estamos haciendo el gesto «1» con la mano y por lo tanto estamos seleccionando la opción 1, si también esta levantado el dedo corazón estaremos haciendo el gesto «2» y eligiendo la opción 2 y si están levantados los dedos índice, corazón y anular y el resto bajados estaremos haciendo el gesto «3» y eligiendo la tercera opción.

Código Gesto
1_código
2_código
3_código

Teniendo ya la selección detectada en tiempo real guardada en una variable lo único que nos queda por hacer es añadir un tiempo de confirmación para que la opción no se elija instantáneamente al hacer cualquiera de los 3 gestos.

Para generar este tiempo de confirmación añadiremos un contador que incrementará su valor en cada frame que se detecte cualquiera de los 3 gestos de modo que si en algún momento dejamos de hacer el gesto o cambiamos de gesto este contador se reiniciará.

Por lo tanto si le indicamos al programa que cuando el contador llegue a 80 se seleccione la opción correspondiente al gesto, le estaremos diciendo que, a una frecuencia de 20 fps, el tiempo de confirmación serán 4 segundos. (80 frames contados a 20 frames por segundo)

Por último representaremos este tiempo de confirmación en la interfaz gráfica mediante una elipse que generaremos a través del método ellipse() de la librería de python opencv. Simplemente debemos ajustar algunos parámetros de la elipse como la posición del centro de la circunferencia (el centro de la opción seleccionada), el radio horizontal y vertical de la elipse, el grosor, el color y su valor, que será proporcional al contador mencionado anteriormente (tiempo de confirmación).

About

Interfaz gráfica que utiliza un módulo de visión artificial para detectar manos en tiempo real a través de una webcam para elegir entre diferentes opciones mediante signos.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages