Está en la página 1de 66

Prototipo para un sistema de acceso

de múltiple factor basado en


reconocimiento facial en la
Universidad Distrital Francisco José
de Caldas

Daniel Steven Rodriguez Salinas


Fabian Mauricio Chacón Arevalo

Universidad Distrital Francisco José de Caldas


Facultad de ingenierı́a
Bogotá, Colombia
2020
Prototipo para un sistema de acceso
de múltiple factor basado en
reconocimiento facial en la
universidad distrital Francisco José de
Caldas

Daniel Steven Rodriguez Salinas


Fabian Mauricio Chacón Arevalo

Tesis o trabajo de grado presentado como requisito parcial para optar al tı́tulo de:
Ingeniero electrónico

Director(a):
MsC. Pablo Emilio Rozo Garcia

Lı́nea de Investigación:
Sistemas embebidos, Inteligencia computacional Universidad Distrital Francisco José de Caldas
Facultad de ingenierı́a
Bogotá, Colombia
2020
Contenido
1. Planteamiento del problema 1

2. Justificación 2

3. Objetivos 3
3.1. General . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
3.2. Especı́ficos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3

4. Marco Teórico 4
4.1. Marco Conceptual . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
4.1.1. Sistemas de identificación para control de acceso . . . . . . . . . . . . 4
4.1.2. Reconocimiento facial . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
4.1.3. Aprendizaje automatizado . . . . . . . . . . . . . . . . . . . . . . . . 7
4.1.4. Algoritmos de clasificación . . . . . . . . . . . . . . . . . . . . . . . . 8
4.1.5. API . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
4.1.6. Contenedores de aplicaciones . . . . . . . . . . . . . . . . . . . . . . . 10
4.1.7. Sistemas de control de versiones . . . . . . . . . . . . . . . . . . . . . 11
4.2. Elementos utilizados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
4.2.1. Software . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
4.2.2. Raspberry Pi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
4.2.3. Modulo NFC NXP NP532 V3 . . . . . . . . . . . . . . . . . . . . . . 14
4.2.4. Modulo Raspberry Pi Camera . . . . . . . . . . . . . . . . . . . . . . 15
4.2.5. MySQL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17

5. Estado del arte 18


5.1. Sistema de acceso usando una tarjeta RFID y verificación de rostro . . . . . 18
5.2. Diseño e implementación de un prototipo para el control de acceso en la sede
de ingenierı́a de la Universidad Distrital Francisco José De Caldas mediante
el uso de torniquetes controlados por carnet con tecnologia NFC y lector
biométrico de huella dactilar . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
5.3. Sistema de asistencia móvil basado en NFC con validación facial en Raspberry
Pi y servidor en la nube . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
5.4. Prototipo para el control de ingreso de personal por reconocimiento facial . . 19
5.5. Mercado actual . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
vi Contenido

6. Metodologı́a 21
6.1. Fase 1: Adquisición de la base de datos de imágenes . . . . . . . . . . . . . . 21
6.2. Fase 2: Algoritmo de identificación . . . . . . . . . . . . . . . . . . . . . . . 21
6.3. Fase 3: Algoritmo de extracción de caracterı́sticas . . . . . . . . . . . . . . . 21
6.4. Fase 4: Algoritmo de clasificación . . . . . . . . . . . . . . . . . . . . . . . . 21
6.5. Fase 5: Acondicionamiento del servidor remoto para el clasificador . . . . . . 22
6.6. Fase 6: Implementación de dispositivo IoT . . . . . . . . . . . . . . . . . . . 22
6.7. Fase 7: Pruebas y validación . . . . . . . . . . . . . . . . . . . . . . . . . . . 22

7. Desarrollo 23
7.1. Adquisición de la base de datos de imágenes . . . . . . . . . . . . . . . . . . 23
7.1.1. 5 celebrity faces dataset . . . . . . . . . . . . . . . . . . . . . . . . . 23
7.1.2. The Labeled Faces in the Wild face recognition dataset . . . . . . . . 24
7.2. Algoritmo de identificación . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
7.3. Algoritmo de extracción de caracterı́sticas . . . . . . . . . . . . . . . . . . . 27
7.4. Algoritmo de clasificación . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28
7.5. Acondicionamiento del servidor remoto para el clasificador . . . . . . . . . . 30
7.6. Implementación de dispositivo IoT . . . . . . . . . . . . . . . . . . . . . . . 34
7.6.1. Configuración de la Raspberry . . . . . . . . . . . . . . . . . . . . . . 37
7.6.2. Lector NFC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38
7.6.3. Configuración de la cámara . . . . . . . . . . . . . . . . . . . . . . . 41
7.6.4. Envı́o de datos al servidor remoto . . . . . . . . . . . . . . . . . . . . 42
7.7. Pruebas y validación . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46
7.7.1. Resultados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46

8. Conclusiones 49

A. Anexo: Manual para instalación de la aplicación en una Raspberry pi 50


A.1. Conexiones Fı́sicas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50
A.2. Configuración del software en la Raspberry . . . . . . . . . . . . . . . . . . . 50

B. Anexo: Manual de uso para el dispositivo IoT 53

C. Anexo: Manual de uso para el servidor remoto 55

Bibliografı́a 56
Lista de Figuras

4-1. Módulo NXP NP532 V3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15


4-2. Raspberry pi Cámara . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16

7-1. Imágenes extraidas de 5 celebrity faces dataset . . . . . . . . . . . . . . . . . 24


7-2. Imágenes extraidas de LFW dataset . . . . . . . . . . . . . . . . . . . . . . . 25
7-3. Imágenes generadas por el algoritmo de identificación . . . . . . . . . . . . . 26
7-4. Diagrama del algoritmo MTCNN . . . . . . . . . . . . . . . . . . . . . . . . 26
7-5. Resultado del proceso de identificación y procesamiento de rostros, izq. Imágen
de entrada al algoritmo, der. Imagen resultado del algoritmo . . . . . . . . . 27
7-6. Arquitecture del modelo Facenet . . . . . . . . . . . . . . . . . . . . . . . . . 28
7-7. Distintas fases de los rostros a travesa del sistema de clasificación. izq. Imagen
inicial de entrada, der. Rostro previamente procesado antes de entrar a la fase
de clasificación, ab. Predicción final del sistema . . . . . . . . . . . . . . . . 29
7-8. Arquitectura propuesta para el sistema de acceso . . . . . . . . . . . . . . . 30
7-9. Modelo entidad-relacion de la base de datos del sistema de acceso . . . . . . 31
7-10.Flujo de una petición de acceso dentro del sistema . . . . . . . . . . . . . . . 32
7-11.Repositorio en github con los archivos requeridos para el sistema de acceso . 34
7-12.Archivo Dockerfile para la generación del sistema de acceso . . . . . . . . . . 35
7-13.Archivo docker-compose para el despliegue del sistema de acceso . . . . . . . 35
7-14.Logs de informacion al iniciar el servicio web . . . . . . . . . . . . . . . . . . 35
7-15.Petición realizada en Postman al servidor web . . . . . . . . . . . . . . . . . 36
7-16.Diagrama de tareas del dispositivo IoT . . . . . . . . . . . . . . . . . . . . . 36
7-17.Sistema Raspbian . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37
7-18.Escritorio Raspbian . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38
7-19.Configuración interfaz I2C . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39
7-20.Habilitación de la interfaz I2C . . . . . . . . . . . . . . . . . . . . . . . . . . 40
7-21.Prueba módulo NFC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40
7-22.Dispositivos NFC de prueba . . . . . . . . . . . . . . . . . . . . . . . . . . . 41
7-23.Imagen adquirida por la Cámara de la Raspberry Pi . . . . . . . . . . . . . . 42
7-24.Diagrama de integración de las partes del prototipo IoT . . . . . . . . . . . . 43
7-25.Diagrama Código en la raspberry pi . . . . . . . . . . . . . . . . . . . . . . . 44
7-26.Diagrama Subproceso . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45
viii Lista de Figuras

7-27.Imagen obtenida del servidor remoto luego del procesamiento y clasificación


de la misma . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47
7-28.Imagen obtenida del servidor remoto luego del procesamiento y errónea clasi-
ficación de la misma . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47
7-29.Grafica de porcentajes de aciertos, dependiendo la cantidad de imágenes usa-
das en el entrenamiento . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48

A-1. Habilitación de puerto I2C mediante consola en Raspbian . . . . . . . . . . . 51


A-2. Archivo de configuración para el dispositivo NFC . . . . . . . . . . . . . . . 52

B-1. Prototipo de dispositivo IoT para la adquisición de las imágenes e información


de la tarjeta RFiD . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53
Lista de Tablas
4-1. Caracterı́sticas de los sistemas biométricos más usados [20] . . . . . . . . . . 5
4-2. Tipos de kernel más usados en un SVM . . . . . . . . . . . . . . . . . . . . . 9

7-1. Distribución de las imágenes en la base de datos de LFW . . . . . . . . . . . 25


7-2. Conexiones entre el modulo NFC y la raspberry pi . . . . . . . . . . . . . . . 39
7-3. Tabla de pruebas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46
7-4. Resultados obtenidos con las pruebas . . . . . . . . . . . . . . . . . . . . . . 48
1. Planteamiento del problema
En la sociedad, el rostro es una parte fundamental de las interacciones sociales, llegando al
punto de que una persona puede reconocer caracterı́sticas y expresiones faciales de cientos
de rostros, incluyendo personas con las cuales no se ha tenido contacto en algún tiempo,
llevando a cabo esta identificación en solo fracciones de segundo. El realizar la emulación de
este procesamiento mediante sistemas artificiales ha sido de gran interés, y un gran desafı́o,
para muchas de las disciplinas de la ingenierı́a actual como la informática, la inteligencia
artificial, la biometrı́a y la visión artificial.[9][8] Bajo ciertas circunstancias, estos sistemas
cuentan con caracterı́sticas como rapidez, precisión, gran efectividad en la identificación
y mı́nima invasión; sin embargo, en condiciones no controladas, se evidencian múltiples
deficiencias al analizar los distintos datos como variación en la orientación, la iluminación, la
escala, entre otros. Por otro lado, existe un gran interés en una gran variedad de métodos de
identificación de personas como: usuario y contraseña, tarjetas de radiofrecuencia (RFID),
llave, pasaporte, etc. El punto débil de estos recursos es la perdida, olvido, mala manipulación
o robo de los mismos, ocasionando problemas tanto económicos como de seguridad. Debido
a todos estos inconvenientes, es de gran importancia desarrollar sistemas de identificación
de personas que no presenten tales desventajas. Las técnicas de identificación basadas en la
biometrı́a ofrecen una solución de identificación robusta, dado que utiliza los rasgos fı́sicos
o de conducta del cuerpo humano que son únicos, permanentes e intransferibles. Los rasgos
fı́sicos pueden ser extraı́dos del ojo (iris, retina), de las manos (huellas dactilares, geometrı́a,
venas) o de las caracterı́sticas faciales. Al interior de varias universidades en el paı́s se han
presentando inconvenientes en las distintas facultades que radican en el ingreso de personal
ajeno a la institución o a las facultades mismas, tales como robos[13][22] y alteración del
orden público entre otros.
De acuerdo a lo expuesto, ¿Es posible crear un sistema de identificación de personas,
de múltiple factor, que minimice en gran medida las debilidades de sistemas de
identificación separados, pero conservando la mı́nima invasión?
2. Justificación
El propósito de este proyecto es reunir y aplicar los conocimientos que se han adquirido en
el desarrollo de las diferentes asignaturas de la carrera, tales como análisis y procesamiento
de imágenes, inteligencia computacional y electrónica en general, con el fin de desarrollar un
prototipo de un sistema de identificación de personas de múltiple factor basado en recono-
cimiento facial para ser implementado como sistema de acceso en la Universidad Distrital
Francisco José de Caldas, el cual permita mejorar en gran medida la percepción de seguridad
y la seguridad misma al interior de las instalaciones del plantel universitario. Sistemas de
este tipo han sido implementados usando distintas herramientas de clasificación en tiempo
real en distintas partes del mundo, el diseño propuesto pretende mitigar de las debilidades de
otros tipos de sistemas de acceso por separado, por otro lado también se pretende mantener
la mı́nima invasión para no afectar la agilidad y la confianza en el ingreso a las instalaciones,
pero, sin disminuir la efectividad en la identificación de las personas.
Este prototipo no ha sido implementado dentro de la Universidad Distrital motivo por el
cual es importante el desarrollo del mismo como avance e integración de diferentes elementos
tecnológicos. Otro elemento importante a destacar es que, dadas las potenciales amenazas
relacionadas con el ingreso de personal externo a la comunidad universitaria, con este dis-
positivo se pretende aumentar la confianza al ingreso del claustro, el personal dedicado a la
seguridad del mismo puede enfocar su tiempo y recursos para mejorar la confianza al inte-
rior de las instalaciones en vez de malgastar recursos validando la identidad de las personas
que entran a la universidad. La implementación de un prototipo de un sistema de iden-
tificación de personas de múltiple factor basado en reconocimiento facial es una excelente
oportunidad para el desarrollo de la carrera profesional, pues se usan los conocimientos de
procesamiento de imágenes, electrónica e inteligencia computacional, campos de acción con
grandes oportunidades laborales y de crecimiento.
3. Objetivos

3.1. General
Diseñar e implementar un prototipo de un sistema de identificación de personas de múltiple
factor basado en reconocimiento facial para ser implementado como sistema de acceso en la
Universidad Distrital Francisco José de Caldas

3.2. Especı́ficos
Diseñar un prototipo de algoritmo para la identificación y extracción de rostros en
imágenes

Implementar algoritmo de extracción de caracterı́sticas faciales basado en imágenes

Construir un sistema de clasificación múltiple para la identificación de personas basado


en caracterı́sticas faciales

Desplegar el sistema de identificación en un servidor remoto para que sea accedido


desde un dispositivo IoT

Desarrollar un prototipo de dispositivo IoT que permita la toma de imágenes y el envı́o


de estas a un servidor

Implementar un prototipo de autenticación múltiple IoT con RFID y reconocimiento


facial
4. Marco Teórico

4.1. Marco Conceptual


4.1.1. Sistemas de identificación para control de acceso
Un sistema de control de acceso es un dispositivo que permite o restringe la entrada a una
persona mediante un sistema de identificación. La identificación de la persona puede ser
mediante una tarjeta magnética, llavero, contraseña, pulsera, huella o los puntos biométri-
cos de la cara, principalmente para su control de acceso. Cuando la persona es autorizada
utilizando cualquiera de estos sistemas de identificación, se activa algún tipo de mecanismo
que permite el ingreso o la salida del mismo.

Identificación con RFID


RFID es una método que usa ondas electromagnéticas para la identificación de objetos que
permiten el almacenamiento y recuperación de datos, permitiendo una gran gama de usos.
El uso de sistemas RFID permite a la industria llevar un control en la identificación de
objetos en tiempo real agilizando la operación. Como mı́nimo un sistema de identificación
RFID está compuesto de un lector, una etiqueta y una antena, el lector envı́a una señal a
una etiqueta y la etiqueta responde con su información única. Los sistemas RFID junto con
la tecnologı́a IoT, son cambios revolucionarios que se reflejan en la actividad humana y su
entorno social, generando nuevos ambientes ubicuos.[4] Esta tecnologı́a posee 3 rangos de
frecuencia importantes:
Baja frecuencia (LF) 125-134KHz.

Alta frecuencia (HF) 13.56MHz.

Ultra alta frecuencia (UHF) 856MHz a 960MHz.


Una tecnologı́a derivada importante de RFID es el NFC. NFC está construido en la frecuencia
de RFID HF y utiliza las limitaciones de distancia de esta tecnologı́a en una caracterı́stica de
NFC. Un elemento NFC es capaz de actuar tanto como lector o como etiqueta. Esta habilidad
de NFC ha convertido a esta tecnologı́a en una opción popular para implementación de
sistemas de pagos sin contacto. NFC obtuvo un impulso importante en su adopción debido a
la inclusión de la tecnologı́a por parte de los fabricantes de teléfonos móviles, lo que permite
que estos envı́en información entre si acercando dos dispositivos que soporten NFC.
4.1 Marco Conceptual 5

Identificación por biometrı́a

La biometrı́a es un sistema de toma de medidas, basada en reconocimiento de huellas digita-


les, iris, reconocimiento a través de caracterı́sticas faciales y caracterı́sticas de la voz, este se
ha implementado en los tiempos recientes como medida de seguridad y a su vez como registro
de personas, animales y objetos[17]. Un gran beneficio que otorga la tecnologı́a biométrica
es que se elimina la necesidad de llevar una tarjeta o llave para acceder a alguna instalación.
Comparada con otras tecnologı́as de accesos, la biometrı́a garantiza uno de los niveles de
autenticación más confiables. Además, eliminando los inconvenientes de tener que recordar
una contraseña ó un número de PIN de acceso. Los sistemas biométricos más empleados son
el dactilar, facial y del iris. La tabla 4-1 contiene las diferentes caracterı́sticas de los sistemas
biométricos más usados.

Ojo Ojo Escritura Huellas


Voz Cara
(iris) (Retina) y firma dactilares
Fiabilidad Muy Alta Muy Alta Media Muy Alta Alta Alta
Facilidad
Media Baja Alta Alta Alta Alta
de uso
Prevención
Muy Alta Muy Alta Media Alta Media Alta
de ataques
Aceptación Media Baja Muy Alta Alta Alta Muy Alta
Estabilidad Alta Alta Baja Alta Media Alta

Tabla 4-1.: Caracterı́sticas de los sistemas biométricos más usados [20]

4.1.2. Reconocimiento facial


El reconocimiento facial se ha convertido en los últimos años en un área de investigación
activa que abarca diversas disciplinas. El objetivo de un sistema de reconocimiento facial
es, generalmente, el siguiente: dada una imagen de una cara ”desconocida”, o imagen de
prueba, encontrar una imagen de la misma cara en un conjunto de imágenes çonocidas”, o
imágenes de entrenamiento. El reconocimiento facial comenzó en los años 60. Era un proceso
cuasi-automático en el que una persona entrenada identificaba las facciones de la persona
en múltiples fotografı́as y calculaba las distancias para compararlas entre sı́. Los avances
en la tecnologı́a de la computación y el procesamiento en los últimos años han creado una
incremento en la cantidad de algoritmos, técnicas y aplicaciones de reconocimiento facial
para identificar un individuo en una imagen. El procedimiento usado por los sistemas de
reconocimiento facial consiste de manera general de cinco fases[7]:

Fase de registro, se captura la imagen del rostro de la persona a identificar usando una
cámara fotográfica o una cámara de video.
6 4 Marco Teórico

Fase de procesamiento de la imagen, se lleva a cabo la alineación del rostro basándo-


se en algunas propiedades geométricas y se obtiene una imagen independiente de la
iluminación y gama de colores de la imagen original.

Fase de extracción de información biométrica, se obtienen las caracterı́sticas faciales


como un patrón biométrico.

Fase de comparación, el patrón biométrico se compara con el patrón de rostros alma-


cenados en la base de datos. Es una comparación 1:N donde se determina el porcentaje
de similitud de la persona a identificar respecto a las fotografı́as almacenadas en la
base de datos.

Fase de toma de decisiones, utilizando una matriz de similitudes, se identifica a la


persona que resultó con mayor porcentaje de similitud de la base de datos usando un
rango establecido.

Algoritmo Viola Jones y Clasificadores Haar

La detección de objetos usando clasificadores en cascada basados en caracterı́sticas de Haar


es un método efectivo de detección de objetos propuesto por Paul Viola y Michael Jones en
[19]. Es un enfoque de aprendizaje automático donde la función de cascada está entrenada
a partir de muchas imágenes positivas y negativas. Luego se usa para detectar objetos en
otras imágenes. Estas caracterı́sticas tipo Haar se definen sobre regiones rectangulares de
una imagen en escala de grises. Una caracterı́stica está formada por un número finito de
rectángulos y su valor escalar será la suma de los pı́xeles de cada rectángulo aplicando un
cierto factor de peso. Viola y Jones limitaron el espacio de caracterı́sticas permitiendo solo
2, 3 o 4 rectángulos[14].

MTCNN

La detección de rostros y la alineación en un entorno sin restricciones son un desafı́o debido


a varias poses, iluminaciones y oclusiones. Estudios recientes muestran que los enfoques de
aprendizaje profundo pueden lograr un rendimiento impresionante en estas dos tareas. En
este articulo [21], se propone un marco de tareas múltiples en cascada que explota la corre-
lación inherente entre detección y alineación para aumentar su rendimiento. En particular,
este marco aprovecha una arquitectura en cascada con tres etapas de redes convolucionales
profundas cuidadosamente diseñadas para predecir la ubicación de la cara y el punto de
referencia de una manera gruesa a fina. Además, se propone una nueva estrategia de minerı́a
de muestras duras en lı́nea que mejora aún más el rendimiento en la práctica.
4.1 Marco Conceptual 7

Facenet

En este artı́culo [16] se presenta un sistema unificado para la verificación de rostros, reco-
nocimiento y agrupamiento. Este método se basa en aprender una incrustación euclidiana
por imagen utilizando una red convolucional profunda. La red está entrenada de tal manera
que las distancias cuadradas de L2 en el espacio de inserción corresponden directamente a la
similitud de caras: las caras de la misma persona tienen distancias pequeñas y las caras de
personas distintas tienen distancias grandes. Una vez que se ha producido esta incrustación,
las tareas antes mencionadas se vuelven sencillas: la verificación de la cara simplemente im-
plica limitar la distancia entre las dos incrustaciones; el reconocimiento se convierte en un
problema de clasificación k-NN; y la agrupación se puede lograr utilizando técnicas fuera
de la plataforma tales como k-means o agrupación aglomerativa. Facenet fue introducida en
2015 por un equipo de Google como evolución del modelo Inception y fue entrenada usando
un esquema de tripletas (imagen base, imagen de la misma identidad, imagen de distinta
identidad) y una función de pérdida que favorecı́a distancias pequeñas entre los descriptores
generados para imágenes de la misma identidad y distancias grandes entre los descriptores
de imágenes de distinta identidad[3].

4.1.3. Aprendizaje automatizado


El aprendizaje automático está adquiriendo cada vez más importancia en diversas ramas de
la ciencia, la tecnologı́a o los negocios. En términos generales, un sistema automático debe ser
capaz de proporcionar una respuesta apropiada cuando se introduce información al mismo.
En el aprendizaje supervisado, el núcleo del sistema es un modelo predictivo que asigna uno
o varios valores de salida a cada elemento de entrada, con base al conocimiento adquirido
a partir de un conjunto de datos cuyas salidas son conocidas. Sin embargo, la información
disponible no siempre se puede o se debe utilizar directamente para alimentar al modelo.
Por ello, suele ser necesaria una fase denominada de pre procesamiento para adecuar las
entradas, en aras de maximizar el rendimiento del modelo. Asimismo, la salida que ofrece el
modelo puede no ser satisfactoria o quizás resulte difı́cil de interpretar. Por lo tanto, en una
última fase, de postprocesamiento, se evalúa el rendimiento del modelo y, en la medida de
lo posible, se adaptan las salidas a las necesidades del usuario.[15]

Tipos de aprendizaje

Aprendizaje supervisado
El aprendizaje supervisado es un tipo de algoritmo de aprendizaje automatizado que
emplea un conjunto de datos conocidos (el denominado conjunto de datos de entre-
namiento) para realizar predicciones. El conjunto de datos de entrenamiento incluye
datos de entrada y valores de respuesta. A partir de él, el algoritmo de aprendizaje su-
pervisado busca crear un modelo que pueda realizar predicciones acerca de los valores
8 4 Marco Teórico

de respuesta para un nuevo conjunto de datos. Con frecuencia se utiliza un conjunto


de datos de prueba para validar el modelo. Si se utilizan conjuntos de datos de entre-
namiento de mayor tamaño, a menudo se generan modelos cuya capacidad predictiva
es mayor y que se pueden aplicar con buenos resultados sobre nuevos conjuntos de
datos.[11] Entre los algoritmos de clasificación comunes se incluyen:
• Máquinas de vectores de soporte (SVM)
• Redes neuronales
• Clasificador Naı̈ve Bayes
• Árboles de decisión
• Análisis discriminante
• Vecinos más cercanos (kNN)

Aprendizaje no supervisado
El aprendizaje no supervisado es un método de Aprendizaje Automático donde un
modelo es ajustado a las observaciones. Se distingue del Aprendizaje supervisado por
el hecho de que no hay un conocimiento a priori. En el aprendizaje no supervisado, un
conjunto de datos de objetos de entrada es tratado. Ası́, el aprendizaje no supervisado
tı́picamente trata los objetos de entrada como un conjunto de variables aleatorias,
siendo construido un modelo de densidad para el conjunto de datos.

4.1.4. Algoritmos de clasificación


Redes neuronales artificiales

Las redes neuronales artificiales (RNA), sus diversas variantes o trabajando en forma hibrida
con otros modelos han demostrado ser apropiadas para analizar diversos problemas relacio-
nados con el reconocimiento de patrones y el análisis de datos cuya formulación mediante
técnicas clásicas resulta difı́cil o inapropiada, más aún cuando se dispone de gran cantidad
de información y problemas de alta no linealidad en los modelos.[6]

Algoritmos Genéticos

Los algoritmos genéticos (AG) funcionan entre el conjunto de soluciones de un problema


llamado fenotipo, y el conjunto de individuos de una población natural, codificando la in-
formación de cada solución en una cadena, generalmente binaria, llamada cromosoma. Los
sı́mbolos que forman la cadena son llamados genes. Cuando la representación de los cromo-
somas se hace con cadenas de dı́gitos binarios se le conoce como genotipo. Los cromosomas
evolucionan a través de iteraciones, llamadas generaciones. En cada generación, los cromo-
somas son evaluados usando alguna medida de aptitud. Las siguientes generaciones (nuevos
4.1 Marco Conceptual 9

cromosomas), son generadas aplicando los operadores genéticos repetidamente, siendo estos
los operadores de selección, cruzamiento, mutación y reemplazo.

SVM
Una máquina de vectores de soporte (SVM) es un algoritmo de aprendizaje supervisado que
se puede emplear para clasificación binaria o regresión. Las máquinas de vectores de soporte
son muy populares en aplicaciones como el procesamiento del lenguaje natural, el habla, el
reconocimiento de imágenes y la visión artificial.
Una máquina de vectores de soporte construye un hiperplano óptimo en forma de superficie
de decisión, de modo que el margen de separación entre las dos clases en los datos se amplı́a
al máximo. Los vectores de soporte hacen referencia a un pequeño subconjunto de las ob-
servaciones de entrenamiento que se utilizan como soporte para la ubicación óptima de la
superficie de decisión.
Las máquinas de vectores de soporte pertenecen a una clase de algoritmos de Machine
Learning denominados métodos kernel y también se conocen como máquinas kernel.
El entrenamiento de una máquina de vectores de soporte consta de dos fases:
Transformar los predictores (datos de entrada) en un espacio de caracterı́sticas altamente
dimensional. En esta fase es suficiente con especificar el kernel; los datos nunca se transfor-
man explı́citamente al espacio de caracterı́sticas. Este proceso se conoce comúnmente como
el truco kernel. Resolver un problema de optimización cuadrática que se ajuste a un hiper-
plano óptimo para clasificar las caracterı́sticas transformadas en dos clases. El número de
caracterı́sticas transformadas está determinado por el número de vectores de soporte. Para
construir la superficie de decisión solo se requieren los vectores de soporte seleccionados de
los datos de entrenamiento. Una vez entrenados, el resto de los datos de entrenamiento son
irrelevantes.
Tipo de SVM Kernel Mercer Descripción
Función de base radial 
−x2 k2
 Aprendizaje de una sola clase;
K(x1 , x2 ) = exp − kx12σ 2
(RBF) o gaussiana σ es la anchura del kernel
Lineal K(x1 , x2 ) = xT1 x2 Aprendizaje de dos clases

Polinómica K(x1 , x2 ) = xT1 x2 + 1 ρ es el orden del polinomio
 Es un kernel Mercer solo para
Sigmoid K(x1 , x2 ) = tanh β0 xT1 x2 + β1
determinados valores β0 yβ1

Tabla 4-2.: Tipos de kernel más usados en un SVM

4.1.5. API
Una API es una interfaz de programación de aplicaciones (del inglés API: Application Pro-
gramming Interface). Es un conjunto de rutinas que provee acceso a funciones de un deter-
10 4 Marco Teórico

minado software.
Son publicadas por los constructores de software para permitir acceso a caracterı́sticas de
bajo nivel o propietarias, detallando solamente la forma en que cada rutina debe ser llevada
a cabo y la funcionalidad que brinda, sin otorgar información acerca de cómo se lleva a cabo
la tarea. Son utilizadas por los programadores para construir sus aplicaciones sin necesidad
de volver a programar funciones ya hechas por otros, reutilizando código que se sabe que
está probado y que funciona correctamente.

REST

REST es cualquier interfaz entre sistemas que use HTTP para obtener datos o generar opera-
ciones sobre esos datos en todos los formatos posibles, como XML y JSON. Es una alternativa
en auge a otros protocolos estándar de intercambio de datos como SOAP (Simple Object
Access Protocol), que disponen de una gran capacidad pero también mucha complejidad. A
veces es preferible una solución más sencilla de manipulación de datos como REST.

4.1.6. Contenedores de aplicaciones

En la virtualización, un contenedor de aplicaciones es un elemento de control para una


instancia de aplicación que se ejecuta dentro de un tipo de esquema de virtualización llamado
virtualización basada en contenedores.
En la virtualización tradicional basada en hypervisor, los procesos aislados y las máquinas
se ejecutan en sus propios sistemas operativos individuales, conectados independientemente
a un hypervisor de control. El sistema de virtualización asigna memoria y potencia de
procesamiento según sea necesario.
Por el contrario, en la virtualización basada en contenedores, las instancias individuales
comparten un sistema operativo. Simplemente tienen diferentes contenedores de código para
bibliotecas y otros recursos. Esto permite un diseño más eficiente, al eliminar la necesi-
dad de configurar más sistemas de infraestructura individuales para componentes virtuales
(máquinas virtuales o instancias de aplicaciones).
Dentro de este contexto, algunas empresas innovadoras de código abierto han creado lo que se
llama un çontenedor de aplicaciones”, un estándar tecnológico que ayuda a proporcionar un
método consistente para crear estos contenedores virtuales. La forma más fácil de pensar en
esto es como un contenedor de almacenamiento virtual para datos y procesos. La tecnologı́a
en sı́ es mucho más un estándar acordado que un tipo particular de base de código. Separa
todos los elementos internos de la instancia de la aplicación de lo que está afuera, que es
esencialmente el sistema operativo host y el software de virtualización.
4.1 Marco Conceptual 11

Docker

Docker es un proyecto de código abierto que automatiza el despliegue de aplicaciones dentro


de contenedores de aplicaciones, proporcionando una capa adicional de abstracción y auto-
matización de virtualización de aplicaciones en múltiples sistemas operativos. Docker utiliza
caracterı́sticas de aislamiento de recursos del kernel Linux, tales como cgroups y espacios de
nombres (namespaces) para permitir que contenedores independientes se ejecuten dentro de
una sola instancia de Linux, evitando la sobrecarga de iniciar y mantener máquinas virtuales.
El soporte del kernel Linux para los espacios de nombres aı́sla la vista que tiene una aplica-
ción de su entorno operativo, incluyendo árboles de proceso, red, ID de usuario y sistemas
de archivos montados, mientras que los cgroups del kernel proporcionan aislamiento de re-
cursos, incluyendo la CPU, la memoria, el bloque de E/S y de la red. Desde la versión 0.9,
Docker incluye la biblioteca libcontainer como su propia manera de utilizar directamente
las facilidades de virtualización que ofrece el kernel Linux, además de utilizar las interfaces
abstraı́das de virtualización mediante libvirt, LXC (Linux Containers) y systemd-nspawn.

4.1.7. Sistemas de control de versiones


Se llama control de versiones a la gestión de los diversos cambios que se realizan sobre los
elementos de algún producto o una configuración del mismo. Una versión, revisión o edición
de un producto, es el estado en el que se encuentra el mismo en un momento dado de su
desarrollo o modificación.
Aunque un sistema de control de versiones puede realizarse de forma manual, es muy aconse-
jable disponer de herramientas que faciliten esta gestión dando lugar a los llamados sistemas
de control de versiones o VCS (del inglés Version Control System). Estos sistemas facilitan
la administración de las distintas versiones de cada producto desarrollado, ası́ como las po-
sibles especializaciones realizadas (por ejemplo, para algún cliente especı́fico). Ejemplos de
este tipo de herramientas son entre otros: CVS, Subversion, SourceSafe, ClearCase, Darcs,
Bazaar, Plastic SCM, Git, SCCS, Mercurial, Perforce, Fossil SCM, Team Foundation Server.
El control de versiones se realiza principalmente en la industria informática para controlar
las distintas versiones del código fuente dando lugar a los sistemas de control de código fuente
o SCM (siglas del inglés Source Code Management). Sin embargo, los mismos conceptos son
aplicables a otros ámbitos como documentos, imágenes, sitios web, etc.

GIT

Git es un software de control de versiones diseñado por Linus Torvalds, pensando en la


eficiencia y la confiabilidad del mantenimiento de versiones de aplicaciones cuando éstas
tienen un gran número de archivos de código fuente. Su propósito es llevar registro de los
cambios en archivos de computadora y coordinar el trabajo que varias personas realizan
sobre archivos compartidos.
12 4 Marco Teórico

Al principio, Git se pensó como un motor de bajo nivel sobre el cual otros pudieran escribir
la interfaz de usuario o front end como Cogito o StGIT. Sin embargo, Git se ha convertido
desde entonces en un sistema de control de versiones con funcionalidad plena. Hay algunos
proyectos de mucha relevancia que ya usan Git, en particular, el grupo de programación del
núcleo Linux.
El mantenimiento del software Git está actualmente (2009) supervisado por Junio Hamano,
quien recibe contribuciones al código de alrededor de 280 programadores. En cuanto a de-
rechos de autor Git es un software libre distribuible bajo los términos de la versión 2 de la
Licencia Pública General de GNU.

4.2. Elementos utilizados

4.2.1. Software

Python

Python es un lenguaje de programación interpretado cuya filosofı́a hace hincapié en la le-


gibilidad de su codigo. Se trata de un lenguaje de programación multiparadigma, ya que
soporta orientación a objetos, programación imperativa y, en menor medida, programación
funcional. Es un lenguaje interpretado, dinámico y multiplataforma. Es administrado por
la Python Software Foundation. Posee una licencia de código abierto, denominada Python
Software Foundation License, que es compatible con la Licencia pública general de GNU a
partir de la versión 2.1.1, e incompatible en ciertas versiones anteriores.

TensorflowTM

TensorFlowTM es una biblioteca de software libre que se utiliza para realizar cálculos numéri-
cos mediante diagramas de flujo de datos. Los nodos de los diagramas representan opera-
ciones matemáticas y las aristas reflejan las matrices de datos multidimensionales (tensores)
comunicadas entre ellas. Gracias a la flexibilidad de la arquitectura, solo necesitas una API
para desplegar el sistema informático de una o varias CPU o GPU en un escritorio, servi-
dor o dispositivo móvil. En su origen, TensorFlow fue fruto del trabajo de investigadores e
ingenieros de Google Brain Team que formaban parte de la organización de investigación
del aprendizaje automático de Google. Su objetivo era realizar investigaciones en el campo
del aprendizaje automático y las redes neuronales profundas. A pesar de que este era su
propósito inicial, se trata de un sistema lo bastante general como para poder aplicarse en
muchos otros campos.[18]
4.2 Elementos utilizados 13

4.2.2. Raspberry Pi
Raspberry Pi es un ordenador de placa reducida, ordenador de placa única u ordenador de
placa simple (SBC) de bajo coste desarrollado en el Reino Unido por la Fundación Raspberry
Pi, con el objetivo de estimular la enseñanza de informática en las escuelas. Aunque no se
indica expresamente si es hardware libre o con derechos de marca, en su web oficial explican
que disponen de contratos de distribución y venta con dos empresas, pero al mismo tiempo
cualquiera puede convertirse en revendedor o redistribuidor de las tarjetas RaspBerry Pi, por
lo que da a entender que es un producto con propiedad registrada, manteniendo el control
de la plataforma, pero permitiendo su uso libre tanto a nivel educativo como particular. En
cambio, el software sı́ es de código abierto, siendo su sistema operativo oficial una versión
adaptada de Debian, denominada Raspbian, aunque permite usar otros sistemas operativos,
incluido una versión de Windows 10. En todas sus versiones incluye un procesador Broadcom,
una memoria RAM, una GPU, puertos USB, HDMI, Ethernet (El primer modelo no lo tenı́a),
40 pines GPIO y un conector para cámara. Ninguna de sus ediciones incluye memoria, siendo
esta en su primera versión una tarjeta SD y en ediciones posteriores una tarjeta MicroSD.
La fundación da soporte para las descargas de las distribuciones para arquitectura ARM,
Raspbian (derivada de Debian), RISC OS 5, Arch Linux ARM (derivado de Arch Linux)
y Pidora (derivado de Fedora); y promueve principalmente el aprendizaje del lenguaje de
programación Python. Otros lenguajes también soportados son Tiny BASIC, C, Perl y Ruby.

Raspbian

Raspbian es un sistema operativo diseñado por Mike Thompson y Peter Green en 2012.
Es una distribución del sistema operativo para ordenadores GNU/LINUX basado en debı́an.
Este sistema está basado en el hardware propio de una Raspberry logrando con esto optimizar
los procesos permitiendo con esto un mejor uso de los recursos y optimizar el rendimiento del
dispositivo. Otorga una interfaz gráfica dando con esto beneficios como una configuración
más sencilla de los puertos y pines que posee, la posibilidad de trabajar en entornos de
desarrollo como Geany o Thonny Python entre otros. También se pueden encontrar otros
beneficios como Juegos, reproductor de audio y la posibilidad de navegar en internet. Como
el sistema operativo es una distribución de GNU/LINUX soporta todo el software de código
abierto existente para ser compilado bajo la arquitectura de la Raspberry pi.

Libnfc

Es una biblioteca de software libre desarrollada para el control de Near Field Comunication
(NFC). Es compatible con dispositivos NXP PN531, PN532 y PN533. Posee un tamaño
pequeño de aproximadamente 65 KB, además posee archivos de ejemplo que dan una muestra
del fácil uso de la biblioteca. Para que esta pueda funcionar es necesario que a la par estén
instaladas la librerı́as libusb e i2c-tools.
14 4 Marco Teórico

Libusb

Es una biblioteca desarrollada en C que proporciona un acceso sencillo y genérico a dispo-


sitivos USB. Está enfocada en facilitar la tarea de los desarrolladores que quieran realizar
tareas utilizando hardware USB. Tiene ventajas tales como que no es necesario ningún nivel
de privilegio para el acceso a los dispositivos USB o que posee una API moderna que permite
un acceso sincrónico o asincrónico este último siendo más eficiente pero también con un nivel
más alto de complejidad al manejarlo. Soporta todas las plataformas principales Linux, IOS,
Microsoft entre otras.

i2c-tools

Es un conjunto de herramientas desarrolladas sobre Linux para el uso y el control del bus i2c.
Las herramientas que contiene son i2cdetect es un programa que escanea y busca dispositivos
en el bus i2c de la placa y devuelve una tabla con la lista de los dispositivos detectados, i2cget
se utiliza para la lectura de los registros que están visibles a través del bus i2C, también se
puede encontrar el programa i2Ctransfer que es el encargado de crear y enviar mensajes i2C.

4.2.3. Modulo NFC NXP NP532 V3

Este módulo NFC que se puede ver en la figura 4-1 está desarrollado por la empresa NXP
originaria de los Paı́ses Bajos, que está dedicada a la fabricación de dispositivos semicon-
ductores entre los cuales destacan los NFC, implantados en celulares de alta gama como el
NEXUS S de Google. Caracterı́sticas:

Es un módulo que opera con dispositivos NFC de frecuencias de 13.56 MHZ con una
antena incluida en la propia PCB.

Posee varias interfaces de comunicación como lo son SPI, I2C y UART con fácil inter-
cambio entre ellas.

Posee las ventajas de NFC que son lecturas a distancias de no más de 7 cm y además
poder hacer intercambio de información entre dos lectores (2P2).

Maneja voltajes de operación de entre 3.3V y 5V.

Posee una transferencia de datos máxima de 10Mbit/s.

Es compatible para lectura y escritura con tarjetas Mifare1 S50, S70 Mifare1, MIFARE
Ultralight, Mifare Pro, Mifare DESFire, ISO/IEC 14443-4, P5CN072 (SMX).
4.2 Elementos utilizados 15

Figura 4-1.: Módulo NXP NP532 V3

4.2.4. Modulo Raspberry Pi Camera

Este módulo de cámara que se puede ver en la figura 4-2 está desarrollado directamen-
te por Raspberry pi. Esta es la primera versión (5 megapı́xeles) lanzada en el 2013. Las
caracterı́sticas de esta cámara son las siguientes:
Posee unas dimensiones y peso pequeños.

Resolución de imagen fija 2592 x 1944 y modo de video 1080 x 720 p60.

Campo de visión Horizontal 53.5 grados y campo de visión vertical 41.41 grados.

Funciona con 1.5 V y consume entre 200-250 mA.

Soportada en todos los modelos de Raspberry Pi.


16 4 Marco Teórico

Figura 4-2.: Raspberry pi Cámara

Conexión con Raspberry por medio de puerto CSI.

Picamera

Picamera es una libreria dedicada para el uso de el modulo de camara de Raspberry Pi. La
librerı́a entrega muchas ventajas y facilidades, con solo crear un objeto de este tipo se podrá
tener acceso a todas las funciones incorporadas en la librerı́a, desde allı́ se podrán realizar
cambios como el brillo, la rotación de la imagen, el tamaño, el factor ISO, la resolución, un
balance automático de blancos y negros y con llamar una función.capture() se podrá guardar
en la Raspberry una foto. Esta librerı́a también permite de la misma manera poder llamar
otra función que logra capturar y guardar videos al cual se le podrán hacer los mismos
cambios de caracterı́sticas como en el caso de una foto y poder programar el tiempo de
grabación del video. Los formatos en los que guarda la información son JPEG (accelerated),
JPEG + RAW, GIF, BMP, PNG, YUV420, RGB888 para imágenes y raw h.264 (accelerated)
para los videos.
4.2 Elementos utilizados 17

4.2.5. MySQL
MySQL es un sistema de gestión de bases de datos relacional desarrollado bajo licencia dual:
Licencia pública general/Licencia comercial por Oracle Corporation y está considerada como
la base de datos de código abierto más popular del mundo, y una de las más populares en
general junto a Oracle y Microsoft SQL Server, sobre todo para entornos de desarrollo web.
MySQL fue inicialmente desarrollado por MySQL AB (empresa fundada por David Axmark,
Allan Larsson y Michael Widenius). MySQL AB fue adquirida por Sun Microsystems en 2008,
y ésta a su vez fue comprada por Oracle Corporation en 2010, la cual ya era dueña desde
2005 de Innobase Oy, empresa finlandesa desarrolladora del motor InnoDB para MySQL.
Al contrario de proyectos como Apache, donde el software es desarrollado por una comunidad
pública y los derechos de autor del código están en poder del autor individual, MySQL es
patrocinado por una empresa privada, que posee el copyright de la mayor parte del código.
Esto es lo que posibilita el esquema de doble licenciamiento anteriormente mencionado. La
base de datos se distribuye en varias versiones, una Community, distribuida bajo la Licencia
pública general de GNU, versión 2, y varias versiones Enterprise, para aquellas empresas que
quieran incorporarlo en productos privativos. Las versiones Enterprise incluyen productos o
servicios adicionales tales como herramientas de monitorización y asistencia técnica oficial.
5. Estado del arte

5.1. Sistema de acceso usando una tarjeta RFID y


verificación de rostro
En el 2018 se publicó un artı́culo en la revista Ingenious de Ciencia y Tecnologı́a de la Uni-
versidad Politécnica Salesiana llamado Sistema de acceso usando una tarjeta RFID
y verificación de rostro, en este artı́culo se diseñó un sistema de acceso a una central de
datos el cual cuenta con dos sistemas de seguridad, el primero es una tarjeta NFC/RFID
532 que contiene información del usuario y como segundo sistema se utilizó una cámara que
toma una fotografı́a y con esta foto utilizar un sistema de redes neuronales y poder validar
que el usuario de la tarjeta sea la persona que está autorizada para el ingreso. Para la lectura
de la tarjeta y la fotografı́a del rostro se utiliza un módulo Raspberry pi3 b+ con una cámara
incorporada, el cual por medio de WIFI envı́a la información a un módulo central que uti-
liza el algoritmo de Histograma de Gradientes Orientados y más especı́ficamente la librerı́a
Face Recognition, la cual obtuvo resultados de 99,2 % de acierto y un tiempo de respuesta
de 180 ms.[7]

5.2. Diseño e implementación de un prototipo para el


control de acceso en la sede de ingenierı́a de la
Universidad Distrital Francisco José De Caldas
mediante el uso de torniquetes controlados por
carnet con tecnologia NFC y lector biométrico de
huella dactilar
En 2016 se presentó un proyecto de tesis en la Universidad Distrital Francisco Jose de Caldas
llamado Diseño e implementación de un prototipo para el control de acceso en
la sede de ingenierı́a de la Universidad Distrital Francisco José de Caldas me-
diante el uso de torniquetes controlados por carnet con tecnologı́a NFC y lector
biométrico de huella dactilar, el cual consistı́a en realizar el prototipo de un torniquete
5.3 Sistema de asistencia móvil basado en NFC con validación facial en
Raspberry Pi y servidor en la nube 19

que tuviera un sistema de doble validación, la primera un sistema de validación por tarjetas
con tecnologı́a NFC y otro sistema formado por un lector biométrico de huella digital (MIFA-
RE) acompañado con una controladora InBio260, donde se observa una limitación y es que
la base de datos que puede tener el sistema del lector biométrico es de 30.000 usuarios. En los
resultados del proyecto se observa que la implementación del sistema no se pudo completar
en su totalidad ya que por el precio del sistema biométrico fue imposible su implementación
en el prototipo.[2]

5.3. Sistema de asistencia móvil basado en NFC con


validación facial en Raspberry Pi y servidor en la
nube
En la 6ta conferencia internacional sobre gestión de servicios informáticos (CITSM) y ci-
bernéticos realizada en Parapat, Indonesia del 7 al 9 de agosto del 2018, se realizó la pu-
blicación del articulo llamado “Sistema de asistencia móvil basado en NFC con validación
facial en Raspberry Pi y servidor en la nube”, este es un trabajo elaborado para el control de
asistencia de alumnos de colegio a sus clases, este trabajo está basado en una aplicación en
un dispositivo inteligente que contenga la información del alumno y un chip NFC el cual al
acercarse al módulo Raspberry, este pueda tomar la asistencia y una foto de validación para
subir esta información a un servicio de base de datos en la nube y lograr tener un respaldo de
la asistencia, además de esto el servidor puede ser accedido de forma remota por el docente
y los padres por medio de una aplicación móvil.[10]

5.4. Prototipo para el control de ingreso de personal por


reconocimiento facial
En el 2018 se presenta una tesis de especialización titulada Prototipo para el control de
ingreso de personal por reconocimiento facial en la Universidad Distrital Francisco
José de Caldas, en esta tesis se utiliza la biblioteca OpenCV para la captura del rostro donde
se presenta un limitante y es que la captura del rostro debe ser de una manera frontal por el
tipo de detección que se realiza, con esta imagen se procede a la utilización de los recursos
de Amazon como S3 para el almacenamiento y de la API CompareFace, la cual compara los
rostros que se tienen y logra determinar un porcentaje de similitud, por último se utilizaron
los recursos de SDK para java en la IDE Eclipse para la creación de una aplicación donde
se pueden observar los resultados.[12]
20 5 Estado del arte

5.5. Mercado actual


En el mercado actualmente se encuentran dispositivos de acceso con sistemas de reconoci-
miento facial y validación por tarjeta RFID. Empresas como Telpo, Seguricom, Kimaldi y
Chiyu ofrecen estos dispositivos, todos con caracterı́sticas similares en cuanto a velocidad
de procesamiento y limitaciones en almacenamiento ofreciendo un rango que va entre 300
hasta 3000 rostros, sin ofrecer una posibilidad de aumento de memoria y además de esto con
precios que logran ser muy elevados.
6. Metodologı́a
Para este proyecto de grado se plantean 7 fases metodológicas para la finalización del mismo
que se explican en detalle a continuación.

6.1. Fase 1: Adquisición de la base de datos de imágenes


Dado que el sistema propuesto es un clasificador, se debe disponer de una base de datos para
comenzar la implementación del mismo, esta fase se basa en generar o encontrar una base
de datos variada debidamente clasificada. Al final de esta fase se debe contar con una base
de datos apropiada para las pruebas del sistema.

6.2. Fase 2: Algoritmo de identificación


Esta fase comprende todo lo relacionado con el diseño y la implementación de los algoritmos
de identificación de rostros en imágenes, esto implica, dada una imagen, el algoritmo debe
indicar la posición en la que existe un rostro y realizar un pre-procesamiento que incluye
un recorte y escalamiento del rostro para su posterior procesamiento. Al final de esta fase
se debe contar con un algoritmo que pre-procese imágenes que contengan rostros y genere
nuevas imágenes con los rostros encontrados.

6.3. Fase 3: Algoritmo de extracción de caracterı́sticas


Esta fase comprende el diseño e implementación del sistema de extracción de caracterı́sticas
a partir de las imágenes obtenidas en la fase anterior. Al final de esta fase debemos contar
con un algoritmo capaz de recibir imágenes de rostros previamente escaladas para luego
generar un vector de caracterı́sticas acorde con cada imagen.

6.4. Fase 4: Algoritmo de clasificación


Esta fase comprende la construcción del sistema de clasificación de rostros basado en ca-
racterı́sticas faciales. Al final de esta fase se debe contar con un clasificador de rostros
previamente entrenado y capaz de identificar y discriminar rostros de personas en la base de
datos.
22 6 Metodologı́a

6.5. Fase 5: Acondicionamiento del servidor remoto para


el clasificador
Esta fase comprende el acondicionamiento necesario para exponer el sistema de clasificación
obtenido como un servicio web que puede ser accedido desde la internet. Al final de esta fase
se debe contar con un servidor web con la capacidad de recibir imágenes y responder con las
probabilidades para cierto número de etiquetas de salida correspondiente a la clasificación
realizada.

6.6. Fase 6: Implementación de dispositivo IoT


En esta fase se realizará el diseño y la construcción de un dispositivo IoT que permita
obtener imágenes de una cámara y enviarlas a un servidor remoto esperando una respuesta,
también, el dispositivo tendrá la capacidad de leer tarjetas de identificación RFID y tomar
decisiones de acuerdo a la respuesta del servidor. Al final de esta fase debemos contar con un
dispositivo capaz de tomar imágenes desde una camara y leer tarjetas de RFID para enviar
esta informacion a un servidor, esperar la respuesta del mismo para tomar una decision
acerca de la identidad de una persona.

6.7. Fase 7: Pruebas y validación


Esta fase se compone de la realización de pruebas con el sistema totalmente integrado para
obtener la efectividad del prototipo, esto incluye la utilización de varios individuos que estén
y no estén en la base de datos. Al final de esta fase se debe tener la efectividad funcional del
prototipo propuesto.
7. Desarrollo
En este capitulo se describirá el desarrollo de cada una de las fases propuestas en la Meto-
dologı́a:

7.1. Adquisición de la base de datos de imágenes


Para esta fase se procedió, como primera medida, a encontrar bases de datos de imágenes de
rostros que ya estuvieran clasificadas y que tuvieran suficiente diversidad tanto en el ángulo
de las imágenes como en la iluminación de las mismas. Otro punto a tener en cuenta es
el número de etiquetas que contenı́a cada base de datos, se buscaba una base de datos lo
suficientemente diversa y del tamaño adecuado para el prototipo; esta búsqueda se realizó
en la página Kaggle[1], esta página es una comunidad en linea de cientı́ficos de datos y
practicantes del aprendizaje de máquina, es una subsidiaria de Google LLC que permite a
sus usuarios encontrar y publicar data sets como también explorar y construir modelos en
un ambiente de ciencia de datos. Después de seleccionar y analizar 5 data sets encontrados,
se escogieron dos para realizar pruebas en el prototipo, estos data sets son:

7.1.1. 5 celebrity faces dataset


Este es un pequeño conjunto de datos para experimentar con técnicas de visión por compu-
tadora. Tiene un directorio de entrenamiento que contiene 14-20 fotos de cada una de las
celebridades. Una muestra de estas imágenes se pueden ver en la figura 7-1

Ben Afflek

Elton John

Jerry Seinfeld

Madonna

Mindy Kaling
24 7 Desarrollo

Figura 7-1.: Imágenes extraidas de 5 celebrity faces dataset

El directorio de validación tiene 5 fotos de cada celebridad. Las fotos no se han recortado
para obtener relaciones de aspecto consistentes. Con tan pocas fotos de entrenamiento, esta
es una prueba especialmente interesante de técnicas de visión por computadora. Este data
set se escogió para evaluar el prototipo en una primera fase sin tantas etiquetas de salida en
el sistema de clasificación.

7.1.2. The Labeled Faces in the Wild face recognition dataset

Esta[5] es una base de datos de fotografı́as faciales diseñada para estudiar el problema del
reconocimiento facial sin restricciones. El conjunto de datos contiene más de 13,000 imágenes
de caras recopiladas de la web de 5749 personas diferentes. Cada cara ha sido etiquetada con
el nombre de la persona en la foto, 1680 de las personas fotografiadas tienen dos o más fotos
distintas en el conjunto de datos. La única restricción en estas caras es que fueron detectadas
por el detector de caras Viola-Jones. La distribución de las imágenes por numero se puede
ver en la tabla 7-1. Este data set será utilizado para simular una gran cantidad de personas
en el sistema de acceso, un ejemplo de las imágenes que componen este data set se puede
ver en la fı́gura 7-2.
7.2 Algoritmo de identificación 25

# de imágenes # de personas # de imágenes


por persona ( % de personas) ( % de imágenes)
1 4069 (70.8) 4096 (30.7)
2-5 1369 (23.8) 3739 (28.3)
6-10 168 (2.92) 1251 (9.45)
11-20 86 (1.50) 1251 (9.45
21-30 25 (0.43) 613 (4.63)
31-80 27 (0.47) 1170 (8.84)
>81 5 (0.09) 1140 (8.61)
Total 5749 13233

Tabla 7-1.: Distribución de las imágenes en la base de datos de LFW

Figura 7-2.: Imágenes extraidas de LFW dataset

7.2. Algoritmo de identificación


En esta fase se debı́a diseñar y proponer un algoritmo que permita la identificación de
un algoritmo en el lenguaje de programación Python, que estuviera en la capacidad de
identificar si en una imagen existe algún rostro, en el caso de que si lo hubiera, deberı́a
realizar un escalamiento y acondicionamiento del mismo para la siguiente fase del sistema.
Para lograr esto se tomó como base del algoritmo la solución del Joint Face Detection and
Alignment using Multi-task Cascaded Convolutional Networks[21] el cual fue implementado
en código pyhton obteniendo buenos resultados, una imagen de prueba se puede ver en la
figura 7-3. El algoritmo MTCNN funciona en tres pasos y usa una red neuronal para cada
uno. La primera parte es una red de propuestas. Predecirá posibles posiciones faciales y sus
cuadros delimitadores como una red de atención en Faster R-CNN. El resultado de este paso
26 7 Desarrollo

Figura 7-3.: Imágenes generadas por el algoritmo de identificación

es una gran cantidad de detecciones faciales y muchas detecciones falsas. La segunda parte
usa imágenes y salidas de la primera predicción. Refina el resultado para eliminar la mayorı́a
de las detecciones falsas y los cuadros de lı́mite agregados. La última parte refina aún más
las predicciones y agrega predicciones de puntos de referencia faciales (en la implementación
original de MTCNN). El diagrama del algoritmo planteado se puede ver en la imagen 7-4

Figura 7-4.: Diagrama del algoritmo MTCNN

Luego de la identificación de los rostros, el sistema debe recortar el área en donde se en-
cuentran los mismos para finalizar el pre-procesamiento de las imágenes recibidas para el
7.3 Algoritmo de extracción de caracterı́sticas 27

posterior entrenamiento del modelo. El resultado de este proceso se puede ver en la figura
7-5

Figura 7-5.: Resultado del proceso de identificación y procesamiento de rostros, izq. Imágen
de entrada al algoritmo, der. Imagen resultado del algoritmo

7.3. Algoritmo de extracción de caracterı́sticas


Para esta fase, el objetivo es: a partir de una imagen que contenga un rostro, se deben
extraer caracterı́sticas fisiológicas que permitan en una fase posterior la clasificación de los
rostros en distintas etiquetas de salida, para lograr esto fue utilizado como guı́a principal el
documento FaceNet: A Unified Embedding for Face Recognition and Clustering [16], este es
un sistema construido por Florian Schroff, Dmitry Kalenichenko, James Philbin. El sistema
aprende directamente un mapeo de las imágenes faciales en un espacio euclidiano compacto
donde las distancias corresponden directamente a una medida de similitud facial. Una vez
que se crean estas incrustaciones, se pueden realizar procedimientos como el reconocimiento
facial y la verificación utilizando estas incrustaciones como caracterı́sticas. Facenet utiliza
redes con capas convolucionales para aprender representaciones directamente de los pı́xeles
de la cara. Esta red se entrena con un gran conjunto de datos para lograr la invariabilidad de
la iluminación, la postura y otras condiciones variables. Facenet crea una incrustación de 128
dimensiones a partir de imágenes y las inserta en un espacio de caracterı́sticas, de tal manera
que la distancia al cuadrado entre todas las caras, independientemente de las condiciones
de imagen, de la misma identidad, es pequeña, mientras que la distancia al cuadrado entre
28 7 Desarrollo

El par de imágenes de caras de distintos personajes es grande. La imagen 7-6 muestra la


arquitectura del modelo.

Figura 7-6.: Arquitecture del modelo Facenet

Este sistema emplea una función de pérdida particular llamada pérdida de triplete. La pérdi-
da de triplete minimiza la distancia L2 entre imágenes de la misma identidad y maximiza
la distancia L2 entre las imágenes de la cara de diferentes personajes. La motivación detrás
del uso de la pérdida de triplete es que alienta a que todas las imágenes de una identidad se
proyecten en un solo punto en el espacio de incrustación, los creadores idearon un mecanismo
de selección de triplete eficiente que selecciona de manera inteligente tres imágenes a la vez.
Estas imágenes son de los siguientes tres tipos:

Ancla: una imagen de una persona al azar.

Imagen positiva: otra imagen de la misma persona.

Imagen negativa: una imagen de una persona diferente.

Se miden dos distancias euclidianas: una entre el ancla y la imagen positiva, llamémosla A.
Otra entre el ancla y la imagen negativa, llamémosla B. El proceso de entrenamiento tiene
como objetivo reducir A y maximizar B, de modo que se encuentren imágenes similares cerca
uno del otro y las imágenes distintas se encuentran muy lejos en el espacio de inserción. Este
algoritmo fue desarrollado y utilizado en python para la creación de un modelo computacional
que transforma la cara en un espacio euclidiano de 128 dimensiones que, dado el tipo de
entrenamiento, generara espacios similares con rostros de la misma persona.

7.4. Algoritmo de clasificación


Con el modelo computacional capaz de generar a partir de una imagen con un rostro, un
vector de 128 posiciones, el siguiente paso es generar un clasificador capaz de discriminar
entre varias personas con un alto ı́ndice de acierto. Para lograr esto se utilizan las dos bases
de datos obtenidas en la fase 1 del presente proyecto, se envı́an grupos de imágenes ya
7.4 Algoritmo de clasificación 29

procesadas al sistema de entrenamiento y se opta por utilizar un SVM para el clasificador


final que utiliza como datos de entrada los vectores de 128 dimensiones producto de los
rostros procesados. Con el clasificador entrenado se genera un archivo usando la librerı́a de
pickle en python que incluye el modelo de clasificador ya entrenado.

Figura 7-7.: Distintas fases de los rostros a travesa del sistema de clasificación. izq. Imagen
inicial de entrada, der. Rostro previamente procesado antes de entrar a la fase
de clasificación, ab. Predicción final del sistema

En la figura 7-7 se puede ver el resultado del sistema de clasificación, el sistema genera dos
vectores, el primero son las etiquetas (nombre de los artistas) que el clasificador reconoce, el
segundo vector es la probabilidad de coincidencia calculada para cada una de las etiquetas.
30 7 Desarrollo

7.5. Acondicionamiento del servidor remoto para el


clasificador
Para poder exponer el sistema de clasificación como un servicio web, se plantea la arquitec-
tura que se puede ver en la imagen 7-8.

Figura 7-8.: Arquitectura propuesta para el sistema de acceso

Se utiliza Flask como framework para el desarrollo del servidor web debido a su facilidad en
la implementación, se plantea una URL y un body para la petición que será enviada por el
dispositivo IoT. Como requerimiento para esta parte del proyecto se tiene que:

Debe existir una base de datos con información de las personas en la base de datos que
contenga al menos el id de la tarjeta asignada.

Debe proveerse un sistema de almacenamiento de eventos que almacene información


sobre las acciones realizadas en el sistema de acceso
7.5 Acondicionamiento del servidor remoto para el clasificador 31

Se debe tener un sistema de roles que permita al personal de seguridad manejar incon-
venientes que no puedan ser controlados por el sistema

A partir de estos requerimientos se plantea una base de datos para permitir el almacena-
miento de la información, el modelo entidad-relacion propuesto se puede ver en la figura
7-9

Figura 7-9.: Modelo entidad-relacion de la base de datos del sistema de acceso

La base de datos consta de 3 tablas:

Usuarios: En esta tabla se va a almacenar los datos y la información básicos de cada


usuario del sistema de acceso, cada usuario tendrá asociada el identificador de una tar-
jeta RFID que posteriormente el sistema validará si el dueño de esa tarjeta corresponde
al rostro reconocido.

Roles: Esta tabla guarda los distintos tipos de roles que el sistema puede reconocer, para
efectos de este prototipo solo se tendrán 3 roles, estudiante, docente y administrativo.

Eventos: En esta tabla se almacenarán los datos correspondientes a los eventos recibidos
por el sistema, por ejemplo ingresos exitosos de algún usuario, ingresos fallidos de algún
usuario etc.
32 7 Desarrollo

Con la base de datos ya definida e implementada se procede a integrar el sistema de re-


conocimiento dentro del servidor web y enlazar la creación de eventos y los usuarios a la
base de datos. Usando Flask se implementa un servicio web simple con solo una URL que se
encargará de recibir la imagen y los datos de la petición que son enviados desde el dispositivo
IoT, en esta petición se incluirá la imagen obtenida de la cámara, el id de la tarjeta con la
que se trata de acceder al sistema y el dispositivo desde el cual se está haciendo la petición
al servidor.

Figura 7-10.: Flujo de una petición de acceso dentro del sistema

La figura 7-10 muestra el flujo de una petición de acceso dentro del sistema,

1. El dispositivo IoT envı́a una petición HTTP al servidor web donde está ubicado el
sistema de control de acceso con los campos id (Id de la tarjeta RFID utilizada), tipo
(Evento de entrada o salida) y dispositivo (Código del dispositivo donde se generó la
petición de acceso), también debe incluir la imagen obtenida desde la cámara.

2. La información se envı́a como una peticion HTTP tipo POST hasta el servidor web, si
la persona que usó la tarjeta fue identificada por el sistema y tiene a su nombre dicha
tarjeta, el servidor web responderá con un estado 200 (La transacción salió bien), en
caso contrario se responderá con un estado 400 (No se pudo comprobar la persona)

3. La URL que se expone para el acceso al sistema es /upload, el dispositivo IoT dirigirá
sus peticiones a esta URL con los datos mencionados anteriormente

4. Cuando el servidor recibe la petición, envı́a la imagen recibida al sistema de reconoci-


miento.
7.5 Acondicionamiento del servidor remoto para el clasificador 33

5. El sistema de reconocimiento recibe la imagen y la procesa para encontrar si reconoce


el rostro que existe en esa imagen, si lo reconoce, revisa en la base de datos si el rostro
que reconoció tiene asignada el id de la tarjeta que se envió en la petición

6. Si el propietario de la tarjeta es identificado en la imagen se crea un evento de acceso


exitoso en la base de datos y el servidor responde con un estado 200, en caso contrario
se crea un evento fallido en la base de datos y se almacena la imagen recibida para su
posterior análisis por parte del equipo de mantenimiento, en este caso se responde con
un estado 400 lo cual no permitirı́a el acceso de esa persona

Tanto el servicio web como la base de datos se despliegan en el servidor usando la herra-
mienta de docker-compose esto con el fin de que en cada ocasión que se añada una persona
nueva al sistema o haya un cambio en el mismo se pueda reiniciar el servicio con los nue-
vos cambios en el menor tiempo posible. Gracias a la Universidad Distrital se consigue la
utilización de un servidor propio con la ayuda de RITA, el acceso a este servidor se reali-
za mediante una conexión ssh y una llave pem de acceso, el comando utilizado es: ssh -i
tesisaccessystem.pem servidores@ritaportal.udistrital.edu.co -p 10259.
Con el sistema funcionando localmente se procede a llevar el código a un repositorio remoto
para realizar control de versiones, se utiliza github.com para crear el repositorio y subir los
archivos del sistema como se ve en la figura 7-11. Para optimizar la generación del sistema
se incluye un archivo Dockerfile para la creacion de una imágen de docker con el sistema de
acceso y a su vez un archivo docker-compose para realizar el despliegue de todo el sistema,
el archivo Dockerfile y el docker-compose se pueden ver en las figuras 7-12 y 7-13

Se crea una cuenta en dockerhub para realizar la creación de la imagen de docker del sistema
de acceso y poder descargarla desde cualquier lugar con acceso a internet y docker. Al iniciar
el servicio web usando el comando docker-compose up se muestran en la consola los logs
de iniciación de los servicios como se ve en la figura 7-14

Usando un programa para generar peticiones HTTP llamado Postman, se comprueba que
el servidor se encuentra disponible como se ve en la figura 7-15, se envı́a el body y el tipo
de petición esperado por el servidor pero no se adjunta imagen a la petición, a respuesta
devuelve un código 400 de error en el cual indica que la imagen no fue adjuntada.
34 7 Desarrollo

Figura 7-11.: Repositorio en github con los archivos requeridos para el sistema de acceso

7.6. Implementación de dispositivo IoT


Para realizar el diseño del dispositivo IoT se procede primero a realizar un diagrama de
tareas para observar que requerimientos debe tener nuestro dispositivo y que procesos debe
cumplir. El diagrama de tareas es mostrado en la figura 7-16.

A partir de este diagrama y con los requerimientos hechos en la fase de metodologı́a se selec-
ciona el micro controlador que se va a utilizar para el dispositivo IoT. El micro controlador
debe soportar conexiones a internet mediante protocolo Wifi o por medio de Ethernet, tam-
bién debe soportar los dispositivos como el lector de tarjetas NFC, una cámara y pines de uso
libre para los indicadores de acceso. Bajo estos criterios se selecciona como micro controlador
la placa Raspberry pi 3 B+ ya que cumple con todos los requerimientos necesarios para el
sistema. Esta placa posee las siguientes caracterı́sticas:

Broadcom BCM2837B0 quad-core A53 (ARMv8) 64-bit @ 1.4GHz.


7.6 Implementación de dispositivo IoT 35

Figura 7-12.: Archivo Dockerfile para la generación del sistema de acceso

Figura 7-13.: Archivo docker-compose para el despliegue del sistema de acceso

Figura 7-14.: Logs de informacion al iniciar el servicio web


36 7 Desarrollo

Figura 7-15.: Petición realizada en Postman al servidor web

Figura 7-16.: Diagrama de tareas del dispositivo IoT


7.6 Implementación de dispositivo IoT 37

Figura 7-17.: Sistema Raspbian

GPU Broadcom Videocore-IV.

RAM de 1GB LPDDR2 SDRAM.

Conexión a internet Gigabit Ethernet (via USB channel), 2.4GHz and 5GHz 802.11b/g/n/ac
Wi-Fi.

Bluetooth 4.2, Bluetooth Low Energy (BLE).

Almacenamiento por medio de Micro-SD.

40-pines GPIO.

Puertos HDMI, 3.5mm audio análogo-video jack, 4x USB 2.0, Ethernet, Camara Serial
interfaz (CSI), pantalla por interfaz serial (DSI).

Tamaño 82mm x 56mm x 19.5mm, 50g.

7.6.1. Configuración de la Raspberry


Para poder manejar el micro controlador es necesario realizar la instalación de un sistema
operativo en la micro SD la cual se seleccionó de 16GB ya que es más que suficiente para los
requerimientos y no se desperdician muchos recursos. El Sistema operativo que se escogió
para la Raspberry fue Raspbian con escritorio porque es un sistema eficiente, es el sistema
oficial de Raspberry además de esto el más popular, es de fácil uso y todas las herramientas
y prestaciones que brinda son optimas para el desarrollo del proyecto. Para la instalación
del sistema operativo se procede a descargar un archivo comprimido de la página oficial de
Raspberry.
38 7 Desarrollo

Figura 7-18.: Escritorio Raspbian

Al descomprimir este archivo se crea una carpeta y dentro de esta aparece un archivo con
extensión img. Se selecciona un Software de preferencia para quemar esta imagen en la micro
SD en nuestro caso se utilizo etcher ya que es un software libre y de código abierto. Se pone la
micro SD en la Raspberry se conectan los periféricos como mouse y teclado, cuando se inicia
pide unos datos como nombre del dispositivo y conexión a una red y se tiene un escritorio
como el que se muestra en la figura 7-18.

El sistema operativo trae paquetes como Python por defecto o librerı́as como numpy, mat-
plotlib, libusb entre una infinidad de librerı́as que traen los sistemas GNU/LINUX, pero se
requiere una actualización si existe, de todos estos paquetes, por lo cual se abre el terminal
y se escriben los siguientes comandos sudo apt-get update y sudo apt-get upgrade, se
debe tener en cuenta que para poder realizar el proceso satisfactoriamente se debe establecer
una conexión a internet , esto es tan sencillo como ir a la barra de búsqueda seleccionar el
logo de wifi escoger la red y digitar la clave.

7.6.2. Lector NFC


Para el lector NFC se escogió un NXP Pn532 V3 ya que sus prestaciones cumplen con
los requisitos necesarios para el dispositivo y tiene un precio muy bajo comparado con otros
7.6 Implementación de dispositivo IoT 39

Figura 7-19.: Configuración interfaz I2C

Pin Pin
pn532 Raspberry
GND 6
VCC 4
SDA 3
SCL 5

Tabla 7-2.: Conexiones entre el modulo NFC y la raspberry pi

dispositivos lectores NFC con caracterı́sticas similares, además de esto es un chip que permite
ser controlado por la Raspberry mediante una librerı́a.

Preparación del lector

Este módulo tiene 3 interfaces de conexión (SPI, I2C, UART) se configuró para conexión
mediante I2C, esto se hizo por medio de 2 switch que posee, quedando de la en la forma que
se ve en la imagen 7-19

Se tomaron los pines de comunicación por I2C del modulo y se conectaron al bus de comuni-
cación de I2C de la Raspberry como se observa en la tabla 7-2. Se instaló la librerı́a I2C-tool
esto se hizo abriendo el terminal en la Raspberry y escribiendo el siguiente comando en la
consola sudo apt-get install i2c-tools, luego se procedió a abrir las configuraciones de
la Raspberry y se habilito la interfaz I2C para poder trabajar con el módulo pn532 como se
observa en la figura 7-20

Con esto ya quedó configurada la conexión entre el modulo NFC y las Raspberry, seguida-
mente se procedió a descargar la biblioteca llamada libnfc-1.7.1 de la pagina de repositorios
40 7 Desarrollo

Figura 7-20.: Habilitación de la interfaz I2C

Figura 7-21.: Prueba módulo NFC

de Github. Esta es la librerı́a por la cual se pueden realizar escrituras, lecturas entre los dis-
positivos NFC inclusive los chips puestos en los teléfonos inteligentes, pero para que funcione
fue necesario modificar el archivo de configuración para poderle indicar a la librerı́a bajo que
interfaz se está trabajando en este caso I2C modificando los campos name y connstring.

Pruebas módulo lector NFC


Para comprobar que la conexión I2C y la configuración de la librerı́a quedaron realizadas
correctamente, se realizó una prueba ejecutando el programa nfc-poll ubicado en el directorio
donde se descargó el repositorio, este es un ejemplo de como se realiza una lectura, todos
estos códigos están desarrollados en lenguaje de programación C. En esta prueba se obtuvo
por resultado el UID de una tarjeta NFC S50, el resultado se puede ver en la imagen 7-21

Se realizaron pruebas con varios dispositivos, entre estos están dos tags con chip NFC S50,
una tarjeta de Transmilenio, una tarjeta blanca con chip NFC S50 un carnet de la Universidad
7.6 Implementación de dispositivo IoT 41

Figura 7-22.: Dispositivos NFC de prueba

Distrital Francisco José de Caldas obteniendo como resultado los UID de cada dispositivo.

Se observa con las pruebas realizadas en la tarjeta tu llave que la UID cambia cada vez que
el dispositivo es leı́do, por lo tanto se descarta el uso de este dispositivo como chip de acceso
ya que no es posible asignar una UID a esta tarjeta.

7.6.3. Configuración de la cámara


Selección de cámara
Para el proceso de captura de la foto donde se encuentre el usuario para realizar la validación
se seleccionó la cámara proporcionada por Raspberry pi ya que esta cámara al ser fabricada
por la misma empresa que fabrica la Raspberry pi 3 b+ tiene una gran compatibilidad con el
micro controlador, además de esto la empresa ofrece una interfaz (CSI) en la placa Raspberry
para la fácil conexión de la cámara y una librerı́a para controlar esta misma de una manera
sencilla.

Librerı́a Picamera
Es una librerı́a creada por Raspberry pi Nativa de Python. Para instalar esta librerı́a en la
Raspberry pi 3b+ es necesario tener el micro controlador actualizado, por eso se ejecutaron
42 7 Desarrollo

Figura 7-23.: Imagen adquirida por la Cámara de la Raspberry Pi

los comandos utilizados en la configuración del módulo NFC, además de esto es necesario
tener el micro controlador conectado a Internet. Luego de que esta actualización finalizara
se ejecuta en la consola el siguiente comando sudo apt-get install python-picamera
mediante el cual se va a realizar la instalación de la librerı́a picamera. Con esto finaliza la
instalación de la librerı́a, después se procedió a conectar la cámara en la interfaz (CSI) y se
escribió un pequeño código para probar la correcta instalación de la librerı́a y algunas de las
funciones que vienen con la librerı́a. En la imagen 7-23, se muestra una foto tomada por la
cámara donde se observa la conexión realizada en la interfaz CSI.

Con toda la configuración en orden el diagrama final del prototipo del sistema IoT con el
módulo NFC, la cámara y algunos indicadores visuales queda como se puede ver en la figura
7-24

7.6.4. Envı́o de datos al servidor remoto


Para poder realizar el envı́o de la información que contenga la UID de la tarjeta y la foto
del usuario a la máquina virtual, fue necesario realizar un programa que pudiera detectar
una tarjeta en el módulo, tomar una foto al instante, poder hacer la solicitud a la maquina
virtual, esperar la respuesta y dar los respectivos indicativos. Primero se realizo un diagrama
de flujo que explica el procedimiento que lleva el programa del dispositivo IoT como se ve
en la figura 7-25.
7.6 Implementación de dispositivo IoT 43

Figura 7-24.: Diagrama de integración de las partes del prototipo IoT


44 7 Desarrollo

Figura 7-25.: Diagrama Código en la raspberry pi

En el diagrama se observa una tarea llamada subproceso esto se debe a que la biblioteca
libnfc esta escrita en lenguaje C y programa está desarrollado en Python por lo tanto fue
necesario iniciar un subproceso para poder hacer uso de la librerı́a libnfc, este subproceso
consiste en ejecutar el archivo encargado de la validación y lectura de los chips NFC y
cuando este finalice capturar la salida y almacenarla en un arreglo que serı́a nuestra UID.
El diagrama de flujo de este subproceso se muestra en la figura 7-26

Este programa se decidió hacer en lenguaje Python ya que posee una gran cantidad de
librerı́as y es de código abierto, para esto se uso la IDE de Thonny Python que es una IDE
incluida en Raspbian. Cuando el programa se ejecuta después de inicializar las variables
7.6 Implementación de dispositivo IoT 45

Figura 7-26.: Diagrama Subproceso

ejecuta un subproceso iniciando otro programa encargado de la lectura del chip NFC, este
programa fue basado en los programas de ejemplos que trae la librerı́a libnfc, este subproceso
retorna una cadena de caracteres con el número UID del chip, en dado caso que no se detecte
ningún chip después de un tiempo retorna una cadena de ceros. El programa en Python
captura esa cadena de caracteres y la almacena en un array verifica que lo que se encuentra
en ese array es un valor diferente a cero si no es ası́ vuelve a llamar a subproceso hasta que
el retorno sea un valor diferente, cuando esto sucede procede a tomar una foto de la persona
que está pasando la tarjeta y la guarda en la misma carpeta donde se encuentra el archivo
del programa, luego pasa a una función donde se define la URL de nuestra máquina virtual
y el puerto, también se carga a una variable esta foto que se acabo de tomar y luego se
carga a una variable el UID que se encuentra en el array. Todo esto para hacer una solicitud
post gracias a la librerı́a Requests de Python donde se envı́an la imagen y la UID a la URL
deseada. Esta solicitud post tiene un try except por si no es posible realizar la solicitud
por algún error en la conexión. Si la solicitud es enviada el programa queda en espera de
la respuesta y cuando esta llega tenemos 3 posibilidades, la primera que obtengamos un
46 7 Desarrollo

Prueba Tarjeta Rostro Asociado?


1 Valida Valido Verdadero
2 Valida Valido Falso
3 Invalida - -
4 Valida Invalido -

Tabla 7-3.: Tabla de pruebas

400 que indica que la validación es correcta es decir que la persona que aparece en la foto
corresponde a la UID de la tarjeta y se enciende un led de color verde, la segunda es un 403
que indica que por un error en la toma de la foto o en el procesamiento de la maquina no se
obtuvieron resultados lo que obliga a volver a pasar la tarjeta y se enciende un led azul y el
ultimo es un 404 donde el usuario de la tarjeta no coincide con el UID de la tarjeta, es decir
no es el propietario registrado en la base de datos se enciende un led rojo. Para finalizar el
programa se debe pasar la solicitud con uno llave que seria un chip con una UID especifica.

7.7. Pruebas y validación


Es esta sección se explica como se realizó la fase de pruebas y validación, las pruebas que se
realizaron al sistema se definieron teniendo en cuenta las siguientes variables y estados de
las mismas:

Tarjeta RFID, para esta tarjeta los posibles estados son, tarjeta válida y asociada a la
persona reconocida, tarjeta válida pero asociada a otra persona y tarjeta no válida.

Rostro identificado, para un rostro identificado los posibles estados son: Rostro válido
y asociado a la tarjeta usada, rostro válido pero no asociado a la tarjeta usada y rostro
invalido con tarjeta válida.

Numero de imágenes del rostro usadas para el entrenamiento, para esta variable se
toma como referencia la tabla 7-1 y se realizan pruebas con rostro válido y tarjeta
válida con rostros de los diferentes grupos que se ven en la misma tabla

Como resultado se obtiene la tabla de pruebas 7-3, se encuentran 4 casos de prueba y se eje-
cuta cada uno 100 veces variando el rostro enviado y la tarjeta usada. En una segunda parte
se ejecuta la primera prueba pero seleccionando rostros de los distintos grupos mostrados en
la tabla 7-1 con al menos 50 iteraciones de la misma prueba usando rostros distintos.

7.7.1. Resultados
Una imagen tomada directamente del servidor remoto de procesamiento con el rostro aso-
ciado al la tarjeta con id b92df16e se puede ver en la imagen 7-27, en esta imagen se puede
7.7 Pruebas y validación 47

Figura 7-27.: Imagen obtenida del servidor remoto luego del procesamiento y clasificación
de la misma

Figura 7-28.: Imagen obtenida del servidor remoto luego del procesamiento y errónea cla-
sificación de la misma

ver la sección resaltada que pertenece al rostro de la persona (pre procesamiento del rostro),
la probabilidad de la clasificación siendo esta de 0.04322 y el id de la tarjeta asociada a ese
rostro.

De la misma forma una imagen tomada directamente del servidor remoto de procesamiento
con el rostro asociado al la tarjeta con id b92df16e pero que no fue reconocida exitosamente
se puede ver en la imagen 7-28, en esta imagen se puede ver de igual manera la sección
resaltada que pertenece al rostro de la persona, pero en esta ocasión no logró identificar
correctamente al id de la tarjeta asociada, algo para resaltar es que la probabilidad de la
clasificación es menor que en la prueba exitosa resultando con 0.02182.
48 7 Desarrollo

Prueba Porcentaje de acierto


1 99 %
2 98 %
3 100 %
4 99 %

Tabla 7-4.: Resultados obtenidos con las pruebas

Figura 7-29.: Grafica de porcentajes de aciertos, dependiendo la cantidad de imágenes usa-


das en el entrenamiento

Para la primera parte de las pruebas el sistema mostró un error por debajo del 5 % el
compilado de los resultados se puede ver en la tabla 7-4. En la segunda fase de pruebas los
resultados se pueden ver en la imagen 7-29
8. Conclusiones
El prototipo de algoritmo de identificación y pre-procesamiento de rostros basado en
MTCNN otorgó una gran fiabilidad, mayor al 90 % conservando las caracterı́sticas que
se pueden ver en el articulo [21], esto influye en los resultados de las pruebas obtenidos
por encima del 95 % de efectividad.

El algoritmo desarrollado basado en facenet[16] para la extracción de caracterı́sticas


faciales genera con gran efectividad vectores que permiten su posterior discriminación
y clasificación.

Gracias a la variedad de imágenes en el data set de LFW[5] se pudieron conseguir


datos útiles y comparables a la vida real, este data set es muy valioso por la diversidad
de ángulos, iluminación, el número de personas y el variado numero de imágenes por
persona. Al tener personas con una sola imagen se le añade ruido al sistema de clasi-
ficación debido a que no se puede realizar completo el procedimiento de extracción de
caracterı́sticas al no poder realizar la tripleta de perdidas.

Al utilizar un servidor remoto para el procesamiento y clasificación de los rostros,


el tiempo empleado en estos procesos y el tiempo de respuesta del mismo se reduce
significativamente esto nos lleva a obtener en este prototipo validaciones en menos de
un segundo.

Algo interesante obtenido a partir de las pruebas del sistema es la relación entre la tasa
de error y la cantidad de imágenes usadas en el entrenamiento, se puede evidenciar que
se obtiene un gran porcentaje de error con menos de 5 imágenes por persona, pero si
se tienen más de 10 imágenes por persona el incremento en la cantidad de aciertos no
se incrementa significativamente al punto en que la diferencia entre entrenar el sistema
con 10 imágenes por persona y hacerlo con más de 80 solo es de un 4 %.

Al tener en cuenta que la cantidad de personas en la base de datos es de 5749 y la


cantidad de estudiantes en la Universidad Distrital Francisco José de Caldas es de
alrededor de 25000, este sistema es prometedor al momento de ser planteado como un
sistema de acceso en el claustro estudiantil, cabe agregar que si se decide optar por
este sistema es propicio realizar las mismas pruebas con un data set de al menos el
mismo número de estudiantes o implementarlo gradualmente para ciertas locaciones
especificas como los grupos de investigación.
A. Anexo: Manual para instalación de la
aplicación en una Raspberry pi

A.1. Conexiones Fı́sicas


Para la configuración de Raspberry Pi 3b+ es necesario conectar el módulo NFC NXP NP532
en el puerto de conexión I2C con la configuración fı́sica de los pines para conexión por I2c, el
módulo de Raspberry Pi Camera en el puerto CSI y 3 LEDS indicadores en los pines GPIO
24, 23, 18. Estas conexiones se pueden ver en la imagen 7-24

A.2. Configuración del software en la Raspberry


Ahora, se debe disponer de un computador con conexión a internet y descargar el programa
Balena Etcher y la imagen del sistema operativo Raspbian con escritorio disponible gratuita-
mente en la página de Raspberry https://www.raspberrypi.org/downloads/raspbian/.
Se utiliza el programa Balena Etcher para quemar la imagen de Raspbian en una micro SD
con capacidad de 16 GB como mı́nimo, se inserta esta memoria en la Raspberry y se conecta
con el cargador lo que enciende la Raspberry, al iniciar se hace el registro de un usuario y la
conexión a internet por vı́a WI-FI aunque también es posible realizar una conexión usando
Ethernet. Con el sistema operativo cargado se procede a abrir un Terminal donde se ejecutan
los comandos sudo apt-get update y sudo apt-get upgrade con esto se logra actualizar
el dispositvo y evitar conflictos en el momento de descargar las librerı́as necesarias para
controlar los módulos NFC y Camera. Se instala la librerı́a I2C tools ejecutando el comando
apt-get install i2c-tools en una ventana de terminal, cuando termine la instalación de
la librerı́a se ejecuta el comando sudo raspi-config se selecciona la opción 5 Interfacing
Options y luego se selecciona la opción p5 I2C y se habilita el puerto como se ve en la
imagen A-1

Para configurar el controlador del dispositivo NFC es necesario clonar el repositorio ubicado
en GitHub para esto se debe abrir el terminal de la raspberry y ejecutar el comando git
clone https://github.com/nfc-tools/libnfc.git, luego se debe entrar a la carpeta,
desde el terminal se ejecuta el comando cd libnfc-1.7.1 y seguidamente el comando sudo
A.2 Configuración del software en la Raspberry 51

Figura A-1.: Habilitación de puerto I2C mediante consola en Raspbian

make install, con esto se instalan los paquetes necesarios para controlar el modulo NFC. Es
necesario especificar el tipo de comunicación que se va a utilizar entre el dispositivo NFC y el
controlador, para esto se debe ejecutar el comando sudo mkdir /etc/nfc luego se ejecuta
el comando sudo nano /etc/libnfc/libnfc.conf y se insertan las dos siguientes lı́neas de
código al final del documento

device.name = " PN532 I2c"

device.connstring = "pn532 i2c:/dev/i2c-1"

El documento editado se puede ver en la imagen A-2

Con estos comandos se logra configurar el controlador con el dispositivo NFC por medio del
puerto I2C.
La cámara se controla con una librerı́a nativa de Python y compatible con raspberry, para la
configuración de la cámara de Raspi se ejecuta en una página terminal el comando apt-get
install Python-camera. Se copia el paquete de instalación que contiene una versión modi-
ficada del ejecutable de la librerı́a NFC y un código desarrollado en Python en la dirección
/home/pi.
52A Anexo: Manual para instalación de la aplicación en una Raspberry pi

Figura A-2.: Archivo de configuración para el dispositivo NFC

Por ultimo es necesario incluir el script de la ejecución dentro de la carpeta raiz, este script
se encuentra en https://github.com/dasrodriguezs/sistema-acceso/blob/master/rpi-scrpit.py,
al ejecutar este script el dispositivo se encuentra funcional.
B. Anexo: Manual de uso para el
dispositivo IoT
El prototipo final se puede ver en la imagen B-1.

Figura B-1.: Prototipo de dispositivo IoT para la adquisición de las imágenes e información
de la tarjeta RFiD

1. Ranura para el lente de la cámara.

2. Dispositivo lector de tarjetas NFC.

3. Carcasa de protección para los componentes del dispositivo con lamina de acrı́lico.

4. Ranura para la conexión de la fuente de energı́a y puerto HDMI para conexión de un


monitor en caso de mantenimiento.

Para encender el dispositivo se conecta la fuente de energı́a por la ranura 4 de la carcasa, se


espera aproximadamente 5 segundos hasta que encienden los 3 leds, esto se puede visualizar
gracias a la lámina de acrı́lico ubicada encima del dispositivo NFC, luego de que se apagan
54 B Anexo: Manual de uso para el dispositivo IoT

el dispositivo esta listo para su funcionamiento. Para la lectura se ubica la tarjeta NFC sobre
la lámina de acrı́lico y se espera la respuesta, el dispositivo tiene 3 diferentes indicadores que
son LEDs de color verde, azul y rojo cuya descripción se explica a continuación:

Verde: si el dispositivo nos arroja un indicador de color verde significa que el usuario
que porta la tarjeta NFC está autorizado para ingresar a la institución.

Rojo: Si el dispositivo arroja un indicador rojo significa que el usuario no tiene permiso
para ingresar a la institución, puede ser porque el rostro no se encuentra en la base de
datos o el id de la tarjeta no coincide con el rostro.

Azul: Si el dispositivo arroja un indicador azul significa que hubo problemas en el


proceso de reconocimiento o problemas de conexión con el servidor.
C. Anexo: Manual de uso para el
servidor remoto
Como se mencionó en este documento, gracias a la Universidad Distrital se consigue la
utilización de un servidor propio con la ayuda de RITA, el acceso a este servidor se rea-
liza mediante una conexión ssh y una llave pem de acceso, el comando utilizado es: ssh
-i tesisaccessystem.pem servidores@ritaportal.udistrital.edu.co -p 10259. Pa-
ra colocar en marcha el sistema solo es necesario seguir los siguientes pasos:
1. Acceder al servidor remoto como se mencionó anteriormente

2. Entrar al modo de súper usuario con el comando sudo -s

3. Cambiar la ubicación actual a la carpeta que contiene el sistema, esto se realiza me-
diante el comando cd tesis/sistema-acceso

4. Descargar la ultima versión del sistema mediante el comando docker-compose pull

5. Levantar todos los servicios del sistema de acceso mediante el comando docker-compose
up -d
Luego de seguir estos pasos el sistema de acceso deberia estar funcional.
En dado caso de ser necesario, el sistema se puede acondicionar en cualquier otro servidor
siguiendo los siguientes pasos:
1. Acceder al nuevo servidor remoto como super usuario

2. Instalar Docker y Docker-compose usando el gestor de instalación del sistema operativo


presente en el servidor

3. Clonar el repositorio del proyecto usando git clone https://github.com/


dasrodriguezs/sistema-acceso.git

4. Cambiar la ubicación actual a la carpeta que contiene el sistema, esto se realiza me-
diante el comando cd tesis/sistema-acceso

5. Descargar la ultima versión del sistema mediante el comando docker-compose pull

6. Levantar todos los servicios del sistema de acceso mediante el comando docker-compose
up -d
Bibliografı́a
[1] Your Machine Learning and Data Science Community

[2] Alvaro Javier Balsero Meneses, Cristian German Vargas G. Diseño e implemen-
tación de un prototipo para el control de acceso en la sede de ingenierı́a de la universidad
Distrital Francisco José de Caldas mediante el uso de torniquetes controlados por carnet
con tecnologia nfc y lector biométrico de huella dactilar. 2016

[3] Anaya, Juan A. Evaluación del rendimiento de Facenet. http://oa.upm.es/55891/.


2019

[4] C., José D. O.: RFID: Aplicaciones, retos y oportunidades. En: Revista colombiana de
computación 17 (2016), Nr. 2, p. 102–110

[5] Huang, Gary B. ; Mattar, Marwan ; Berg, Tamara ; Learned-Miller, Eric: La-
beled faces in the wild: A database forstudying face recognition in unconstrained envi-
ronments, 2008

[6] Jimenez Carrion, Flabio; Celi Pinzon J.: Modelado y Predicción del Fenómeno El
Niño en Piura, Perú. En: Información Tecnológica (2018), p. 303–316

[7] José Ignacio Vega-Luna, Gerardo Salgado-Guzmán Mario Alberto Lagos-Acosta:


Access System Using an RFiD Card and Face Verification. En: Ingenius, Revista de
ciencia y tecnologı́a (2018), Nr. 20

[8] K. Okokpujie, E. Noma-Osaghae y R. O. Desarrollo de un sistema de reconocimiento


facial con mecanismo de transmisión de mensajes de identificación por correo electróni-
co. 2017

[9] Landı́var, G. V. Aplicación del paradigma semiótico en una implementación de reco-


nocimiento facial. 2014

[10] Masruroh, Siti U. ; Fiade, Andrew ; Julia, Imelda R.: NFC Based Mobile Attendence
System with Facial Authorization on Raspberry Pi and Cloud Server. En: 2018 6th
International Conference on Cyber and IT Service Management (CITSM) IEEE, 2018,
p. 1–6
Bibliografı́a 57

[11] MathWorks. Aprendizaje supervisado. https://la.mathworks.com/discovery/


aprendizaje-supervisado.html. 01 2019

[12] Parra, Edinson C. PROTOTIPO PARA EL CONTROL DE INGRESO DE PERSO-


NAL POR RECONOCIMIENTO FACIAL. 2018

[13] Radio, R. Investigan robo armado al interior de la universi-


dad de la guajira. https://www.rcnradio.com/colombia/caribe/
investigan-robo-armado-al-interior-de-la-universidad-de-la-guajira.
09 2019

[14] Rodrı́guez, Jorge Alejandro C. Sistema de Control de Acceso empleando Reconoci-


miento Facial en entornos controlados. 2018

[15] Sampedro, Javier Di D.: Estudio y aplicación de técnicas de aprendizaje automático


orientadas al ámbito médico: estimación y explicación de predicciones individuales. En:
Universidad autónoma de Madrid (2012)

[16] Schroff, Florian ; Kalenichenko, Dmitry ; Philbin, James: Facenet: A unified


embedding for face recognition and clustering. En: Proceedings of the IEEE conference
on computer vision and pattern recognition, 2015, p. 815–823

[17] SENGUPTA, SOMINI: Machines Made to Know You, by Touch, Voice, Even by Heart.
En: The New York Times (2013)

[18] Tensorflow. Tensorflow homepage. https://www.tensorflow.org/?hl=es. 01 2019

[19] Viola P, Jones M. Robust Real-time Object Detection. http://crl.research.


compaq.com. 07 2017

[20] www.wikipedia.org. Biometrı́a. https://es.wikipedia.org/wiki/Biometr\%C3\


%AD. 09 2019

[21] Zhang, K. ; Zhang, Z. ; Li, Z. ; Qiao, Y.: Joint Face Detection and Alignment Using
Multitask Cascaded Convolutional Networks. En: IEEE Signal Processing Letters 23
(2016), Oct, Nr. 10, p. 1499–1503. – ISSN 1070–9908

[22] Zuñiga, A. Robo a universidad y a banco enciende aler-


tas en cali. https://www.elpais.com.co/contenido-premium/
robo-a-universidad-y-a-banco-enciende-alertas-en-cali-que-se-sabe-de-los-casos.
html. 09 2019

También podría gustarte