Tabla de contenido:
- Paso 1: requisitos
- Paso 2: entrenamiento de datos
- Paso 3: implementación de las predicciones de la cámara Pi
- Paso 4: Robot Arduino
- Paso 5: prueba
- Paso 6: todos los archivos adicionales
Video: Robot de reconocimiento de señales de tráfico Raspberry Pi 4: 6 pasos
2024 Autor: John Day | [email protected]. Última modificación: 2024-01-30 08:41
Este instructable se basa en mi proyecto universitario. El objetivo era crear un sistema donde una red neuronal analiza una imagen y luego, basándose en el reconocimiento, le dice a un robot arduino que se mueva a través de Ros.
Por ejemplo, si se reconoce una señal de giro a la derecha, el robot girará a la derecha, si se reconoce una señal de giro a la izquierda, el robot girará a la izquierda, si no se reconoce ninguno, el robot continuará hacia adelante. El conjunto de datos que se utilizará es el reconocimiento oficial de señales de tráfico del INI (2019) (Institut Fur Neuroinformatik), este conjunto de datos tiene 43 clases, sin embargo, solo se necesitan dos; Las carpetas 00033 y 00034 del conjunto de datos son señales de giro a la izquierda y a la derecha.
Paso 1: requisitos
Los requisitos para este proyecto son los siguientes:
Un robot arduino. (básicamente un arduino uno, un controlador de motor y motores) (no es necesario si no está utilizando un robot)
Una frambuesa pi 4.
Una cámara pi.
Software requerido:
Python 3.
OpenCV 4.
Tensorflow.
arduino IDE (no es necesario si no está utilizando un robot)
Ros (no es necesario si no está utilizando un robot)
Cualquiera que sea su ide de python favorito (en el raspberry pi, uso Thonny).
Para configurar OpenCV y Tensorflow, siga las instrucciones de Adrian. Enlace:
Recomiendo mirar tantos de sus tutoriales como sea posible, son realmente interesantes y son útiles tanto para principiantes como para intermedios.
Paso 2: entrenamiento de datos
El script del tren está diseñado para acceder al conjunto de datos que compila alrededor de 50, 000 imágenes de 43 clases. La secuencia de comandos está escrita en Python, utilizando una variedad de bibliotecas: os: esto es para vincular la secuencia de comandos de Python al directorio correcto donde se encuentra el conjunto de datos. Matplotlib: esto es para mostrar los datos del modelo de entrenamiento. Tensorflow y keras: estas son las bibliotecas que se utilizan para crear el modelo de red neuronal artificial, se utilizan para diseñar el modelo. Numpy: esta biblioteca es para convertir imágenes en una matriz que luego se puede pasar por el modelo para recuperar una predicción.
El script adjunto es el código de Python para hacer un modelo a partir del conjunto de datos. Consiste en 2D convolucional con una entrada (5, 5) y una activación de relu y luego agrupación, una vez hecho esto, la entrada pasa por otra convolución con una entrada (3, 3) con la misma activación y agrupación. Esto sucede una última vez antes de aplanarse y luego se aplica la densidad a la cantidad de clases que hay, en este caso 43.
El siguiente paso fue compilar el modelo. Esta es la parte que establece el optimizador, un sgd era lo más adecuado ya que era similar al optimizador utilizado en la asignación 1. Sgd significa descenso de gradiente estocástico. También dentro del compilador es necesario establecer la pérdida, elegir una pérdida sparse_categorical_crossentropy es el mejor ajuste ya que las categorías son como números enteros y el modelo generará una predicción para cada clase como un valor flotante entre 0 y 1. 1 con una precisión del 100%.
Una vez que el compilador está completo, es necesario aplicar un generador para que el modelo comience a procesar las entradas de la imagen. El generador consta de varias partes: training_set: este es el enlace al conjunto de datos utilizado para el entrenamiento, steps_per_epoch: este es el número de pasos por época que se requieren, épocas: estas son las veces que el programa iterará a través de un conjunto completo de datos, validation_data: este es el enlace al conjunto de datos utilizado para la validación, validation_steps: el número de pasos utilizados para la validación, la validación ocurre al final de cada época.
Por lo general, se debe realizar un borrado completo de todo el conjunto de datos por época. Por lo tanto, por ejemplo, un conjunto de datos de 1024 imágenes requerirá: Tamaño de lote = 32, Pasos por época = 32, Épocas = 1. Cada paso incluye el tamaño de lote completo, por lo que con un tamaño de lote de 32 los pasos serán 32. En el otro Por otra parte, es mejor tener un tamaño de lote mayor que el número de clases, esto se debe a que si el tamaño de lote es más pequeño, entonces cada paso no puede incluir una imagen de cada clase.
Una vez que el modelo ha terminado de entrenar, usando matplotlib el programa hará un gráfico de los resultados, esto muestra el historial del entrenamiento de principio a fin. El gráfico consta de precisión, precisión de validación, pérdida y pérdida de validación, esto se divide por época para mostrar cómo progresó el entrenamiento. La etapa final es guardar el modelo como un archivo.h5 al que se puede acceder más adelante para el proceso de predicción. Guardar el modelo significa que cada vez que se ejecuta el programa de predicción, no es necesario volver a ejecutar el programa de entrenamiento. El programa de entrenamiento puede durar hasta 10 minutos por época en una frambuesa pi.
Se adjunta el guión de entrenamiento:
Paso 3: implementación de las predicciones de la cámara Pi
El siguiente programa es el guión de predicción y publicación.
La primera etapa es cargar el modelo usando model.load (). La segunda etapa es iterar a través de los fotogramas de la cámara pi usando opencv y luego cambiar el tamaño del fotograma al mismo tamaño que los tamaños de entrada utilizados en la etapa de entrenamiento, 32 x 32 píxeles. Una vez hecho esto, el nuevo marco redimensionado se pasa por el modelo usando model.predict () que genera una matriz, cada elemento de la matriz es un flotante de 0 a 1, el índice del elemento es el mismo que la clase que representa, por lo tanto el primer elemento es la clase uno y el número es la predicción de certeza de que la imagen es de esa clase. P.ej.
NOTA: Si no está utilizando el lado del robot. Simplemente elimine las líneas:
"importar rospy"
def hablante (dirección):
mensaje = Cadena ()
pub = rospy. Publisher ('robot', String, queue_size = 10)
rospy.init_node ('hablador', anónimo = Verdadero)
mensaje = dirección
rospy.loginfo (mensaje)
pub.publish (mensaje)"
"hablador (dirección)"
Se adjunta el script de la cámara Pi.
Paso 4: Robot Arduino
El último paso es el script del programa del robot.
Está escrito en C ++ y es un archivo.ino para arduino uno. El programa requiere la biblioteca ros que se puede encontrar en el administrador de bibliotecas dentro del ide. Una vez que esto se importa, hay archivos de ejemplo, elegí expandir el archivo de parpadeo del led ya que esto haría un objetivo similar al que necesitaba. El programa continúa en bucle hasta que se desconecta la energía, primero escucha al robot del tema, cuando detecta un comando de ese tema, tendrá una declaración if para ver lo que dice el comando. Si el comando se deja, el script ejecuta el método de giro a la izquierda, si el comando está a la derecha, ejecutará el método de giro a la derecha y, de lo contrario, ejecutará el método de avance. Estos tres métodos son muy similares entre sí, le dicen a los pines digitales que sean BAJOS (tierra) o 100 (PWM) para que el robot no sea demasiado rápido al decirle al controlador del motor que solo deje un poco de voltaje fuera. El orden de estas salidas es lo que hace que el robot gire a izquierda y derecha o avance, esto se debe a la orientación de la tensión que va a los motores.
Se adjunta el script.ino para arduino.
Paso 5: prueba
Las imágenes adjuntas para que el proyecto de principio a fin. La primera imagen muestra el entrenamiento en proceso. Una vez que se completa, se muestra una impresión del modelo realizado. La tercera imagen muestra una predicción del guión de entrenamiento. esta es la última etapa del guión de entrenamiento. Si busca en la carpeta en la que se encuentra el script de entrenamiento, se ha creado un gráfico y un modelo. El gráfico debería verse como la imagen 4 aquí, esto muestra el historial del entrenamiento de principio a fin.
La imagen final es mientras se ejecuta el script de la cámara pi, es una transmisión en vivo de la cámara pi. se hace una predicción en cada cuadro y la predicción se imprime en el terminal. El cuadro muestra lo que está viendo la cámara.
Se adjunta mi informe universitario para este proyecto. Lea para obtener más detalles del proyecto.
Paso 6: todos los archivos adicionales
Algunos de estos fueron archivos de prueba que hice a lo largo del camino.
Recomendado:
Transferir aprendizaje con NVIDIA JetBot - Diversión con conos de tráfico: 6 pasos
Transfiera el aprendizaje con NVIDIA JetBot - Diversión con los conos de tráfico: enséñele a su robot a encontrar un camino en un laberinto de conos de tráfico utilizando la cámara y el modelo de aprendizaje profundo de última generación
Seguridad ciberfísica del estacionamiento inteligente y el control del tráfico: 6 pasos
Seguridad ciberfísica del estacionamiento inteligente y el control del tráfico: Internet está creciendo con miles de millones de dispositivos, incluidos automóviles, sensores, computadoras, servidores, refrigeradores, dispositivos móviles y mucho más a un ritmo sin precedentes. Esto introduce múltiples riesgos y vulnerabilidades en la infraestructura, operación y
Controlador de señales de tráfico: 4 pasos
Controlador de señales de tráfico: a menudo existen escenarios en los que se requieren secuencias de señales de tráfico flexibles para la coordinación del tráfico a través de la intersección de una calle muy transitada y una calle lateral poco transitada. En tales situaciones, las secuencias se pueden controlar usando diff
Dispositivo de control de tráfico automatizado: 20 pasos
Dispositivo de control de tráfico automatizado: Advertencia: Antes de comenzar el proceso de construcción, asegúrese de usar el PPE adecuado y de seguir las normas de seguridad de OSHA. Use equipo de seguridad como gafas de seguridad, tapones para los oídos y guantes de impacto. Piezas necesarias: 1 " x 1 " tubo cuadrado - 5
Robot de control de tráfico de cartón: 8 pasos
Robot de control de tráfico de cartón: Estoy en el concurso de cartón. Si te gusta mi instructable, ¡vota por él! Después de estudiar este instructivo, aprenderás a diseñar y usar Cruizmo Cis. Cruizmo Cis es un robot inteligente que controla el tráfico. Controla ambos coches a