Tabla de contenido:
- Paso 1: preparación
- Paso 2: hacer un sensor
- Paso 3: configurar la cámara IP
- Paso 4: API facial
- Paso 5: Configuración Node-Red
- Paso 6: compilar todo el proyecto
- Paso 7: Conclusión
Video: Sistema de seguridad de reconocimiento facial para un refrigerador con Raspberry Pi: 7 pasos (con imágenes)
2024 Autor: John Day | [email protected]. Última modificación: 2024-01-30 08:43
Navegando por Internet descubrí que los precios de los sistemas de seguridad varían de 150 $ a 600 $ y más, pero no todas las soluciones (incluso las más caras) se pueden integrar con otras herramientas inteligentes en su hogar. Por ejemplo, no puede instalar una cámara de seguridad en la puerta de su casa para que automáticamente abra la puerta para usted o sus amigos.
¡He decidido hacer una solución simple, barata y poderosa, que puedes usar en cualquier lugar! Hay muchos manuales sobre cómo crear sistemas de seguridad caseros y baratos, sin embargo, quiero demostrar una aplicación realmente no trivial de esos: ¡sistema de seguridad para un refrigerador con reconocimiento facial!
¿Como funciona? La cámara IP colocada en la parte superior de un refrigerador, los sensores (dos botones) detectan cuando una persona abre la puerta del refrigerador, luego Raspberry Pi toma una foto de esa persona (con cámara IP), luego la envía a Microsoft Face API. para analizar la imagen y recibir el nombre de la persona. Con esta información, Raspberry Pi escanea la “lista de acceso”: si la persona no tiene permiso para acceder al refrigerador, ¡Raspberry notifica al propietario por correo electrónico, mensaje de texto y twitter! (Vea las imágenes de arriba)
¿Por qué? El sistema le permite controlar a los miembros de su familia, especialmente cuando están a dieta o tienen problemas para no comer después de la medianoche. ¡O utilícelo solo por diversión!
Además, puede configurar la cámara en la puerta de su casa y configurar el sistema para abrir la puerta cuando usted, sus familiares o amigos se acerquen. ¡Y este no es el final! ¡Las posibilidades de la aplicación son infinitas!
¡Vamos a empezar!
Paso 1: preparación
Necesitará:
- Raspberry Pi 3 (puede usar versiones anteriores, pero la tercera generación tiene Wi-Fi, por lo que es muy conveniente)
- Botones
- Alambres
- Antiguo teléfono inteligente o cámara Raspberry Pi
Lo primero que tienes que hacer es configurar tu Raspberry Pi. Puede encontrar instrucciones detalladas sobre cómo hacerlo aquí y aquí, pero cubriremos los pasos más importantes en este manual.
- Descargue Win32 DiskImager desde aquí (si usa Windows)
- Descarga SD Formatter desde aquí
- Inserte la tarjeta SD en su computadora y formatee con SD Formatter
- Descargue la imagen de Raspbian desde aquí (elija "Raspbian Jessie con píxel")
- Ejecute Win32 DiskImager, elija su tarjeta SD, especifique la ruta a la imagen Raspbian, haga clic en "Escribir"
- ¡Inserta la tarjeta SD en tu Raspberry Pi y enciéndelo!
Además, deberá configurar su Raspberry Pi para tener acceso al sistema a través de SSH. Hay muchas instrucciones en Internet, puede usar esto, por ejemplo, o puede conectar un monitor y un teclado.
¡Ahora tu Pi está configurado y estás listo para continuar!
Paso 2: hacer un sensor
Descripción del paso: En este paso haremos un sensor que detecta cuando una persona abre la puerta de un frigorífico y activa la Raspberry Pi.
Para configurarlo, necesitaría los 2 botones que preparó originalmente. El primer botón detectará cuándo se abre la puerta, el segundo botón detectará cuándo se abre la puerta hasta el punto en que estemos tomando una foto de una persona.
- Suelde los cables a los botones.
- Coloque el primer botón en la puerta del refrigerador para que se presione cuando la puerta esté cerrada (vea la imagen de arriba)
- Coloque el segundo botón en la puerta del refrigerador como se muestra en la foto de arriba. Este botón debe soltarse en todo momento, excepto cuando la puerta llega al punto en el que el sistema toma una fotografía. Para configurarlo, debe colocar algo en su refrigerador para que este botón se presione cuando la puerta se abra en la medida deseada (vea las fotos de arriba).
- Conecte los cables de los botones a la Raspberry Pi: primer botón a GPIO 23 y tierra, segundo botón a GPIO 24 y tierra (consulte el diagrama de fritzing).
Nota: Yo uso el pinout BCM (no el tablero), lea más sobre la diferencia aquí.
Una vez conectado a su Raspberry Pi a través de SSH, para ejecutar el shell de Python, escriba en la terminal:
python3
Si está conectando el monitor y el teclado a Raspberry Pi, simplemente ejecute "Python 3 IDLE" desde el menú.
El siguiente paso es hacer que Raspberry Pi funcione con los botones. Adjuntaremos oyentes especiales a los pines GPIO 23 y 24, que escucharán el evento de "borde ascendente" y el evento de "borde descendente" en esos pines. En el caso del evento, los oyentes llamarán a las funciones que hemos definido. “Borde ascendente” significa que el botón se presionó y ahora se soltó (primer botón - la puerta está abierta), “borde descendente” significa que el botón se soltó y ahora se presionó (segundo botón - la puerta ha alcanzado un punto específico). Más sobre la funcionalidad de los botones, aquí.
Primero, importa la biblioteca que nos da acceso a los pines:
importar RPi. GPIO como GPIO
Ahora defina funciones especiales a las que se llamará cuando se active el evento:
def sensor1 (canal): imprimir ("sensor 1 disparado") def sensor2 (canal): imprimir ("sensor 2 disparado)
Establecer tipo de pinout:
GPIO.setmode (GPIO. BCM)
Configurar pines:
GPIO.setup (23, GPIO. IN, pull_up_down = GPIO. PUD_UP) GPIO.setup (24, GPIO. IN, pull_up_down = GPIO. PUD_UP)
Adjuntar oyentes:
GPIO.add_event_detect (23, GPIO. RISING, callback = sensor1, bouncetime = 300) GPIO.add_event_detect (24, GPIO. FALLING, callback = sensor2, bouncetime = 300)
¡Ahora puedes probarlo! Si presiona el botón 1 verá un mensaje en el terminal "sensor 1 disparado", el botón 2 le da un mensaje "sensor 2 disparado".
Nota: Cuando haya terminado de experimentar, no olvide llamar a la siguiente función: GPIO.cleanup ().
¡Configuremos una función más que se llama cuando la puerta llega al punto donde tomamos una foto! Puede hacerlo usted mismo o usar mi implementación que he adjuntado aquí (sensor.py)
Nota: sensor.py se usa solo para fines de prueba, los archivos con funcionalidad completa que he adjuntado al último paso.
Paso 3: configurar la cámara IP
Descripción del paso: Ahora vamos a configurar el teléfono inteligente antiguo como una cámara IP.
El uso de un teléfono inteligente como una cámara IP se realiza a través de la aplicación. Hay diferentes aplicaciones para Android, iOS, Windows Phone que puede usar. Elegí el que se llama "IP Webcam" para Android. Esta es una aplicación gratuita y fácil de configurar.
Ejecute la aplicación, vaya a "Preferencias de vídeo" para configurar la resolución de las fotos que proporcionará la aplicación. Luego toque "Iniciar servidor" (Primera imagen de arriba). En la parte inferior de la pantalla, debe ver la dirección IP de la cámara (vea la segunda imagen de arriba). En el navegador, puede escribir https://cam_ip_address/photo-j.webp
Finalmente, coloque la cámara en el refrigerador (última imagen arriba).
Paso 4: API facial
Descripción del paso: En este paso hablaremos sobre la API Face de Microsoft que hace reconocimiento facial e identifica a las personas.
Face API de Microsoft es un servicio de reconocimiento facial, a través del cual podemos analizar fotos e identificar personas en ellas.
Primero, necesita una cuenta de Microsoft Azure. Si no tiene uno, puede crearlo gratis aquí.
En segundo lugar, vaya a https://portal.azure.com, haga clic en "Nuevo" en el lado izquierdo, escriba en el formulario "API de servicios cognitivos", selecciónelo y haga clic en "Crear". O puede abrir este enlace. Ahora debe ingresar el Nombre de su servicio, seleccionar el tipo de suscripción, el tipo de API que necesita (en nuestro caso es Face API), la ubicación, el nivel de precios, el grupo de recursos y aceptar los Términos legales (vea la captura de pantalla agregada a este paso).
En tercer lugar, haga clic en "Todos los recursos", seleccione su servicio Face API y vea las estadísticas de uso, credenciales, etc.
Los detalles de Face API se pueden encontrar aquí, se proporcionan ejemplos en diferentes lenguajes de programación. Para este proyecto estamos usando Python. Puede leer la documentación y crear su propio conjunto de funciones o puede utilizar el que se proporciona aquí (este no es el conjunto completo de funciones proporcionado por Microsoft, solo los puntos que se necesitan para este proyecto). Mis archivos de Python se adjuntan a este paso.
Pasemos a la estructura del trabajo con Face API. Para usar la funcionalidad de "Identificación", tenemos que crear una biblioteca de personas usando el servicio Face API que reconocerá las fotos que está tomando la aplicación. Para configurarlo, siga los pasos:
- Crear un grupo
- Agregar personas a este grupo
- Agregar caras a estas personas
- Grupo de tren
- Envíe foto con la persona que desea identificar (debe proporcionar foto e identificación de grupo en el que el servicio buscará candidatos)
- Resultado: En respuesta, obtendrá una lista de candidatos que pueden aparecer en la foto que envió.
He creado tres archivos con funcionalidad específica que permite trabajar con grupos, personas individuales y fotos individuales:
- PersonGroup.py: contiene funciones que permiten: crear un grupo, obtener información sobre el grupo, obtener una lista de todos sus grupos, capacitar al grupo y obtener el estado de la capacitación
- Person.py: contiene características que permiten: crear una persona, obtener información de la persona, enumerar todas las personas en un grupo específico, agregar caras a una persona específica
- Face.py: contiene funciones que permiten: detectar la cara en la imagen, identificar a la persona, obtener el nombre de la persona identificada
En el archivo llamado "Recognition.py" proporciono características que le permiten verificar si la imagen contiene una cara y agregar caras a la persona especificada (agrega automáticamente la cara de muchas imágenes de la carpeta especificada).
Descargue el archivo adjunto a este paso, descomprímalo, cambie la variable global 'KEY' en estos tres archivos: PersonGroup.py, Person.py y Face.py a su propia clave que puede encontrar: portal.azure.com> todos los recursos > servicio de api facial (o cómo lo llamó)> pestaña de teclas. Puede utilizar cualquiera de las dos claves.
Nota: aquí vamos a entrenar el servicio Face API para que reconozca a las personas, por lo que las siguientes acciones se pueden realizar desde cualquier computadora (no se necesita Raspberry Pi para eso): los cambios se guardan en el servidor de Microsoft.
Después de cambiar la CLAVE, ejecute Recognition.py e ingrese el siguiente comando en el shell de Python:
PersonGroup.create ("family", 'fff-fff')) // puedes usar tu propio nombre e identificación para
grupo printResJson (PersonGroup.getPersonGroup ('fff-fff'))
Tienes que ver los datos sobre el grupo que acabas de crear. Ahora ingrese:
printResJson (Person.createPerson ('fff-fff', 'nombre de la persona'))
Ahora obtienes la identificación de la persona. Cree una carpeta con imágenes de esta persona para que todas las imágenes contengan el rostro de esta persona. Puede utilizar la función detectFaceOnImages en Recognition.py, que le muestra en qué fotos se detecta la cara. Ahora, ejecute el comando:
addFacesToPerson ('carpeta con imágenes', 'ID de persona que obtuvo después del comando anterior', 'fff-fff')
Luego tenemos que capacitar nuestro servicio ingresando lo siguiente:
PersonGroup.trainPersonGroup ('fff-fff') printResJson (PersonGroup.getPersonGroupTrainingStatus ('fff-fff'))
Ahora nuestro grupo está capacitado y listo para identificar a una persona.
Para comprobar la persona en la imagen, puede:
Face.checkPerson (imagen, 'fff-fff')
En respuesta, obtendrá una lista de candidatos y la probabilidad de quién está en la foto.
Nota: cada vez que agrega caras a una persona o persona a un grupo, ¡debe entrenar al grupo!
Paso 5: Configuración Node-Red
Descripción del paso: En este paso, crearemos un flujo Node-Red que le notificará sobre la infracción de acceso a su refrigerador =)
Si su Raspberry Pi se ejecuta en Raspbian Jessie de noviembre de 2015 o una versión posterior, no es necesario que instale Node-Red, porque ya está preinstalado. Solo necesitas actualizarlo. Utilice el manual aquí.
Ahora, tenemos que instalar el nodo Twilio en Node-Red, para que podamos activar un mensaje de texto. Abra el terminal y escriba:
cd ~ /.node-rednpm instalar node-red-node-twilio
Más sobre el nodo Twilio aquí. Después de eso, ejecute Node-Red escribiendo en la terminal:
nodo-rojo
Luego vaya a: https://127.0.0.1:1880/ - si abre el navegador en su Raspberry Pihttps:// {raspberry_pi_ip}: 1880 / - si desea abrir el editor Node-Red desde otra computadora
Para saber la dirección IP de raspberry pi, use esta instrucción.
Ahora debe encontrar el nodo Twilio en la lista de nodos en su editor Node-Red (generalmente aparece después del grupo 'social').
¡Es hora de crear el flujo!
Nota: puedes usar mi flujo adjunto a este paso, pero no olvides configurar los nodos: correo electrónico, twitter y twilio. Leer sobre eso más tarde.
Nuestro flujo comienza con el nodo "notificar" que acepta la solicitud POST de nuestro programa principal con algunos datos sobre la violación de acceso (se puede encontrar un ejemplo de los datos en el nodo de comentarios "sobre la recepción de objetos"). Este nodo responde inmediatamente con el mensaje "Ok", por lo que el programa principal sabe que se recibieron los datos (Flujo: / notificar> respuesta con Ok> respuesta). El nodo verde en la parte inferior con el nombre msg.payload está ahí para fines de depuración: si algo no funciona, puede usarlo.
Desde el primer nodo (/ notificar), los datos se propagaron a "Tema de datos" y "Tema de imagen", donde los temas "datos" e "imagen" se agregaron respectivamente.
En el nodo "compilar" recibimos datos (que obtenemos durante el primer paso) con el tema "datos" y una imagen con el tema "imagen" (la imagen está tomada de /home/pi/image.jpg). Estos dos mensajes deben compilarse en un objeto, ¡pero los dos objetos se reciben en un momento diferente! Para manejar esto usaremos la característica de "contexto" que nos permite almacenar datos entre invocaciones de funciones.
El siguiente paso es verificar si es una persona de nuestra lista de acceso o un extraño (nodo checkConditions). Hay un campo de "persona de confianza" en los datos que recibimos: "verdadero" significa que conocemos a esta persona, pero violó el permiso de acceso, "falso" significa que la persona es un extraño.
Cuando el resultado es "verdadero", enviamos una notificación a twitter, twilio y correo electrónico; cuando el resultado es "falso", solo correo electrónico y twilio. Creamos un objeto para correo electrónico con un mensaje, imagen adjunta y asunto del correo electrónico, un objeto para twilio con un mensaje. Para Twitter, agregamos datos a un objeto si "ustedPerson "es verdadero. Luego envíe estos tres objetos a tres nodos diferentes.
Nota: Si el siguiente nodo no debe recibir un mensaje, simplemente le enviamos "nulo".
¡Es hora de configurar los nodos para la notificación!
Twitter Agregue el nodo "twitter" al flujo. Ábralo haciendo doble clic. Haga clic en el lápiz junto a "ID de Twitter". Luego haga clic en "Haga clic aquí para autenticarse con Twitter". Ingrese a su cuenta de Twitter y otorgue los permisos necesarios a Node-Red.
Correo electrónico: agregue el nodo "correo electrónico" al flujo. Si no usa Gmail, deberá cambiar los datos en los siguientes campos: "Servidor" y "Puerto" (puede encontrar qué servidor y puerto debe usar en las páginas de ayuda de su agente de correo electrónico); de lo contrario, no cambie estos los campos.
- Para> dirección de correo electrónico a la que se enviarán los mensajes
- Userid> iniciar sesión desde su correo electrónico (tal vez lo mismo que el campo "Para")
- Contraseña> contraseña de su cuenta de correo electrónico
- Nombre> nombre de este nodo
Twilio Vaya a https://www.twilio.com/try-twilio y registre una cuenta. Verifíquelo. Vaya a https://www.twilio.com/console. Haga clic en "Números de teléfono" (icono # grande) y cree un número gratuito. Si se encuentra fuera de los EE. UU., Debe agregar permisos GEO, vaya a https://www.twilio.com/console/sms/settings/geo-pe… y agregue su país.
Ahora, vaya al editor Node-Red, agregue el nodo Twilio, haga doble clic en él para configurar y completar todos los campos:
- Credenciales> Usar credenciales locales
-
Twilio> editar
- Cuenta SID> tomar desde aquí
- De> escriba el número virtual que creó
- Token> tomar de aquí
- Nombre> Twilio
- Salida> SMS
- A> tu número de teléfono
- Nombre> nombre de este nodo.
Haga clic en Implementar
¡Ahora tu flujo está listo! ¡Puede probarlo enviando una solicitud POST con el objeto especificado!
Paso 6: compilar todo el proyecto
Descripción del paso: En este paso, juntaremos todas las partes y las haremos funcionar como un sistema separado.
En este paso tienes que:
- Configurar teléfono inteligente antiguo como cámara ip
- Tener sensores de trabajo
- API Face de Microsoft capacitada
- Flujo Node-Red configurado
Ahora tenemos que mejorar el código que escribimos en el paso 2. Más específicamente, la función process () que se llama cuando una persona abre la puerta. En esta función haremos lo siguiente:
- Obtenga la imagen de la cámara ip y guárdela en "/ home / pi /" con el nombre "image.jpg" (función "fromIpCam" en el archivo "getImage")
- Obtener el nombre de la persona en esa imagen (función "comprobarPersona" en el archivo "reconocimiento")
- Verifique el permiso de acceso para esa persona (función "verificar" en el archivo "acceso")
- Basado en el resultado de la función "comprobar" redactar mensaje
- Enviar mensaje compuesto a Node-Red (función "toNodeRed" en el archivo "sendData")
Nota: para ver el código completo de las funciones mencionadas, descargue el archivo zip adjunto a este paso.
Acerca de la función "fromIpCam". Esta función realiza la solicitud GET a su cámara ip, obtiene una imagen enfocada en respuesta y la guarda en la ruta especificada por usted. Debe proporcionar la dirección IP de la cámara para esta función.
Acerca de la función "checkPerson". La función obtiene la ruta a la imagen y el grupo en el que desea buscar a la persona de la foto como parámetros. En primer lugar, detecta un rostro en la imagen proporcionada (archivo Face.py, función "detectar"). En respuesta, obtiene una identificación si la cara que se detectó. Luego llama a la función "identificar" (archivo Face.py) que encuentra personas similares en un grupo específico. En respuesta, obtiene una identificación de persona si se encuentra a la persona. Luego llame a la función "persona" (archivo Person.py) con la identificación de la persona como parámetro, la función "persona" devuelve la persona con la identificación especificada, obtenemos el nombre de la persona y lo devolvemos.
Acerca de la función "comprobar". Esta función se coloca en el archivo "acceso" donde también coloca "lista de acceso" como una variable global (puede modificarlo como desee). Obtener el nombre de la persona de la función anterior, función "comprobar" comparar esta persona con la lista de acceso y devolver el resultado.
Nota: el proyecto completo se adjunta al siguiente paso.
Paso 7: Conclusión
En este paso adjunto el proyecto completo que debes descomprimir y colocar en tu Raspberry Pi.
Para que este proyecto funcione, ejecute el archivo "main.py".
Si controla Raspberry Pi a través de SSH, debe ejecutar dos programas desde un shell: el programa Python y Node-Red. Escriba en la terminal lo siguiente:
nodo-rojo
Presiona "Ctrl + Z" y escribe:
trabajos
Ha visto el proceso Node-Red. Mire el ID del proceso y escriba:
bg
Ahora Node-Red tiene que empezar a trabajar en segundo plano. Luego vaya al directorio con su proyecto y ejecute el programa principal:
python3 main.py
Nota: no olvide cambiar la CLAVE en los archivos de Python (paso 4) y las credenciales en el flujo Node-Red (paso 5)
¡Hecho! ¡Su refrigerador es seguro!
¡Espero que hayas disfrutado de este intratable! Siéntase libre de dejar sus mentes en los comentarios.
Le agradecería que votara por mi proyecto =)
¡Gracias!
Recomendado:
Abellcadabra (sistema de bloqueo de puertas con reconocimiento facial): 9 pasos
Abellcadabra (Sistema de bloqueo de puertas con reconocimiento facial): Durante la cuarentena, traté de encontrar una manera de matar el tiempo construyendo un sistema de reconocimiento facial para la puerta de la casa. Lo llamé Abellcadabra, que es una combinación entre Abracadabra, una frase mágica con timbre que solo tomo el timbre. JAJAJA
Marco de fotos OSD con reconocimiento facial: 11 pasos (con imágenes)
Marco de fotos OSD con reconocimiento de rostros: este instructivo muestra cómo hacer un marco de fotos con visualización en pantalla (OSD) con reconocimiento de rostros. El OSD puede mostrar la hora, el clima u otra información de Internet que desee
Espejo de reconocimiento facial con compartimento secreto: 15 pasos (con imágenes)
Espejo de reconocimiento facial con compartimento secreto: siempre me han intrigado los compartimentos secretos siempre creativos que se utilizan en historias, películas y cosas por el estilo. Entonces, cuando vi el Concurso de Compartimiento Secreto, decidí experimentar yo mismo con la idea y hacer un espejo de aspecto ordinario que abre una s
Timbre con reconocimiento facial: 7 pasos (con imágenes)
Timbre con reconocimiento facial: motivación Recientemente, ha habido una ola de robos en mi país que están 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. Eso
Botón de seguridad inalámbrico para la seguridad del PLC: 6 pasos (con imágenes)
Botón de seguridad inalámbrico para seguridad de PLC: este proyecto es mi prueba de concepto para usar IoT y (eventualmente) robótica para crear una capa adicional de seguridad para instalaciones de fabricación peligrosas. Este botón se puede utilizar para iniciar o detener múltiples procesos, incluido el control de la señal