Identificación de objetos con Raspberry Pi

Publicado por Loli Diéguez en

Podemos entrenar nuestra Raspberry Pi para que identifique objetos, incluidos otras Pis!. En este tutorial, entrenaremos nuestra Raspberry Pi para identificar objetos con Machine Learning (ML).

¿Porqué un algoritmo de este tipo es es importante? bueno, tienen muchas aplciaciones, desde detectar errores en placas implresas de circuitor hasta detectar malformaciones en planchas de acero; aplicar ML o Machine Learning en procesos de produccion puede permitir la deteccion temprana de defectos, lo cual puede suponer un ahorro enorme a la hora de detectar problemas antes de enviar la produccion a destino.

Pero en este artículo, usaremos una plataforma web llamada Edge Impulse para crear y entrenar nuestro modelo y asi acelerar parte del proceso

Usaremos BalenaCloudOS en lugar del sistema operativo Raspberry Pi estándar, ya que la gente de Balena preconstruyó una llamada API a Edge Impulse.

 

Material necesario

  • Raspberry Pi 4, Raspberry Pi 400 o Raspberry Pi 3
  • Tarjeta microSD de 8 GB (o más grande)
  • Cámara Raspberry Pi, cámara HQ o cámara web USB
  • Fuente de alimentación para tu Raspberry Pi
  • Tu teléfono inteligente para tomar fotos
  • Windows, Mac o Chromebook
  • Objetos para clasificación

Notas: 

  • Si estás utilizando una Raspberry Pi 400, necesitarás una cámara web USB ya que la Pi 400 no tiene una interfaz de cable plano. 
  • NO necesitas un monitor, mouse o teclado para tu Raspberry Pi en este proyecto.
  • Duración: planifica un mínimo de 1 a 2 horas para completar este proyecto.

Crear y entrenar el modelo en Edge Impulse  

1. Ves a Edge Impulse y crea una cuenta gratuita (o inicia sesión) desde una ventana del navegador en tu ordenador o portátil (Windows, Mac o Chromebook).

Adquisición de datos

2. Selecciona "Adquisición de datos" en la barra de menú de la izquierda.

3. Carga fotos desde tu escritorio o escanea un código QR con tu teléfono inteligente y toma fotos. En este tutorial, optaremos por hacer fotos con nuestro smartphone.

4. Selecciona "Mostrar código QR" y debería aparecer un código QR en tu pantalla, tienes otros métodos para cargar fotos, selecciona el que mejor te venga, en todos ellos deberás aceptar las condiciones legales si quieres usar este servicio.

5. Escanea el código QR con la aplicación de la cámara de tu teléfono. 

6. Selecciona "Abrir en el navegador" y serás dirigido a un sitio web de recopilación de datos. No necesitarás descargar una aplicación para recopilar imágenes.

7. Acepta los permisos en tu teléfono y dale a "¿Recopilar imágenes?" en la pantalla del navegador de tu teléfono. 

8. Si te solicita permisos, toca el botón "Dar acceso a la cámara" y permite el acceso en tu dispositivo. 

9. Toca "Etiqueta" e introduce una etiqueta para identificar la seria de fotos que vas a cargar.

10. Toma entre 30 a 50 fotos de tu artículo en varios ángulos. Algunas fotos se usarán para entrenamiento y otras fotos se usarán para probar el modelo. Edge Impulse divide automáticamente las fotos entre entrenamiento y prueba. 

11. Repite el proceso de para todos los objetos que quieras detectar, recuerda tomar entre 30 a 50 fotos por objeto hasta que tengas al menos 3 objetos completos. Recomendamos de 3 a 5 objetos identificados para tu modelo inicial. Tendrás la oportunidad de volver a entrenar el modelo con más fotos y / o tipos de objetos más adelante en este tutorial. 

Desde la pestaña "Adquisición de datos" en la ventana principal de Edge Impulse, deberías ver el número total de fotos tomadas (o cargadas) y el número de etiquetas (tipo de objetos) que has clasificado (es posible que debas actualizar la pestaña para ver la actualización).Opcional: puedes hacer clic en cualquiera de las muestras de datos recopiladas para ver la foto cargada. 

 

Diseño

12. Haz clic en "Create Impulse" en la opcion "Impulse Design" en el menú de la columna izquierda, justo debajo de "Data Aquisition"

 

13. Haz clic en "Agregar un bloque de procesamiento" y selecciona "Imagen" para agregar la imagen a la segunda columna de la izquierda.

14. Haz clic en "Agregar un bloque de aprendizaje" y selecciona "Transferir aprendizaje".

15. Haz clic en el botón "Save Impulse" en el extremo derecho.

16. Haz clic en "Imagen" en "Impulse Design" en la columna del menú de la izquierda.

17. Selecciona "Generar funciones" (Generate Features) a la derecha de "Parámetros" cerca de la parte superior de la página.

18. Haz clic en el botón "Generar funciones" (Generate Features) en la parte inferior del cuadro "Conjunto de formación". Esto te puede llevar entre 5 a 10 minutos (o más) dependiendo de la cantidad de imágenes que hayas subido. 

19. Selecciona "Transferir aprendizaje" (Transfer Learning) dentro de "Diseño de impulso"establece la configuración de entrenamiento (manten los valores predeterminados, marca la casilla "Aumento de datos") y haz clic en "Iniciar entrenamiento".  Este paso también te llevará 5 minutos o más dependiendo de la cantidad de datos. 

 

Después de ejecutar el algoritmo de entrenamiento, podrás ver la precisión prevista del modelo. 


Prueba el modelo

20. Selecciona "Prueba de modelo" en el menú de la columna de la izquierda.

21. Haz clic en la casilla de verificación superior para seleccionar todo y presiona "Clasificar seleccionados" para probar tus datos. El resultado de esta acción será un porcentaje de precisión de tu modelo.

Si el nivel de precisión es baja, te sugiero que vuelvas al paso "Adquisición de datos" y que agreges más imágenes o elimines un conjunto de imágenes. 


Prueba de modelo

22. Selecciona "Implementación" en la columna del menú de la izquierda. 

23. Selecciona "WebAssembly" para tu biblioteca. 

24. Desplázate hacia abajo ("Cuantificar" debe estar seleccionado por defecto) y haz clic en el botón "Construir" . Este paso también puede tardar 3 minutos o más dependiendo de la cantidad de datos.


Configuración de BalenaCloud 

En lugar del sistema operativo Raspberry Pi estándar, montaremos BalenaCloudOS. BalenaCloudOS está prediseñado para integrarse con Edge Impulse y elimina la necesidad de conectar un monitor, mouse y teclado a nuestra Raspberry Pi. 

25. Crea una cuenta gratuita de BalenaCloud . Si ya tienes una cuenta de BalenaCloud, inicia sesión en BalenaCloud.

26. Implementa una aplicación balena-cam-tinyxml aquí . Nota: Debes haber iniciado sesión en tu cuenta de Balena para que esto te dirija automáticamente a la creación de una aplicación balena-cam-tinyml.

27. Haz clic en "Implementar en la aplicación" o "Deploy Application"

Después de crear tu aplicación balena-cam-tinyml, te llevará a la página "Dispositivos". ¡No crees un dispositivo todavía!

28. En Balena Cloud, selecciona "Variables de servicio" y agrega las siguientes 2 variables:

Variable 1:

      Servicio: edgeimpulse-inference 

      Nombre: EI_API_KEY 

      Valor: [clave de API encontrada en el panel de control de Edge Impulse]. 

Para obtener tu clave de API, ves a tu panel de control de Edge Impulse, selecciona "Claves" y copia tu clave de API.  

 

Regresa a Balena Cloud y pega tu clave de API en el campo de valor de tu variable de servicio.

Haz clic en "Agregar".

Variable 2:

      Servicio: edgeimpulse-inference 

      Nombre: EI_PROJECT_ID

      Valor: [ID del proyecto de tu panel de control de Edge Impulse]. 

Para obtener tu ID de proyecto, vete a tu Panel de control de Edge Impulse, selecciona "Información del proyecto", desplázate hacia abajo y copia tu "ID de proyecto".  

Regresa a Balena Cloud y pega tu ID de proyecto en el campo de valor.

 

27. Selecciona "Dispositivos" en el menú de la columna izquierda en tu BalenaCloud y haz clic en "Agregar dispositivo".

28. Selecciona tu tipo de dispositivo (Raspberry Pi 4, Raspberry Pi 400 o Raspberry Pi 3). 

29. Selecciona el botón de radio para Desarrollo.

30. Si usas Wifi, selecciona el botón de opción "Wifi + Ethernet" e introduce tus credenciales de Wifi. 

31. Haz clic en "Descargar balenaOS" y se iniciará la descarga de un archivo zip.

32. Descarga, instala y abre la aplicación Balena Etcher en tu escritorio (si aún no la tienes instalada). Raspberry Pi Imager también funciona, pero es preferible Balena Etcher, ya que estamos flasheando BalenaCloudOS.

33. Inserta tu tarjeta microSD en tu ordenador.

34. Selecciona la imagen descargada recientemente de BalenaCloudOS y el flash a tu tarjeta microSD. Ten en cuenta que todos los datos se borrarán de tu tarjeta microSD. 

Conecta el hardware y actualiza BalenaCloud 

35. Retira la tarjeta microSD de tu ordenador e insértalo en tu Raspberry Pi .

36. Conecta la cámara web o Pi Camera a tu Raspberry Pi. 

37. Enciende la Pi. Espera entre 15 a 30 minutos para que su Pi se inicie y BalenaOS se actualice. (Solo el arranque inicial requiere una actualización larga). Puedes verificar el estado de tu sistema operativo Pi Balena Cloud en el panel de control de BalenaCloud.

Identificación de objeto

38. Identifica tu dirección IP interna desde tu dispositivo de panel de BalenaCloud. 

39. Introduce esta dirección IP en una nueva pestaña o ventana del navegador. Funciona muy bien en Safari, Chrome y Firefox. 

40. Coloca un objeto frente a la cámara

Deberías comenzar a ver una clasificación de probabilidad para tu objeto en la ventana de tu navegador (con tu dirección IP interna). 

41. Prueba varios objetos que ingresaste en el modelo y quizás incluso objetos que no hayas usado para entrenar el modelo. 

Redefiniendo el modelo

  • Si encuentras que la identificación no es muy precisa, primero verifica la precisión del modelo para ese elemento, en la pestaña Prueba del modelo de Edge Impluse.
  • Puedes agregar más fotos siguiendo los pasos de Adquisición de datos y luego seleccionando "Volver a entrenar modelo" en Edge Impulse.
  • También puedes agregar más elementos etiquetando y cargando en Adquisición de datos y reentrenando el modelo.
  • Después de cada reentrenamiento del modelo, verifica la precisión y luego vuelve a implementar ejecutando x "WebAssembly" dentro de la Implementación.
Espero que te haya resultado interesante este artículo.

    Compartir esta publicación



    ← Publicación más antigua Publicación más reciente →