Una puerta que nos saluda por nombre y se abre solo para los empleados del departamento.


Tuvimos un par de días entre grandes proyectos y decidimos burlarnos de la puerta del jefe de la unidad. Solo por diversión. Porque los drones ya nos reconocen en nuestras caras, ¿qué empeora la puerta?

En el momento del inicio del proyecto de TI, ya teníamos un panel de parches impreso en una impresora 3D. En dos días, hicimos un prototipo de un dispositivo de hierro, bibliotecas prefabricadas y alguna madre, que tiene en cuenta a los empleados o nos permite verificar que una persona haya pasado por el torniquete con su pase.

Sin dinero Utilizamos solo código abierto.

Puede repetir esto en 15-20 minutos con nuestro script.

Idea y enfoque de implementación


Todo comenzó con una residencia de verano, donde descansamos después de la finalización de un proyecto importante. Hubo un momento en que fue muy difícil golpear la puerta con la llave. En el sentido de que inmediatamente pensamos que era malo sacar nuestras manos de los bolsillos en el invierno, bueno, se nos ocurrieron muchas otras aplicaciones para verificar los pases y las personalidades de los empleados.

En realidad, queríamos hacer un corredor con rayos láser, como en la película Resident Evil, pero no tuvimos tiempo. En general, quería el efecto de la interacción con el sistema para que también respondiera con una voz.

Como queríamos un prototipo, aquí está la orientación máxima sobre funcionalidad y resultados rápidos en detrimento de la apariencia, las dimensiones y la bella arquitectura. Resultó aterrador, pero rápidamente y funciona.

Primero, dividimos el control de la puerta en módulos y cada uno comenzó a escribir el suyo. El módulo de reconocimiento del primer día era externo al servicio web del socio, todavía existía nuestro viejo motor de red neuronal interno de otro proyecto, además de soluciones de código abierto. Como resultado, ganó el código abierto: nuestro propio motor requería refactorización y actualización (esto tomó mucho tiempo), el recurso web asociado quería dinero y no lo dejó entrar, pero el código abierto es un código abierto.

Electrónica y vivienda


Inicialmente, consideraron la opción de simplemente comprar una cerradura controlada electrónicamente y reemplazarla con una cerradura de puerta interna estándar. Pero debido a la presencia de vidrio con persianas en la puerta, la cerradura interna era inusualmente estrecha y simplemente no había reemplazo electrónico en el mercado. Por lo tanto, nuestro ingeniero imprimió un candado desmontable, proporcionando contenedores para la unidad de control y la unidad de apertura de la cerradura.

Entonces, el proyecto del edificio:


Lo imprimimos desde un modelo que nosotros mismos habíamos hecho antes del proyecto (el modelado y la adaptación tomaron más tiempo que escribir el código):


El diseño de la carcasa está realizado en Compass-3D. Como resultado, Dima hizo 3 versiones de la caja, siempre que pudiera elegir la disposición óptima de elementos y sujetadores.

Dentro de la caja de la cerradura, un motor MG-995 con una fuerza de 10 kg (la fuerza de arranque real es de 5 a 7 kg), un par de sensores infrarrojos para controlar la automatización en la entrada y salida, un microcontrolador Esp8266 con un módulo Wi-Fi y un servidor web que, por simplicidad, recibió comandos de control para abrir y cerrar puertas a través de http. El mismo controlador giró los engranajes de la llave.

La parte del software del microcontrolador está escrita en C.

Inmersos en los detalles de la fabricación de la caja y el relleno, pensamos involuntariamente en la complejidad de los objetos aparentemente simples.


Total: la unidad de control de bloqueo puede aceptar comandos de apertura a través de Wi-Fi.

Parte de reconocimiento facial


Necesitamos una unidad de reconocimiento facial que enviará un comando "abierto" al castillo si es necesario abrirlo. Debido a la arquitectura modular, puede funcionar en un mini servidor en un hogar inteligente o ser un servicio web en Internet. También necesitamos un punto de Wi-Fi en la red local con la unidad de control de bloqueo: es un cliente ligero o un servidor doméstico. Implementamos el servidor directamente en la vieja computadora portátil, es decir, combinamos el servidor y el cliente ligero. Conectaron la cámara a la computadora portátil a través de USB.
Para el reconocimiento en sí, nos detuvimos en el reconocimiento facial de la biblioteca Python bajo una licencia abierta de la Universidad Tecnológica de Massachusetts.

Se cargaron varias fotos de cada participante del proyecto en el modelo: en frente, de perfil y en la naturaleza. En teoría, cuantas más fotos cargue en el modelo, mayor será su precisión, pero en la mayoría de los casos hay suficientes avatares de Facebook o imágenes de la base de datos de eychars.

Implementamos la infraestructura como un servicio en nuestra nube de Technoserv y lo depuramos rápidamente. La implementación de una nueva máquina virtual con todos los servicios tomó 20 minutos. Luego cargaron todo el código con las bibliotecas a una computadora portátil que funciona para un trabajo autónomo.

El sistema selecciona la cara más grande del cuadro y la reconoce 2 veces con una frecuencia de 0,5 segundos.

La cámara web salió de la caja de cosas olvidadas de los años 90. Lo que ya era, pero fue suficiente.

El tiempo total de reconocimiento es un poco más de tres segundos. Esto se debe a que la computadora portátil es realmente vieja y no tiene una tarjeta de video. Con vidyuha y la velocidad de reconocimiento de cámara web rápida aumentará significativamente.

Inmediatamente escribieron un conector para el reconocimiento de voz, ya que solo la cara es bastante poco confiable (más sobre esto más adelante), son necesarios dos factores.

Tomó 6 horas para un prototipo más o menos depurado después de elegir una biblioteca.

También conectamos un altavoz bluetooth a la computadora portátil para que pudiera hablar. La computadora portátil en sí estaba escondida en un armario con cartas de agradecimiento, como un dispositivo integrado.


Pruebas


La descripción de la biblioteca dice: “Construido usando el reconocimiento facial de vanguardia de dlib construido con aprendizaje profundo. "El modelo tiene una precisión del 99,38% en el punto de referencia de Caras etiquetadas en la naturaleza ". Naturalmente, no hay 99.38%, pero mucho menos. Debido a que necesita cargar fotos normales (y más), configure una cámara normal y ecualice la luz. Pero dado que, mientras estás cavando en la puerta, ella logra hacer 4-5 marcos, generalmente se abre casi de inmediato.

Errores: un par de veces la puerta se confundió y no nos dejó ir de inmediato. Extraños de otros departamentos no podían entrar por la puerta.

Puedes hacer muecas en la puerta, ella entiende todo y se abre.

Según la fotografía del empleado, por supuesto, se abre. Agregamos el módulo de reconocimiento de persona completa en la próxima versión (fuera de estos dos días), y comenzó a abrirse solo para el busto.

Luego hicieron una prueba de color (la biblioteca de disminución de imagen y toma imágenes en blanco y negro para procesar), movimientos faciales y parpadeo: se necesita una mejor cámara para ver a una persona cuando todavía está en forma, y ​​todo lo estará.

Es decir, como un reemplazo clave, por supuesto que no, porque se necesita un segundo factor, por ejemplo, la voz. Pero adecuado para puertas acríticas. Para dar cuenta de los empleados que pasan por la puerta también. Para verificar si un empleado coincide con el pase en el punto de control, también. También puedes reconocer al perro que regresa a casa por la puerta. Si recuerda la historia del reconocimiento de patrones, entonces una de las primeras aplicaciones industriales fue que el desarrollador estadounidense consiguió un gato vecino, basura en el césped. Hizo un reconocimiento de gato en la semi-sentadilla y conectó el sistema de riego a su mini servidor. Después de un par de días, el gato se dio cuenta de que era mejor no cagar. Nunca En ninguna parte

El caso resultó ser futurista y voluminoso, en la versión comercial no debería haber nada en la puerta, excepto una cámara con micrófono y una pequeña pantalla con un asistente visual y de audio.

Repetir en casa


Enlace a la biblioteca de arriba.

Hazlo una vez

Hacer dos
#/usr/bin/env python """      : """ import os import face_recognition import cv2 import random from pygame import mixer import requests import datetime import time known_faces = [ 'Emp1' , 'Emp2' , 'Emp3' ] faces_folder = 'faces' welcome_folder = 'welcome' known_faces_encodings = [face_recognition.face_encodings(face_recognition.load_image_file(os.path.join(faces_folder, i +".jpg")))[0] for i in known_faces] def init_recognition(): pass def face_detection(face_encodings): name = "Unknown" for face_encoding in face_encodings: matches = face_recognition.compare_faces(known_faces_encodings, face_encoding) if True in matches: first_match_index = matches.index(True) name = known_faces[first_match_index] return name def unlock(): unlock_url = 'http://192.168.4.1/yes' unlock_req = requests.get(unlock_url) #return unlock_req.status_code def lock(): lock_url = 'http://192.168.4.1/no' lock_req = requests.get(lock_url) #return lock_req.status_code def welcome(type): messages = { 'hello': [os.path.join(welcome_folder, file) for file in ['hello_01.wav', 'hello_02.wav', 'hello_03.wav', 'hello_04.wav', 'hello_05.wav']], 'welcome': [os.path.join(welcome_folder, file) for file in ['welcome_01.wav', 'welcome_02.wav', 'welcome_03.wav']], 'unwelcome': [os.path.join(welcome_folder, file) for file in ['unwelcome_01.mp3', 'unwelcome_02.mp3', 'unwelcome_03.wav', 'unwelcome_04.wav', 'unwelcome_05.wav']], 'whoareyou': [os.path.join(welcome_folder, file) for file in ['whoareyou_01.wav', 'whoareyou_02.wav', 'whoareyou_03.wav', 'whoareyou_04.wav']] } mixer.init() mixer.music.load(random.choice(messages[type])) mixer.music.play() def main(): current = datetime.datetime.now() vc = cv2.VideoCapture(0) if vc.isOpened(): is_capturing = vc.read()[0] else: is_capturing = False user_counter = 0 while is_capturing: is_capturing, frame = vc.read() small_frame = cv2.resize(frame, (0, 0), fx=0.25, fy=0.25) rgb_small_frame = small_frame[:, :, ::-1] face_locations = face_recognition.face_locations(rgb_small_frame) face_encodings = face_recognition.face_encodings(rgb_small_frame, face_locations) if len(face_encodings) > 0: user_counter += 1 if user_counter > 6: welcome('hello') print('hello') time.sleep(2) user = face_detection(face_encodings) timing = datetime.datetime.now() - current if timing.seconds > 4: if user in ['Emp3']: welcome('unwelcome') print('go home, ' + user) lock() elif user in known_faces: welcome('welcome') print('welcome, ' + user) unlock() else: welcome('whoareyou') print('who is there?') current = datetime.datetime.now() user_counter = 0 time.sleep(0.5) if __name__ == '__main__': main() 


En el script en sí, los nombres de los empleados (Emp1, Emp2) corresponden a los archivos con sus fotos en el directorio, debe agregar los suyos. La resolución no importa, puedes al menos 640x480. Hay dos categorías de empleados: objetivo, a quién omitir y aquellos que envían inmediatamente a casa.

Como cámara, utilizamos la cámara web Logitech más simple. En lugar de una computadora portátil, es bastante posible usar un microcontrolador, pero debe comprender cómo colocar python y las bibliotecas seleccionadas.

Resultado


Los vendedores de departamentos vecinos sintieron la tecnología trabajando con nosotros en el mismo piso. La caja de la cerradura superpuesta se ve especialmente genial, ¡y con qué sonido abre la puerta! No lo creas, pero la promoción interna de la tecnología es tan necesaria como la externa.

Nos preguntaron un par de veces por qué hicimos esto después de horas.

La respuesta es porque realmente quería divertir a nuestros muchachos para que sintieran las tecnologías que usamos en un dispositivo que funciona. Porque es un prototipo de hardware y software de inmediato y es una sesión de capacitación tan pequeña antes de proyectos más grandes. Es poco probable que el prototipo se use en algún lugar, pero tiene una función educativa y moral.

Bueno, nos aseguramos de qué tan rápido se pueden hacer prototipos industriales. Por lo general, hacemos proyectos piloto rápidos (2-3 semanas) para la producción. Por cierto, si es interesante calcular rápidamente algo en términos de automatización y hacer un piloto, esta es solo la especialización de nuestro equipo. Correo electrónico tmishin@technoserv.com si eso.

Se siente como después de un buen hackathon.

Y ahora tenemos un juguete.

Un colega vino corriendo ayer y mostró un video de un avión no tripulado con un lanzallamas . Parece que tenemos un par de ideas ...

También le conté todo esto al hecho de que, literalmente, hace 3-4 años era muy costoso y largo escribir detectores industriales para videovigilancia. Para controlar el tamaño de la fracción de material en la cinta transportadora, detenerse en caso de objetos extraños, apagarse cuando se trabaja en una zona de peligro, etc. Hoy se está haciendo muy, muy rápido. Y mucho más barato. No es tan rápido como la puerta, pero un piloto en 2 semanas es una estimación muy realista.

Source: https://habr.com/ru/post/es416179/


All Articles