Tabla de contenido:

Timbre con reconocimiento facial: 7 pasos (con imágenes)
Timbre con reconocimiento facial: 7 pasos (con imágenes)

Video: Timbre con reconocimiento facial: 7 pasos (con imágenes)

Video: Timbre con reconocimiento facial: 7 pasos (con imágenes)
Video: ASÍ FUNCIONA un timbre inteligente | Ring Video Doorbell 3 | El test 2024, Mes de julio
Anonim
Timbre con reconocimiento facial
Timbre con reconocimiento facial

Motivación

Recientemente, ha habido una ola de robos en mi país dirigidos a personas mayores en sus propios hogares. Por lo general, el acceso lo otorgan los propios ocupantes, ya que los visitantes los convencen de que son cuidadores / enfermeras. Está más allá de las palabras, lo enojado y triste que me hacen sentir estas historias. El hogar debe ser su primer refugio seguro y más aún si ya se encuentra en una posición vulnerable cuando está afuera. Con esto en mente, comencé este proyecto.

Información general

El sistema de timbre está diseñado principalmente para personas mayores o con problemas de visión y es bastante sencillo en su funcionamiento. En resumen, el interruptor del timbre activa la cámara para obtener imágenes. A continuación, los rostros en el metraje se detectan y se combinan con una lista blanca y una lista negra. El ocupante obtiene una respuesta visual clara mediante una clara pantalla de semáforo. De este modo, la luz verde, amarilla o roja indica que la persona (s) está en la lista blanca, desconocida para el sistema o en la lista negra, respectivamente. Si se enciende la luz amarilla o roja, un bot de Telegram envía la foto para informar / advertir a un familiar o cuidador.

Nivel de experiencia

El proyecto fue creado para entusiastas que tienen especial curiosidad por utilizar la visión por computadora y la inteligencia artificial. Este instructivo está escrito para una audiencia de principiantes, ¡así que no se preocupe si no tiene experiencia! Además, el proyecto también puede ser interesante para los creadores más experimentados, ya que la canalización está organizada de manera que usted pueda expandirla con su propia visión por computadora y sus ideas de reconocimiento facial sin mucha molestia.

Paso 1: Materiales

Materiales
Materiales

Lista de productos con requisitos mínimos:

Producto Enlace Comentario
Frambuesa Pi 3b RPi Link muestra RPi 4 ya que tiene un rendimiento mucho mejor y casi el mismo precio que el RPi 3b.
Micro SD Amazonas Una tarjeta micro SD de 16 GB o más funcionará. Pero las tarjetas de 16 GB en Amazon ahora tienen más o menos el mismo precio que las tarjetas de 32 GB.
Cámara Raspberry Pi Amazonas La cámara v1 es más barata, pero la v2 es mejor y tendrá más soporte.
Cable flexible FPC de 15 pines Amazonas La duración en realidad depende de las circunstancias de la realización de este proyecto. Si solo desea construir un prototipo, el cable flexible original hará el trabajo.
Fuente de alimentación 5v micro usb Adafruit ¡Este nunca decepcionó! Gran calidad. (No en la foto)
Botones arcade con LED incorporado Amazonas Elija el tamaño que desee, pero el diseño CAD se basa en botones de 60 mm
Resistencias Amazonas Solo necesita un par de resistencias de 1k y 100 ohmios. Los 1 / 4W regulares están bien.
Condensadores 0,1 uF Amazonas Se necesitan tres condensadores. (No en la foto)
Cables de puente / cable plano AmazonAmazon Si desea ahorrar algo de dinero, también puede usar un cable plano de unidad de disquete viejo (ver foto).
Tubo retráctil / cinta aislante AmazonAmazon

Herramientas necesarias:

Herramienta ¿Esencial? Comentario
Soldador
Multimetro
Pelacables O puede usar un cuchillo / tijeras.
Cortador láser No
impresora 3d No
Abrazaderas No Útil para mantener la caja unida en la fase de prueba.

Observaciones:

Para aumentar la accesibilidad del proyecto, decidí desarrollarlo usando una Raspberry Pi 3b. Si bien aumenta la accesibilidad, disminuye las capacidades de la aplicación ya que los RPi no son tan rápidos. Si está buscando una computadora de placa única que sea más rápida, es posible que desee echar un vistazo a la NVIDIA Jetson Nano

Paso 2: cableado

Alambrado
Alambrado
Alambrado
Alambrado
Alambrado
Alambrado

El diagrama esquemático es más informativo para este paso y se explica por sí mismo. En caso de que sea nuevo en la electrónica, puede utilizar la imagen de la leyenda. El valor del componente (si corresponde) se indica en el diagrama esquemático. Las fotos pueden ayudar a ver cómo construyo el circuito. Básicamente, conecté todos los componentes lo más cerca posible del botón de arcade, lo que da como resultado una visión general clara de lo que está sucediendo.

Observaciones:

  • Realmente me gusta usar conectores de cable plano, ya que son mucho más resistentes que los cables de un solo puente.
  • Como se sugirió, he usado un cable plano extraído de una computadora vieja. Sin embargo, esto es un poco complicado, ya que tendrá que afirmar manualmente la configuración del cable. En este proyecto, por ejemplo, descubrí que algunos agujeros estaban conectados entre sí (probablemente se usaron como tierra para la aplicación original). Por lo tanto, tuve que conseguir un cable diferente más tarde, como se puede ver en las imágenes.

Paso 3: construcción de la carcasa

Construyendo la carcasa
Construyendo la carcasa
Construyendo la carcasa
Construyendo la carcasa
Construyendo la carcasa
Construyendo la carcasa
Construyendo la carcasa
Construyendo la carcasa

Carcasa de cámara

Muchas carcasas para picamera se pueden descargar gratuitamente de Internet. Por lo tanto, elijo no reinventar la rueda y elijo una carcasa básica pero agradable de Internet: thingiverse.com - carcasa / carcasa de cámara Raspberry pi. (Saludos al diseñador VGer).

Carcasa de semáforo

Para la carcasa del semáforo, diseñé una pequeña caja en Autodesk Fusion 360 (que se puede descargar gratuitamente, ver Comentarios) que se adapta a todo el hardware. En el archivo adjunto, puede encontrar el archivo que he enviado a mi empresa local de corte por láser. Por este medio, el diseño se basa en una placa de 6 mm de espesor. Sin embargo, si desea ajustar las cosas, puede acceder a todo tipo de formatos de archivo utilizando este enlace. Como se muestra en las imágenes, también puede usar una caja de cartón si no tiene acceso a una cortadora láser. Usé la caja de cartón en la imagen para hacer prototipos y funciona como un encanto.

El montaje es bastante sencillo:

  1. Monte los interruptores de Arcade.
  2. Asegúrese de dejar libres los cables del timbre.
  3. Conecte el cable plano al RPi.
  4. Atornille el RPi en el panel inferior.
  5. Conecte los cables del timbre a un conector de cables y móntelo también en el panel inferior.
  6. Conecte la Picamera al RPi.
  7. Taladre un agujero en uno de los paneles laterales para el cable de conmutación del timbre y el cable de alimentación RPi.

El conector de cables se utiliza como punto de montaje para los cables del interruptor del timbre, de modo que pueda fijarse a un timbre existente más adelante. Ahora todo está en su lugar y se puede pegar. Sin embargo, es posible que primero desee finalizar los siguientes pasos para asegurarse de que todo funcione como se supone que debe ser.

Observaciones:

¡Autodesk Fusion 360 está disponible gratuitamente para aficionados! Si desea obtener su copia, visite este enlace: autodesk.com - Fusion 360 para aficionados. Hay algunos términos, así que asegúrese de leerlos y aplicarlos. Fue mi primer proyecto con Fusion 360 y no tengo mucha experiencia en el uso de software CAD, pero debo decir que me gusta mucho el software y todas las herramientas adicionales que vienen con Fusion 360

Paso 4: configurar la cámara

Configurar la cámara
Configurar la cámara
Configurar la cámara
Configurar la cámara
Configurar la cámara
Configurar la cámara

Se asume que tiene Raspbian instalado y que se ejecuta en modo GUI. Si aún no tiene Raspbian instalado, puede seguir este artículo: raspberrypi.org - Instalación de imágenes del sistema operativo. Si inicia Raspbian, debería ver un escritorio como se muestra en las imágenes.

¡Configuremos la cámara en el RPi y veamos si funciona! El método descrito aquí es directamente de raspberrypi.org - Documentation. Primero, actualice a los últimos paquetes (incluido el firmware de la cámara) ejecutando los siguientes comandos en una ventana de terminal (ver imágenes):

actualización de sudo apt

actualización completa de sudo apt

A continuación, la cámara debe habilitarse mediante el siguiente comando:

sudo raspi-config

En el menú, vaya a 5. Opciones de interfaz -> Cámara P1. Elija habilitar la cámara y reiniciar el RPi ejecutando:

reiniciar

La cámara ahora debería estar configurada correctamente. Se puede probar abriendo una ventana de terminal y ejecutando:

raspistill -v -o /home/pi/test.jpg

La imagen se guarda en: / home / pi.

Paso 5: Configurar Docker

Configuración de Docker
Configuración de Docker
Configuración de Docker
Configuración de Docker
Configuración de Docker
Configuración de Docker
Configuración de Docker
Configuración de Docker

Para evitar la dependencia y los errores de instalación, decidí crear una imagen de Docker personalizada para este proyecto (consulte wikipedia.org - Docker). Si nunca usó o escuchó hablar de Docker, no se preocupe, le explicaré paso a paso cómo usarlo en este proyecto. De hecho, ¡es muy fácil! En caso de que desee ejecutar este proyecto en una instalación local (en lugar de en un contenedor Docker), le daré algunos consejos. Pero se recomienda encarecidamente utilizar la imagen de Docker. Después de todo, ¡lo construí para que le resulte más fácil ejecutar este proyecto!

¿Qué es Docker?

Nota: esta parte proporciona información general sobre Docker, que se puede omitir si solo desea ejecutar el código.

¡Este proyecto es la primera vez que utilizo Docker y es simplemente increíble! ¿Quizás has oído hablar de virtualenv o Anaconda para Python? Bueno, Docker es bastante similar en el sentido de que puede administrar fácilmente las versiones de paquetes y ejecutar diferentes versiones de Python en un sistema host utilizando un entorno diferente (o contenedor como se llama en Docker). Pero, en comparación con virtualenv y Anaconda, Docker es mucho más poderoso ya que no se limita a contener solo paquetes de Python. De hecho, en un contenedor Docker, puede instalar y administrar también los paquetes de un sistema operativo deseado. Por ejemplo, considere un sitio web que desea migrar que ejecuta un marco web Python (por ejemplo, Django) con una base de datos (por ejemplo, MySQL). Sin un contenedor Docker, tendría que instalar todos los paquetes en el nuevo servidor, un proceso que es muy propenso a errores y errores. Por otro lado, cuando su sitio web se ha creado en Docker, la migración es básicamente tan fácil como mover el archivo / archivos de imagen al nuevo servidor y ejecutarlos. Como puede imaginar, Docker también es muy útil para proyectos en Instructables;)! Si desea saber más sobre Docker, visite su sitio web: docker.org - Docker: Enterprise Container Platform. ¡Ahora, pongámonos en marcha con Docker!

Instalación de Docker

Instale Docker ejecutando:

curl -sSL https://get.docker.com | sh

A continuación, el usuario se agrega al grupo de usuarios 'docker', que proporciona los derechos para ejecutar Docker. Esto se hace mediante:

sudo usermod -aG docker $ USER

Ahora, debería poder ejecutar Docker. Esto se puede validar ejecutando la imagen hello-world:

Docker ejecutar hola-mundo

Por último, extraemos la imagen de Docker que contiene todas las dependencias necesarias para ejecutar los scripts de Python del timbre. Este proceso puede tardar un poco, ya que la imagen es bastante grande (~ 1,5 GB). Ejecutar:

estibador tirar erientes / timbre

Nota: el Dockerfile se puede encontrar en el repositorio del timbre en Github. Ahora, todo está listo para ejecutar los scripts del timbre, que se discutirán en el siguiente paso.

Instalación local

Una vez más, recomendaría encarecidamente utilizar la imagen de Docker en lugar de una instalación local. Pero para completar este tutorial, ahora describiré algunos de los pasos que tomé para la instalación local.

Para poder ejecutar el código, la versión de Python debe ser> = 3.5 (usé Python 3.5.3) y los siguientes paquetes deben estar instalados:

  • Reconocimiento facial
  • picamera
  • numpy
  • Almohada
  • Python-telegram-bot
  • RPi. GPIO

Este enlace es bastante útil: Github: instale dlib y face_recognition en una Raspberry Pi. Sin embargo, hay algunas advertencias aquí: 1) Pillow necesita al menos Python 3.5, que no se instalará siguiendo este método. 2) Además, no todos los paquetes necesarios en el proyecto del timbre se instalarán siguiendo este método. Sin embargo, debería poder instalarlo simplemente usando pip3.

Paso 6: ejecución de los scripts del timbre

Ejecución de los scripts del timbre
Ejecución de los scripts del timbre
Ejecución de los scripts del timbre
Ejecución de los scripts del timbre
Ejecución de los scripts del timbre
Ejecución de los scripts del timbre

Obtén los guiones

Los scripts se pueden descargar manualmente desde: github.com - Erientes / doorbell. O si tiene Git instalado, ejecute:

clon de git

Crear alias

Ahora, para hacernos la vida un poco más fácil, creemos algunos alias para ejecutar los scripts. Ejecutar:

leafpad ~ /.bashrc

Agregue las siguientes líneas y guarde el archivo:

alias doorbell_run = 'docker run --privileged -v / home / pi / doorbell: / doorbell -w / doorbell -it erientes / timbre python $ 1'

alias doorbell_login = 'docker run --privileged -v / home / pi / doorbell: / doorbell -w / doorbell -it erientes / doorbell bash'

Scripts de prueba

Para probar si todo está instalado correctamente, abra una nueva terminal y ejecute:

doorbell_run examples / 0_test_installation.py

El resultado debería ser simplemente un mensaje en la ventana de la terminal que diga "¡La instalación del timbre finalizó correctamente!". Para probar si el contenedor Docker puede acceder a la cámara, ejecute:

doorbell_run examples / 1_test_camera.py

Al ejecutar 1_test_camera.py, se tomará una foto y se guardará como 'test.jpg', que se puede encontrar en / home / pi / doorbell. Por último, los controladores LED se pueden probar ejecutando:

doorbell_run examples / 2_test_voicehat_drivers.py

Cuando este script se está ejecutando, el LED en el interruptor de la sala de juegos debería responder cuando se presiona el botón.

Ejecución de scripts de timbre

Para ejecutar los scripts de Doorbell, primero se deben obtener las credenciales del bot de Telegram. Instale Telegram en su teléfono y vaya a telegram.me - Botfather. Inicie una conversación e ingrese:

/ newbot

Ingrese un nombre y un nombre de usuario para el bot. Después de eso, se le proporcionará el token de acceso. Copie ese valor en el archivo 'credentials_telegram_template.py' en / home / pi / doorbell y guárdelo en un nuevo archivo llamado 'credentials_telegram.py'. Por último, inicie una conversación con el bot que acaba de crear haciendo clic en el enlace que Botfather le proporciona.

Finalmente, ejecutemos el timbre con reconocimiento facial:

doorbell_run main.py

Observaciones:

Si desea saber más sobre cómo funciona el código, consulte los comentarios en los propios scripts. Si tiene alguna pregunta sobre el código, comuníquese conmigo a través de Github

Paso 7: uso del timbre

Image
Image
Usando el timbre
Usando el timbre
Usando el timbre
Usando el timbre

Ejecutemos el script del timbre ejecutando:

doorbell_run main.py Después de cargar los paquetes, los scripts quedan inactivos. Básicamente, hay 2 cosas que pueden suceder:

  1. Alguien toca el timbre.
  2. Se agrega alguien a la lista blanca.

Alguien toca el timbre

En este caso, el guión comenzará a tomar fotos hasta que tome una foto en la que se detecte un rostro. Después de la detección, se invocan algunos métodos del paquete de Python 'face_recognition' para calcular una codificación 128 de la cara. A continuación, la codificación obtenida se compara con las codificaciones en whitelist.csv y blacklist.csv. Los posibles resultados dan como resultado la siguiente respuesta:

¿En lista blanca? ¿En lista negra? Respuesta
No Se enciende la luz verde.
Se enciende la luz amarilla. La cámara del timbre envía fotos al bot de Telegram con el ícono naranja. Este estado puede ocurrir si alguien fue agregado a ambas listas. Por ejemplo, cuando alguien fue bienvenido al principio, pero luego fue incluido en la lista negra.
No No Se enciende la luz amarilla. La cámara del timbre envía fotos al bot de Telegram con el ícono naranja.
No Se enciende la luz roja. La cámara del timbre envía fotos al bot de Telegram con el ícono rojo.

Se agrega alguien a la lista blanca

Para agregar a alguien a la lista blanca, presione el botón amarillo del semáforo cuando el timbre esté en estado inactivo. Primero, se encenderá la luz amarilla. Si la luz verde parpadea 3 veces, la cara de la persona se agregó correctamente a la lista blanca. Si la luz verde no parpadea 3 veces, el intento no fue exitoso. En ese caso, vuelva a presionar el botón amarillo. Puede verificar fácilmente si tuvo éxito tocando el timbre y verificando si se pasó la luz verde.

¿Cómo agregar a alguien a la lista negra?

Evidentemente, la gente con malas intenciones no pasará para regalarnos una foto de su rostro. Entonces, en su lugar, puede agregar imágenes de personas notorias que (por ejemplo) la policía ha publicado en la carpeta img / blacklist. Cada hora, esta carpeta se comprueba en busca de nuevas imágenes. Si hay una nueva imagen, la codificación de la cara se calcula y se agrega a blacklist.csv. A continuación, se cambia el nombre de la imagen y se mueve a la carpeta / img / blacklist / encoded.

Observaciones:

  • Operar los scripts al iniciar sesión en el RPi proporciona mucho más control e información, pero el control y la información básicos se pueden obtener utilizando únicamente la pantalla del semáforo.
  • El reconocimiento facial se implementa mediante el paquete de Python 'face_recognition'. Este paquete se basa en Dlib que contiene un algoritmo de reconocimiento facial de última generación, que realiza una precisión del 99,38% en el punto de referencia de Caras etiquetadas en la naturaleza (fuente: dlib.net - Reconocimiento facial de alta calidad con aprendizaje métrico profundo).
Concurso de tecnología de asistencia
Concurso de tecnología de asistencia
Concurso de tecnología de asistencia
Concurso de tecnología de asistencia

Primer premio en el concurso Assistive Tech

Recomendado: