Documentos de Académico
Documentos de Profesional
Documentos de Cultura
SENSORES INTELIGENTES
Alumnos:
“Proyecto”
• Introducción. ................................................................................................ 1
• Planteamiento. ............................................................................................ 2
¿QUÉ ES DETECCIÓN FACIAL? ................................................................... 2
MÉTODOS DE RECONOCIMIENTO FACIAL ................................................. 2
Investigaciones: .............................................................................................. 3
ANTECEDENTES: .......................................................................................... 5
Los inicios del reconocimiento facial ................................................................... 5
• Objetivos del proyecto: General y específico. .............................................. 6
Objetivo general: ............................................................................................. 6
Objetivo específico: ............................................................................................ 6
• Marco teórico. .............................................................................................. 7
• Cálculos ...................................................................................................... 8
• Cronograma de Actividades ........................................................................ 9
• Organigrama ............................................................................................. 11
• Evaluación de Costos ................................................................................ 12
• Especificación de los componentes ........................................................... 13
• Metodología V ........................................................................................... 15
Diseño funcional del sistema ............................................................................ 15
• Códigos: .................................................................................................... 16
• Pruebas Unitarias. ..................................................................................... 23
• Pruebas de Componente. .......................................................................... 25
• Pruebas de Sistema. ................................................................................. 32
• Pruebas de Aceptación ............................................................................. 38
• Resultados ................................................................................................ 39
• Conclusiones ............................................................................................. 40
• Referencias ............................................................................................... 41
Introducción.
1
Planteamiento.
2
• uno para rastrearlo
• uno para reconocerlo
La mayoría de estos sistemas eligen un número de buenos fotogramas
en los que aplican una de las técnicas de reconocimiento facial para
identificar al individuo.
El sistema de reconocimiento biométrico facial por vídeo es actualmente
el más utilizado por empresas financieras para identificar y autenticar a sus
clientes por tres razones principales:
1. Proporciona más información, ya que aporta más frames para
elegir en cual realizar la clasificación.
2. Proporciona continuidad temporal y permite reutilizar la
información de clasificación obtenida de los frames de alta calidad para
procesar los frames de baja calidad.
3. Permite hacer un seguimiento de las caras, de los cambios de
pose y de las expresiones faciales, por lo que la información se puede
compensar.[1]
Investigaciones:
Método OpenCV
Para realizar la función de reconocimiento de rostros, primero se realiza
la detección de rostros para determinar la posición del rostro en la imagen. El
método OpenCV es un método común en la detección de rostros. En primer
lugar, extrae las imágenes de características en un gran conjunto de
3
muestras extrayendo las características de Haar del rostro en la imagen y luego
utiliza el algoritmo AdaBoost como detector de rostros. En la detección de rostros,
el algoritmo puede adaptarse de manera efectiva a entornos complejos, como
iluminación insuficiente y desenfoque de fondo, lo que mejora en gran medida la
precisión de la detección. Para un conjunto de conjuntos de entrenamiento, se
obtienen diferentes conjuntos de entrenamiento para trabajos posteriores
cambiando las probabilidades de distribución de cada una de las muestras, y cada
conjunto de entrenamiento se entrena para obtener un clasificador débil, y luego
se ponderan estos varios clasificadores.
Por ejemplo, cada muestra se distribuye con una clase de entrenamiento y se
obtiene un nuevo conjunto de entrenamiento cambiando la probabilidad de
distribución de acuerdo con la corrección de la clasificación del conjunto de
entrenamiento. Cuanto mayor sea la tasa de precisión de la clasificación, menor
será la probabilidad de distribución. El nuevo conjunto de entrenamiento se
entrena para obtener el clasificador, y se repite, y se obtienen varios
clasificadores, de modo que el peso de cada clasificador aumenta por la precisión
de la clasificación.
La figura muestra la estructura del modelo de detección de rostros. La
extracción de las características rectangulares de Haar y el clasificador fuerte
basado en AdaBoost son una parte importante de la detección de rostros. La
función de Haar se compone de varios rectángulos idénticos, que se distinguen
por la diferencia de colores en blanco y negro, y los valores de las funciones de
Haar están definidos por los valores de píxel del rectángulo. [1].
4
ANTECEDENTES:
Los inicios del reconocimiento facial
Puede considerarse a Woodrow Wilson Bledsoe como el pionero de
esta tecnología, ya que en 1960 trabajó en un sistema para clasificar los
rasgos del rostro humano a través de la tabla RAND. Este sistema utilizaba
un lápiz óptico y unas coordenadas para situar los ojos, la nariz o la boca de
las personas de forma precisa, pero era un procedimiento todavía muy
manual.
“La tabla RAND utiliza simulación electrónica de una ruleta conectada a un
ordenador. Los resultados fueron cuidadosamente filtrados y probados antes
de ser utilizados para generar la tabla. La tabla RAND fue un avance
importante en la obtención de números al azar porque una tabla tan grande y
preparada cuidadosamente nunca había estado antes disponible (la tabla
más grande publicada anteriormente era diez veces más pequeña), y
también estaba disponible en tarjetas perforadas de IBM, lo que permitió su
uso en computadoras.”
5
Objetivos del proyecto: General y específico.
Objetivo general:
Desarrollar un sistema de seguridad que permita el acceso a una persona
mediante el reconocimiento facial mediante Eigenfaces, Fisherfaces, entre otros
programas.
Objetivo específico:
Desarrollar un programa para el uso correcto de un módulo y cámara para de este
modo acondicionar el dispositivo en un procesador.
6
Marco teórico.
Dentro de las aplicaciones de procesamiento digital de imágenes, se puede
encontrar un tipo de problemas que involucra la medición de características del
cuerpo humano, especialmente aquellas que se puedan utilizar como métodos de
identificación de personas. El reconocimiento de rostros es uno de mayor interés
en el área de biometría, debido a su aplicabilidad en cuestiones ligadas a la
seguridad o a sistemas de acceso.
Las características del rostro se estudian desde hace mucho tiempo con diversos
objetivos. Dentro del rostro de una persona se ubican un conjunto de elementos
(boca, ojos, cejas, nariz, orejas, contorno, pómulos), cuyas características pueden
ser medidas y de esta manera asociar estas mediciones a la persona.
7
Cálculos
• Cobertura de la cámara
Campo de visión Horizontal:
Rango del objeto= 75 m 75 𝑐𝑚
= 1.25
60 𝑐𝑚
Ancho del Área =60 cm
• Ángulo de la visión:
𝑑
𝛼 = 2 arctan
2𝑓
8
Cronograma de Actividades
9
Tabla 2: cronograma de actividades segunda parte
10
Proyecto
Presentación de propuestas de Proyecto,
deliberación y eleccion de la mejor opción
Marco
Introducción Planteamiento Objetivos Planeación y Grestión
teorico
Identificación de
materiales a necesitar
Organigrama
11
Evaluación de Costos
Costo
Precio Total
ESP 32-CAM
Producto ESP 32-CAM $262
Envío Mercado Libre $99
Software a utilizar Ide de Arduino $0
Conexión y complementos Módulo de Arduino $0
Total $361
Arducam
Producto Arducam $614
Envío Amazon $76
Software a utilizar Ide de Arduino $0
Conexión y complementos Arduino Mega $470
Total $1,160
CMOS 2511C002
Producto CMOS 2511C002 $9,326
Envío Digi-Key $0
Software a utilizar Aplicación Canon $0
Conexión y complementos
Total $9,326
Pixy2
Producto Pixy2 $1636
Envío Amazon $70
Software a utilizar Ide de Arduino $0
Conexión y complementos Arduino $0
Total $1,712
12
Especificación de los componentes
En este proyecto solo se usó el módulo ESP32_CAM, así como una computadora
mediante la cual se puede correr el programa y observar el funcionamiento de la
cámara.
ESP32_CAM ESPECIFICACIONES
Paquete DIP-16
Talla 27*40.5*4.5˄±0.2˅mm
Puerto I0 9
13
Minimum up to 20mA@5V Light-sleep:
Minimum up to 6.7mA@5V
Seguridad WPA/WPA2/WPA2-Enterprise/WPS
14
Metodología V
Diseño funcional del sistema
Con respecto al software, para que logre funcionar, una parte esencial es la
conexión a la red, por lo que habrá que realizar los cambios pertinentes en la parte
de la codificación.
15
El programa de cierta forma es bastante intuitivo, lo que permitirá el realizar los
cambios necesarios para la mejora en la detección del rostro, así como también el
lograr inscribir las caras que sean necesarias, para que logre el reconocer cuando
haya algún un intruso.
Códigos:
El siguiente código en su mayoría fue tomado de previos documentos
antecedentes relacionados tanto con el esp32 como con su modulo CAM,
realizado de esta forma para implementar por nuestra parte el acondicionamiento
para la detección de rostros y el reconocimiento facial respectivo a nuestro
principal objetivo.
__________________________________________________________________
______________
#include "esp_camera.h"
//Añadimos la librería Wifi para crear he inicializar la interfaz de la cámara de tal forma que
nos direccione hacia
//una página de internet y poder interactuar con nuestro elemento físico.
#include <WiFi.h>
// usamos el siguiente elemento ya que contamos con el módulo ESP-31 CAM de manera
física.
#define CAMERA_MODEL_AI_THINKER // Has PSRAM
#include "camera_pins.h"
void startCameraServer();
void setup() {
Serial.begin(115200);
Serial.setDebugOutput(true);
Serial.println();
camera_config_t config;
config.ledc_channel = LEDC_CHANNEL_0;
config.ledc_timer = LEDC_TIMER_0;
config.pin_d0 = Y2_GPIO_NUM;
16
config.pin_d1 = Y3_GPIO_NUM;
config.pin_d2 = Y4_GPIO_NUM;
config.pin_d3 = Y5_GPIO_NUM;
config.pin_d4 = Y6_GPIO_NUM;
config.pin_d5 = Y7_GPIO_NUM;
config.pin_d6 = Y8_GPIO_NUM;
config.pin_d7 = Y9_GPIO_NUM;
config.pin_xclk = XCLK_GPIO_NUM;
config.pin_pclk = PCLK_GPIO_NUM;
config.pin_vsync = VSYNC_GPIO_NUM;
config.pin_href = HREF_GPIO_NUM;
config.pin_sscb_sda = SIOD_GPIO_NUM;
config.pin_sscb_scl = SIOC_GPIO_NUM;
config.pin_pwdn = PWDN_GPIO_NUM;
config.pin_reset = RESET_GPIO_NUM;
config.xclk_freq_hz = 20000000;
config.pixel_format = PIXFORMAT_JPEG;
#if defined(CAMERA_MODEL_ESP_EYE)
pinMode(13, INPUT_PULLUP);
pinMode(14, INPUT_PULLUP);
#endif
// Encendido de la cámara
esp_err_t err = esp_camera_init(&config);
if (err != ESP_OK) {
Serial.printf("Cámara con error en la entrada:0x%x", err);
return;
}
sensor_t * s = esp_camera_sensor_get();
// Los sensores iniciales se voltean verticalmente y saturamos un poco los colores
17
if (s->id.PID == OV3660_PID) {
s->set_vflip(s, 1); // Voltearlo hacia atrás
s->set_brightness(s, 1); // subimos un poco el brillo
s->set_saturation(s, -2); // bajamos la saturación
}
// Tamaño de fotograma desplegado para obtener mayor velocidad de fotogramas inicial
s->set_framesize(s, FRAMESIZE_QVGA);
#if defined(CAMERA_MODEL_M5STACK_WIDE) ||
defined(CAMERA_MODEL_M5STACK_ESP32CAM)
s->set_vflip(s, 1);
s->set_hmirror(s, 1);
#endif
WiFi.begin(ssid, password);
startCameraServer();
void loop() {
delay(10000);
}
18
bool s;
bool detected = false;
int face_id = 0;
if(!detection_enabled || fb->width > 400){
size_t fb_len = 0;
if(fb->format == PIXFORMAT_JPEG){
fb_len = fb->len;
res = httpd_resp_send(req, (const char *)fb->buf, fb->len);
} else {
jpg_chunking_t jchunk = {req, 0};
res = frame2jpg_cb(fb, 80, jpg_encode_stream, &jchunk)?ESP_OK:ESP_FAIL;
httpd_resp_send_chunk(req, NULL, 0);
fb_len = jchunk.len;
}
esp_camera_fb_return(fb);
int64_t fr_end = esp_timer_get_time();
Serial.printf("JPG: %uB %ums\n", (uint32_t)(fb_len), (uint32_t)((fr_end - fr_start)/1000));
return res;
}
out_buf = image_matrix->item;
out_len = fb->width * fb->height * 3;
out_width = fb->width;
out_height = fb->height;
if (net_boxes){
19
detected = true;
if(recognition_enabled){
face_id = run_face_recognition(image_matrix, net_boxes);
}
draw_face_boxes(image_matrix, net_boxes, face_id);
/////////////////////////////////////////////////////////
dl_lib_free(net_boxes->score);
dl_lib_free(net_boxes->box);
dl_lib_free(net_boxes->landmark);
dl_lib_free(net_boxes);
////////////////////////////////////////////////////////
}…
…
(Código que va de la línea 339 hasta 284)
if (!image_matrix) {
Serial.println("dl_matrix3du_alloc failed");
res = ESP_FAIL;
} else {
if(!fmt2rgb888(fb->buf, fb->len, fb->format, image_matrix->item)){
Serial.println("fmt2rgb888 failed");
res = ESP_FAIL;
} else {
fr_ready = esp_timer_get_time();
box_array_t *net_boxes = NULL;
if(detection_enabled){
net_boxes = face_detect(image_matrix, &mtmn_config);
20
}
fr_face = esp_timer_get_time();
fr_recognize = fr_face;
if (net_boxes || fb->format != PIXFORMAT_JPEG){
if(net_boxes){
detected = true;
if(recognition_enabled){
face_id = run_face_recognition(image_matrix, net_boxes);
}
fr_recognize = esp_timer_get_time();
draw_face_boxes(image_matrix, net_boxes, face_id);
//////////////////////////////////////////////////////////////////////////
dl_lib_free(net_boxes->score);
dl_lib_free(net_boxes->box);
dl_lib_free(net_boxes->landmark);
dl_lib_free(net_boxes);
////////////////////////////////////////////////////////////////////////
}
21
0x86, 0x09, 0xD2, 0xCC, 0x29, 0x0A, 0x42, 0x4C, 0x46, 0x7A, 0x44, 0xEC, 0xD6, 0xA9, 0x9E,
0x3F,
0xED, 0xA1, 0x19, 0x1E, 0xE9, 0x0B, 0x07, 0x2F, 0xE7, 0x7E, 0x40, 0x74, 0xCD, 0xF4, 0x3D,
0x82,
0x3D, 0x18, 0xBE, 0x74, 0x2C, 0x32, 0x1D, 0x59, 0x78, 0xE1, 0x98, 0xB8, 0xC5, 0xBE, 0x1C,
0x3A,
0x9E, 0x43, 0x1C, 0xE4, 0xB6, 0x42, 0x13, 0xB9, 0x78, 0xD4, 0x95, 0x79, 0x11, 0x87, 0xB8,
0xD8,
0x38, 0xBF, 0x78, 0x7B, 0xDC, 0xD3, 0xDE, 0xBC, 0xEF, 0xF5, 0x4F, 0x3A, 0xC3, 0x23, 0xFE,
0x5B,
0x3A, 0x26, 0x24, 0x57, 0xF2, 0x77, 0xFA, 0x19, 0xFB, 0xD6, 0x95, 0xF6, 0x25, 0xF3, 0x13,
0xFD, …
Por último, se muestra el desarrollo del elemento de conexión a los pines que se añadió en
el código principal (elemento define CAMERA_MODEL_AI_THINKER)
#if defined(CAMERA_MODEL_AI_THINKER)
#define PWDN_GPIO_NUM 32
#define RESET_GPIO_NUM -1
#define XCLK_GPIO_NUM 0
#define SIOD_GPIO_NUM 26
#define SIOC_GPIO_NUM 27
#define Y9_GPIO_NUM 35
#define Y8_GPIO_NUM 34
#define Y7_GPIO_NUM 39
#define Y6_GPIO_NUM 36
#define Y5_GPIO_NUM 21
#define Y4_GPIO_NUM 19
#define Y3_GPIO_NUM 18
#define Y2_GPIO_NUM 5
#define VSYNC_GPIO_NUM 25
#define HREF_GPIO_NUM 23
#define PCLK_GPIO_NUM 22
#else
#error "Modelo de cámara no seleccionado"
#endif[5]
22
Pruebas Unitarias.
Las pruebas realizadas en el ide de Arduino fueron de la obtención de la dirección
IP y la comunicación al módulo CAM.
El primer error que tuvimos fue en la conexión del módulo y el puerto USB, el cual
se corrigió seleccionando la placa de programación como el puerto donde se
conectó nuestro dispositivo.
23
Subido el código ahora testeamos el módulo hasta que se obtuvieran los datos
pertinentes:
24
Pruebas de Componente.
En este apartado lo que realizamos fue configurar y probar el módulo:
25
3. Abrimos el Administrador de tableros e ingresamos en
Herramientas>Board>Boards Manager...
26
4. Buscamos ESP32 y damos a la instalación para el "ESP32 de
Espressif Systems":
27
Prueba de la instalación
28
2. Seleccionamos el puerto (como no se reconocía el esp32 tuvimos que instalar
los controladores CP210x USB a UART Bridge VCP):
29
3. Abrimos el siguiente ejemplo en Archivo>Ejemplos>WiFi (ESP32)>WiFiScan
30
5. Presionamos el botón Cargar en el IDE de Arduino. Después de unos
segundos el código se compila y se carga en la placa.
31
7. Abrimos el Arduino IDE monitor serial a una velocidad en baudios de 115200:
8. Tras pulsar el botón del ESP32 integrado vimos las redes disponibles cerca del
módulo:
Con esto terminamos las pruebas en el componente y pasamos a las pruebas del
sistema.
Pruebas de Sistema.
En este apartado se realizó la prueba funcional del sistema desarrollado:
32
Primero se ingreso la IP obtenida y corroboramos que se nos direccione a la
interfaz desarrollada.
33
Como observamos en la barra menú izq. se han activado y cambiado parámetros
con respecto a la captura anterior comprobando que estos nuevos parámetros se
vean reflejados y en general asi fue.
34
Aquí testeamos el reconocimiento facial y en primera instancia al no tener el rostro
reconocido se nos mostro una leyenda de Intruder Alert!
Ahora vemos que si otra persona aparece ante la cámara esta no la reconoce y
comprobamos asi que el reconocimiento facial no sufre inconvenientes para
detectar a las personas.
36
Como vemos en esta captura se está generando la identificación facial de un
usuario para que así sea reconocida y no se nos muestre la leyenda de alerta.
37
Por último, de nuevo se muestra la leyenda de bienvenida hola usuario más la
identificación (en este caso 0 pues es el primer rostro cargado).
Pruebas de Aceptación
Con respecto a los resultados obtenidos tomando en cuenta que los objetivos
fueron cumplidos y el módulo funcionó de la manera que se esperaba, se tiene la
idea de que un sistema de seguridad inteligente es bastante útil en la actualidad,
ya que con él tiempo todo se está desarrollando de sobremanera, lo que da paso
al desarrollo de nuevos sistemas inteligentes. Este sistema en particular es
bastante funcional ya que es posible grabar cualquier rostro que se desee, de
igual forma es bastante acertado en cuestión de detectar un rostro que no ha sido
grabado, básicamente un intruso, ya que en el tiempo que se puso a prueba en
ninguna ocasión erro en la detección.
38
Resultados
Los resultados no fueron los más óptimos, esto debido a que el sensor que fue
requerido en la práctica fue de bajo costo, esto para ahorrar presupuesto ya que
los demás sensores que proporcionaban servicios parecidos excedían el valor de
nuestro presupuesto, por lo tanto, existían algunos fallos con respecto a la
conexión de internet y en la transmisión había perdidas de señal por lo tanto se
dificultaba la selección del reconocimiento fácil y no se obtenía un vídeo de
manera fluida. Al momento de no contar con la luz suficiente la cámara
comenzaba a mostrar todos estos pequeños defectos, esto debido a la poca
resolución que esta misma nos proporcionaba.
39
Conclusiones
Se concluyó este proyecto cuando realizamos la implementación esperada del
módulo esp32, aplicando el desarrollo de una interfase para el reconocimiento y
detección fácil de rostros básico en el que por medio de la cámara se detectaba
primeramente el rostro de una persona, pero si el rostro no es reconocido nos
muestra” Intruder Alert”. El reconocimiento es capaz de señalar cuando una
persona no es reconocida para determinar la identidad de un sujeto de entre una
base de rostros conocidos, y cuando el rostro es reconocido nos va mostrar una
bienvenida “Hola usuario (0)” de color verde, pero esto depende de los usuarios
que hemos registrado en el sistema de reconocimiento facial, no se nos olvide que
debemos guardar los datos biométricos del usuario para que posteriormente se
detectará automáticamente.
El sistema mostro ser fallido a trabajar con imágenes de rostros sin control de
iluminación, lo cual es una situación normal porque es un módulo de poco valor y
con solo 2 Megapíxeles de resolución de imagen.
40
Referencias
[1] Electronic Identification, “¿Cómo funciona el reconocimiento facial?
Tecnología facial”, jul. 28, 2022.
https://www.electronicid.eu/es/blog/post/como-funciona-reconocimiento-
facial/es (consultado nov. 21, 2022).
[3] Equipo BeeDIGITAL, “Historia y evolución del reconocimiento facial”, oct. 29,
2019. https://www.beedigital.es/tendencias-digitales/historia-y-evolucion-del-
reconocimiento-facial/#:~:text=para%20las%20empresas.-
,Los%20inicios%20del%20reconocimiento%20facial,través%20de%20la%20
tabla%20RAND. (consultado nov. 21, 2022).
41