Tabla de contenido:
- Paso 1: video
- Paso 2: hardware
- Paso 3: Pieza de código
- Paso 4: obtener imágenes
- Paso 5: Herramientas e idioma utilizado
- Paso 6: preparación del conjunto de datos para la capacitación
- Paso 7: red neuronal
- Paso 8: Entrenamiento de la red neuronal
- Paso 9: Prueba de la red neuronal
- Paso 10: Resultado y siguiente parte…
- Paso 11: Detección de objetos
- Paso 12: video
- Paso 13: etiquetado
- Paso 14: etiquetado de la GUI
- Paso 15: Bibliotecas necesarias
- Paso 16: Celdas restantes
Video: ¿Eso es una mano? (Cámara Raspberry Pi + Red neuronal) Parte 1/2: 16 pasos (con imágenes)
2024 Autor: John Day | [email protected]. Última modificación: 2024-01-30 08:43
Hace unos días, me lesioné la muñeca derecha en el gimnasio. Después, cada vez que usaba el mouse de mi computadora, me causaba mucho dolor debido al ángulo pronunciado de la muñeca.
Fue entonces cuando me di cuenta de que "no sería genial si pudiéramos convertir cualquier superficie en un trackpad" y no sé por qué, pero por alguna razón pensé en ella, en la película HER, dejaré que lo averigüen fuera. Fue un pensamiento emocionante, pero no sabía si podría hacerlo, decidí intentarlo.
Este artículo captura lo que salió de él.
Antes de comenzar, tengo un descargo de responsabilidad.
'Al final de este artículo, no pude convertir ninguna superficie en un trackpad, pero no aprendí mucho y agregué grandes herramientas a mi arsenal. Espero que a ti también te pase eso '
Empecemos.
Paso 1: video
Aquí hay un pequeño video de 5 minutos que cubre todos los pasos. Echar un vistazo.
Paso 2: hardware
Configuré una frambuesa pi junto con una cámara frambuesa pi a una altura de unos 45 cm. Esto nos da un área de monitoreo de aproximadamente 25x25 cm debajo de la cámara.
Las cámaras Raspberry Pi y Raspberry Pi están fácilmente disponibles, solo busque en Google y debería poder encontrar una tienda local.
Eche un vistazo a este enlace o una de mis listas de reproducción de Raspberry pi para poner en funcionamiento su pi sin cabeza.
Después de esta configuración, necesitamos un fragmento de código que decida si hay una mano en el área que la cámara está monitoreando y, de ser así, dónde está.
Paso 3: Pieza de código
Un fragmento de código que nos permite decidir si hay una mano en el área de interés usa algo llamado Red neuronal. Se incluyen en la categoría de programación en la que no definimos reglas para tomar decisiones, pero mostramos suficientes datos de la red neuronal para que descubra las reglas por sí misma.
En nuestro caso, en lugar de codificar cómo se ve la mano, mostramos imágenes de redes neuronales capturadas de raspberry pi que contienen mano y que no contienen mano. Esta fase se denomina entrenamiento de la red neuronal y las imágenes utilizadas se denominan conjunto de datos de entrenamiento.
Paso 4: obtener imágenes
Inicié sesión remotamente en mi raspberry pi y capturé un montón de imágenes usando el siguiente comando.
sudo raspistill -w 640 -h 480 -rot 90 -t 250000 -t1 5000 -o frame% 04d.jpg
Capturé 80 imágenes con mano y 80 imágenes que no contienen mano. 160 imágenes no son suficientes para entrenar adecuadamente una red neuronal, pero deberían ser suficientes para una prueba de concepto.
Además de 160 imágenes, capturé 20 imágenes más para probar nuestra red una vez que esté entrenada.
Una vez que el conjunto de datos estuvo listo, comencé a escribir código para redes neuronales.
Paso 5: Herramientas e idioma utilizado
Escribí mi red neuronal en la biblioteca de aprendizaje profundo de Python llamada Keras y el código está escrito en el cuaderno jupyter de anaconda navigator.
Paso 6: preparación del conjunto de datos para la capacitación
Primero (Imagen # 1) incluí todas las bibliotecas necesarias para este proyecto, que incluye PIL, matplotlib, numpy, os y Keras. En la segunda celda del cuaderno de Python (Imagen n. ° 2), defino las rutas al conjunto de datos e imprimo el recuento de muestras. Ahora necesitamos cargar todas las imágenes en una matriz numérica, por lo tanto, en la tercera celda (Imagen n. ° 2) creé una matriz numérica de 82 (número de muestra manual) +75 (número de muestra no manual), es decir, 157x100x100x3. 157 es el número total de imágenes que tengo, 100x100 es nuestra dimensión de imagen redimensionada y 3 es para capas de color rojo, verde y azul en la imagen.
En la cuarta y quinta celda, cargamos imágenes que contienen mano seguidas de imágenes que no contienen mano en la matriz numpy. En la sexta celda, dividimos cada valor por 255, por lo tanto, limitando el rango de valores de 0 a 1. (Imagen n. ° 3)
Lo siento si las imágenes adjuntas no son lo suficientemente buenas. Aquí hay un enlace al repositorio de GITHUB para que vea el código. No olvide reemplazar los nombres de la ruta del directorio con su ruta:).
Moviéndose a lo largo.
A continuación, debemos etiquetar cada imagen, por lo que creamos una matriz numérica unidimensional de 157 de longitud. Las primeras 82 entradas se establecen en 1 y las 75 entradas restantes se establecen en 0, lo que transporta la red neuronal que las primeras 82 imágenes son de una clase y las restantes son de otra (Imagen # 4).
Ahora creemos una red neuronal.
Paso 7: red neuronal
En la novena celda, definimos nuestra red neuronal. Contiene tres capas de repetición de convolución seguidas de capas maxpool con 8, 12 y 16 filtros de convolución respectivamente. A continuación, tenemos dos densas redes neuronales. Adjuntando dos imágenes para este paso. En primer lugar, se muestra un fragmento de código que crea una red neuronal y, en segundo lugar, está la representación pictórica de la red neuronal con la dimensión de salida y las operaciones anotadas.
Paso 8: Entrenamiento de la red neuronal
En la décima celda, configuramos el optimizador de redes neuronales en 'adam' y la función de pérdida en 'binary_crossentropy'. Desempeñan un papel importante en la forma en que se actualizan los pesos de la red. Finalmente, cuando ejecutamos la undécima celda, la red neuronal comienza a entrenarse. Mientras la red se está entrenando, observe la función de pérdida y asegúrese de que esté disminuyendo.
Paso 9: Prueba de la red neuronal
Una vez que se entrena la red neuronal, debemos preparar el conjunto de datos de prueba. Repetimos el procedimiento realizado para preparar el conjunto de entrenamiento en las celdas 3, 4, 5 y 6 en los datos de prueba para crear el conjunto de prueba. También preparamos la etiqueta para el conjunto de prueba, pero esta vez ejecutamos el modelo en este conjunto de datos para obtener predicciones y no para entrenar.
Paso 10: Resultado y siguiente parte…
Obtuve una precisión de prueba del 88%, pero tomo esto con una pizca de sal, ya que los conjuntos de datos utilizados para entrenar y probar este modelo son muy, muy pequeños e inadecuados para entrenar correctamente este modelo.
De todos modos espero que hayas disfrutado de este artículo. Mi intención detrás de este ejercicio aún no está completa y cuidado con la segunda parte. Lo subiré tan pronto como pueda.
En la siguiente parte, entrenaremos otra red neuronal que nos dirá la ubicación de la mano en una imagen detectada por la mano.
Todas las consultas son bienvenidas.
Si alguien está interesado en usar mi pequeño conjunto de datos, hágamelo saber en los comentarios. Lo haré disponible.
Gracias por leer. Te veré pronto con la segunda parte hasta entonces, ¿por qué no creas y entrenas una red neuronal?
Editar: - Los siguientes pasos son para la segunda parte.
Paso 11: Detección de objetos
En los pasos anteriores creamos un NN que nos dice si la imagen de prueba contiene mano o no. Bueno, que sigue? Si NN clasifica la imagen como mano contenedora, nos gustaría saber la ubicación de la mano. Esto se denomina detección de objetos en la literatura sobre visión por computadora. Así que entrenemos a NN que haga exactamente lo mismo.
Paso 12: video
Un video de 3 minutos que explica todos los pasos restantes. Echar un vistazo.
Paso 13: etiquetado
Si desea que una red neuronal muestre la ubicación de la mano, debemos entrenarla de tal manera, es decir, a diferencia de la red neuronal anterior donde cada imagen se etiquetaba como con la mano y sin la mano. Esta vez, todas las imágenes con la mano tendrán cuatro etiquetas correspondientes a las coordenadas diagonales del cuadro delimitador alrededor de la mano en esa imagen.
La imagen adjunta del archivo csv contiene una etiqueta para cada imagen. Tenga en cuenta que las coordenadas están normalizadas con la dimensión de la imagen, es decir, si la coordenada X superior está en 320 píxeles en la imagen con un ancho de 640 píxeles, la etiquetaremos como 0.5.
Paso 14: etiquetado de la GUI
Quizás se pregunte cómo logré etiquetar las 82 imágenes, bueno, escribí una GUI en Python que me ayudó con esta tarea. Una vez que se carga la imagen en la GUI. Hice clic izquierdo en la coordenada superior y clic derecho en la coordenada inferior del cuadro delimitador probable alrededor de la mano. Estas coordenadas luego se escriben en un archivo y luego hago clic en el botón Siguiente para cargar la siguiente imagen. Repetí este procedimiento para todos los 82 trenes y 4 imágenes de prueba. Una vez que las etiquetas estuvieron listas, llegó el momento de la formación.
Paso 15: Bibliotecas necesarias
Primero necesitamos cargar todas las bibliotecas necesarias. Que incluye
- PIL para manipulación de imágenes,
- matplotlib para trazar,
- numpy para operación matricial,
- os para la funcionalidad dependiente del sistema operativo y
- keras para redes neuronales.
Paso 16: Celdas restantes
En la segunda, tercera, cuarta y quinta celda cargamos imágenes en una matriz numérica y creamos una matriz de cuatro dimensiones a partir del archivo csv para que actúe como etiquetas. En la celda número 6 creamos nuestra red neuronal. Su arquitectura es idéntica a la red neuronal utilizada para la clasificación, excepto que la dimensión de la capa de salida es 4 y no 1. Otra diferencia proviene de la función de pérdida utilizada, que es el error cuadrático medio. En la celda número 8 comenzamos a entrenar nuestra red neuronal. Una vez entrenado, ejecuté este modelo en el conjunto de prueba para obtener predicciones para el cuadro delimitador en las coordenadas superpuestas del cuadro delimitador, parecían bastante precisas.
Gracias por leer.
Recomendado:
Planetario con red neuronal que utiliza Python, Electron y Keras: 8 pasos
Planetario alimentado por red neuronal usando Python, Electron y Keras: en este instructivo, les mostraré cómo escribí un generador de planetario 3D automático, usando Python y Electron. El video de arriba muestra uno de los planetarios aleatorios que generó el programa. ** Nota: Este programa no es de ninguna manera perfecto, y en algún lugar
¿Puedes hacer ESO con un toque de KIndle ?: 15 pasos (con imágenes)
¿Puedes hacer ESO con un KIndle Touch? Nunca pude entender por qué alguien querría tener un e-Reader. Luego, mis hijos mayores me dieron un Kindle Touch y he encontrado formas de hacer que haga por mí mucho de lo que un teléfono inteligente o un iPad hacen por otras personas. Algún día reemplazará mi envejecimiento
Gesture Hawk: Robot controlado por gestos con la mano utilizando una interfaz basada en procesamiento de imágenes: 13 pasos (con imágenes)
Gesture Hawk: robot controlado por gestos con la mano que utiliza una interfaz basada en procesamiento de imágenes: Gesture Hawk se presentó en TechEvince 4.0 como una sencilla interfaz hombre-máquina basada en el procesamiento de imágenes. Su utilidad radica en el hecho de que no se requieren sensores adicionales o wearables excepto un guante para controlar el automóvil robótico que funciona en diferentes
Juego de memoria con tacto (dice Simón) - Si esto, entonces eso: 6 pasos (con imágenes)
Juego de memoria con tacto (dice Simón) - Si esto, entonces eso: Hice un juego de memoria con paneles táctiles hechos por mí mismo y un anillo de neopixel para un proyecto escolar. Este juego es similar a Simon Says, excepto que muchas formas de entrada y retroalimentación (sonidos y efectos de luz) en el juego son diferentes. Programé sonidos de Su
Robot de red neuronal Arduino: 21 pasos (con imágenes)
Robot de red neuronal Arduino: este instructivo se basa en una serie de 3 partes que hice para el canal Make YouTube, que le muestra exactamente cómo prototipar, diseñar, ensamblar y programar su propio robot de red neuronal Arduino. Después de ver la serie completa, deberías tener una mejor