UNIVERSIDAD PERUANA DE CIENCIAS APLICADAS DIVISIÓN DE ESTUDIOS PROFESIONALES PARA EJECUTIVOS
INGENIERÍA DE SISTEMAS ENTREGABLE N°1:
Aplicación de la Inteligencia Artificial con el algoritmo de Reconocimiento Facial Curso:
Inteligencia Artificial
Profesor:
Alberto Borda Díaz Integrantes: Cruz Carpio, Nicolás Benjamín Carrasco Tello, Ronald Joel García Velásquez Edgar Alonso Diego Cueva Requena
U201912120 U201624069 U201419231 U201112224 2020 - 1
1. Título 2. Introducción 1. a) Planteamiento del problema 3. Estado del arte 1. a) Fundamentos Matemáticos 2. b) Algoritmo o modelo seleccionado 4. Desarrollo de la solución 1. a) Explicación detallada del algoritmo o modelo seleccionado 2. b) Variantes del algoritmo o modelo 3. c) Usos y aplicaciones 5. Resultados a. Línea base de la implementación (con una herramienta o código fuente) b. Adecuación del grupo a la implementación inicial 6. Bibliografía 7. Referencias de Internet
1 Título: Aplicación de la Inteligencia Artificial con el algoritmo de Reconocimiento Facial
2.Introducción 1. Planteamiento del Problema Hoy en día el uso de la inteligencia artificial es una tendencia global, porque optimiza la producción empresarial y brinda, para algunos casos, una capacidad de trabajo mayor que el hombre. En el Perú recién se está aplicando técnicas de inteligencia artificial en empresas grandes, que invierten en la tecnología, sin embargo, cabe aclarar que hay muchos campos donde se puede aplicar estos avances tecnológicos, como el reconocimiento de rostros, por ejemplo para las universidades que requieren verificar el ingreso de sus estudiantes y docentes, para las instalaciones de empresas que necesitan confirmar que las personas que ingresan son trabajadores o personal interno, etc. En el presente proyecto de investigación, analizamos el algoritmo para el reconocimiento facial y la importancia de su aplicación en el campo de la seguridad dentro de un grupo de personas registrado en cualquier centro, ya sea de labores o de estudios. Nuestro objetivo es analizar cómo está conformado y que fundamentos tiene dicho algoritmo, con el fin de tener un sustento para su respectiva aplicación dentro de los usos que planteamos. Lo anterior, debido a que existe mucha suplantación de personas para fines incorrectos y de mala ética.
3.Estado del arte 1. Fundamentos matemáticos Existen 2 tipos de técnicas de reconocimiento facial: técnicas basadas en apariencia y técnicas basadas en modelos . En ambos casos existen las características que describen a los patrones, de acuerdo al valor de sus atributos, y determinan el espacio de características de una clase. En la Tabla 3.1 se presenta una lista de las características comúnmente utilizadas en el reconocimiento de señales e imágenes.
Los atributos pueden tener valores de tipo numérico, cadenas alfanuméricas o símbolos. Sí éstos son de tipo numérico, entonces pueden ser representados mediante vectores. Por ejemplo, la ecuación (3.1), el vector 𝐱 representa un vector de características con 𝑑 características.
Sí los valores son caracteres o símbolos pueden representarse mediante cadenas o una estructura de árbol. Por ejemplo el ADN, está constituido por una cadena de proteínas: adenina (A), guanina (G), citosina (C) y tiamina (T), entonces un gen puede ser descrito por una cadena como la siguiente
Por ejemplo en la alineación de rostro, podemos expresar lo siguiente. Representar los rostros en un vector. Cada rostro se representa en forma de un vector Г𝑖, de longitud 𝑁. Donde 𝑁 = 𝑚 𝑥 𝑛 (𝑚 es el número de filas y 𝑛 el número de columnas de la matriz de datos original).
Calcular un rostro promedio.
donde 𝜓 corresponde al rostro promedio del conjunto de rostros de entrenamiento y 𝑀 es el número de rostros de entrenamiento.
Normalizar los rostros de entrenamiento respecto al rostro promedio.
Normalizamos los rostros sustrayendo el rostro promedio:
Calcular la matriz de covarianza del conjunto de rostros de entrenamiento. La matriz de covarianza del conjunto de rostros de entrenamiento se define con la siguiente ecuación:
Calcular los componentes principales. Los componentes principales son los eigenvectores de la matriz de covarianza 𝐶. Cada eigenvector lleva asociado un eigenvalor y se definen con la siguiente ecuación.
donde 𝑢𝑖 es el eigenvector y 𝜇𝑖 es el eigenvalor de la matriz de covarianza 𝐶. La matriz de covarianza 𝐶 contiene 𝑁 𝑋 𝑁 elementos y resulta impráctico procesar tal cantidad de datos, por ello se realiza el cálculo de 𝐿 envés de 𝐶, cuya dimensión es 𝑀 𝑋 𝑀.
Definir un nuevo subespacio En la práctica un pequeño conjunto de eigenvectores es necesario a para identificar un rostro, por ello, el nuevo subespacio lo conforman los 𝐾 eigenvectores que llevan asociado los eigenvalores con valor numérico grande
Proyectar los rostros de entrenamiento en el espacio de eigenrostros.
El procedimiento final consiste en proyectar los rostros normalizados 𝛷𝑖 en el subespacio 𝐖 mediante la ecuación
2. Algoritmo o modelo seleccionado
Reconocen según toda la imagen facial. Son métodos basados en correlación. El esquema de clasificación más simple, donde se utilizan modelos de comparación para el reconocimiento, es el template matching. El problema del template matching es que ha de comparar muchas características (para él, un pixel es una característica), y si tenemos en cuenta que en la base de datos encontramos M personas, con N imágenes por persona, observamos que este método no se puede implementar en tiempo real. Por lo tanto, se trabaja con otros métodos que decorelacionan las características entre sí para conseguir reducir el espacio facial en un número menor de coeficientes, que tengan un alto poder discriminatorio entre las personas. Es lo que se denomina subespacio facial. Ejemplos de métodos que trabajan a partir de subespacios son el Análisis de Componentes Principales (PCA Principal Component Analysis) a partir de eigenfaces, el Análisis Linear Discriminant (LDA - Linear Discriminant Analysis) o el Discriminante Linear de Fisher (FLD - Fisher Linear Discriminant) a partir de fisherfaces. La técnica PCA se considera una de las que proporciona un mayor rendimiento. Funciona proyectando las imágenes faciales sobre un espacio de facciones que engloba las variaciones significativas entre las imágenes faciales conocidas. Las facciones significativas se llaman eigenfaces, ya que son los eigenvectors, o componentes principales, del conjunto de caras. La proyección caracteriza la imagen facial de un individuo como la suma de los diferentes pesos de todas las facciones y, de la misma manera, para reconocer una imagen facial determinada sólo hará falta comparar estos pesos con aquellos de los individuos conocidos previamente. No tiene en cuenta la información de qué imágenes pertenecen a un mismo individuo. Es muy sensible a cambios en las condiciones de iluminación en diferentes imágenes de una misma persona.
El método LDA permite utilizar la información entre miembros de la misma clase (imágenes de la misma persona) para desarrollar un conjunto de vectores de características donde las variaciones entre las diferentes caras se enfatizan mientras que los cambios debidos a la iluminación, expresión facial y orientación de la cara no. Es decir, maximiza la varianza de las muestras entre clases, y la minimiza entre muestras de la misma clase. La técnica FLD es equivalente al LDA. Los resultados obtenidos con FLD son bastante mejores que los que podemos obtener con PCA, sobre todo cuando las condiciones lumínicas varían entre el conjunto de imágenes de entrenamiento y de test, y también con cambios de expresión facial, dando más peso a zonas como los ojos, la nariz o las mejillas que a la boca, porque son zonas más invariables en las diferentes expresiones que puede tener una persona. Otros métodos, en vez de utilizar subespacios faciales, siguen una clasificación por redes neuronales y plantillas deformables, como EGM - Elastic graph matching. CAPTURA DE IMAGEN El primer requerimiento funcional es la captura fotográfica, bajo este esquema se programó una función que permitiera esta captura mediante la siguiente interfaz.
Ilustración 3 Interfaz para la Captura de Imagen
Para esta interfaz se desarrolló el siguiente código, que muestra el funcionamiento para la captura de la imagen mediante una cámara web integrada al equipo de cómputo.
function encender_Callback(hObject, eventdata, handles) global vid global bandera if bandera == 0 vid = videoinput('winvideo', 1,'YUY2_640x480'); vid.LoggingMode = 'memory'; FocusMode= 'auto'; src = getselectedsource(vid); vid.ReturnedColorspace = 'RGB';
vidRes = get(vid, 'VideoResolution'); imWidth = vidRes(1); imHeight = vidRes(2); nBands = get(vid, 'NumberOfBands'); hImage = image( zeros(imHeight, imWidth, nBands),'Parent',handles.webcam); preview(vid,hImage); bandera = 1; elseif bandera == 1 flushdata (vid); delete(vid); bandera = 0; end La función encender_Callback mostrada anteriormente, se utiliza para encender y apagar la cámara. Las condiciones nos ayudarán a determinar cuándo encendemos la cámara o la apagamos.
Procesamiento de Imagen La función imagen_Callback contiene el código para capturar la fotografía y a su vez se realiza la detección de rostros. Esta función solo se activa al momento de pulsar el botón capturar mediante el método callback, el siguiente código muestra dicha función. function image_Callback(hObject, eventdata, handles) global vid cap = getsnapshot(vid); nombre = 'captura.jpg'; imwrite(cap,nombre); I = imread(nombre); faceDetector = vision.CascadeObjectDetector('FrontalFaceLBP'); % detectar cara bbox = step(faceDetector, I); %% usando un nuevo objeto con anotaciones I_faces = insertObjectAnnotation(I,'rectangle',bbox,[1:size(bbox,1)]); imshow(I_faces); Icrop = imcrop(I,bbox(1,:)); figure; % imshow(Icrop); Icrop = imresize (Icrop, [50 50]); IM = Icrop;
Se realiza la captura de la imagen, esta debe almacenarse en la variable cap, a la imagen tomada se le asignará un nombre, después de asignar el nombre se guarda la imagen en el disco duro en la ubicación de donde se encuentra la interfaz.Con imread se hará la lectura de la imagen capturada y se almacenará en la variable I. En la variable bbox, se guardará el
resultado de la detección de rostros faceDetector (vision.CascadeObjectDetector('FrontalFaceCART');) y la variable I. después se dibujara un cuadro en la imagen capturada, y con imcrop se hace un recorte a la imagen ya que solo se necesitará el rostro de la persona.
Reconocimiento Facial El reconocimiento facial es el requerimiento más importante ya por medio de él se coteja la imagen para determinar su identidad y por consiguiente saber si se trata de la misma persona. Para hacer el reconocimiento facial se utilizó una red neuronal la cual se entrena con las imágenes a reconocer, para este proyecto se entrenaron con tres algoritmos para su análisis. El siguiente código está enfocado a una red Hopfield y determinará si el reconocimiento fue o no exitoso. load images.mat load entrenada.mat imagenprueba = im2bw(Icrop,.4) datos{1} = imagenprueba(:); sale = sim(red,{1 100},{},datos); resul =(reshape(sale{50},[50 50])+1)/2; subplot(1,2,1), subimage(IM), title('imagen capturada'); if(any(resul - sonia) == 0) im = imread('image/Sonia.jpg') subplot(1,2,2), subimage(im), title('Sonia Perea Juarez'); elseif(any(resul - daniel) == 0) im = imread('image/Daniel.jpg') subplot(1,2,2), subimage(im), title('Jesus Daniel Crespo Hernandez'); elseif(any(resul - chema) == 0) subplot(1,2,2), subimage(im), title('Jose Manuel Torres Mandujano'); elseif(any(resul - chisko) == 0) im = imread('image/Francisco.jpg') subplot(1,2,2), subimage(im), title('Francisco Xavier'); elseif(any(resul - chemartin) == 0) im = imread('image/Martin.jpg') subplot(1,2,2), subimage(im), title('José Martin Lara Vite'); elseif(any(resul - gero) == 0) im = imread('image/Geronimo.jpg') subplot(1,2,2), subimage(im), title('Geronimo Hernandez de la Cruz'); else msgbox('El usuario no se encuentra Registrado'); end
Una vez que la imagen es recortada se guarda en la variable Icrop, como ya se mencionó anteriormente; a esta imagen se convierte a blanco y negro con im2bw y se guarda en la variable imagen prueba. Esta variable imagen prueba, se trabaja en la red neuronal; al terminar el procesamiento facial indica si el reconocimiento fue exitoso.
Evaluación Se hicieron Pruebas con Cinco Personas diferentes entrenando las redes neuronales con los tres algoritmos Hopfield, Backpropagation y Algoritmo PCA. Una vez entrenados se procedió a la captura de imagen y reconocimiento facial para cada uno de ellos en las tres redes. Prueba
Resultado
Tabla 2 Proceso de Reconocimiento Facial
En la tabla anterior se muestra el resultado del proceso descrito el cual inicia con la captura de la Imagen, posteriormente se delimita el rostro de la persona y como último paso se reconoce y coteja contra la red neuronal entrenada, para que se dictamine si es correcto el reconocimiento o no.
Resultados Por último, se muestran los resultados obtenidos en la evaluación de las tres técnicas empleadas para el reconocimiento facial siendo los siguiente
Ilustración 4-Comparación de resultados de las evaluaciones
Al Comparar los resultados de la evaluación, se puede observar cuál de los tres métodos realizados es el mejor para el reconocimiento facial. La Red Neuronal de Hopfield es el más apto para el reconocimiento facial ya que obtuvo el mayor porcentaje de efectividad con un 80%. La primer técnica utilizada fue la implementación de la red neuronal de Hopfield, la cual se encarga de reconstruir el patrón que se le ha introducido, que en este caso fue la imagen del usuario y lo va asociando con los patrones con los que ha sido entrenada, cabe mencionar que esta red se vuelve muy estable cuando los patrones de entrenamiento son muy diferentes lo cual asegura mucho más su funcionamiento ya que si los rostros de los usuarios registrados son diferentes asegura la confiabilidad del sistema. La segunda técnica utilizada es el PCA que por sus siglas se puede interpretar como análisis de componentes principales la cual tiene como función analizar algunas partes fundamentales del rostro como son el color, el brillo, etc. Todas estas características pueden ser comúnmente conocidas como eigenfaces. La tercera técnica utilizada es el Backpropagation la cual con base a las investigaciones se descubrió que es uno de los mejores para clasificar imágenes y el más usado por algunos investigadores, su principal característica es que reduce el tiempo para determinar la similitud entre los patrones establecidos, se puede reducir como consecuencia de que la red puede aprender el algoritmo correcto sin que alguien tenga que deducirlo por anticipado. La desventaja de utilizar la técnica Backpropagation es el tiempo de entrenamiento ya que a diferencia de la red Hofield, la red Backpropagation tardó mucho más al momento de entrenar la red con los patrones de entrada.
4.Desarrollo de la solución 1. Explicación detallada del algoritmo o modelo seleccionado A continuación, se describe paso a paso el desarrollo de la técnica Eigenfaces: I Cálculo de Eigenfaces Paso 1: Para la utilización de esta técnica se define una imagen I (x, y) como una matriz bidimensional de N filas y N columnas, cuyos valores de intensidad varíen entre 0 y 255 (8 bits).
Paso 2: Representamos los rostros 𝐼𝑖 como vectores 𝛤𝑖 . Estos vectores definen el subespacio de imágenes de caras. Cada vector es de longitud N2, que describe a una imagen de tamaño NxN
𝑁 2 𝑥1 = 𝛤
Paso 3: Después de haber obtenido su conjunto se tiene la cara promedio dada por la ecuación: 𝑀
1 𝜓= ∑ 𝑀
𝛤𝑖
𝑖=1
Paso 4: Luego cada cara difiere entre el rostro de entrada y la media del mismo según el vector. Restamos el vector promedio al vector Γ_i 𝛷𝑖 = 𝛤𝑖 − 𝛹
Paso 5: Los vectores uk y los vectores k , son los eigenvectores y los eigenvalores respectivamente de la matriz de covarianza. Calculamos la matriz de covarianza C: 𝑀
1 𝐶= ∑ 𝑀 𝑖=1
𝛷𝑖 𝛷𝑇 𝑖 (𝑚𝑎𝑡𝑟𝑖𝑧 𝑁 2 𝑥𝑁 2 )
𝑑𝑜𝑛𝑑𝑒 𝐴 = [𝛷1 𝛷2 … 𝛷𝑀 ] (𝑚𝑎𝑡𝑟𝑖𝑧 𝑁 2 𝑥𝑁 2 )
Paso 6: Calculamos los eigenvectores 𝑢𝑖 𝑑𝑒 𝐴𝐴𝑇
Paso 7: Mantenemos solo K vectores propios (correspondientes a los K valores propios más grandes).
II Representando caras Cada rostro (menos la media) 𝛷𝑖 en el conjunto de entrenamiento se puede representar como una combinación lineal de los mejores vectores propios de K: 𝑘
𝜙𝑖 − 𝑝𝑟𝑜𝑚𝑒𝑑𝑖𝑜 = ∑
𝑤𝑗 𝑢𝑗 , (𝑤𝑗 = 𝑢𝑇𝑗 𝛷𝑖 )
𝑗=1
Cada rostro de entrenamiento normalizada está representado en esta base por un vector:
𝛺𝑖 = [𝑤1𝑖 … 𝑤𝑘𝑖 ] , 𝑖 = 1,2, … , 𝑀
III Reconocimiento de Rostros con Eigenfaces Dada una imagen de un rostro desconocida (𝛤) (Centrada y del mismo tamaño que el entrenamiento de rostros) seguimos los siguientes pasos:
Paso 1: Normalizamos 𝛤: 𝛷 = 𝛤 − 𝛹
Paso 2: Proyectamos en Eigenfaces
𝑘
𝜙𝑖 = ∑
𝑤𝑗 𝑢𝑗 , (𝑤𝑗 = 𝑢𝑇𝑗 𝛷)
𝑗=1
Paso 3: Representamos 𝛷 como 𝛺 = [𝑤1 … 𝑤𝑘 ]
Paso 4: Calculamos 𝑒𝑟 = 𝑚𝑖𝑛𝑙 ‖𝛺 − 𝛺𝑙 ‖
Paso 5: Si 𝑒𝑟 < 𝑇𝑟 , entonces 𝛤 es reconocida como rostro “l” de los rostros de entrenamiento.
La distancia 𝑒𝑟 es llamada distancia dentro del espacio de rostros (difs).
Podemos usar la distancia euclidiana común para calcular, sin embargo, se ha informado que la distancia de Mahalanobis funciona mejor: ‖𝛺 − 𝛺𝑙 ‖ = ∑𝐾 𝑖=1
1 (𝑤𝑖 𝜆𝑖
− 𝑤𝑖 𝑘 )2
2. Variantes del algoritmo o modelo
Las variantes del algoritmo o modelos empleados, deben ser procesados para obtener los parámetros que gobiernan dichos modelos para el análisis. Actualmente no es posible tener un modelo que realice el 100% de las identificaciones de forma correcta. Esto es debido a que, al estar utilizando biométrica, se debe convivir con los falsos positivos. Aun así, se han conseguido resultados bastante buenos. El mejor modelo realizando la identificación ha sido el modelo LBPHFace. Es el modelo que consigue mayor tasa de acierto en todas las variantes.
El modelo FisherFace Este modelo encuentra combinaciones lineales de características que maximicen la varianza en lo datos, este método es bastante poderoso para representar los datos entre personas y los minimiza entre la muestra de la misma persona. Es decir, la idea es sencilla, la clase debe agrupar su proyección lo más pegada posible, mientras que las otras clases existentes deben estar separadas en la representación de las proyecciones. Por otro lado, el análisis discriminatorio (LDA), consigue la reducción de la dimensionalidad de una especificación de una clase y encuentra la combinación de las características que diferencia mejor la clase, el LDA ayuda a maximizar la proporción entre las clases y no maximizar la dispersión total de las clases, en resumen, se logra mejores resultados en caso de que haya iluminación excesiva y las expresiones, para lograr este objetivo se toma diferentes imágenes con el objetivo de capturar cada rasgos de la imagen o el rostro para que el reconocimiento sea más preciso , en resumen se necesita varias capturas de la misma persona. Este modelo es costoso en términos computacional. El modelo LBPHFace Este modelo toma un enfoque holístico para la identificación sencilla. Se trata como un vector la información para luego tenerlo como un espacio dimensional elevado, es decir maximiza la dimensión total. Para preservar la información discriminatoria, se aplica el LDA y se optimiza como en el modelo FisherFace. En resumen, la idea no es mirar la imagen completa como un vector con gran dimensionalidad, sino como características locales de un objeto, ya que cuando se extraigan tendrá una baja dimensionalidad implícitamente, en esto se basa el operador de patrones binarios locales, con ello se obtiene la reducción de la estructura local de una imagen mediante la comparación de cada píxel con sus píxeles vecinos se toma un píxel como centro y se limita el valor de los vecinos. Es decir, si la intensidad del píxel central es mayor que su vecino, este se denota con un cero, y si, por el contrario, la intensidad del vecino es mayor o igual a la intensidad del vecino central, entonces se denota con un uno, en resumen, este modelo es robusto contra las transformaciones monotónicas de escala de grises, se puede ver la imagen artificialmente modificada
El modelo EigenFace
La alta dimensionalidad es un importante problema en que se representa las imágenes, es decir solo se puede tomar una decisión cuando existe una variación en los datos, por ende, se busca la información más relevante, encuentran la dirección con la mayor varianza en los datos, llamados componentes principales Resumen del método El método EigenFace realiza la identificación facial: - Proyectando todas las muestras a entrenar en el subespacio PCA. - Proyectando la imagen a identificar en el subespacio PCA. - Encontrando el vecino más cercano entre la proyección de las imágenes entrenadas y la proyección de la imagen a identificar 3. Usos y aplicaciones Seguridad: Este mercado está liderado por una mayor actividad para combatir el crimen y el terrorismo, así como la competencia económica. El reconocimiento facial se utiliza al emitir documentos de identidad y, la mayoría de las veces, se combina con otras tecnologías biométricas, como las huellas dactilares. Se puede aplicar para mejorar la seguridad en los exámenes de admisión, los cuales cada año presentan casos de suplantación de estudiantes. Se puede aplicar para salvaguardar la información de las empresas en distintos recintos donde se requiere el acceso solo de personal autorizado. Se puede aplicar para el acceso a las escuelas y centro de estudios, con el fin de proteger de malos elementos ajenos a las instituciones a los estudiantes dentro de los mismos.
Salud: En esta área se han realizado importantes avances. Gracias al aprendizaje profundo y al análisis de rostros, es posible: - Rastrear el uso de medicamentos de un paciente con más precisión - detectar enfermedades genéticas con una tasa de éxito del 96.6%
Marketing: A través de la colocación de cámaras en tiendas retail, ahora es posible analizar el comportamiento de los compradores y mejorar el proceso de compra del cliente.
Estudios avanzados de psicología del comportamiento Humano: Con este tipo de software se puede definir con más exactitud los patrones del comportamiento emocional de una persona mediante los distintos tipos de expresiones que
se puedan reflejar por cada individuo guardándolos en una base de datos que se va alimentando inteligentemente.
5. Resultados: a. Línea base de la implementación (con una herramienta o código fuente) Para la implementación se usaron las siguientes herramientas: • Lenguaje de Programación Java en su versión 8 • Librería OpenCV para la detección de rostros • Base de datos MySQL server y MySQL WorkBench El código fuente del proyecto se encuentra en el siguiente enlace de github: https://github.com/nicolasbncruz/facialRecognized A continuación, describimos el funcionamiento del código fuente:
inicia con la clase FrameGrabber para luego convertirlo para luego convertr la imgane y lo grabe, de lo contrario invocará nuevamente al método declarado grabber inicializando el método OpenCVFrameGrabber para capturar la proporción de la imagen y posteriormente dirigiendo al método start donde convertirá la imgen y lo guardará en el método
Posteriormente, asigna por defecto el valor false a la declaración del método stop para luego con el contador while validar que tenga el valor false y la imagen grabada sea igual a la convertirá que sea diferente a nulo, con esa validación entra a un método if para validar que el faces declarado en cvseq sea diferente a nulo, para luego crear una imagen temporal, luego copiará la imagen para luego asignarle una tamaño, luego en faces ajusta el rostro detectado en la clase cvHaarDetectObjects , luego en otro método if valida si la imagen es diferente a nulo empieza con la validación de los ojos con el método cvHaarDetectObjects, para luego imprimir el resultado, luego con el método isFullBody realizar la validación lógica.
Una vez realizado la validación de rostro y caras inicia con la validación del rectángulo con el método CvRect donde se defino la altura y l ancho con los ejes X e Y y paramluego inicializarlo y guardar la imagen temporal con la forma la declaración cvSetImageROI.
Luego con el método CvPoint donde se define los ejes X e Y se inicializa, ara luego en una condicional validar si la imagen es detectará con el método recogniseCode donde consultará la imagen temporal para luego guardarlo en la base de datos con la información de la persona
Definición de clases Definición de clases ImageView El ImageViewes una Nodeusada para pintar imágenes cargadas de Imageclase. Esta clase permite cambiar el tamaño de la imagen mostrada (con o sin preservar la relación de aspecto original) y especificar una ventana gráfica en la imagen de origen para restringir los píxeles mostrados por esta ImageView. Toma la captura de la foto luego que sea guardara con retraso por el métodod ScheduledExecutorService
cvHaarDetectObjects devuelve múltiples caras detectadas en una imagen. Debe declarar una matriz de CvSeq para almacenar el resultad CvSeq faces La mayoría de las bibliotecas de detección de rostros están capacitadas para las personas que miran hacia la cámara, ya que esta es una limitación importante para el reconocimiento
facial. Dicho esto, la cascada Haar se puede entrenar también para detectar el perfil o incluso enfocarse en los ojos y la nariz (es decir, parte de la cara). grabbedImage La representación bidimensional de esta imagen, garantizado para no ser nulo, todos los valores en la matriz están dentro del rango, [NEGRO, BLANCO], inclusive FrameGrabber Cada llamada para capturar almacena la nueva imagen en la dirección de memoria para el marco devuelto anteriormente esto significa que si necesita almacenar en caché las imágenes devueltas de la captura, el recuadro devuelto, ya que la próxima llamada para capturar sobrescribirá la memoria de su imagen existente. Usar este método en lugar de asignar un nuevo búfer cada vez que un marco nos ayuda a mejorar el rendimiento al reducir la frecuencia de la recolección de basura y casi no se asigna espacio de almacenamiento dinámico adicional por cuadro, la clase FrameGrabber contiene métodos para realizar diversas operaciones que permiten el acceso a los métodos nativos proporcionados por la biblioteca af2framegrabber. Estos métodos permiten determinar la posición de una fibra, y también permiten la superposición de un marcador de centroide y un número de fibra Este método pasa por una validación de try catch Método: Stop
Los métodos declarados como grabbedImage, grayImage y smallImage le asigna con el valor por defecto nulo, para luego el método grabber le asigne el método stopy finalizando asignando el valor por defecto nulo al método grabber
Método: setClassifier
Valida primero el método classifierFile que sea igual a null o diferente a menor o igual a cero, para luego iniciar con la validación del método classifier para luego eliminar el contenido del método classifierFile Precargue el módulo opencv_objdetect para solucionar un error conocido. Método: setClassifierEye
Valida primero el método classifierFile que sea igual a null o diferente a menor o igual a cero, para luego iniciar con la validación del método classifierEye para luego eliminar el contenido del método classifierFile Precargue el módulo opencv_objdetect para solucionar un error conocido. Método: setClassifierSmile
Valida primero el método classifierFile que sea igual a null o diferente a menor o igual a cero, para luego iniciar con la validación del método classifierSmile para luego eliminar el contenido del método classifierFile Precargue el módulo opencv_objdetect para solucionar un error conocido.
Método: printResult
Inicia el contador de las imágenes tomadas dándole forma en el rectángulo y considerando la captura de ojos drawOval
Esto dibuja un círculo o un óvalo que se ajusta dentro del rectángulo especificado por los argumentos X, Y, ancho y alto. El óvalo se dibuja dentro de un rectángulo cuya esquina superior izquierda está en (X, Y), y cuyo ancho y alto son los especificados. Las medidas son en términos de píxeles. La posición (X, Y) es relativa a la esquina superior izquierda del área de dibujo del applet. Da la ubicación de la esquina superior izquierda de un rectángulo. Los argumentos widthy heightdan el tamaño horizontal y vertical del rectángulo. El drawOval()método dibuja el óvalo que cabe dentro del rectángulo. (En realidad no dibuja el rectángulo). Método: setClassifierSideFace
Valida primero el método classifierFile que sea igual a null o diferente a menor o igual a cero, para luego iniciar con la validación del método classifierSideFacepara luego eliminar el contenido del método classifierFile Precargue el módulo opencv_objdetect para solucionar un error conocido.
Método: setClassifierFullBody
Valida primero el método classifierFile que sea igual a null o diferente a menor o igual a cero, para luego iniciar con la validación del método classifierFullBody luego eliminar el contenido del método classifierFile Precargue el módulo opencv_objdetect para solucionar un error conocido.
Método: setClassifierEyeGlass
Valida primero el método classifierFile que sea igual a null o diferente a menor o igual a cero, para luego iniciar con la validación del método classifierEyeglass luego eliminar el contenido del método classifierFile Precargue el módulo opencv_objdetect para solucionar un error conocido.
Método: setClassifierUpperBody
Valida primero el método classifierFile que sea igual a null o diferente a menor o igual a cero, para luego iniciar con la validación del método classifierUpperBody luego eliminar el contenido del método classifierFile Precargue el módulo opencv_objdetect para solucionar un error conocido. Método FaceRecognizer:
Aquí es donde se lee las imágenes en el directorio “/Faces”, el cual menciona la ubicación de las imagenes que han sido guardadas.
La segunda parte del método “init” de FaceRecognized se basa en extraer el código de cara único de los nombres de imagen de la cara. Esta cara única se usará para obtener toda la otra información de los datos faciales en la base de datos. Por ejemplo: Cuando entrene una nueva cara al sistema, suponga que una persona llamada ABC. Ahora esta persona llamada ABC tiene 10 (puede ser más o menos) imagen de la cara que se guardará en la carpeta del proyecto llamada “/Faces" usando una convención de nomenclatura como 1_ABC1.jpg 1_ABC2.jpg 1_ABC3.jpg ....... 1_ABC10.jpg El valor inicial del nombre del archivo es la clave de índice en la tabla de la base de datos de esa persona. la clave 1 se usará para obtener datos de la base de datos.
En este método definimos el valor de confianza; si es inferior a 60 significa que se conoce la cara, pero si es mayor que 60 significa que se desconoce la cara:
A continuación, se explica la persistencia del sistema En MySQL se crea una base de datos llamado ghosteye y se crea la tabla face_bio con los siguientes atributos.
ID : id único de la tabla code: código de la persona
first_name: nombre de la persona last_name: apellido de la persona age: años de la persona En esta tabla se registrará los datos de la persona que es capturado mediante una webCam para luego ser reconocido por el sistema de IA.
Dentro de la clase Database. java es donde se realiza la conexión y comunicación del sistema con el motor de base de datos. En esta clase esta las siguientes funciones principales:
- init(): Aquí se valida la conexión a la base de datos
- insert(): Es aquí donde se realiza el registro de la cara y sus datos de la persona.
- getUser(int inCode): Aqui es donde se obtiene los datos de la persona registrado en la base de datos, enviando como parámetro de búsqueda su código
Cuando se entrene una nueva cara, se debe capturar al menos 10 imágenes de una sola persona en un ángulo diferente. Ya que, a mayor sea el número de imágenes de entrenamiento en diferentes ángulos y posturas, más preciso será el reconocimiento facial.
b. Adecuación del grupo a la implementación inicial Vemos que es indispensable el uso de la aplicación para el ingreso de las personas a sus centros de labores, ahora que se levantará la cuarentena. Dicho sistema será indispensable para verificar la autenticidad de los trabajadores cuando ingresen a sus centros de labores.
5.Bibliografía Turk, M. y Pentland, A. (1991, enero). Reconocimiento facial con caras propias. En procedimientos. Conferencia IEEE de la sociedad de computadoras de 1991 sobre visión por computadora y reconocimiento de patrones (pp. 586-587).
6.Referencias de Internet ●
Fuente de las variantes del algoritmo o modelo https://repositorio.umsa.bo/handle/123456789/7662 https://idus.us.es/bitstream/handle/11441/28426/tfgMariaSierraZapata.p df?sequence=1&isAllowed=y https://www.elsevier.es/es-revista-neurologia-argentina-301-articuloreconocimiento-facial-emociones-basicas-ejecucion-S185300281630009X
●
Applesfera. (s.f.). Obtenido de https://www.applesfera.com/iphone/al-finalapple-tomo-decision-correcta-al-elegir-face-id-vez-sensores-dactilarespantalla