Tutorial: Detección de objetos con TensorFlow y Raspberry Pi PLC | Aprendizaje automático

Detectar objetos con una webcam USB y TensorFlow Object Detection | Inteligencia Artificial para la industria
8 de febrero de 2022 por
Tutorial: Detección de objetos con TensorFlow y Raspberry Pi PLC | Aprendizaje automático
Boot & Work Corp. S.L., Fernandez Queralt Martinez

La inteligencia artificial es una rama de la inteligencia computacional que pretende reproducir las capacidades cognitivas de los seres humanos, como la capacidad de aprender, resolver problemas o tomar decisiones.

En este post, vamos a ver cómo puedes trabajar también con inteligencia artificial y entrenar tus propios modelos de detección de objetos personalizados utilizando la API de detección de objetos de TensorFlow y la automatización industrial.

De esta manera, podrás crear una aplicación que, a través de una webcam, pueda analizar los objetos que la cámara detecta. Después, ¡activa o desactiva tantas salidas como quieras de tu PLC basado en Raspberry Pi!

Descubre nuestras 50 mejores aplicaciones industriales >>

Requisitos

1. ¿Qué es el aprendizaje automático?

El aprendizaje automático es una técnica de aprendizaje que permite a los ordenadores aprender a través de la experiencia, de forma similar a como lo hacen los humanos.

La técnica se basa en el uso de algoritmos que analizan una gran cantidad de datos y, a partir de ellos, identifican patrones de comportamiento.

Una vez identificados estos patrones, el ordenador puede utilizarlos para predecir el comportamiento de un objeto o persona en situaciones futuras.

Esta técnica se utiliza cada vez más en diversos sectores, como el comercio, la sanidad o la seguridad, ya que permite tomar mejores decisiones a partir de la información disponible.

2. ¿Qué es TensorFlow?

TensorFlow es una Librería de aprendizaje automático de código abierto utilizada en la industria de la inteligencia artificial.

Funciona creando redes neuronales artificiales, lo que le permite aprender de una gran variedad de datos.

TensorFlow también puede utilizarse para construir modelos de aprendizaje automático, lo que permite analizar y predecir el comportamiento de grandes conjuntos de datos.

Qué es TensorFlow - Tutorial: Tensorflow Object Detection with Raspberry PLC | Machine Learning

3. Instalación y configuración

Para configurar la instalación, vamos a instalar primero algunos paquetes en nuestro PC, con el fin de crear un modelo TensorFlow y enviarlo al PLC de código abierto Raspberry Pi al final de este tutorial:

1. Asegúrate de haber instalado git y pip. Si no es así, instálelos:

sudo apt update
sudo apt-get install git-all
sudo apt install python3-pip


2. Clonar el repositorio del Github de Nicholas Renotte

git clone https://github.com/nicknochnack/TFODCourse.git


3. Instala Jupyter Notebook.

pip install notebook

4. Creación de un entorno virtual

1. Crea un nuevo entorno virtual dentro del directorio TFODCourse llamado TensorFlow Object Detection (tfod), o añade el nombre que desee:

cd TFODCourse
python -m venv tfod


2. Actívalo.

  • Para Mac & Linux:
source tfod/bin/activate
  • Para Windows:
.\tfod\Scripts\activate


3. Actualizar e instalar las dependencias.

python -m pip install --upgrade pip


4. Añádelo a Jupyter Kernel.

pip install ipykernel 
python -m ipykernel install --user --name=tfod


5. Abre Jupyter Notebook.

jupyter notebook
Creación de un entorno virtual - Tutorial: Detección de objetos con Tensorflow y Raspberry PLC | Aprendizaje automático

5. Recogida de imágenes con la cámara web

1. Vamos a abrir primero el archivo 1. Image Collection.ipynb.

2. Vaya al menú > Kernel > Cambiar kernel > Selecciona tfod.

3. Iniciar la ejecución del cuaderno Jupyter: desde la celda número 1, hasta la sección número 5. Etiquetado de imágenes, incluido.

En caso de error, hay un Error guide.md que puede ser útil. Además, debes tener cuidado con la versión instalada, puede ser la razón principal de algunos de los errores. Si algunos de los pasos del cuaderno no funcionan, puedes probar a ejecutar los comandos en la ventana del terminal.
En el caso de que cv2.VideoCapture(0) no te permita tomar fotos, puedes cambiar el número del parámetro, ya que corresponde al mismo número que tu /dev/video0, que es el archivo de entrada de la cámara USB y luego guardar esas fotos en el directorio Tensorflow/workspace/images/collectedimages.

4. Al ejecutar la última celda, se abrirá una nueva ventana. Si no lo hace, intente ir al directorio donde está este programa y ejecute el siguiente comando:

cd ~/TFODCourse/Tensorflow/labelimg/
python labelImg.py
Recogida de imágenes con la webcam - Tutorial: Tensorflow Object Detection with Raspberry PLC | Machine Learning

6. Etiquetar imágenes para la detección de objetos

En el aprendizaje automático, hay diferentes formas de entrenar un modelo para reconocer un objeto en una imagen o en tiempo real utilizando la cámara web. En este tutorial, vamos a etiquetar todas las fotos que queramos. Cuantas más fotos hagamos, más fácil será para el modelo reconocer los objetos que ve a través de la webcam. 

1. Así que, una vez que esté en el software labellmg, haga clic en Abrir > Vaya al directorio Tensorflow/workspace/images/collectedimages y seleccione la imagen que desea etiquetar.

2. Haz clic en la letra "W" de tu teclado y selecciona el área de la imagen que quieras evaluar, establece una etiqueta y guárdala.

3. Haz lo mismo con todas las fotos.

Etiquetado de imágenes para la detección de objetos 1 - Tutorial: Detección de objetos con Tensorflow y Raspberry PLC | Machine Learning
Etiquetado de imágenes para la detección de objetos 2 - Tutorial: Detección de objetos con Tensorflow y Raspberry PLC | Machine Learning
Etiquetado de imágenes para la detección de objetos 3 - Tutorial: Detección de objetos con Tensorflow y Raspberry PLC | Machine Learning
Etiquetado de imágenes para la detección de objetos 4 - Tutorial: Detección de objetos con Tensorflow y Raspberry PLC | Machine Learning

Al guardar, verás que todos los XML se guardarán también junto a las imágenes a las que pertenecen.


4. Mueve todas las imágenes de la carpeta collectedimages a la del tren. Algo así como la imagen de la derecha.

5. Ahora, mueve en estas imágenes de cada etiqueta a la carpeta de prueba con su propio archivo XML.

6. Termina el archivo de la colección de imágenes de Jupyter Notebook y haz el paso número 6.

Etiquetado de imágenes para la detección de objetos 5 - Tutorial: Detección de objetos con Tensorflow y Raspberry PLC | Machine Learning

7. Modelo Zoo de TensorFlow

Una vez hecho el primer cuaderno, abre el segundo, llamado: 2. Formación y detección.

1. Importar os de la primera celda del cuaderno.

2. En la segunda celda, puedes ver que algunas variables tienen el nombre de "modelo". Si visitas la página de Github de Tensorflow Model Zoo >Esto es lo que verás.

Tensorflow 2 Detection Model Zoo es un modelo de pre-entrenamiento de detección de objetivos de TensorFlow.

Sus principales parámetros son:
Por un lado, la velocidad de detección de objetos, expresada en milisegundos. Y por tanto, cuanto menor sea el valor, más rápido detectará los objetos.

Y por otro lado, COCO mAP (Common Objects in Context) o una precisión media.

En nuestro caso, vamos a tomar el SSD MobileNet V2 FPNLite 320x320, ya que es un modelo preentrenado bastante equilibrado.

En caso de que quieras probar otro, sólo tienes que copiar la URL del Zoo del modelo de Tensorflow y pegarla asignada en la variable PRETRAINED_MODEL_NAME.
Además, cambia el PRETRAINED_MODEL_URL

TensorFlow 2 Detección Modelo Zoo - Tutorial: Detección de objetos con Tensorflow y Raspberry PLC | Aprendizaje automático

8. Formación y evaluación de la modalidad

3. A continuación, sigue los pasos hasta el paso 6, hasta imprimir el comando.

4. Cópialo y pégalo en tu ventana de terminal. Asegúrate de que estás en el entorno virtual de tu PC. 5. Puedes cambiar el número de pasos de entrenamiento que quieras. En nuestro caso, 2000 pasos son buenos para un entrenamiento correcto.

Este paso puede llevar algún tiempo.

5. Vamos a hacer lo mismo con el siguiente paso: 7. Evaluar el modelo

9. Detectar a partir de una imagen

1. Sigue hasta el paso 9: Detectar a partir de una imagen, en el que la tercera celda, trate de añadir una imagen a la carpeta Tensorflow/workspace/images/test, y establezca el nombre aquí:

Detectar a partir de una imagen 1 - Tutorial: Detección de objetos con Tensorflow y Raspberry PLC | Machine Learning
Detectar a partir de una imagen 2 - Tutorial: Detección de objetos con Tensorflow y Raspberry PLC | Machine Learning
Detectar a partir de una imagen 3 - Tutorial: Detección de objetos con Tensorflow y Raspberry PLC | Machine Learning

Siga ejecutando las celdas y vea cómo se detecta la imagen con una etiqueta en ella.

10. Detecciones de tu cámara web

Ahora, vamos a hacer algunas detecciones en tiempo real desde nuestra webcam USB.

1. No instales opencv-python-headless a menos que lo necesites.

2. A continuación, ejecuta la siguiente celda para detectar objetos en tiempo real 

Completa el Jupyter Notebook ejecutando el resto de celdas hasta el paso 12 en el que se llega a generar el archivo detect.tflite.

 
 

Por fin... ¡Detección de objetos TensorFlow con Raspberry Pi PLC!

Hasta ahora, hemos estado trabajando con nuestro portátil para generar el archivo detect.tflite. A partir de ahora, encenderemos nuestro controlador lógico programable Raspberry, conectaremos la cámara USB y probaremos nuestra aplicación en el PLC de automatización Raspberry Pi. Ten en cuenta que la velocidad de detección de objetos del PLC Raspberry se verá disminuida en comparación con la de tu ordenador. 

1. Entonces, el clon this repository en tu PLC industrial Raspberry.

git clone https://github.com/nicknochnack/TFODRPi


2. Instala las dependencias necesarias.

pip3 install opencv-contrib-python==4.1.0.25  #This step will take some time
sudo apt-get install libcblas-dev
sudo apt-get install libhdf5-dev
sudo apt-get install libhdf5-serial-dev
sudo apt-get install libatlas-base-dev
sudo apt-get install libjasper-dev 
sudo apt-get install libqtgui4 
sudo apt-get install libqt4-testv
echo "deb https://packages.cloud.google.com/apt coral-edgetpu-stable main" | sudo tee /etc/apt/sources.list.d/coral-edgetpu.list
curl https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add -
sudo apt-get update
sudo apt-get install python3-tflite-runtime


3. Copiar el modelo llamado detect.tflite en el mismo repositorio. Este es el archivo que acabamos de generar en el paso número 10, que se encuentra aquí: Tensorflow/workspace/models/raspberry_model/tfliteexport/saved_model/detect.tflite

Además, actualiza el archivo labels.txt para que represente sus etiquetas.


4. Edita tu archivo detect.py del PLC de la Raspberry y cambia estas líneas:

boxes = get_output_tensor(interpreter, 0)
classes = get_output_tensor(interpreter, 1)
scores = get_output_tensor(interpreter, 2)
count = int(get_output_tensor(interpreter, 3))

para estas líneas:

boxes = get_output_tensor(interpreter, 1)
classes = get_output_tensor(interpreter, 3)
scores = get_output_tensor(interpreter, 0)
count = int(get_output_tensor(interpreter, 2))

De lo contrario, puedes obtener un "Typeerror: Only size-1 arrays can be converted to Python scalars"


5. Por último, ejecuta las detecciones en tiempo real utilizando el script de Python detect.py.

python3 detect.py


Para más detalles, vea lo siguiente video tutorial >

Your Dynamic Snippet will be displayed here... This message is displayed because you did not provided both a filter and a template to use.

Buscar en nuestro blog

Tutorial: Detección de objetos con TensorFlow y Raspberry Pi PLC | Aprendizaje automático
Boot & Work Corp. S.L., Fernandez Queralt Martinez 8 de febrero de 2022
Compartir

¿Estás buscando tu Controlador Lógico Programable ideal?

Echa un vistazo a esta comparativa de producto de varios controladores industriales basados en Arduino.

Comparamos entradas, salidas, comunicaciones y otras especificaciones con las de los equipos de otras marcas destacadas.


Industrial PLC comparison >>>