Manufactura industrial
Internet industrial de las cosas | Materiales industriales | Mantenimiento y reparación de equipos | Programación industrial |
home  MfgRobots >> Manufactura industrial >  >> Manufacturing Technology >> Proceso de manufactura

Reconocimiento de dígitos AI con PiCamera

Reconocer dígitos con Raspberry Pi, Pi Cámara, OpenCV y TensorFlow.

Historia

En este proyecto, vamos a entrenar una red neuronal convolucional profunda para transcribir dígitos. Luego, usaremos los datos de la etapa de aprendizaje para permitir que la cámara Pi lea y reconozca dígitos. La canalización de IA se implementará utilizando Scikit y OpenCV 3.3 para la manipulación de imágenes y Keras, que utiliza Tensorflow como back-end para la parte de aprendizaje profundo.


Para mantener esto fácil, no se realiza ninguna etapa de localización de características. Tendrás que empujar la imagen frente a la lente de la cámara para que sea la única característica que vea.

Se utilizará el conjunto de datos MNIST. Se compone de 60.000 ejemplos de formación y 10.000 ejemplos de prueba de los dígitos escritos a mano 0–9 formateados como imágenes monocromáticas de 28 × 28 píxeles. Básicamente, estamos transformando todas las imágenes adquiridas de la cámara en imágenes que se ven así:

La topología de la red principal se puede describir con esta imagen a continuación:

La última capa es una capa completamente conectada que se asigna a 10 categorías que representan los 10 dígitos.

Vamos a hacer dos cosas. Primero entrenamos una red para reconocer dígitos. Luego usamos los pesos de la red que entrenamos para reconocer los dígitos de la transmisión de la cámara en vivo tomados de la cámara Raspberry Pi.

Usé una tercera mano para sostener la cámara Raspberry Pi, ya que eso era todo lo que tenía. La configuración mecánica se puede describir con esta imagen a continuación:

Sin embargo, antes de comenzar con todo esto, instalemos todo lo que necesitemos. Usé entornos virtuales de Python para configurar el programa. Entonces, asumiendo que tiene todos los programas que se enumeran a continuación, puede emitir:

 fuente ~ / .profile trabajo en cvpython PiCameraApp.py --picamera 1 

Vayamos a los detalles. Primero, instalemos varios programas.

Instalar Tensorflow

 instalar pip tensorflow 

Instalar Keras

 instalar pip keras 

Instalar Open-CV 3.3

La instalación de OpenCV es un poco complicada si necesita todas las optimizaciones. Esto significa que tenemos que compilarlo desde cero ya que el del administrador de paquetes pip no tiene todas las optimizaciones.

El mejor tutorial que encontré es el de este enlace:

 https://www.pyimagesearch.com/2017/09/04/raspbian-stretch-install-opencv-3-python-on-your-raspberry-pi/ 

Finalmente instala la picamera con optimizaciones Numpy.

 instalación de pip "picamera [array]" 

Ahora, después de haber instalado toda la pila de software en el RPI, tenemos que hacer un poco de entrenamiento. La red debe estar entrenada en una computadora portátil, preferiblemente con una GPU, a menos que sea un héroe que se sienta cómodo con un rendimiento lento como un glaciar y decida hacerlo con un RPI.

Capacitación de la red

Para entrenar la red, ejecute el archivo Python en una computadora portátil emitiendo:

 Python Train_MNIST.py 

Esto supone que tiene Cuda (si usa la versión de gpu), Tensorflow, Keras y matplotlib instalados en su computadora portátil.

El programa de este archivo utiliza Keras para definir un modelo de red neuronal profunda, compilarlo y, una vez finalizadas las fases de entrenamiento y validación, guarda los pesos de la red.

Al final, el programa guarda los pesos de la red como un archivo .h5. Este es el archivo con los pesos de la red que vamos a cargar en el script de reconocimiento que se ejecuta en el RPI para reconocer las imágenes de dígitos en vivo.

Copie el archivo de peso en su RPI usando scp o WinSCP.

Si tiene una GPU NVIDIA, la capacitación tomará un par de minutos según la capacidad de cómputo de su tarjeta. Sin embargo, para aprovechar la GPU, tendrá que instalar la versión GPU de Tensorflow, así como el ejecutable CUDA del sitio web de NVIDIA. De lo contrario, puede llevar un poco más de tiempo si solo está usando la CPU.

Reconocimiento de imágenes en vivo de dígitos

Terminé probando tanto los dígitos escritos a mano como los impresos. La precisión de la predicción depende principalmente de la iluminación y el ángulo de la imagen y cuán ambiguo (leído de mierda) es realmente tu escritura. Después de iniciar la aplicación, presione t para leer los dígitos y q para salir.

Reconociendo el dígito 4. Tuve que usar mucha tinta para dibujar ese 4.

A veces, la red imprime probabilidades infinitesimalmente bajas para los otros números. Así que hay un 0,0001% de probabilidad de que sea un siete.

Herramientas del oficio.

Explicación del programa

El programa toma una instantánea de la cámara al presionar la tecla 't' y aplica una serie de pasos de transformación a la imagen antes de reenviarla al DNN.

Lo primero que hay que tener en cuenta es que las imágenes en color se adquieren como una gran variedad de números de punto flotante Primero, la imagen se convierte de un formato RGB a una imagen en escala de grises para que podamos tirando dos canales.

El siguiente paso es convertir el formato de punto flotante de la imagen a un número de 8 bits con un rango de 0-255.

Luego usamos OpenCV, para hacer el umbral. El método Otsu se utiliza para establecer automáticamente el umbral de la imagen para que las características del número sean evidentes. El siguiente paso es cambiar el tamaño de la imagen a un formato de 28 × 28 píxeles. Este es el mismo formato aceptado por MNIST DNN.

Se puede usar la imagen de scikit, open-cv o Keras para hacer el cambio de escala.

Después de cambiar la escala de la imagen, el siguiente paso es invertir los colores, ya que el MNIST espera que los números estén en un fondo negro en lugar de líneas negras sobre un fondo blanco.

Después del posprocesamiento, la imagen se envía al DNN que hace una predicción del dígito observado.

La matriz de salida representa las probabilidades de que la imagen observada sea ese número. Entonces, un 1 en la posición 2 muestra un 100% de certeza, ya que es un 1. Tenga en cuenta que la posición 1 está reservada para 0.

Pasos del algoritmo

1. Lee la imagen

El primer paso es, obviamente, poner una imagen delante de la cámara. Esto se escalará más adelante ya que la CNN (red neuronal convolucional) espera imágenes de cierto tamaño.

2.Convertir a escala de grises

La imagen adquirida luego se convierte a escala de grises usando la llamada a la función scipy. Casualmente, solo puede usar opencv para las manipulaciones de imágenes, pero debe recordar todos los nombres de las funciones. También otro punto, existen algunas diferencias muy sutiles entre scipy y open-cv cuando se trata de ciertas funciones.

3. Escala el rango de la imagen

Aquí la imagen se convierte de un formato de punto flotante a un rango uint8 [0, 255]

4. Umbral

Para obtener una bonita imagen en blanco y negro, el umbral se realiza mediante el método Otsu. Este es el paso de la salsa mágica, ya que al realizar el umbral manualmente, uno ingresará los valores uno por uno.

5. Cambiar el tamaño de la imagen

El tamaño de la imagen cambia a una matriz de 28 por 28 píxeles. Esto luego se aplana a una matriz lineal de tamaño (28 × 28)

6. Invertir imagen

MNIST DNN acepta imágenes como 28 × 28 píxeles, dibujadas en blanco sobre fondo negro. Entonces tenemos que invertir la imagen.

7. Alimente una red neuronal entrenada

Este es el último paso. Aquí cargamos los pesos de la red neuronal profunda y alimentamos la imagen a la red. Se necesitan de 2 a 3 segundos para hacer una predicción.

Finalmente terminamos con una matriz de salida con 10 clases que muestran todos los dígitos del 0 al 9. La posición de la matriz representa la probabilidad de que la red haga la inferencia. Traducir esto al lenguaje humano significa elegir la posición con la mayor probabilidad.

La configuración principal parece un dispositivo médico.

¡Fin!

Eso es todo. Esto mostró cómo implementar una red neuronal que puede reconocer dígitos.

Código cargado en GitHub como siempre.

Fuente: Reconocimiento de dígitos con IA con PiCamera


Proceso de manufactura

  1. Acceed:Switch gigabit de 12 puertos con 4 puertos SFP
  2. AAEON colabora con Intel para ofrecer potentes soluciones de red
  3. Lanner para actualizar los dispositivos de red con Intel Xeon de segunda generación
  4. Leer temperatura con DS18B20 | Raspberry Pi 2
  5. Medición de temperatura con RASPBERRY PI
  6. Supervisión de la temperatura con Raspberry Pi
  7. Posture Pal con Walabot
  8. Introducción a TJBot
  9. Construyendo un segway con Raspberry Pi
  10. GoPiGo v2 con Windows IoT
  11. Combatiendo inundaciones en áreas urbanas con soluciones de red de IoT