Upload
others
View
9
Download
0
Embed Size (px)
Citation preview
1
APLICACIÓN PARA TELÉFONO MÓVIL CON SISTEMA OPERATIVO ANDROID QUE PERMITA
DETECTAR SOMNOLENCIA Y EMITIR UNA ALARMA SONORA A CONDUCTORES DE
AUTOMÓVIL MEDIANTE PROCESAMIENTO DE IMÁGENES.
BRAYAN ALIRIO BAQUERO CARDOZO
COD: 20172383004
BRAYAN ALEXANDER TORRES MALAVER
COD: 20172383008
TESIS DE INGENIERÍA EN CONTROL
UNIVERSIDAD DISTRITAL “FRANCISCO JOSÉ DE CALDAS”
FACULTAD TECNOLÓGICA
INGENIERÍA DE CONTROL
Bogotá, agosto de 2019
2
APLICACIÓN PARA TELÉFONO MÓVIL CON SISTEMA OPERATIVO ANDROID QUE PERMITA
DETECTAR SOMNOLENCIA Y EMITIR UNA ALARMA SONORA A CONDUCTORES DE
AUTOMÓVIL MEDIANTE PROCESAMIENTO DE IMÁGENES.
BRAYAN ALIRIO BAQUERO CARDOZO
BRAYAN ALEXANDER TORRES MALAVER
Tesis presentada al programa de Ingeniería en Control de la Universidad
Distrital “Francisco José De Caldas” Facultad Tecnológica, para optar por el título de
Ingeniero en
Control
Programa:
Ingeniería en Control
Director del Proyecto
Ing. Miguel Pérez Pereira
Evaluador del Proyecto
Ing.
Bogotá, agosto de 2019
3
NOTA DE ACEPTACIÓN
____________________________________________________________________
____________________________________________________________________
____________________________________________________________________
____________________________________________________________________
____________________________________________________________________
____________________________________________________________________
____________________________________________________________________
____________________________________________________________________
____________________________________________________________________
____________________________________________________________________
____________________________________________________________________
____________________________________________________________________
____________________________________________________________________
____________________________________________________________________
_____________________________
Jurado 1
_____________________________
Jurado 2
4
RESUMEN
En el presente documento se muestra la metodología e implementación de una solución a
un problema en concreto que es dar alerta temprana a conductores que se encuentren en
estado de somnolencia, esto con el fin de evitar o disminuir los accidentes viales provocados
por esta causa. Se desarrolló un aplicativo para teléfono móvil que mediante el
procesamiento digital de imágenes permitirá dar un estimado del estado de somnolencia
del conductor mediante el análisis de los ojos, y en dependencia de éste dar una alerta
sonora al usuario. La aplicación móvil se desarrolló en el entorno de desarrollo Android
Studio, y se implementaron las librerías de procesamiento de imágenes Opencv, y Dlib.
Para el desarrollo del aplicativo móvil en primera instancia se realizó una contextualización
teórica de los tipos de algoritmos implementados para la detección de somnolencia con ello
se realizó una preselección de los más convenientes a implementar, posteriormente se
realizó una subdivisión del sistema total a implementar, en donde de determinaron 4 etapas
secuenciales críticas presentes las cuales son: detección del rostro del usuario, detección
de los ojos y detección de somnolencia. Siguiendo la secuencia de las 4 etapas descritas se
seleccionó como métodos para realizar la detección del rostro el algoritmo de Viola Jones,
y el HOG (Histograms of oriented gradients), para la detección de los ojos se seleccionó el
algoritmo de viola jones, y la detección de landmarks, posteriormente para detectar
parpadeos se implementó el método de densidad de píxeles, Viola Jones por ausencia de
detección y el índice EAR, y finalmente para detectar la presencia de somnolencia se usó
PERCLOS (porcentaje de ojos cerrados).
Con base en los algoritmos seleccionados para cada una de las 4 etapas mencionadas con
anterioridad se realizaron 3 aplicativos móviles que fueron estructurados del siguiente
modo:
El primer aplicativo utilizó el algoritmo de VJ para detección del rostro, la detección de los
ojos se realizó igualmente mediante VJ y para la detección de parpadeos se implementó el
análisis de densidad de pixeles. Para el segundo se implementó como método para la
detección del rostro el algoritmo de Viola Jones (VJ), para detectar los ojos nuevamente el
algoritmo de Viola Jones y para la detección de parpadeos se hizo uso de un algoritmo de
Viola Jones caracterizado por solo detectar ojos abiertos. Por último, para el tercer
aplicativo se realizó la detección del rostro mediante HOG, mediante landmarks se
detectaron los ojos y se implementó el índice EAR para la detección de parpadeos.
Finalmente, para los tres aplicativos implementados se usó como método de detección de
somnolencia PERCLOS
5
Teniendo las tres aplicaciones desarrolladas se realizaron pruebas teniendo como
parámetros tiempos de procesamiento, estabilidad en ambientes de luz no controlados y
cantidad de aciertos y errores en la detección de somnolencia. Posteriormente se
seleccionaron los métodos más eficientes y con base en ellos se desarrolló el aplicativo final,
el cual terminó estructurado del siguiente modo: La detección del rostro se realizó mediante
el algoritmo de VJ, se realizó la detección de los ojos mediante Landmarks, se detectaron
los parpadeos mediante EAR y se estimó el estado de somnolencia mediante PERCLOS. Se
implementó una alerta sonora que se activará cuando el índice se somnolencia PERCLOS
sea mayor al 80%.
Se realizaron pruebas de funcionamiento del aplicativo en el entorno de aplicación
(vehículo), en donde se estimó la correcta ubicación del dispositivo móvil para un óptimo
funcionamiento del aplicativo, así como el rango de iluminación en donde este funciona de
manera óptima. Posteriormente se estimó el funcionamiento de la aplicación atendiendo a
características del usuario tales como género, presencia de rasgos faciales como la
presencia de barba, y el uso de accesorios como anteojos. Se hallaron límites en el correcto
funcionamiento de la aplicación en usuarios con anteojos.
El aplicativo móvil se diseñó para orientación del celular en modo Portrait (portarretrato),
con una resolución de imagen de 640x480 píxeles, la versión de Android mínima requerida
para el funcionamiento del aplicativo es de Android 4.0. En la interfaz gráfica de usuario se
pueden visualizar parámetros como la detección del rostro, el índice PERCLOS, y dos
botones que permite realizar la calibración de la aplicación para su óptimo funcionamiento.
6
TABLA DE CONTENIDO
Pag
1 INTRODUCCIÓN ................................................................................................................................. 10
2 PLANTEAMIENTO Y DESCRIPCIÓN DEL PROBLEMA ............................................................................ 11
3 OBJETIVOS ......................................................................................................................................... 12
3.1 OBJETIVO GENERAL .............................................................................................................................. 12 3.2 OBJETIVOS ESPECÍFICOS. ........................................................................................................................ 12
4 ESTADO DEL ARTE.............................................................................................................................. 13
5 MARCO DE REFERENCIA .................................................................................................................... 17
5.1 DETECCIÓN DE ROSTROS ........................................................................................................................ 17 5.1.1 Métodos basados en Conocimiento ............................................................................................ 18 5.1.2 Métodos basados en Características Invariantes ....................................................................... 18 5.1.3 Métodos basados en Plantillas ................................................................................................... 18 5.1.4 Métodos basados en Apariencia ................................................................................................. 19
5.2 ALGORITMO DE VIOLA JONES ................................................................................................................. 19 5.2.1 Imagen Integral .......................................................................................................................... 19 5.2.2 Extracción de características ...................................................................................................... 20 5.2.3 Clasificación ................................................................................................................................ 22
5.3 LOCALIZACIÓN DE LOS HITOS DE FACE LANDMARK ...................................................................................... 22 5.3.1 Dlib modelos pre-entrenados...................................................................................................... 23
5.4 PARÁMETROS DE LA ZONA OCULAR .......................................................................................................... 24 5.5 PORCENTAJE DE OJOS CERRADOS (PERCLOS) ........................................................................................... 25 5.6 SMART PHONES ................................................................................................................................... 25 5.7 ANDROID ........................................................................................................................................... 26 5.8 HERRAMIENTAS DE SOFTWARE ............................................................................................................... 26
5.8.1 Android Studio ............................................................................................................................ 26 5.8.2 Opencv ........................................................................................................................................ 27 5.8.3 Dlib .............................................................................................................................................. 27 5.8.4 CMake ......................................................................................................................................... 27
5.9 LENGUAJES DE PROGRAMACIÓN .............................................................................................................. 28 5.9.1 Java ............................................................................................................................................. 28 5.9.2 C++ .............................................................................................................................................. 28
6 DESARROLLO ..................................................................................................................................... 30
6.1 MÉTODOS DE DETECCIÓN DE SOMNOLENCIA BASADO EN PROCESAMIENTO DE IMÁGENES ................................... 30 6.1.1 Métodos detección de rostro ...................................................................................................... 31 6.1.2 Métodos detección de ojos ......................................................................................................... 32 6.1.3 Métodos detección parpadeo ..................................................................................................... 32 6.1.4 Integración de los algoritmos ..................................................................................................... 34 6.1.5 Configuraciones Desarrolladas ................................................................................................... 34
6.2 DISEÑO DE ALGORITMO QUE PERMITA DETECTAR SOMNOLENCIA UTILIZANDO EL MÉTODO ESCOGIDO ANTERIORMENTE,
TOMANDO EN CUENTA, PRUEBAS CON DIFERENTES INDIVIDUOS Y TIEMPOS DE PROCESAMIENTO DE LA IMAGEN. ................... 35 6.2.1 Metodología de la configuración utilizada ................................................................................. 36
7
6.2.2 Requerimiento de la aplicación .................................................................................................. 37 6.3 DISEÑO DE INTERFAZ GRÁFICA DE USUARIO QUE PERMITA VISUALIZAR EL FUNCIONAMIENTO DEL ALGORITMO, Y
REALIZAR PRUEBAS Y AJUSTES DE CALIBRACIÓN A CONVENIENCIA DEL USUARIO. ............................................................. 38 6.4 REALIZAR PRUEBAS OBJETIVAS DEL SISTEMA PARA DETERMINAR SU RENDIMIENTO FRENTE A CONDICIONES DE
ILUMINACIÓN POSICIÓN Y CARACTERÍSTICAS DEL INDIVIDUO. ...................................................................................... 39
7 ANÁLISIS DE RESULTADOS ................................................................................................................. 40
7.1 MÉTODOS DE DETECCIÓN DE SOMNOLENCIA .............................................................................................. 40 7.1.1 Configuración 1 ........................................................................................................................... 40 7.1.2 Configuración 2 ........................................................................................................................... 41 7.1.3 Configuración 3 ........................................................................................................................... 42
7.2 CONFIGURACIÓN IMPLEMENTADA Y RESULTADOS OBTENIDOS ....................................................................... 44 7.3 PRUEBAS OBJETIVAS DEL APLICATIVO. ....................................................................................................... 46 7.4 CASOS DE NO DETECCIÓN O MAL FUNCIONAMIENTO .................................................................................... 48 7.5 PRUEBAS REALIZADAS EN SUJETOS DE DIFERENTES CARACTERÍSTICAS ............................................................... 51 7.6 RESUMEN DE RESULTADOS ..................................................................................................................... 52
8 CONCLUSIONES ................................................................................................................................. 53
9 TRABAJO FUTURO ............................................................................................................................. 54
10 BIBLIOGRAFÍA .................................................................................................................................... 55
8
LISTA DE FIGURAS
Figura 1: Modelo basado en apariencia ........................................................................................... 19
Figura 2: Relaciones espaciales del rostro y descriptores de Haar ................................................. 20
Figura 3: Descriptores de Algoritmos Haar básicos......................................................................... 21
Figura 4: Convolución del filtro Haar con una imagen integral ...................................................... 21
Figura 5: Clasificador en cascada ..................................................................................................... 22
Figura 6: 68 puntos de referencia ..................................................................................................... 23
Figura 7: Resultados de velocidad promedio de pestañeos............................................................. 24
Figura 8: Etapas del algoritmo para detección de somnolencia: ...................................................... 30
Figura 9: Métodos de detección ....................................................................................................... 31
Figura 10: Detección de Parpadeo por medio del índice EAR ........................................................... 33
Figura 11: integración de las 4 etapas de detección ......................................................................... 34
Figura 12: Diagrama de la configuración 1 para detección de somnolencia .................................... 34
Figura 13: Diagrama de la configuración 2 para detección de somnolencia .................................... 35
Figura 14: Diagrama de la configuración 3 para detección de somnolencia .................................... 35
Figura 15: Diagrama configuración final ........................................................................................... 36
Figura 16: Interfaz del aplicativo ....................................................................................................... 38
Figura 17 Funcionamiento de la configuración 1 ojos cerrados ....................................................... 40
Figura 18: Funcionamiento de la configuración 1 ojos abiertos ....................................................... 41
Figura 19: Funcionamiento de la configuración 2 ............................................................................. 42
Figura 20: Funcionamiento de la configuración 3 ............................................................................. 43
Figura 21: Funcionamiento de la configuración final ........................................................................ 44
Figura 22: Funcionamiento de la configuración final ........................................................................ 45
Figura 23: Funcionamiento de la configuración final ........................................................................ 45
Figura 24: Ubicaciones utilizadas para las pruebas del aplicativo .................................................... 46
Figura 25: Funcionamiento del aplicativo en diferentes posiciones sujeto 1 ................................... 47
Figura 26: Funcionamiento del aplicativo en diferentes posiciones sujeto 2 ................................... 47
Figura 27: Funcionamiento del aplicativo en sujetos con gafas ....................................................... 48
Figura 28: Falsa detección de rostro ................................................................................................. 49
Figura 29: No detección de Rostro, por rostro incompleto .............................................................. 49
Figura 30: No detección de Rostro, por rostro orientado de perfil .................................................. 50
Figura 31: Funcionamiento del aplicativo a diferentes condiciones de luz ...................................... 50
9
LISTA DE TABLAS
Tabla 1: Resultados Obtenidos de la configuración 1 ....................................................................... 41
Tabla 2: Resultados Obtenidos de la configuración 2 ....................................................................... 42
Tabla 3: Resultados Obtenidos de la configuración 3 ....................................................................... 43
Tabla 4: Resultados Obtenidos de la configuración final .................................................................. 48
Tabla 5: Rangos de funcionamiento del aplicativo ........................................................................... 51
Tabla 6: Resultados pruebas en sujetos con diferentes rasgos ........................................................ 51
10
1 INTRODUCCIÓN
La somnolencia, según un consenso de investigadores y clínicos en el área, es una
necesidad fisiológica básica. Puede ser considerada como el hambre o la sed, que también
son necesidades fisiológicas básicas para la supervivencia de la persona. Una definición
operacional de la somnolencia es la tendencia de la persona a quedarse dormida, también
conocido como la propensión a dormirse[1]. Si bien es solo un síntoma que se presenta por
falta de sueño o fatiga y no representa un riesgo directo a la vida del individuo(a) afectado,
está de manera indirecta puede llegar a ser peligrosa al realizar tareas que requieren
concentración constante, un ejemplo de ellos es la conducción de un vehículo donde la falta
de concentración puede ocasionar un accidente que ponga en riesgo la vida del individuo.
En 2017 Según la OMS y el CDC (Centro para el control y la prevención enfermedades) de
Estados Unidos 1.3 millones de personas mueren en el mundo por accidentes
automovilísticos, de los cuales del 15 al 33% son ocasionados por somnolencia.
Actualmente gracias a la tecnología se han brindado soluciones a problemas en diferentes
ámbitos, entre ellos y más importantes es la protección de la vida humana, por lo cual es
posible encontrar soluciones a casi todos los peligros a los cuales se enfrenta una persona
en su vida diaria. No obstante, dichas soluciones pueden llegar a ser demasiado costosas
impidiendo su implementación en la mayoría de los casos, como ejemplo de ello
encontramos los sistemas de detección de somnolencia integrados en algunos de los
vehículos de última generación que tienen un óptimo funcionamiento, pero un alto costo si
se deseasen implementar en vehículos de gama media o baja.
Hoy en día gracias al avance tecnológico y los nuevos mecanismos de comunicación e
información, se ha obligado a las personas a adquirir dispositivos inteligentes conocidos
como Smartphones dispositivos que cuentan con una alta diversidad de sensores, un alto
nivel de procesamiento, y la capacidad de interactuar con una persona por medios
audiovisuales, por lo cual en este trabajo se ilustra el desarrollo de un aplicativo móvil
orientado a dispositivos tipo Smartphone con sistemas operativos tipo android capaz de
detectar somnolencia por medio de análisis de imagen y una alarma sonora, haciéndolo un
sistema de detección de somnolencia de bajo costo y de fácil implementación. Para ello, se
hizo un proceso de investigación y desarrollo de los diferentes métodos de detección de
somnolencia por medio de análisis de imagen y se seleccionó el más adecuado basándose
en pruebas en diferentes individuos con diferentes rasgos faciales, tiempos de
procesamiento, alto nivel de detección, bajo nivel de falsos positivos y condiciones de luz
variable, posteriormente se desarrolló una interfaz de usuario que permitiera visualizar en
tiempo real el funcionamiento del aplicativo, brindar información visual del estado de las
variables pertinentes del sistema, como lo son: Nivel de somnolencia, índice EAR,
presencia de rostro y nivel lux, además de permitir una calibración del sistema en
dependencia de las características del sujeto, finalmente se realizaron las pruebas
pertinentes con la finalidad de analizar los resultados y determinar los rangos de
funcionamiento del aplicativo y sus limitaciones.
11
2 PLANTEAMIENTO Y DESCRIPCIÓN DEL PROBLEMA
En 2017 Según la OMS y el CDC (Centro para el control y la prevención enfermedades) de Estados
Unidos 1.3 millones de personas mueren en el mundo por accidentes automovilísticos, de los cuales
del 15 al 33% son ocasionados por somnolencia [2]
En Colombia los accidentes de tránsito causados por somnolencia son más comunes de lo que
parece. De hecho, cada mes, en el último año, han muerto cinco personas por esta razón. Además,
este “sueño mortal” es culpable de 200 heridos en siniestros vehiculares[3]. en el 2017, según
Medicina Legal, fueron cerca de 7.000 las personas que murieron en accidentes de tránsito. Y
aunque no hay cifras detalladas, muchos de estos eventos fatales ocurrieron por culpa de la
somnolencia[4]
El cansancio y la somnolencia en conductores hacen que estos progresivamente disminuyan su capacidad de concentración y atención durante el manejo y pierdan capacidad de respuesta ante condiciones específicas que exigen reacciones inmediatas cuando se circula por la ciudad o por carretera.
Las causas de somnolencia son variadas, se puede dar debido largas jornadas de conducción, hábitos del conductor durante su trabajo como manejar durante la noche y/o en horario vespertino y trastornos del sueño como apnea-hipopnea.
Actualmente existen diferentes desarrollos que permiten la detección y alerta temprana al conductor de la presencia de somnolencia, pero no son cómodos para el usuario y son sistemas con costos elevados y difícil implementación por ello podría cuestionarse si: ¿Es posible desarrollar un sistema de detección de somnolencia de bajo costo, fácil implementación y óptimo desempeño?
12
3 OBJETIVOS
3.1 Objetivo general
Diseñar un aplicativo móvil para plataformas Android que permita detectar somnolencia en
condiciones de iluminación establecidas y emitir una alarma sonora a conductores de automóvil
mediante procesamiento digital de imágenes.
3.2 Objetivos específicos.
• Investigar diferentes métodos de detección de somnolencia por medio de procesamiento
de imágenes y determinar cuál es la mejor opción para este aplicativo.
• Diseñar un algoritmo que permita detectar somnolencia utilizando el método escogido
anteriormente, tomando en cuenta, pruebas con diferentes individuos y tiempos de
procesamiento de la imagen.
• Diseñar una interfaz gráfica de usuario que permita visualizar el funcionamiento del
algoritmo, Realizar pruebas y ajustes de calibración a conveniencia del usuario.
• Realizar pruebas objetivas del sistema para determinar su rendimiento frente a condiciones
de iluminación posición y características del individuo.
13
4 ESTADO DEL ARTE
A continuación, se listan algunos desarrollos de sistemas de detección de somnolencia en
conductores a partir del procesamiento digital de imágenes.
En [5], Liao y Hong desarrollaron un algoritmo para la detección de somnolencia mediante el análisis
del estado de la pupila y el estado de la boca. El sistema en primera instancia realiza la detección
del rostro mediante un algoritmo basado en el color de la piel, posteriormente detecta la pupila, y
la boca para lo cual implementan los algoritmos más comunes para la detección de bordes como
Roberts, Prewitt, Sobel. Para detectar la presencia de somnolencia se analizó la apertura de la boca
en presencia de bostezos, y el estado de apertura de los ojos, si la boca y los ojos permanecían en
un estado de apertura mínimo ojos durante 6 fotogramas consecutivos, se alertaba a al usuario
sobre la presencia de somnolencia. Se evaluó el funcionamiento del sistema mediante la
implementación del mismo con los 3 algoritmos de detección de bordes mencionados,
encontrándose que el funcionamiento de los algoritmos de Prewitt y Sobel presentan mayor
eficiencia bajo condiciones de iluminación no controladas.
En [6] Fa-Deng y Min-X implementan un sistema de detección de fatiga en conductores mediante
el análisis del estado de los ojos. Como primera etapa del algoritmo se tiene la detección del rostro
la cual se realizó mediante el método de Adaboost basado en características tipo Haar, se seleccionó
este método debido a tiene bajos tiempos de procesamiento,permite un funcionamiento en tiempo
real y tiene alto porcentaje de detecciones. Una vez obtenido el rostro para hallar la localización de
los ojos se implementó el método de Template Matching (plantillas adaptativas), el cual para
mejorar tiempos de procesamiento no se implementó sobre todo el rostro si no en el área próxima
a los ojos, la cual se halló mediante el análisis de la geometría del rostro. Se detectó el estado de
somnolencia mediante el porcentaje de coincidencia de la plantilla y el estado de los ojos. L
estimación del estado de fatiga se realizó mediante la implementación del índice PERCLOS.
Mediante experimentación se evidencio que el algoritmo de AdaBoost combinado con el método
de comparación de plantillas presenta alta precisión de detección y velocidad, y es robusto frente a
cambios de condiciones ambientales lo cual cumple los requerimientos para la detección de fatiga
en conductores en tiempo real.
En [7] Pijiang Chen describe un sistema de reconocimiento de fatiga mediante el análisis del estado
de los ojos, para ello en primera instancia implementó la detección del rostro mediante el algoritmo
basado en el color de la piel, para lo cual previamente realizó un preprocesamiento de la imagen
eliminando ruido y posteriormente debido a que la cromaticidad del color del rostro humano tiene
mejor concentración para lograr diferenciarlo del fondo, se realiza la transformación de espacio de
la imagen a YCbCr, y se realiza una binarizacion de la imagen en dependencia de una rango
preestablecido en la matrix cb y cr, posteriormente se detecta la locación de los ojos mediante el
método de proyección integral doble, y por último se analiza la apertura de los ojos y el ratio de
parpadeo para determinar el estado de fatiga del conductor mediante el índice PERCLOSE. Una vez
confirmado el estado de fatiga del conductor mediante una alarma se alerta al mismo. El algoritmo
desarrollado presenta un óptimo funcionamiento en ambientes de iluminación controlados, pero
presenta fallas en dependencia de características faciales propias del sujeto de prueba debido a que
14
el método de detección de rostro se basa en características físicas del individuo como el color de la
piel.
En [8] Singh, Bratia y Kaur desarrollan un sistema de detección de fatiga en conductores de
automóvil. En primera instancia se realizó la detección del rostro el algoritmo de Viola Jones,
posteriormente se realiza la localización de los ojos y se analiza el estado de la pupila para detectar
si los ojo se encuentran abiertos o cerrados, el estimado del nivel de somnolencia del conductor se
realizó mediante índice PERCLOS, el cual indica la medida por unidad de tiempo en que el ojo esta
serrado. Paralelamente se implementó un sistema que permitía censar el nivel de agarre del volante
por parte del conductor mediante la implementación de un cable resistivo enrollado y un conversor
análogo digital implementado con un microcontrolador de la familia PIC. Se implementó también
un sensor de velocidad en el vehículo. Para la detección del estado de fatiga del conductor mediante
en análisis de las tres variables, PERCLOS, agarre del volante, y velocidad, se realiza un estimado de
la presencia de somnolencia y mediante la implementación de dos sistemas de alarma, uno por
vibración y el otro por sonido se da alerta al conductor. El sistema desarrollado presenta un
funcionamiento óptimo ya no depende solamente del procesamiento digital de imágenes para
estimar somnolencia, si no tiene en cuenta parámetros como velocidad del vehículo y estado de
agarre del volante.
En [9] Luo, Hu y Fan desarrollan un sistema que permite la detección del estado de fatiga en
conductores, que cuenta con sistema de detección en estado de iluminación diurno y nocturno. Para
el sistema diurno se implementa el algoritmo AdaBoost para la localización del rostro.
Posteriormente para hallar la localización de los ojos de usa nuevamente el algoritmo AdaBoost. Se
halló el estado de los ojos mediante el análisis de características geométricas como la relación del
ancho, largo y la curvatura del párpado que se presentan en estos cuando se encuentran abiertos o
cerrados, estas características de evidencian claramente cuando se realiza una binarizacion de la
imagen. Conociendo si los ojos se encuentran abiertos o cerrados se halla el nivel de somnolencia
del conductor mediante la utilización del índice PERCLOS. Para el modo nocturno se emplea una
cámara infrarroja CCD y se usa el algoritmo de diferencia de frames infrarrojos para la localización
de los ojos. Además, se implementa un sistema de detección de bostezo implementando el
algoritmo LBP. El sistema desarrollado presenta bajos tiempos de procesamiento y logra la
detección efectiva y precisa del estado de fatiga en un conductor.
En [10] Ahmed, Emrul y Fosail proponen un sistema de detección de somnolencia mediante el uso
de dos cámaras que detectan características faciales del conductor y el estado del vehículo con
respecto al carril por el cual transita. La primera cámara se encargará de detectar el rostro para lo
cual implementará un algoritmo basado en el color de la piel, para ello se realiza la conversión la
imagen de RGB a YCbCr lo cual reduce problema provocado ambientes de iluminación con alto grado
de brillo. Para la detección de los ojos y la boca se implementó erosión y dilatación de la imagen. La
detección de la inclinación de la cabeza se obtiene mediante la medición del ángulo de una línea
normal al rostro y otra perteneciente a la ubicación de los ojos. La segunda cámara se implementó
para detectar el contorno de la vía por la cual transita el vehículo y así saber cuándo este se desvía
de su trayectoria adecuada. El estado de fatiga del conductor se determina comparando los datos
obtenidos del procesamiento de imagen realizado por las dos cámaras. La eficiencia del sistema
propuesto se evaluó por cada una de sus atapas obteniendo para el detector de bostezo una
15
eficiencia del 90%, para el cabeceo del 82%, el estado de los ojos 80% y para el análisis de conducción
del 86%.
En [11] Sarada, Devi y Preeti Bajaj desarrollan un sistema de detección de fatiga en conductores
basado en la detección del estado de los ojos, para ello primero se realizó la detección del rostro en
base al color de la piel para lo cual se clasificaron los pixeles de la imagen perteneciente a la piel,
identifico las regiones de piel mediante un análisis de conectividad, y se decide cuál de las regiones
halladas pertenecen al rostro y cuáles no. Una vez detectado el rostro se procede a detectar los ojos
para lo cual se detectan los cambios de intensidad de la imagen haciendo un promedio de cada
coordenada en x sobre la imagen en escala de grises. Posteriormente de detecta si el conductor se
encuentra en estado de somnolencia, para ello se verificará si durante 5 frames consecutivos los
ojos permanecen cerrados, si se cumple la condición se alertará al conductor. El algoritmo
desarrollado funciono satisfactoriamente.
En [12] Zhi Dong y Mey Xie desarrollan un método de detección de somnolencia para cual en
primera instancia se realiza la detección de rostro mediante el algoritmo de clasificación AdaBoost,
posteriormente conociendo la geometría del rostro se realiza una división de la imagen en 4 partes
siento las dos regiones superiores pertenecientes a los ojos, después se aplica nuevamente sobre la
región de los ojos el algoritmo AdaBoost y se implementa un AAM (Active Appearance Model) el
cual localiza el contorno perteneciente a los ojos. Una vez se obtiene el contorno de los ojos se
procede mediante el índice PERCLOS a analizar el estado de somnolencia del conductor. El método
propuesto gracias a la implementación del algoritmo AAM reduce información de textura facial
redúndate y acelera la velocidad de procesamiento.
En [13] Xinxing, Pengfei y Ping desarrollan un sistema de detección de somnolencia basado en el
estado de los ojos y la boca. Como primer paso se realiza la detección del rostro mediante la
implementación del algoritmo de Viola Jones y realizo una estimación de la posición del rostro
mediante la implementación de un filtro de Kalman, posteriormente para localizar los ojos se
implementa el algoritmo AdaBoost y después se realza el color de los ojos mediante la
transformación de RGB a YCbCr, se binariza la imagen y se aplica el operador Sobel para resaltar los
contornos, para estimar el estado de somnolencia se aplica el índice PERCLOS. Para localizar la boca
se usa MB-LBP (Multi Block Local Binary Pattern) y para realizar un seguimiento predictivo se aplica
un filtro de Kalman. Para estimar el rango de apertura de la boca similar a lo realizado con los ojos,
se realiza una transformación de la imagen a YCbCr se realzan bordes mediante Sobel, y se estima
apertura mediante asociación con una elipse. Los resultados obtenidos mostraron una efectividad
de algoritmo alrededor del 95% lo cual es buen indicador de la robustez del mismo.
En [14] se propone un sistema detector se somnolencia el cual se desarrolló como aplicativo para
teléfono móvil usando la librería Opencv. El algoritmo propuesto en primera instancia se encarga
de la detección del rostro del conductor, para lo cual se implementa un clasificador tipo Haar y el
16
algoritmo AdaBoost con plantillas adaptativas lo cual mejora la detección de rostro con la cabeza en
rotación. Para la detección de los ojos debido a que el clasificador de Haar mediante AdaBoost
presenta problemas durante la rotación de la cabeza, se implementó una combinación de detección
por plantillas adaptativas, y Boosting adaptativo. Para la detección de signos de somnolencia se
implementó el índice PERCLOS. La boca se detectó mediante la implementación de clasificador tipo
Haar, y algoritmo AdaBoost y para la solución de problemas de detección durante la cabeza en
rotación se implementó el mismo método usado para la detección de los ojos. Una vez se detectó
la boca se realizó el respectivo análisis para reconoces si el conductor este o no bostezando, ya que
este es un claro indicador de fatiga. El sistema desarrollado presenta una alta funcionalidad, bajo
costo computacional, y alta flexibilidad en la implementación del mismo.
17
5 MARCO DE REFERENCIA
5.1 Detección de rostros
La detección de rostros por parte de una computadora es el proceso por el cual la computadora
ubica los rostros presentes en una imagen o en un video, el proceso no es tan sencillo como lo
haríamos los humanos, pues el reconocimiento es casi instantáneo y esto se debe al ´ gran
paralelismo existente en las redes neuronales de nuestro cerebro, esto no es tan rápido ni sencillo
en una computadora secuencial, pero existen diversos métodos algunos ya tradicionales para poder
realizar detección de rostros por medio de una computadora[15].
Las técnicas existentes pueden ser agrupadas de la siguiente manera:
1. Métodos basados en conocimiento: codifican de alguna manera el conocimiento de lo que
es un rostro, generalmente son atributos geométricos codificados en forma de reglas.
2. Métodos basados en características invariantes: son técnicas que representa los rostros
independientemente de su orientación generalmente utilizan información del color y la
textura de la imagen.
3. Métodos basados en plantillas: es una técnica general empleada para detectar objetos de
una escena, donde el mismo es representado por una familia de curvas que representan el
objeto, puede ser considerada una técnica basada en el conocimiento.
4. Métodos basados en la apariencia: no necesitan conocimiento previo de la característica a
ser detectada, generalmente las técnicas que pertenecen a esta clasificación necesitan
varias imágenes, a partir de ellas aprenden y codifican solamente lo necesario para hacer la
detección de las características de interés en este caso un rostro humano, y pertenecen a
este grupo las redes neuronales, Eigenfaces y Modelos Ocultos de Markov.
Existen algunos problemas más comunes en la detección de rostros que se dan en el proceso de
adquisición de las imágenes, condiciones de luminosidad, bajo contraste, objetos extraños, rostros
parcialmente capturados, distorsión de la imagen, etc. A continuación, algunos de los problemas
más comunes:
• Posición: las imágenes varían de posición y orientación y esto se debe al medio de captura,
o a la posición de las personas en el momento de capturar la imagen.
• Expresión facial: la expresión facial, por ejemplo, la risa, el enojo, gestos, etc.
• Presencia de estructuras: elementos como barba, bigote, lentes, pueden constituir un
problema.
18
• Ocultación: las imágenes pueden aparecer sobrepuestas por otras imágenes de rostros
5.1.1 Métodos basados en Conocimiento
Los métodos basados en el conocimiento representan las técnicas de detección de rostros basados
en alguna base de reglas previas, que ha sido definida por el investigador, por ejemplo, se puede
decir que el rostro tiene una forma ovalada y tiene dos ojos una nariz y una boca, además que estos
elementos no se encuentran de una manera aleatoria dentro del rostro sino más bien siguiendo una
distribución común; este conocimiento hace posible establecer reglas que identifiquen un rostro
humano. Las desventajas de este método es que las reglas utilizadas si son muy generales entonces
la tasa de detección de rostros de regiones de imágenes que no son rostros en realidad (falsos
positivos), es muy alta, y lo inverso también ocurre, que, si las reglas son muy específicas, la tasa de
aceptación de rostros es muy baja [15].
5.1.2 Métodos basados en Características Invariantes
El color de la piel y la textura de la piel son utilizadas por estos métodos. La principal desventaja es
que las condiciones de iluminación y el ruido comprometen el desempeño de estos algoritmos.
Cuando se utiliza la información del color de la piel, los algoritmos que utilizan toda la gama de
colores posibles tienen mejor desempeño que los que utilizan solamente escala de grises, estos
métodos tienden a formar clusters en el espacio de colores pudiendo ser modelados por medio de
distribuciones gaussianas, por consiguiente, esta característica puede ser utilizada para encontrar
rostros en una escena [15].
5.1.3 Métodos basados en Plantillas
Se modela geométricamente la forma del objeto por medio de componentes básicos como círculos,
elipses, etc. estas vienen a ser las plantillas, luego se evalúa la correspondencia entre el objeto y la
plantilla por medio de una función de energía. Las principales técnicas son las plantillas deformables
y los contornos activos[15].
19
5.1.4 Métodos basados en Apariencia
Los métodos basados en la apariencia es una técnica que no necesita conocimiento a priori sobre
las características del objeto a ser buscado en la imagen. En esta clase de algoritmos surgen los
conceptos de entrenamiento y de aprendizaje, una vez que la información necesaria es extraída de
las imágenes sin intervención externa[15].
Figura 1: Modelo basado en apariencia
Entre estas técnicas encontramos las Eigenfaces, Redes Neuronales y los Modelos Ocultos de
Markov.
5.2 Algoritmo de Viola Jones
La técnica de detección propuesta por Paul Viola y Michael Jones utiliza una serie de clasificadores,
agrupados consecutivamente con características previamente definidas, con el fin de detectar el
rostro en una imagen.
La metodología del algoritmo es:
5.2.1 Imagen Integral
La imagen integral se define como una matriz de búsqueda de dos dimensiones, con el mismo
tamaño que la imagen de entrada donde cada elemento de la imagen integral contiene la suma de
20
los píxeles que se encuentren en la región superior izquierda, incluyendo el pixel de la posición
indicada[16].
𝑖𝑖(𝑥, 𝑦) = ∑ 𝑖(𝑥′, 𝑦′)
′
𝑥′≤𝑥,𝑦′≤𝑥
Donde 𝑖(𝑥, 𝑦) es la imagen de la que se desea calcular su imagen integral 𝑖𝑖(𝑥, 𝑦). La utilidad de las
imágenes integrales que es que al implementar los descriptores tipo Haar para hallar la suma total
de los pixeles encerrados en cada descriptor, al trabajar sobre la imagen integrar el proceso se
simplifica a la realización de operaciones básicas, lo cual mejora el tiempo de computo del
algoritmo.
5.2.2 Extracción de características
En imágenes las características de cada objeto se extraen al aplicar ciertas funciones que permitan
la representación y descripción de los objetos de interés de la imagen (patrones). La extracción de
características es un paso en el reconocimiento de patrones en el cuál las medidas u observaciones
son procesadas para encontrar a tributos que puedan ser usados para asignar los objetos a
determinada clase.[17]
Los descriptores del algoritmo de Haar son funciones que permiten acentuar la diferencia de
contraste entre regiones rectangulares diferentes adyacentes en una misma imagen, como método
de codificación de los contrastes existentes, por ejemplo entre el rostro y sus relaciones espaciales
[18], como se puede ver en la figura 2.
Figura 2: Relaciones espaciales del rostro y descriptores de Haar
El algoritmo de Viola y Jones establece ciertos tipos de descriptores Haar que se observan en la
Figura 3, y de los cuales los tres principales tipos de descriptores son:
21
A. Descriptor a dos rectángulos: Diferencia entre las sumas de los píxeles de ambas regiones
rectangulares, del mismo tamaño y forma que son adyacentes horizontal o verticalmente.
B. Descriptor a tres rectángulos: Suma de los píxeles entre dos rectángulos exteriores y
restados de la suma de los píxeles en un rectángulo central a estos.
C. Descriptor a cuatro rectángulos: Diferencia entre los pares diagonales de los rectángulos
implicados.
Figura 3: Descriptores de Algoritmos Haar básicos.
En la figura 4, se muestra la convolución de un filtro Haar con la imagen integral. De esta operación
se puede extraer una característica en un tiempo constante sobre la imagen integral adicionando y
sustrayendo los valores de los vértices para cada rectángulo[19]. Para mayor claridad, en la figura
la suma de los píxeles que forman el rectángulo D se puede calcular como:
𝑠𝑢𝑚𝐷 = (4 + 1) − (2 + 3)
Donde 1, 2, 3, 4, son los valores dados en la imagen integral en dichas localizaciones.
Figura 4: Convolución del filtro Haar con una imagen integral
22
5.2.3 Clasificación
Esta etapa dentro del algoritmo de detección se encarga de asignar un conjunto de características
dado a una clase con la que se encuentra una mayor similitud, de acuerdo a un modelo inducido
durante el entrenamiento.
Boosting fue introducido es un método de clasificación que combina varios clasificadores básicos
para formar un único clasificador más complejo y preciso. La idea se basa en la afirmación de que
varios clasificadores sencillos, cada uno de ellos con una precisión ligeramente superior a una
clasificación aleatoria, pueden combinarse para formar un clasificador de mayor precisión, siempre
y cuando se disponga de un número suficiente de muestras de entrenamiento[19]. En la figura 5, se
muestra un esquema de un clasificador en cascada.
Figura 5: Clasificador en cascada
Para aplicar la técnica de boosting primero se debe establecer un algoritmo de aprendizaje sencillo
(clasificador débil o base), que será llamado repetidas veces para crear diversos clasificadores base.
Para el entrenamiento de los clasificadores base se emplea, en cada iteración, un subconjunto
diferente de muestras de entrenamiento y una distribución de pesos diferente sobre las muestras
de entrenamiento. Finalmente, estos clasificadores base se combinan en un único clasificador que
se espera sea mucho más preciso que cualquiera de los clasificadores base por separado. En función
de los clasificadores base que se utilicen, las distribuciones que se empleen para entrenarlos y el
modo de combinarlos, podrán crearse distintas clases del algoritmo genérico de boosting. El
algoritmo de boosting empleado por Viola y Jones en su trabajo es conocido como AdaBoost.
5.3 Localización de los hitos de Face Landmark
Este proceso es capaz de extrapolar un conjunto de puntos clave a partir de una determinada
imagen facial denominado Localización de Hitos Faciales (Face Landmark Localization o Face
Alignment).
Los hitos (puntos clave) que interesan, son aquellos que describen la forma de los atributos de la
cara como: ojos, cejas, nariz, boca y mentón. Estos puntos dieron una gran visión sobre la estructura
23
de la cara analizada, que puede ser muy útil para una amplia gama de aplicaciones, incluyendo:
reconocimiento facial, animación facial, reconocimiento de emociones, detección de parpadeos y
fotografía.
Existen muchos métodos que son capaces de detectar estos puntos: algunos de ellos logran una
precisión y robustez superiores mediante el análisis de un modelo facial 3D extraído de una imagen
2D, otros se basan en la potencia de CNNs (Convolutional Neural Networks) o RNNs (Recurrent
Neural Networks), y el otro utiliza características simples (pero rápidas) para estimar la ubicación de
los puntos.
El algoritmo Face Landmark Detection ofrecido por Dlib es una implementación del Ensemble of
Regression Trees (ERT) presentado en 2014 por Kazemi y Sullivan [20]. Esta técnica utiliza una
característica simple y rápida (diferencias de intensidad de píxeles) para estimar directamente las
posiciones de los puntos de referencia. Estas posiciones estimadas son posteriormente refinadas
con un proceso iterativo realizado por una cascada de regresores. Los regresores producen una
nueva estimación de la anterior, tratando de reducir el error de alineación de los puntos estimados
en cada iteración. El algoritmo es muy rápido, de hecho, se necesitan entre 1 y 3 ms (en una
plataforma de escritorio) para detectar (alinear) un conjunto de 68 puntos de referencia en una cara
determinada.
5.3.1 Dlib modelos pre-entrenados
El autor de la biblioteca Dlib (Davis King) ha entrenado varios modelos de predictores de formas en el conjunto de datos iBug 300-W, uno de ellos, es el conjunto de puntos detectados por el Dlib pre-entrenado shape_predictor_68 (SP68) que localizan 68 puntos de referencia dentro de una imagen facial como se observa en la Figura 6.
Figura 6: 68 puntos de referencia
24
Básicamente, un predictor de forma puede ser generado a partir de un conjunto de imágenes, anotaciones y opciones de entrenamiento. Una sola anotación consiste en la región de la cara y los puntos marcados que se quieren localizar. La región de la cara puede ser fácilmente obtenida por cualquier algoritmo de detección de caras (como Opencv HaarCascade, Dlib HOG Detector, detectores CNN,...), en su lugar los puntos tienen que ser etiquetados manualmente o detectados por modelos y detectores de puntos de referencia ya disponibles (por ejemplo, ERT con SP68).
5.4 Parámetros de la zona ocular
Uno de los parámetros principales para detectar somnolencia, es el parpadeo de los ojos
donde se pueden analizar dos características de este movimiento:
• Frecuencia del parpadeo
• Duración del parpadeo
Donde la frecuencia del parpadeo según [21] en forma espontánea se parpadea de cuatro a seis
veces por minuto, y de manera refleja cuando existe algún estímulo sobre las pestañas o la superficie
ocular.
Y la duración del parpadeo según un estudio [22] sobre velocidad promedio de pestañeos para
monitoreo de somnolencia, para el cual se trabajó con 12 personas, 7 mujeres y 5 varones, de entre
19 y 64 años, a los cuales se les monitoreo los ojos y se extrajeron 202 pestañeos aleatorios de cada
uno, con lo cual se obtuvo que en promedio la duración normal de un pestañeo reflejo es de 111 +-
51 msec.
Figura 7: Resultados de velocidad promedio de pestañeos
25
Las características de un parpadeo normal se muestran en la Figura 7 en términos de su amplitud
(A), cierre de pico Velocidad (PCV) y duración.
Es difícil estar seguro cuando un parpadeo termina y los párpados finalmente están abiertos. La
duración de los parpadeos se mide con mayor precisión por la duración (D) en la mitad de su
amplitud. La media D pertenece a los sujetos en estado de alerta aquí fue111 ± 51 𝑚𝑠, y el rango
normal era de 59-182 ms.
5.5 Porcentaje de ojos cerrados (PERCLOS)
PERCLOS son las siglas de Percentaje of the Time Eyelids are Closed, o en español porcentaje de ojos
cerrados y es mayormente utilizado para la medición del estado de somnolencia basado en el estado
de los ojos (Abiertos o Cerrados), para calcular este índice se mide el porcentaje de cierre de los ojos
sobre un intervalo de tiempo [23]. Como el índice del PERCLOS se calcula en base al estado de los
ojos, la información de los ojos es obtenida generalmente por cámaras, donde en un tiempo
determinado se capturan "n" fotogramas, en los cuales algunos corresponderán a ojos cerrados y
los restantes a ojos abiertos, luego para calcular el índice PERCLOS se usa la siguiente fórmula:
𝑃𝐸𝑅𝐶𝐿𝑂𝑆 =𝐶𝑎𝑛𝑡𝑖𝑑𝑎𝑑 𝑑𝑒 𝑓𝑜𝑡𝑜𝑔𝑟𝑎𝑚𝑎𝑠 "𝑐𝑒𝑟𝑟𝑎𝑑𝑜𝑠"
𝐶𝑎𝑛𝑡𝑖𝑑𝑎𝑑 𝑑𝑒 𝑓𝑜𝑡𝑜𝑔𝑟𝑎𝑚𝑎𝑠 𝑒𝑣𝑎𝑙𝑢𝑎𝑑𝑜𝑠𝑥100%
"Un video resulta de la exposición imágenes o fotogramas uno detrás de otro."[24] Es decir que los
videos están formados a partir de imágenes o fotogramas, estos fotogramas son extraídos y
analizados para calcular el índice PERCLOS.
La principal ventaja de usar PERCLOS como indicador de somnolencia es que puede ser usado por
sistema de detección no intrusivos y en tiempo real.
5.6 Smart Phones Un “smartphone” (teléfono inteligente en español) es un dispositivo electrónico que funciona como
un teléfono móvil con características similares a las de un ordenador personal. Es un elemento a
medio camino entre un teléfono móvil clásico y una PDA (Personal Digital Assintant) ya que permite
hacer llamadas y enviar mensajes de texto como un móvil convencional pero además incluye
características cercanas a las de un ordenador personal. Una característica importante de casi todos
los teléfonos inteligentes es que permiten la instalación de programas para incrementar el
procesamiento de datos y la conectividad. Estas aplicaciones pueden ser desarrolladas por el
fabricante del dispositivo, por el operador o por un tercero. Los teléfonos inteligentes se distinguen
por muchas características, entre las que destacan las pantallas táctiles, un sistema operativo, así
como la conectividad a Internet y el acceso al correo electrónico. El completo soporte al correo
electrónico parece ser una característica indispensable encontrada en todos los modelos existentes
26
y anunciados en 2007, 2008 y 2009. Otras aplicaciones que suelen estar presentes son las cámaras
integradas, la administración de contactos, el software multimedia para reproducción de música y
visualización de fotos y video-clips y algunos programas de navegación, así como, ocasionalmente,
la habilidad de leer documentos de negocios en variedad de formatos como PDF y Microsoft Office.
Una característica común a la mayoría de “smartphones” es una lista de contactos capaz de
almacenar tantos contactos como la memoria libre permita, en contraste con los teléfonos clásicos
que tienen un límite para el número máximo de contactos que pueden ser almacenados. Casi todos
los teléfonos inteligentes también permiten al usuario instalar programas adicionales [25].
5.7 Android Android es un sistema operativo de código abierto para móviles basado en el núcleo de Linux, el
cual permite desarrollar ilimitadas aplicaciones para teléfonos inteligentes, tabletas, reproductores
MP3, televisores, cámaras, como también admite la distribución de los productos generados. El
proyecto Android es liderado por el grupo Open Handset Alliance, en el cual se agrupan varios
fabricantes, desarrolladores de hardware y software, entre los cuales se pueden mencionar:
Google, Samsung, HTC, Dell, Intel, Qualcomm, Motorola, LG, Telefónica, T-Mobile, Nvidia. Mediante
alianzas en el mundo, Android ha tenido un crecimiento acelerado, desde su primera versión 1.0
liberada el 23 de septiembre del 2008 hasta la actual versión 9.0; cuenta con más de 200 millones
de dispositivos móviles activados, lo que hace que cada día se activen 550.000 nuevos dispositivos
en más de 137 países[26].
5.8 Herramientas de Software
5.8.1 Android Studio Android Studio es el entorno de desarrollo integrado (IDE) oficial para el desarrollo de aplicaciones
para Android y se basa en IntelliJ IDEA. Además del potente editor de códigos y las herramientas
para desarrolladores de IntelliJ, Android Studio ofrece aún más funciones que aumentan tu
productividad durante la compilación de apps para Android [27] , como las siguientes:
● Un sistema de compilación basado en Gradle flexible
● Un emulador rápido con varias funciones
● Un entorno unificado en el que puedes realizar desarrollos para todos los dispositivos
Android
● Instant Run para aplicar cambios mientras tu app se ejecuta sin la necesidad de compilar un
nuevo APK
● Integración de plantillas de código y GitHub para ayudarte a compilar funciones comunes
de las apps e importar ejemplos de código
● Gran cantidad de herramientas y frameworks de prueba
● Herramientas Lint para detectar problemas de rendimiento, usabilidad, compatibilidad de
versión, etc.
● Compatibilidad con C++ y NDK
● Soporte incorporado para Google Cloud Plataform, lo que facilita la integración de Google
Cloud Messaging y App Engine
27
5.8.2 Opencv Opencv es una biblioteca libre de visión artificial originalmente desarrollada por Intel. Desde que
apareció su primera versión alfa en el mes de enero de 1999, se ha utilizado en infinidad de
aplicaciones. Desde sistemas de seguridad con detección de movimiento, hasta aplicaciones de
control de procesos donde se requiere reconocimiento de objetos. Esto se debe a que su publicación
se da bajo licencia BSD, que permite que sea usada libremente para propósitos comerciales y de
investigación con las condiciones en ella expresadas.
Open CV es multiplataforma, existiendo versiones para GNU/Linux, Mac OS X, Windows y Android.
Contiene más de 500 funciones que abarcan una gran gama de áreas en el proceso de visión, como
reconocimiento de objetos (reconocimiento facial), calibración de cámaras, visión estérea y visión
robótica.
El proyecto pretende proporcionar un entorno de desarrollo fácil de utilizar y altamente eficiente.
Esto se ha logrado realizando su programación en código C y C++ optimizados, aprovechando
además las capacidades que proveen los procesadores multinúcleo. Opencv puede además utilizar
el sistema de primitivas de rendimiento integradas de Intel, un conjunto de rutinas de bajo nivel
específicas para procesadores Intel (IPP) [28].
5.8.3 Dlib
Dlib es un kit de herramientas moderno de C ++ que contiene algoritmos de aprendizaje automático
y herramientas para crear software complejo en C ++ para resolver problemas del mundo real. Se
utiliza tanto en la industria como en la academia en una amplia gama de dominios, que incluyen
robótica, dispositivos integrados, teléfonos móviles y grandes entornos informáticos de alto
rendimiento. La licencia de código abierto de Dlib le permite usarla en cualquier aplicación, de forma
gratuita [29].
5.8.4 CMake
CMake es una familia de herramientas multiplataforma de código abierto diseñada para crear,
probar y empaquetar software. CMake se utiliza para controlar el proceso de compilación de
software utilizando una plataforma simple y archivos de configuración independientes del
compilador, y generar archivos de trabajo y espacios de trabajo nativos que se pueden utilizar en el
entorno del compilador que elija. Kitware creó el conjunto de herramientas CMake en respuesta a
la necesidad de un entorno de construcción potente y multiplataforma para proyectos de código
abierto como ITK y VTK. CMake es parte de la colección de Kitware de plataformas de código abierto
con soporte comercial para el desarrollo de software [30].
28
5.9 Lenguajes de programación
5.9.1 Java Java es un lenguaje de programación de propósito general, concurrente, orientado a objetos que
fue diseñado específicamente para tener tan pocas dependencias de implementación como fuera
posible. Su intención es permitir que los desarrolladores de aplicaciones escriban el programa una
vez y lo ejecuten en cualquier dispositivo (conocido en inglés como WORA, o "write once, run
anywhere"), lo que quiere decir que el código que es ejecutado en una plataforma no tiene que ser
recompilado para correr en otra. Java es, a partir de 2012, uno de los lenguajes de programación
más populares en uso, particularmente para aplicaciones de cliente-servidor de web, con unos 10
millones de usuarios reportados [31].
El lenguaje de programación Java fue originalmente desarrollado por James Gosling de Sun
Microsystems (la cual fue adquirida por la compañía Oracle) y publicado en 1995 como un
componente fundamental de la plataforma Java de Sun Microsystems. Su sintaxis deriva en gran
medida de C y C++, pero tiene menos utilidades de bajo nivel que cualquiera de ellos. Las
aplicaciones de Java son generalmente compiladas a bytecode (clase Java) que puede ejecutarse en
cualquier máquina virtual Java (JVM) sin importar la arquitectura de la computadora subyacente.
La compañía Sun desarrolló la implementación de referencia original para los compiladores de Java,
máquinas virtuales, y librerías de clases en 1991 y las publicó por primera vez en 1995. A partir de
mayo de 2007, en cumplimiento con las especificaciones del Proceso de la Comunidad Java, Sun
volvió a licenciar la mayoría de sus tecnologías de Java bajo la Licencia Pública General de GNU.
Otros también han desarrollado implementaciones alternas a estas tecnologías de Sun, tales como
el Compilador de Java de GNU y el GNU Classpath.
El lenguaje Java se creó con cinco objetivos principales:
1. Debería usar el paradigma de la programación orientada a objetos.
2. Debería permitir la ejecución de un mismo programa en múltiples sistemas operativos.
3. Debería incluir por defecto soporte para trabajo en red.
4. Debería diseñarse para ejecutar código en sistemas remotos de forma segura.
5. Debería ser fácil de usar y tomar lo mejor de otros lenguajes orientados a objetos, como
C++.
Para conseguir la ejecución de código remoto y el soporte de red, los programadores de Java a veces
recurren a extensiones como CORBA (Common Object Request Broker Architecture), Internet
Communications Engine o OSGi respectivamente [31].
5.9.2 C++ El lenguaje de programación C++ fue creado en los años 80 por Bjarne Stroustrup basando en el
lenguaje C. El C++ es un lenguaje orientado a objetos al que se le añadieron características y
cualidades de las que carecía el lenguaje C.
De esta forma nació el C++ y como sucedía con el C depende mucho del hardware, tiene una gran
potencia en la programación a bajo nivel, y se le agregaron herramientas para permitir programar a
29
alto nivel. El C++ es uno de los lenguajes más potentes porque nos deja programar a alto y a bajo
nivel, pero a su vez es difícil de aprender porque es necesario hacerlo casi todo manualmente.
El nombre fue propuesto por Rick Masciatti, al utilizarse C++ fuera de los laboratorios donde se creó.
Con el nombre de C++ que quiso dar a entender que el C++ es una extensión del lenguaje C.
El C++ es un lenguaje de programación híbrido, al que se le puede compilar. Una de las ventajas que
ofrece este lenguaje es que es mucho más sencillo de aprender para los programadores que ya
conocen el C.
El C++ mantiene una enorme compatibilidad con el C principalmente por dos razones: Por la gran
cantidad de código C que existe, y para facilitar el paso de los programadores de C al nuevo lenguaje
C++.
Ya hemos dicho anteriormente que el lenguaje C++ es un lenguaje de programación orientado a
objetos, pero no es un lenguaje orientado a objetos puro. El C++ nació como evolución del C, y desde
su creación fue un lenguaje de programación hecho por programadores con un diseño muy práctico
al que se le fueron añadiendo todos los elementos que se comprobaron eran necesarios sin tener
en cuenta aspectos como su imagen, diseño, etc.
Todo esto ha ocasionado que sus detractores lo usen como argumento de crítica sobre el C++. Pero
por otra parte precisamente esto es esto es lo que le da mayor valor, el ser un lenguaje más
pragmático y sencillo que su antecesor el lenguaje C [32].
30
6 Desarrollo
En esta sección de describe la metodología implementada para la realización de la aplicación móvil
la cual estará seccionada con base en los 4 objetivos propuestos.
En la sección 6.1 se encuentra la primera etapa implementada que consistió en la división en 4
etapas secuenciales para realizar el sistema de detección de somnolencia, selección de algoritmos
a implementar por etapa, y desarrollo de 3 aplicaciones móviles basadas en los algoritmos
seleccionado con anterioridad. En la sección 6.2 se describe el procedimiento realizado para realizar
el aplicativo móvil final en base a los que se desarrollaron previamente, el objetivo de esto es en
base parámetros de funcionamiento de las primeras 3 aplicaciones seleccionar los algoritmos por
etapa que tuvieron un funcionamiento óptimo. Posteriormente en la sección 6.3 se explica la
interfaz gráfica de usuario y finalmente en la sección 6.4 se enuncian los parámetros tenidos en
cuenta para realizar la pruebas de la aplicación desarrollada, lo resultados obtenidos se encuentra
en la sección 7.3 .
6.1 Métodos de detección de somnolencia basado en procesamiento de imágenes
Mediante el procesamiento de imágenes la detección de somnolencia se puede clasificar en 2
grupos basados en el espectro de luz que se trabaje, el cual es condicionado por el ambiente en el
que se implementa la aplicación, con esto se tienen la detección de somnolencia en el espectro
visible, y la detección de somnolencia en el espectro invisible.
Para la implementación de alguno de los anteriores enfoques se debe seleccionar adecuadamente
el hardware a implementar para realizar la adquisición de imagen. Para trabajar en el espectro de
luz visible se usa una cámara convencional, y para el espectro invisible una cámara infrarroja.
Debido a que para el proyecto se implementará como dispositivo de adquisición de imagen la
cámara convencional integrada en los teléfonos móviles, los algoritmos propuestos están enfocados
para el funcionamiento de la aplicación en ambientes de iluminación diurna.
Para la selección de algoritmo que se adapte a los requerimientos propuestos, se realiza la
subdivisión del sistema total en 4 etapas las cuales se pueden ver en la Figura 8
Figura 8: Etapas del algoritmo para detección de somnolencia
31
Detección de Rostro: Esta etapa busca disminuir los tiempos de procesamiento y darle una mayor
eficiencia al algoritmo, esto debido a que inicialmente se hace una detección del rostro sobre la
imagen capturada, con la finalidad de determinar el inicio del algoritmo y por consiguiente un
análisis de la imagen, además permite extraer de la imagen un área de interés lo que disminuye
tiempos de procesamiento y garantiza la existencia de una zona ocular aumentando la eficiencia del
aplicativo.
Detección de Ojos: Esta etapa es la encargada de localizar la posición de los ojos en el rostro, para
ello como zona de detección, se implementa la región de interés del rostro localizada en la etapa
anterior. Esto se hace con la finalidad de disminuir el área de detección del algoritmo a implementar
lo cual optimiza tiempos de procesamiento y evita la aparición de falsos positivos que se pueden
presentar por la presencia de regiones de fondo con características similares a los ojos.
Detección de parpadeo: Esta etapa podría considerarse como la más importante del algoritmo ya
que es la que marca la pauta de la presencia o no de somnolencia, se caracteriza por determinar si
la zona ocular presenta los ojos cerrados o abiertos cabe resaltar que debe tener un alto nivel de
precisión ya que es la que determina la eficacia del algoritmo.
Detección de somnolencia: Esta etapa es la encargada de estimar si hay presencia de somnolencia,
para lo cual, mediante el análisis del tiempo de permanencia de los ojos en los dos estados obtenidos
anteriormente, y atendiendo a parámetros de frecuencia de parpadeo de los ojos, se puede obtener
un estimado fiable del nivel de somnolencia.
Con base en las 4 etapas descritas con anterioridad, se seleccionaron algoritmos a implementar por
cada una de estas, quedando de la forma ilustrada en la Figura 9.
Figura 9: Métodos de detección
6.1.1 Métodos detección de rostro
Viola Jones: El algoritmo de viola jones mediante la implementación de características tipo Haar y
el uso de clasificadores en cascada permite realizar la detección del rostro. La librería Opencv
integrada en el software Android Studio cuenta con una la función CascadeClassifier la cual permite
32
realizar la detección de diferentes objetos mediante VJ, para ello se debe realizar el entrenamiento
de algoritmo en dependencia del objeto o característica a detectar. Con la implementación de un
entrenador de rostros frontales, la funciona CascadeClassifier permite estimar la localización de un
rostro, dando como parámetros, las coordenadas de una región rectangular en la cual está
contenido el rostro detectado.
HOV: Mediante la implementación del algoritmo Histogram of oriented Gradients (HOG) es posible
realizar la detección del rostro en una imagen, para ello se implementó la librería Dlib, la cual
mediante la función face_detect permite realizar la localización de rostro, devolviendo las
coordenadas de una región rectangular en la cual está contenido este.
6.1.2 Métodos detección de ojos
Viola Jones: Utilizando la misma metodología que para la detección del rostro es posible detectar
la zona ocular por medio de un entrenador de ojos, no obstante, para aumentar su precisión se hace
sobre un ROI (Region de interes) arrojado por un detector de rostros
Landmarks: Se realizó la localización de los ojos mediante la implementación de un algoritmo
provisto por la librería Dlib para hallar Landmarks faciales. Debido a que este tipo de algoritmo es
de aprendizaje supervisado, necesita para ser entrenado un archivo que se genera mediante una
extensa base datos de rostros con los puntos de interés clasificados, este archivo puede variar en
dependencia de la cantidad de Landmarks a detectar, para la aplicación realizada se implementó un
entrenador para detectar 68 puntos faciales.
Gracias a los 68 puntos que se generan sobre el rostro es posible seleccionar solo los pertenecientes
a la zona ocular los cuales se encuentran comprendidos entre los puntos 36 al 47 conformando un
total de 12 puntos 6 por cada ojo.
6.1.3 Métodos detección parpadeo
Densidad de Pixeles: Por medio de la ROI del área de los ojos se crea una nueva imagen, la cual se
binariza para realizar un análisis de dicha zona con la finalidad de detectar diferencias entre ojos
cerrados y abiertos basándose en la cantidad de pixeles por área y poder detectar la presencia de
ojos cerrados y por consiguiente somnolencia.
Viola Jones por ausencia de detección: Es posible determinar si los ojos se encuentran abiertos o
cerrados, utilizando entrenadores de detección de ojos en serie, donde el primero se caracteriza por
detectar los ojos independientemente si se encuentran cerrados o abiertos y el segundo solo es
capaz de detectarlos cuando se encuentran abiertos, por consiguiente si los dos detectores detectan
la presencia de ojos se considera que lo ojos se encuentran abiertos caso contrario los ojos se
encuentran cerrados.
33
Índice EAR: se utiliza para calcular la relación de distancias entre los puntos de referencia verticales
del ojo y las distancias entre los puntos de referencia horizontales del ojo permitiendo detectar el
estado de los ojos, es decir si se encuentran abiertos o cerrados. Para la implementación de este
método es necesario haber realizado previamente la localización de los ojos mediante Landmarks
Figura 10: Detección de Parpadeo por medio del índice EAR
Para hallar la relación de aspecto primero se hallan las distancias euclidianas entre los puntos
(𝑃2, 𝑃6 ) (𝑃3, 𝑃5) (𝑃1, 𝑃4), ver Figura 10.
A=√(𝑃2(𝑥) − 𝑃6(𝑥)) 2 + (𝑃2(𝑦) − 𝑃6(𝑦)) 2
B=√(𝑃3(𝑥) − 𝑃5(𝑥)) 2 + (𝑃3(𝑦) − 𝑃5(𝑦)) 2
C=√(𝑃1(𝑥) − 𝑃4(𝑥)) 2 + (𝑃1(𝑦) − 𝑃4(𝑦)) 2
EAR=𝐴+𝐵
2𝐶
Método detección de Somnolencia (PERCLOSE): Es el método más común, más eficiente y de fácil
implementación para la detección de somnolencia, se caracteriza por determinar un porcentaje de
ojos cerrados mediante la relación de una cantidad de fotogramas determinados y la cantidad de
fotogramas en los cuales se presentan ojos cerrados (ver sección 5.5).
34
6.1.4 Integración de los algoritmos
A continuación, se muestra en la Figura 11, un esquema general de la integración de las 4 etapas
implementadas, en donde se ilustra los parámetros obtenidos de cada tapa, independiente del
algoritmo a implementar en cada una estas.
Figura 11: integración de las 4 etapas de detección
6.1.5 Configuraciones Desarrolladas
Para poder determinar el método más eficaz para la detección de somnolencia, fue necesario
implementar los métodos anteriormente mencionados y analizarlos.
Por lo cual se implementaron las siguientes 3 configuraciones
6.1.5.1 Configuración 1
Figura 12: Diagrama de la configuración 1 para detección de somnolencia
Los resultados de esta configuración se muestran en la sección 7.1
35
6.1.5.2 Configuración 2
Figura 13: Diagrama de la configuración 2 para detección de somnolencia
Los resultados de esta configuración se muestran en la sección 7.1.2
6.1.5.3 Configuración 3
Figura 14: Diagrama de la configuración 3 para detección de somnolencia
Los resultados de esta configuración se muestran en la sección 7.1.3
6.2 Diseño de algoritmo que permita detectar somnolencia utilizando el método
escogido anteriormente, tomando en cuenta, pruebas con diferentes individuos y
tiempos de procesamiento de la imagen.
Gracias a los resultados obtenidos se determinó que el método más conveniente para detectar
somnolencia fue por medio de Landmarks se optó por seleccionar este, por lo que fue necesario el
uso de CMake y una clase nativa para poder hacer uso de la librería Dlib y posteriormente disminuir
su tiempo de procesamiento optimizando algunas de las líneas que presentaran mayor tiempo de
procesamiento.
Por medio de depuración del código fue posible observar que las líneas que presentaban mayor
tiempo de procesamiento, eran aquellas que cargaban los entrenadores
get_frontal_face_detector() y shape_predictor_68, las cuales se ejecutaban de manera continua
dentro del código, por lo cual se decidió cargar estos entrenadores una única vez durante el inicio
de la aplicación, esto fue posible ya que son elementos que no se modifican dentro del algoritmo,
no obstante esto conllevó a que se presentara un tiempo de carga al inicio del aplicativo de unos
cuantos segundos, pero gracias a ello se disminuyó el tiempo de procesamiento en un 50%
Si bien el tiempo de procesamiento disminuyó considerablemente (dispositivo de pruebas de 20s a
10s) aún no era suficiente para la detección de somnolencia, una de las soluciones encontradas fue
la activación del modo “Release” que se encuentra deshabilitado en la herramienta de desarrollo
36
del aplicativo, lo que conllevó a una disminución del 70% en el tiempo de procesamiento (3s en el
dispositivo de pruebas).
Posteriormente para disminuir aún más el tiempo de procesamiento se notó que el uso del
entrenador de la librería Dlib “get_frontal_face_detector()” sobre la imagen, presentaba un tiempo
de procesamiento significativo por lo que se optó por reemplazar este método de detección de
rostro por el de OPENCV y su entrenador “haarcascade_frontalface_alt” y modificar las
coordenadas de ROI generadas por este, con la finalidad de hacer dichas coordenadas compatibles
con el entrenador shape_predictor_68 para poder generar los Landmarks y por consiguiente el
estado de los ojos esto permite una reducción del tiempo de procesamiento entre 125ms a 137ms.
Finalmente, la configuración utilizada se ve en la Figura 15.
Figura 15: Diagrama configuración final
6.2.1 Metodología de la configuración utilizada
La metodología seguida para la realización del proyecto fue la siguiente:
1. Detección de rostro.
2. Detección de Landmarks
3. Hallar relación de aspecto de los ojos (EAR)
4. Detectar somnolencia
5. Generar alarma sonora
6.2.1.1 Detección del Rostro
Esta etapa es la encargada de reconocer el rostro presente en la imagen, para ello de uso el
algoritmo de VJ con ello se obtiene los puntos pertenecientes de la región de interés en donde
se encuentra el rostro:
𝑥, 𝑦, ℎ, 𝑤 = 𝑓𝑎𝑐𝑒(𝐺𝑟𝑎𝑦𝐼𝑚𝑎𝑔𝑒)
Donde:
𝐺𝑟𝑎𝑦𝐼𝑚𝑎𝑔𝑒=Imagen de entrada en escala de grises de dimensión 𝑛𝑥𝑚
𝑥=Punto en el eje x del recuadro del rostro detectado.
𝑦=Punto en el eje y del recuadro del rostro detectado.
ℎ= alto del rectángulo
𝑤=Ancho del rectángulo
37
6.2.1.2 Detección de Landmarks
El algoritmo para detectar los Landmarks se aplica sobre la región de interés encontrada 68
puntos que delimitan el rostro, ojos, cejas, nariz y boca:
{𝑃1, 𝑃1, 𝑃3, . . . 𝑃68} = 𝐿𝑎𝑛𝑑𝑎𝑚𝑎𝑟𝑘𝑠𝐷𝑒𝑡𝑒𝑐𝑡 (𝑓𝑎𝑐𝑒)
𝑃𝑛 = (𝑥, 𝑦)
Donde:
𝑃𝑛=Coordenada 𝑥, 𝑦 de los puntos detectados
𝑓𝑎𝑐𝑒= Región de interés (rostro)
6.2.1.3 Detectar Somnolencia
Teniendo el valor del EAR promediado de ambos, se establecen los valores del EAR que corresponda
a cuando los ojos están abiertos y cerrados, estos valores se hallaron experimentalmente
obteniéndose un valor de 0.31 y 0.11 respectivamente el cual puede variar en dependencia del
sujeto. Por tal motivo se integraron dos botones del aplicativo para calibrar esta variable en
dependencia del sujeto
Para detectar el cierre de los ojos se comparó el número de fotogramas donde el valor EAR era
menos a “EAR ojos cerrados establecido” + 0.02(tolerancia) y para el caso contrario para detectar
ojos abiertos “EAR ojos abiertos establecido”−0.02(tolerancia)
Finalmente, para el cálculo del PERCLOS se usaron 10 fotogramas con los datos obtenidos del
PERCLOS se generó una escala de nivel de somnolencia de 0% a 100%, donde al llegar a un nivel de
somnolencia de 80% se genera una alarma sonora que solo se detiene cuando el nivel de
somnolencia esta por debajo de 50%.
Otro aspecto a resaltar es la inclusión de una advertencia visual que indica si existe un
reconocimiento facial
Gracias a ello se obtuvo un aplicativo móvil que detectaba el estado de los ojos en tiempo real y por
consiguiente la detección de somnolencia basándose en el índice EAR y PERCLOS.
En la sección 7.2 se analizan los resultados obtenidos de la configuración utilizada.
6.2.2 Requerimiento de la aplicación Los dispositivos móviles requieren de los siguientes requisitos mínimos para ejecutar la aplicación:
● Cámara frontal mínimo 5 megapíxeles
● Android 4.0 o superior
● Espacio de almacenamiento disponible de 300mb
● Aplicación OpenCV Manager v3.3
● archivo (shape_predictor_68_face_landmarks.dat) en la ruta raíz de memoria interna del
celular /storage/emulated/0/
38
● Procesador Quad Core 1.4Ghz
● Ram de 2Gb
6.3 Diseño de interfaz gráfica de usuario que permita visualizar el funcionamiento del
algoritmo, y realizar pruebas y ajustes de calibración a conveniencia del usuario.
La interfaz gráfica de usuario desarrollada se caracteriza por ser de fácil uso y su principal finalidad
es indicar el funcionamiento del aplicativo y la calibración de algunos parámetros como se observa
en la Figura 16, la interfaz cuenta con los siguientes elementos.
Figura 16: Interfaz del aplicativo
1. Zona de video: Esta zona se caracteriza por brindar en tiempo real la imagen capturada de
la cámara frontal en tiempo real, además de dibujar los Landmarks de la zona ocular cuando
hay un rostro detectado
39
2. EAR medido: indica el nivel de EAR medido en tiempo real de la zona ocular cuando hay
presencia de un rostro en la imagen
3. Nivel de somnolencia: indica el nivel de somnolencia del individuo y consta de 2 indicadores
uno numérico y uno tipo “Barra de Progreso” estos presentan un rango establecido por los
desarrolladores de 0% a 100%. Este nivel se caracteriza por ir en aumento cada vez que el
individuo cierra los ojos y disminuir cuando abre los ojos, por lo cual si existe mayor cantidad
de fotogramas donde el individuo presenta los ojos cerrados habrá un aumento del nivel de
somnolencia, que al llegar a un nivel de 80% disparará una alarma tipo sonora, la cual solo
se detendrá cuando el sujeto entre en estado de alerta y el nivel de somnolencia esté por
debajo de 50%
4. Botones de Calibración EAR: Debido a que no todas las personas presentan las mismas
características de la zona ocular se implementaron 2 botones “Calibrar Ojos abiertos” y
“Calibrar ojos Cerrados” donde al ser presionados establecen un nuevo valor de EAR de ojos
abiertos y cerrados, con la finalidad de que el aplicativo se auto-ajuste para detectar
somnolencia independientemente del individuo
5. Indicador de Calibración: Indican los valores de EAR establecidos para ojos abiertos y
cerrados
6. Indicador de detección de Rostro: Mensaje de advertencia que indica que si existe o no la
presencia de un rostro
7. Nivel de Luz: indica los rangos de operación de lux en que funciona el aplicativo y el nivel
de lux medido en tiempo real por el dispositivo móvil
6.4 Realizar pruebas objetivas del sistema para determinar su rendimiento frente a
condiciones de iluminación posición y características del individuo. Finalmente, con un algoritmo funcional se procedió a realizar las pruebas de posición, iluminación
y características faciales de diferentes individuos con la finalidad de determinar los parámetros de
funcionamiento del algoritmo y sus limitaciones. Se realizaron pruebas en un grupo de 10 individuos,
de rasgos distintivos como, género, color de piel, barba y accesorios presentes en los rostros. Los
datos obtenidos se pueden observar en la tabla 6, presente en la sección 7.4 de análisis de
resultados.
40
7 Análisis de resultados
A continuación, se muestran los resultados obtenidos organizados del siguiente modo: En la primera
parte de muestran los resultados obtenidos de las pruebas realizadas para los 3 primeros aplicativos
desarrollados, se analizó qué configuraciones presentan el funcionamiento más óptimo. En la
sección 7.2 se muestran los resultados obtenidos de la aplicación final realizada en donde se realiza
una descripción de las pruebas de rendimiento implementadas.
7.1 Métodos de detección de somnolencia Para evaluar el funcionamiento de los algoritmos implementados, se estimaron parámetros como
tiempos de procesamiento, parpadeos detectados y falsas detecciones.
7.1.1 Configuración 1 Los resultados obtenidos al realizar el aplicativo móvil en base a la configuración seleccionada se
muestran en la Figura 17 y Figura 18, en donde la detección del rostro se encuentra resaltada en un
rectángulo verde, y la zona ocular detectada en una elipse roja.
Figura 17 Funcionamiento de la configuración 1 ojos cerrados
41
Figura 18: Funcionamiento de la configuración 1 ojos abiertos
Para las pruebas de los métodos solo se tomó en cuenta la detección de parpadeos ya que dentro
esta se engloba el comportamiento de todo el sistema, en la Tabla 1 se encuentran los resultados
obtenidos.
Tabla 1: Resultados Obtenidos de la configuración 1
Parpadeos generados 50
Parpadeos Detectados 8
Falsos Positivos 3
Tiempo de procesamiento 60 ms
Se evidenció que el funcionamiento de el algoritmo no cumplía con los requerimientos deseados,
en base a la tabla se puede estimar que la eficiencia de detección de parpadeos es del 16%, y esto
se dio a que el método de detección de parpadeo implementado (densidad de pixeles), es muy
sensible a cambios en las condiciones de iluminación. Por esta razón esta configuración fue
descartada.
7.1.2 Configuración 2 En la Figura 19 se muestran los resultados obtenidos al realizar una aplicación implementando la
configuración 2 (ver sección 6.1.5.2). En color verde se encuentra resaltado el rostro localizado, el
42
rectángulo rojo se resalta la subregión del rostro de delimita la zona de los ojos, y el azul de tiene la
ubicación exacta de los ojos detectados.
Figura 19: Funcionamiento de la configuración 2
En la Tabla 2 se muestran la prueba realizadas, en donde se puede estimar que el rango de detección
de parpadeos es aproximado al 70%.
Tabla 2: Resultados Obtenidos de la configuración 2
Parpadeos generados 50
Parpadeos Detectados 35
Falsos Positivos 20
Tiempo de procesamiento 83 ms
EL método implementado presenta un funcionamiento aceptable, comparándolo con el anterior.
Las desventajas de este son que su correcto funcionamiento depende de la alineación del rostro con
la cámara y de la permanencia de la imagen sin variaciones bruscas de movimientos, si estas
condiciones no se cumplen, el aplicativo presenta un funcionamiento que no cumple con los
requerimientos planteados. Debido a lo anterior esta configuración fue descartada.
7.1.3 Configuración 3 En la Figura 20(a)se muestran los resultados obtenidos al realizar una aplicación implementando la
configuración 3 (ver sección 6.1.5.3 ). En color verde se encuentran resaltados los puntos de
43
Landmarks generados por la librería Dlib por medio de los entrenadores get_frontal_face_detector
() y shape_predictor_68 el primero para detectar la localización del rostro, y el segundo para generar
los 68 puntos principales sobre el rostro.
En la Figura 20 (b) se encuentra la unión de un rango de puntos Landmarks del 36 al 47 conformando
un conjunto de 12 puntos, 6 por cada ojo, permitiendo un dibujo de la zona ocular y por consiguiente
un análisis más preciso.
Figura 20: Funcionamiento de la configuración 3
(a) 68 puntos de referencia Landmarks
(b) Unión de puntos de la zona ocular
Tabla 3: Resultados Obtenidos de la configuración 3
Parpadeos generados 50
Parpadeos Detectados 48
Falsos Positivos 1
Tiempo de procesamiento
20s
44
Como se observa en la Tabla 3 anterior este método presenta mayor precisión que los métodos
anteriores, el falso positivo que se presentó fue debido a un nivel de lux muy bajo, y los parpadeos
no detectados fue debido a niveles de luz muy altos, por lo cual es necesario establecer los rangos
de lux de funcionamiento.
Pese a esto, este método presenta dos grandes inconvenientes el primero es que la librería Dlib no
esta implementada para java lenguaje de programación de Android Studio y el segundo es que
conlleva tiempos de procesamiento altos, llegando hasta los 20 segundos en el dispositivo utilizado
para la prueba, haciendo del método eficaz pero ineficiente para la detección de somnolencia en
tiempo real.
7.2 Configuración implementada y resultados obtenidos En la Figura 21,Figura 22, y Figura 23 se observan los resultados obtenidos de la versión final de la
aplicación para detectar somnolencia en diferentes sujetos. La descripción del desarrollo del
aplicativo se encuentra en la sección 6.2.
Figura 21: Funcionamiento de la configuración final
45
Figura 22: Funcionamiento de la configuración final
Figura 23: Funcionamiento de la configuración final
Análisis: Como se observa en las diferentes pruebas el aplicativo es indiferente a las características
del sujeto siempre en cuando no se obstruya la zona ocular con cabello u otro objeto, no obstante,
cabe resaltar que en presencia de gafas transparentes puede haber un funcionamiento del aplicativo
con algunas dificultades por lo cual no es recomendable para conductores con gafas.
46
Con respecto al nivel de luz se observó que por debajo de 25 lux se presentaba un funcionamiento
inestable por lo que se recomienda el uso del aplicativo por encima de los 40 lux tomando en cuenta
que el rostro debe estar sometido a una luz uniforme (evitar sombras del rostro).
7.3 Pruebas objetivas del aplicativo. Las pruebas de la aplicación se realizaron en un vehículo particular con ambiente de iluminación
diurno. Se implementaron dos ubicaciones del teléfono móvil, para el óptimo funcionamiento de la
aplicación, como se pueden ver en la Figura 24.
Figura 24: Ubicaciones utilizadas para las pruebas del aplicativo (a) Ubicación Frontal (b) Ubicación Lateral
47
En la Figura 25 y Figura 26 se muestra ejemplos de funcionamiento de la aplicación en diferentes
sujetos. Para la Figura 25(a) y Figura 26(a), se tiene la aplicación funcionando en la posición frontal
y para la Figura 25(b) y Figura 26(b), se tiene el teléfono móvil ubicado de forma lateral.
Figura 25: Funcionamiento del aplicativo en diferentes posiciones sujeto 1 (a) Funcionamiento en posición frontal (b) Funcionamiento en posición lateral
Figura 26: Funcionamiento del aplicativo en diferentes posiciones sujeto 2 (a) Funcionamiento en posición frontal (b) Funcionamiento en posición lateral
48
Análisis: En las figuras anteriores se observa el funcionamiento de la aplicación en diferentes
posiciones y diferentes individuos donde el aplicativo logró un nivel de detección de somnolencia
del 94% y un tiempo de respuesta bastante corto como se observa en la Tabla 4.
Tabla 4: Resultados Obtenidos de la configuración final
Pruebas realizadas en diferentes individuos 50
Detección de somnolencia 47
Falsos positivos 0
Tiempo de detección entre 1,28s a 3s
7.4 Casos de no detección o mal funcionamiento
A continuación, se muestran ejemplos en donde la aplicación no presenta un funcionamiento
adecuado.
Figura 27: Funcionamiento del aplicativo en sujetos con gafas
Análisis: Como se observa en la Figura 27 el aplicativo puede funcionar con usuarios con gafas no
obstante pueden presentarse errores de no detección de rostro o no detección de somnolencia,
cuando las estructuras son no transparentes y o brillos sobre los lentes obstaculizan la zona ocular
impidiendo un buen funcionamiento del aplicativo.
49
Figura 28: Falsa detección de rostro
En la Figura 28 se sucede observa una falsa detección las cuales se dan debido a una errónea
detección del rostro, en las pruebas realizadas se obtuvo un 0.5% de detección de falsos positivos.
Figura 29: No detección de Rostro, por rostro incompleto
50
En la Figura 29 se observa un caso en el cual el aplicativo no consigue detectar el rostro ya que parte
de este no se encuentra dentro de la imagen, para ello es de vital importancia ubicar el teléfono
móvil de manera correcta.
Figura 30: No detección de Rostro, por rostro orientado de perfil
En la Figura 30se observa la no detección de rostro cuando existe presencia de este, esto se da
debido a la orientación del rostro ya que el aplicativo presenta inestabilidad cuando el rostro se esta
de perfil
Figura 31: Funcionamiento del aplicativo a diferentes condiciones de luz
51
En la Figura 31 se observa un rostro sometido ambientes de iluminación variados para estimar el
rango de iluminación en el cual la aplicación operará dentro de parámetros establecidos, después
de varias pruebas se determinó que el aplicativo presenta un funcionamiento óptimo entre los 40 y
100 lux los cuales preferiblemente deberían estar distribuidos sobre todo el rostro.
Gracias a las pruebas anteriores se establecieron los rangos de funcionamiento del aplicativo en la
Tabla 5
Tabla 5: Rangos de funcionamiento del aplicativo
Distancia máxima del rostro al dispositivo 60 cm
Posición (x) del dispositivo con respecto al rostro frontal
entre -20° y 20°
Posición (y) del dispositivo con respecto al rostro frontal
entre -10° y 10°
Nivel de luz entre 40 lux y 100 lux
Funcionamiento con gafas u otro elemento sobre el rostro
No aplica
7.5 Pruebas realizadas en sujetos de diferentes características
En Tabla 1 se pueden observar los resultados de detección de somnolencia en sujetos con diferentes
características bajo los rangos de funcionamiento del aplicativo.
Tabla 6: Resultados pruebas en sujetos con diferentes rasgos
Sujeto Características Detección de somnolencia
Detectados No detectados Falsos positivos
1 Hombre, sin barba, piel clara, sin parpados caídos
20 0 0
2 Hombre, con barba, piel morena, sin parpados caídos
19 1 0
3 Mujer, piel clara, con parpados caídos
19 1 1
4 Hombre, con barba, piel oscura, sin parpados caídos
20 0 0
52
Análisis
Según las pruebas realizadas se estimó que la aplicación presenta un comportamiento eficiente en
individuos de diferentes rasgos físicos, se estimó que la eficiencia en la detección de somnolencia
es de aproximadamente 94.5%, lo cual hace al aplicativo desarrollado funcional en entornos de
aplicación reales.
7.6 Resumen de resultados
Se obtuvo un aplicativo capaz de detectar somnolencia por medio del algoritmo de viola jones para la detección de rostro, Landmarks para la detección de ojos, índice EAR para detección de parpadeo y PERCLOS para detección de somnolencia. Para permitir su funcionamiento independientemente de las características del sujeto se realizó una interfaz que permite la calibración y la visualización del funcionamiento del aplicativo. Por medio de las pruebas realizadas se establecieron unos rangos de funcionamiento de la aplicación como se muestra en la Tabla 5 y unos requisitos de hardware mínimos establecidos en la sección 6.2.2 probados en un HUAWEI y5 2017, y un Lenovo A6020I36.
Dichas condiciones dieron una velocidad de procesamiento de 135ms permitiendo una detección de somnolencia en tiempos entre 1 y 3 segundos finalmente se obtuvo una eficacia del 94.5% en un grupo de 10 sujetos con diferentes características faciales.
5 Mujer, con fleco, piel clara, con parpados caídos
18 2 0
6 Hombre asiático, sin barba
17 3 2
7 Hombre con parpados caídos, piel clara
18 2 0
8 Hombre con bigote, piel clara
20 0 0
9 Mujer, sin parpados caídos, sin fleco
20 0 0
10 Mujer, parpados caídos, piel oscura, con fleco
18 2 1
53
8 Conclusiones
Por medio de técnicas de procesamiento digital de imágenes se logró realizar un aplicativo móvil que, mediante la detección del rostro y el posterior análisis de la zona ocular, logra detectar el estado de somnolencia de conductores en ambiente diurno, bajo ciertos parámetros.
De las 3 configuraciones implementadas, la que presentó un mejor comportamiento fue en la cual se utilizó para la detección de rostro el algoritmo de Viola Jones, la detección de los ojos por Landmarks, los parpadeos mediante EAR y la detección de somnolencia por medio de PERCLOS, fue la configuración en la cual se pudo evidenciar un comportamiento óptimo para la detección de somnolencia en las condiciones preestablecidas.
El desarrollo de aplicaciones para teléfono móvil que impliquen procesamiento digital de imágenes, tienen que ser diseñadas con especial cuidado, debido a que si bien los celulares actuales cuentan con requerimientos de hardware más que suficientes para ejecutarlas como por ejemplo memoria Ram mayor a 1Gb, procesadores Dual Core o superiores, el mal desarrollo de algoritmos, manipulaciones complejas de imágenes mal implementadas entre otros factores, pueden influir en el funcionamiento de la aplicación, disminuyendo la cantidad de fotogramas por segundo durante la ejecución, lo cual implica que la aplicación sea ineficiente si se requiere que funcione a tiempo real.
Las técnicas de procesamiento digital de cuya aplicación requiera estar expuestas a entornos de aplicación no controlados, con ambientes de iluminación variables entre (40 a 100) lux y patrones de imágenes con alto grado de complejidad como objetos de diferentes formas tamaños y colores, presentan un funcionamiento robusto al desarrollarse con técnicas de procesamiento basadas en algoritmos de aprendizaje automático, cuyo funcionamiento está ligado a un entrenamiento previo.
Otro aspecto a resaltar es que, al reducir el área de detección de somnolencia a solo la región de interés del rostro, ayuda a que el algoritmo sea más selectivo, disminuyendo el tiempo de procesamiento en aproximadamente 50%, ya que el área a analizar es mucho menor y se garantiza la existencia de una zona ocular.
54
9 Trabajo futuro
Como aspectos por mejorar de la aplicación móvil desarrollada se tiene la implementación de un entrenador propio para la detección del rostro, el cual permita la detección de este con ángulos de inclinación mayores a 20°, y disminuir tiempo de procesamiento por fotograma a menos de 100ms mediante la detección de solo los 12 Landmarks pertenecientes a los ojos, es decir desarrollar un entrenador que permita esto. Otro aspecto por trabajar es mejorar los requerimientos previos para instalar la aplicación, es decir dejar de usar Opencv manager, e integrar el entrenador (shape_predictor_68_face_landmarks.dat directamente en la aplicación.
Añadiendo a esto, actualmente los celulares de última generación cuentan con una cámara infrarroja lo que permitirá trabajar sobre el espectro invisible de una imagen y por consiguiente quitar las limitaciones de luz volviendo el algoritmo anterior mucho más eficiente y versátil.
Otro aspecto por mejorar es la optimización de la aplicación para que funcione en usuarios que tengan gafas de fórmula u otros elementos que dificulten la detección de la zona ocular.
55
10 BIBLIOGRAFÍA
[1] R. T. ]. Roehrs T, Carskadon MA, Dement WC, “Daytime Sleepiness and alertness,” Princ. Pract. Sleep Med., vol. 4Th, pp. 39–49, 2005.
[2] P. H. C. GÓMEZ, “Que no lo agarre un microsueño,” Bogota, 14-Oct-2017.
[3] N. Caracol, “Microsueños causan imprevistos accidente,” 2017.
[4] Carlos Francisco Fernández R., “Microsueños: la muerte puede llegar en un parpadeo,” El tiempo, 2018. [Online]. Available: https://www.eltiempo.com/vida/salud/peligros-de-los-microsuenos-cuando-se-esta-manejando-308310. [Accessed: 09-Apr-2019].
[5] Q. Liao, J. Hong, and M. Jiang, “A comparison of edge detection algorithm using for driver fatigue detection system,” ICIMA 2010 - 2010 2nd Int. Conf. Ind. Mechatronics Autom., vol. 1, pp. 80–83, 2010.
[6] F. D. Gao and M. X. Hou, “Study on the detection of locomotive driver fatigue based on image,” ICCET 2010 - 2010 Int. Conf. Comput. Eng. Technol. Proc., vol. 7, pp. 612–615, 2010.
[7] P. Chen, “Research on Driver Fatigue Detection Strategy Based on Human Eye State,” pp. 619–623, 2017.
[8] H. Singh, J. S. Bhatia, and J. Kaur, “Eye tracking based driver fatigue monitoring and warning system,” India Int. Conf. Power Electron. IICPE 2010, 2011.
[9] X. Luo, R. Hu, and T. Fan, “The Driver Fatigue Monitoring System Based on Face Recognition Technology,” no. 45, pp. 384–388, 2013.
[10] R. Ahmed and M. F. Hossain, “Robust driver fatigue recognition using image processing,” 2014 Int. Conf. Informatics, Electron. Vis., pp. 1–6, 2014.
[11] M. S. Devi, “Driver Fatigue Detection Based on Eye Tracking,” pp. 649–652, 2008.
[12] H. Dong and M. E. I. Xie, “REAL-TIME DRIVER FATIGUE DETECTION BASED ON SIMPLIFIED LANDMARKS OF AAM,” no. d, pp. 5–8, 2010.
[13] T. Xinxing, Z. Pengfei, and W. Ping, “Real-Time Image-based Driver Fatigue Detection and Monitoring System for Monitoring Driver Vigilance,” pp. 4188–4193, 2016.
[14] C. Science and C. Science, “Android OpenCV Based Effective Driver Fatigue and Distraction Monitoring System,” pp. 262–266, 2015.
[15] J. Guevara-d, “Deteccion de Rostros por medio de las Wavelets de Morlet.”
[16] D. Alberto and G. Juan, “Algoritmos de detección y seguimiento de rostro dirigidos a videojuegos,” vol. 1, no. 1, pp. 1–7, 2016.
[17] C. Society, “IEEE Standard Glossary of Image Processing and Pattern Recognition Terminology.”
[18] R. J. Moreno, “SISTEMA DE DETECCION DE NIVEL DE CANSANCIO EN CONDUCTORES MEDIANTE TECNICAS DE VISION POR COMPUTADOR,” 2011.
56
[19] F. Detection, D. Images, and U. Cascade, “Faces Detection in Digital Images Using Cascade Classifiers,” no. 38, pp. 1–6, 2008.
[20] V. Kazemi and J. Sullivan, “One Millisecond Face Alignment with an Ensemble of Regression Trees.”
[21] E. G. Wiechers, “Oftamologia en la practica de medicina general.” Mc Grau Hill Educcion, 2009.
[22] J. Mw, “The Amplitude-Velocity Ratio of Blinks : A New Method for Monitoring Drowsiness Aim : Methods : Results :,” 2003.
[23] O. Of and M. Carriers, “PERCLOS : A Valid Psychophysiological Measure of Alertness As Assessed by Psychomotor Vigilance.”
[24] “Formatos de imagen, audio y video,” 2012. [Online]. Available: http://www.ite.educacion.es/formacion/materiales/155/cd/pdf/04_video.pdf.
[25] C. S. Figueroa Portilla, “El uso del smartphone como herramienta para la búsqueda de información en los estudiantes de pregrado de educación de una universidad de Lima Metropolitana,” Educ. Vol. 25, Núm. 49, 2016.
[26] C. A. Vanegas, “DESARROLLO DE APLICACIONES SOBRE ANDROID,” Rev. vínculos, vol. 9, no. 2 SE-Investigación y Desarrollo, Dec. 2012.
[27] “Conoce Android Studio | Android Developers.” [Online]. Available: https://developer.android.com/studio/intro?hl=es-419. [Accessed: 17-Aug-2019].
[28] “About.” [Online]. Available: https://opencv.org/about/. [Accessed: 17-Aug-2019].
[29] “dlib C++ Library.” [Online]. Available: http://dlib.net/. [Accessed: 17-Aug-2019].
[30] “CMake.” [Online]. Available: https://cmake.org/. [Accessed: 17-Aug-2019].
[31] “¿Qué es el lenguaje de programación JAVA? - Base de Conocimientos - ICTEA.” [Online]. Available: http://www.ictea.com/cs/knowledgebase.php?action=displayarticle&id=8790. [Accessed: 17-Aug-2019].
[32] “Lenguaje de Programación C++.” [Online]. Available: http://www.larevistainformatica.com/C++.htm. [Accessed: 17-Aug-2019].