Simple cámara de seguridad


En efecto gracias al nivel de integración alcanzado , cada vez hay soluciones más “sencillas” a problemas de computación en tiempo real que tradicionalmente han sido  muy complejos  como por ejemplo puede ser el reconocimiento y detección de imágenes en tiempo real .

Como muestra  de este tipo de soluciones  vamos a ver la placa ESP-EYE , una  pequeña placa de desarrollo del fabricante chino Espressif centrada en el  reconocimiento de imágenes  con  procesamiento de audio en aplicaciones AIoT

Realmente esta solución  se basa en dos componentes claramente  diferenciados:

  • El hardware  :  esta solución es soportable por muy diferentes propuesta  pero el  hw  más sencillo  y del que vamos  a ver en este post   el ESP-EYE , una placa de desarrollo  de  menos de 30€  para el reconocimiento de imágenes y el procesamiento de audio, que se puede utilizar en varias aplicaciones AIoT. Cuenta con un chip ESP32, una cámara de 2 megapíxeles y un micrófono. ESP-EYE ofrece mucho almacenamiento, con una PSRAM de 8 Mbyte y un flash de 4 Mbyte. También es compatible con la transmisión de imágenes a través de Wi-Fi y depuración a través de un puerto Micro-USB. Aunque el ESP-EYE es una opción en kit  muy asequible, el fabricante también ofrece una opción más potente :Esp-Wrover-Kit

 

  • El software :  ESP-WHO, que  es un marco de desarrollo de detección y reconocimiento de rostros diseñado para aplicaciones AIoT. Puede usarse con la placa de desarrollo ESP-EYE, el ESP-WROVER-KIT calificado por Amazon FreeRTOS u otras placas de desarrollo basadas en ESP32. Luego, al agregar solo unos pocos periféricos, como cámaras y pantallas, puede crear fácilmente aplicaciones AIoT completas.  Para ejecutar ESP-WHO, debe tener una placa de desarrollo que integre un módulo ESP32 que tenga suficientes pines GPIO y más de 4 MB de RAM externa SP  como la placa  anteriormente comentada (ESP-EYE ), aunque  no obstante  ESP-WROVER-KIT  también pueden ser otra opción como placa de pruebas.

 

Espressif ESP-EYE

Como hemos comentados hablado  estamos ante una Placa de desarrollo de Espressif para reconocimiento de imágenes y procesamiento de audio en aplicaciones AIoT.

Espressif , el fabricante  ofrece una solución AIoT completa que combina ESP32 con un marco de desarrollo de inteligencia artificial (AI).  Esta solución incluye la placa de desarrollo ESP-EYE, junto con los marcos de desarrollo IoT y AI de Espressif, también conocidos como ESP-IDF y ESP-WHO, respectivamente.

 

 

ESP-EYE es una placa de desarrollo para el reconocimiento de imágenes y el procesamiento de audio, que se puede utilizar en varias aplicaciones AIoT. Cuenta con un chip ESP32, una cámara de 2 megapíxeles y un micrófono, todo ello integrado en una minúscula placa de 8 x4 cm (mas o menos como un pen-drive USB).

ESP-EYE ofrece mucho almacenamiento, con una PSRAM de 8 Mbyte y un flash de 4 Mbyte. También es compatible con la transmisión de imágenes a través de Wi-Fi y depuración a través de un puerto Micro-USB.

 

 

Aunque el sl fabricante ha dejado disponible en Github su sw , también  puede apoyarse en otras soluciones del mismo fabricante como el ESP-WROVER-KIT-VB que f ofrece una solución integrada  AIoT completa que combina un ESP32 con un marco de desarrollo de inteligencia artificial   y además incluye la placa de desarrollo ESP-EYE, junto con los marcos de desarrollo IoT y AI de Espressif, también conocidos como ESP-IDF y ESP-WHO, respectivamente.

 

ESP-WROVER-KIT-VB

Es una placa de desarrollo de ultra bajo consumo altamente integrada que incluye Flash y PSRAM  agregando una interfaz USB, una pantalla LCD de 3.2 “, una interfaz de cámara OV7670 y una ranura para tarjeta micro SD.Alcanza un gran rendimiento con una RAM de 4.5 MB y una CPU de doble núcleo de 240 MHz permitiendo creer cámaras de Internet, pantallas inteligentes o radios de Internet conectando pantallas LCD, micrófonos y códecs ) , todo ello a un precio relativamente competitivo (  unos 62€)

Esta  placa Esp-Wrover-Kit  también del mismo  fabricante   Expressif es otra opción  que puede soportar el software  ESP-WHO , En este caso es una una placa de desarrollo calificada por AWS( Amazon Web Services ) . Además del ESP-IDF SDK de Espressif, puede usar Amazon FreeRTOS en ESP-WROVER-KIT-VB. Amazon FreeRTOS proporciona conectividad lista para usar con AWS IoT, AWS Greengrass y otros servicios de AWS.

Aunque  ESP32 admite la depuración JTAG, este modulo  ESP-WROVER-KIT-VB integra un depurador USB también, lo cual  hace que la depuración y el rastreo de aplicaciones complejas sea muy fácil, sin la necesidad de ningún hardware adicional.

ESP-WROVER-KIT-VB es pues la versión mejorada del ESP-WROVER-KIT ( de hecho cuesta casi el doble que la  version anterior) . Su PSRAM  en l aversion 2 aumenta a 8 MBytes, mientras que esta placa de desarrollo también cuenta con una interfaz de tarjeta Micro-SD de alta velocidad, una interfaz de cámara VGA, un panel LCD SPI de 3.2 ”y capacidades de expansión de E / S. Asimismo cuenta con  un procesador de doble núcleo, radios Bluetooth y WiFi, y 520 KB de SRAM.

Ultimamente estan distribuyendo la versión 3 que contiene 32 Mbit adicionales de PSRAM  siendo  el ESP32 s compatible con SPI, I2C, serie, etc.

Espressif admite dos cadenas de herramientas:

  • El entorno de lenguaje C nativo que se ejecuta bajo el sistema operativo en tiempo real FreeRTOS
  • El entorno Arduino C / C ++. Los programas desarrollados usando el entorno Arduino en realidad se ejecutan como una tarea en FreeRTOS y pueden usar las bibliotecas FreeRTOS.

Puede ser  preocupante el soporte para el controlador LCD  ya  que las versiones 2 y 3 de la placa utilizan un controlador ST7789V pero la placa de la versión 1 utiliza un controlador ILI9341.  La última versión de la demostración TFT simple en ESP32 SDK llamada spi_master se puede configurar para ejecutarse en cualquiera de los ESP32-WROVER-KIT. No obstante “Loboris” en github tiene una biblioteca TFT  con todas las funciones con opción de configuración para construir la biblioteca y el programa de demostración para la versión 3 WROVER-KIT. Incluso con SPI, la actualización de la pantalla es muy rápida.

No se incluye documentación con la placa, pero hay mucha documentación en la web, y el SDK nativo viene con una serie de ejemplos útiles. La desventaja es que el ESP32 es relativamente nuevo, parte del software está cambiando y faltan algunas bibliotecas de Arduino.

Sin dua el ESP32-WROVER-KIT es una gran pieza de hardware, aunque su uso requiere cierta experiencia con microcontroladores y cierta tenacidad para examinar la documentación en línea y el código de ejemplo , pero quizás valga la pena el esfuerzo por toda la potencia que le brinda esta placa.

EL software

El sw   necesario se  compone del  marco de desarrollo IoT  ( también llamado ESP-IDF  ) y la AI de Espressif ( también conocidos como ESP-WHO ).

Para ejecutar ESP-WHO, debe tener una placa de desarrollo que integre un módulo ESP32 generico que tenga suficientes pines GPIO y más de 4 MB de RAM externa SPI  y una cámara CCD . Lo mas sencillo es usar el  ESP-WROVER-KIT o el recomndado  por el fabricante:  el   ESP-EYE que hemos visto integra el ESP32 y la cámara integrado en una solución de bajo coste

 

 

ESP-WHO es pues  la utilidad de detección, reconocimiento e imagen son el núcleo de la plataforma   constando en realidad de los siguientes módulos:

  • Image Utility ofrece API de procesamiento de imágenes fundamentales.
  • La detección toma imágenes como entrada y proporciona la posición de la cara si hay una cara. Se implementa con el modelo MTMN, que se refiere a MTCNN y MobileNets .
  • El reconocimiento es identificar a la persona en particular y necesita los resultados de la detección. Se implementa con el modelo MobileFace.
  • La optimización consiste principalmente en aumentar la precisión de la inferencia y acelerar todo el proceso. Pero también podría cambiar la estructura de la red, actualizar los coeficientes, refactorizar el código, etc.

Tanto la entrada como la salida son flexibles porque las fuentes de imagen pueden ingresarse a través de la cámara ( aunque sin embargo, no proporcionan  muchos controladores en este momento, ya que los de otros módulos de cámara se lanzarán en el futuro)  y porque los resultados se pueden mostrar  a través de la línea de comando, un LCD o incluso el sitio web a través del servicio de Wi-Fi http.

 

Para saber cómo configurar el módulo ESP32 para sus aplicaciones, puede consultar el archivo README.md de cada ejemplo del respositorio de github ( https://github.com/espressif/esp-who )

Preparación de software

La resolución recomendada de la imagen de entrada es QVGA (320×240) . En cuanto a elegir la cámara si no usa el citado modulo recomendado  ESP-EYE      el módulo ESP32 usado   deberá tener libre los  pines específicos según la  cámara que use Por ahora el  sw  proporcionado soporta el controlador de OV2640 y OV3660 , que son muy recomendables para comenzar.

Veamos como instalar los dos módulos sw necesarios:

 ESP-WHO

Asegúrese de clonar el proyecto de forma recursiva usando el siguiente comando:

git clone --recursive https://github.com/espressif/esp-who.git

Si clona un proyecto sin --recursive ( es decir usando el indicador --recursive), vaya al directorio esp-who y ejecute el comando git submodule update --init antes de hacer nada.

 ESP-IDF

Consulte las guías de configuración para obtener instrucciones detalladas para configurar el ESP-IDF:Guía de inicio para la versión estable de ESP-IDF

En este caso, tomamos ESP-IDF v3.2 como la versión de prueba.Si ya ha configurado ESP-IDF antes y no desea cambiar el existente, puede señalar IDF_PATH al ESP-IDF que se encuentra en ESP-WHO.

 Otros componentes sw

Otros componentes  sw necesarios lo constituye  el marco principal del SDK, con algunos controladores y algunos  algoritmos dentro.

  • Cámara :  El componente de cámara contiene controladores para dispositivos de cámara de ESP32.
  • Face de esp: El componente esp-face contiene las API de las redes neuronales ESP-WHO, incluido el marco de detección y reconocimiento de rostros.

Ejemplos

La carpeta de /examples/  del respositorio de github ( https://github.com/espressif/esp-who )   contiene ejemplos de aplicaciones que demuestran las características API de ESP-WHO.

Una buena muestra es la  detección de rostros , para lo cual habría que seguir los siguientes pasos:

  1. esp-who/examples/single_chip/detection_with_command_line a una carpeta de ejemplo esp-who/examples/single_chip/detection_with_command_line .
  2.  cd esp-who/examples/single_chip/detection_with_command_line
  1. Compila y actualiza el proyecto.   idf.py build idf.py flash -p [PORT]
  1. Los usuarios avanzados pueden modificar algunas opciones mediante el comando idf.py menuconfig .

Verifique README.md de cada ejemplo  del respositorio de github ( https://github.com/espressif/esp-who )      para más detalles.

Demo

En el siguiente , podemos ver  cómo hacer su propio proyecto de seguridad para el hogar en solo 5 minutos utilizando la placa   ESP-EYE y una Raspberry Pi para visualizar el resultado aunque   puede usarse un pc portatil ,tableta , etc en su lugar  . Este proyecto  además es  plug and play pues  apenas  requiere ningún conocimiento de codificación o hardware.
Para  hacer su propio  dispositivo de transmisión inalámbrica por tanto sólo usaremos  una a pantalla LCD táctil conectada a la Raspberry pi . Como normalmente el fabricante del LCD suele incluir las instrucciones necesarias para  conectar esta a la Raspberry Pi y que sea funcional en la demo  no se requiere ninguna codificación y tampoco  ningún circuito   ya que nos bastará  conectar estos dispositivos y empezar a transmitir
En realidad  no es dificil  conectar un apantalla tactil a una raspberry pi   , pues de  hecho en este  blog vimos en este post http://soloelectronicos.com/2018/12/02/como-instalar-una-pantalla-tactil-de-5-en-una-raspberry-pi-3/  como hacerlo con un simple escudo   de kuman  y  cargando en nuestra Raspberry Pi la imagen de Raspbian con los drivers ya instalados

En primer lugar necesitaremos encender este ESP  alimentando con 5v DC por medio del puerto microUSB . En el inicio del LED rojo se enciende  en el ESP ,pero   el LED rojo comenzará a parpadear que revela que este dispositivo  se despierta  y ha creado  su punto de acceso propio al  que se  puede  conectar todos los dispositivos .

En este ejemplo  como se usa  Raspberry Pi para ver  los datos  que vienen del CSPI ,encenderemos la placa Raspberry Pi . Para la primera vez que se conecte es recomendable  tener teclado y ratón conectados a la Raspberry Pi , pero esto  sólo será para  la primera vez  pues después  el ajuste se guardará en esta Raspberry Pi y no necesitará  teclado y ratón ,ya que se puede utilizar  la pantalla táctil

Cómo  está abierto  el punto de acceso ,sólo necesitamos para conectar a través de este punto ,  abrir el navegador web y conectarnos a esta dirección IP( doble barra oblicua ,dos puntos y la ip del módulo y   podremos ver  la imagen que esta transmitiendo la cámara .

Para la  segunda vez no hay necesidad de utilizar este tipo de teclado porque una Raspberry Pi automáticamente se conectara con este punto de acceso particular y en el navegador puede usar esta dirección IP ,la cual  se guardará en el historial para que pueda tocar    la  dirección IP en el historial  y acceder directamente

 

 

En este video, pues  hemos visto cómo hacer su propio proyecto de seguridad para el hogar en solo 5 minutos utilizando el tablero ESP-EYE y Raspberry Pi, proyecto por cierto que como hemos visto es plug and play , y no requiere ningún conocimiento de codificación o hardware.

!Este módulo sin duda es una versátil aliado para múltiples retos  que se nos presente!

 

Contador con reconocimiento facial para Raspbery Pi 3


Con una Raspberry Pi se pueden hacer muchas cosas , pero seguramente  se sorprenda que incluso puede utilizar la cámara para experimentar  con reconocimiento facial, labor que ha hecho  DekuNukem utilizando una Raspberry Pi 3, el módulo de la cámara de Raspberry Pi y una pantalla OLED para la visualización de los datos

 El concepto es relativamente simple: la pi-camera toma una foto cada 15 segundos, de modo que  si se encuentra nuestra cara, la cual  previamente habremos cargado, se registra la hora actual. y el tiempo registrado se suma para calcular el  horario laboral exacto todas las semanas mostrándose el resultado en una pantalla OLED.

Para este proyecto  estrictamente como puede deducirse  no es necesario incluir la pantalla OLED  ya que nos  podemos  conectar  a la propia Raspberry Pi  3 para consultar ese dato , pero definitivamente la pantalla extra añade inmediatez y flexibilidad , dejando ver el tiempo diario y semanal de un vistazo sin tener que acceder su frambuesa Pi para ver  los datos.

 

dekuNukem facepunch raspberry pi facial recognition

 

Resumiendo estos son los componentes usados :

  • Raspberry Pi 3 Model B. También podría funcionar en Zero
  • Módulo de cámara Raspberry Pi
  • OPCIONAL : pantalla OLED de 1.3 pulgadas de 128×64. Pantallas de 0.96 pulgadas OLED también funcionan.Que sea  OLED es opcional; Omita los pasos relacionados con la pantalla si se opta por no usar  esta

Modulo de visualización

Se  puede conectar una OLED a la  Pi con el Pi interfaz I2C o SPI. En general, I2C utiliza menos pines  pero es algo más lenta. SPI es mas rápido, pero requiere un numero o de pines del GPIO  extra por lo que esta elección  debe considerarse en función de sus necesidades .

La interfaz I2C es la normal que se use por su mayor sencillez    pero para ‘escritura’ en la pantalla solamente, asi todavía tendrá el marco entero 512 bytes del búfer en el microcontrolador RAM  aunque no se podran  leer datos de lo OLED (aunque I2C es un protocolo bidireccional).

Antes de comenzar el cableado de la  pantalla , en muchas  de estas debe conectarse  una franja de pines que deben soldarse a la placa  OLED , pues no es posible  simplemente hacer las conexiones enrollándolos a las cabeceras

Si su OLED compatible con I2C y SPI, asegúrese de comprobar cómo se configuran los puentes de soldadura para configurar  la interfaz correcta, asi que para comenzar, usted necesitará  dos puentes en la parte posterior de la pantalla OLED de la soldadura. Debe soldarse como ‘cerrado’ para   configurar la pantalla en modo  I2C

 

Para usar la  Raspberry Pi  3 , habilitar I2C antes desde el interfaz  de Raspbian antes de cablearlo

Las conexiones necesarias son las siguientes:

  • Conectar pin 3  de GND   de la  Raspberry Pi  3 , al pin GND de la  pantalla  (cable negro).
  • Conectar  VIN  de la pantalla  al pin 1  Raspberry Pi  3 , de 3.3 voltios (cable rojo).
  • Conectar el terminal Reset de la pantalla al pin pin32 de la  Raspberry Pi  3 ,   (cable azul). Alternativamente puede usar cualquier pin digital libre de GPIO para el pin de reset.
  • Conecte el pin SCL de la pantalla  al pin 5 SCL de la   Raspberry Pi  3 ,  (cable morado).
  • Conectar el pin SDA  de la pantalla al pin 3 SDA de la  Raspberry Pi  3   (cable naranja).

 

 

El módulo de cámara es un complemento personalizado y diseñado para Rasbperry Pi. Se conecta a Raspberry Pi a través de uno de los dos pequeños conectores de la parte superior de la placa. La cámara debe ser  compatible con la última versión de Raspbian, el sistema operativo preferido de Raspberry Pi.

El módulo en sí, es pequeño, en torno a 25 mm x 20 mm x 9 mm. Se conecta a Raspberry Pi  3 mediante un cable plano flexible al conector  de cámara .

Sin título.png

Resto de conexiones

Como dekuNukem explica en el repositorio de GitHub para la construcción del prototipo se puede utilizar una placa de  prototipos para montar  incluso  la pantalla  adhiriendo  esta a la pcb , conectado el conjunto a la Raspberry  Pi  por el GPIO   ,lo cual es  una forma agradable y sencilla de tener  todo el proyecto juntos sin cables sueltos o incluso simplificar  si  se necesita modificarlo.

Puede colocar la cámara y el OLED juntos en una placa perforada que se conecta al bus GPIO  o por supuesto, puede colocarlos en otro lugar o diseñar su propia PCB.

 

Librerias necesarias

Para este proyecto se necesitan las siguientes librerias:

 

Proporcione su foto

El programa necesita una imagen de su rostro para saber cómo se ve. Obtenga una imagen de su cara bien iluminada con un fondo limpio, llamándola por ejemplo  me.jpg y colóquela en la carpeta del software.

La resolución debe ser de alrededor de 400×400, de lo contrario el tiempo de procesamiento va a ser largo. Ya se proporciona un ejemplo, así que simplemente reemplace esta  por el suyo.

Ejecucion del programa

Ejecute python3 detect.py para iniciar la detección de rostros y el registro.
Ejecute python3 display_oled.py para mostrar las estadísticas de tiempo en el OLED.
O si no usa un OLED, ejecute python3 display_text.py para imprimir las estadísticas en el terminal.
Es posible que tenga que expeimentar r con camera.rotation y camera.brightness al principio de detect.py, dependiendo de cómo esté orientada la cámara y de su condición de iluminación. Puede abrir image.jpg para ver la última foto tomada.
El pin de reinicio OLED predeterminado es 17, cámbielo a lo que usa en display_oled.py.

 

 

Esta  incursión en reconocimiento facial  puede  incorporarse  en  otros proyectos de automatización del hogar:  como por ejemplo  una identificación de usuario de Magic Mirror, quizás, o un timbre que reconoce a amigos y familiares.

En todo caso la idea presentada  en su simpleza destaca uan genialidad  pues  nos  da una estadística visual y desatendida de las horas que nos pasamos delante de la pantalla.