Android Sistema para identificar condición de sueño

=Introducción=

Para mi proyecto de grado estuve trabajando en la implementacion de un sistema de reconocimiento de sueño en conductores de vehículos por medio de una cámara de video. La idea principal es que el sistema sea económico y confiable. Para la solución del problema nos enfocamos en el diseño de una aplicación para la plataforma de desarrollo Android y el uso de la librería para procesamiento de imágenes OpenCV. A continuación se presenta información más detallada del proyecto y los resultados obtenidos. También se presenta un tutorial que muestra los pasos requeridos para comenzar a desarrollar programas en la plataforma Android con el uso de las librerías de OpenCV.

En el siguiente video se muestran algunas funcionalidades básicas de OpenCV. Primero se adquiere la imagen en escala de grises, posteriormente se le aplica a la imagen la detección de bordes Canny y después la detección de bordes Sobel. Después se aplica un threshold Gaussiano y finalmente después de volver a mostrar la imagen en escala de grises se muestra la imagen al ecualizarla. Las imagenes fueron tomadas con un Samsung Galaxy Mini S5570.

1JsxpwHfdOs

=Sistema de reconocimiento de sueño en conductores de vehículos=

Los accidentes de tránsito son una de las principales causas de muerte no naturales en personas. Entre el 15% y 25% de estos accidentes se producen por fatiga o sueño en los conductores. Debido a esto algunas empresas en USA han sacado al mercado algunos dispositivos para la detección del estado de alerta del conductore mediante monitoreo visual de la cara del conductor. El problema de estos dispositivos es que tiene un costo elevado y no es utilzado por los conductores colombianos. En el siguiente link se muestra la información del proceso de diseño e implementación de un sistema de detección de sueño en conductores de vehículos que se baso en la plataforma Android y la librería OpenCV.

=Objetivos=

1.	Objetivo General

Diseñar, Implementar y validar un sistema de monitoreo de parpadeo de conductores de vehículos para la detección del nivel de alerta de conductores de vehículos.

2.	Objetivos Específicos


 * •	Realizar un estado del arte para identificar espacios originales de aporte en las técnicas y metodologías de detección de estados de alerta.


 * •	Diseñar un sistema acorde al espacio de aporte identificado.::


 * •	Evaluar y seleccionar las tecnologías disponibles con base a los indicadores de desempeño definidos para evaluar el aporte del diseño al estado del arte de detección de estados de alerta.


 * •	Posicionar el resultado obtenido, al comparar los resultados con los disponibles de otros sistemas que realicen una funcionalidad parecida.

3.	Especificaciones del sistema


 * •	El sistema debe hacer monitoreo sobre el estado del conductor en tiempo real.


 * •	El sistema de detección deberá ser no intrusivo y no deberá generar distracciones ni incomodidades al conductor.


 * •	El sistema deberá desactivarse cuando el conductor se despierte.

=Metodología y pruebas=

En principio se decidió que la detección del estado de alerta del conductor se realizaría mediante una cámara de video, debido a que a partir de las imágenes que esta adquiere se puede realizar una evaluación eficaz del estado del conductor. Además mediante este medio no se genera ninguna incomodidad al conductor. Después se definió que la evaluación del estado del conductor se realizaría unicamente a partir del parpadeo de la persona, debido a que el procesamiento de imágenes involucra mucho procesamiento y el parpadeo es suficiente para determinar si una persona se está quedando dormida.

Habiendo definido las características generales se procedió a evaluar las tecnologías disponibles para la implementación del sistema. Finalmente se decidió que la implementación del sistema como una aplicación para un teléfono inteligente era una muy buena opción, debido a que las capacidades de estos sistemas han mejorado muchísimo y además cuentan con la cámara para la detección de imágenes. En la siguiente figura se muestran algunos de los dispositivos embebidos que se pueden conseguir en el mercado.

Después se evaluó las tecnologías disponibles para la implementación del sistema



La idea que se tiene, es que el usuario descargue la aplicación a su teléfono inteligente y lo coloque en un soporte que se encontraría en el parasol del carro o en el techo.



Después se determino que la aplicación se diseñaría para la plataforma de Android debido a que presenta la siguientes características que la hacen apropiada para los objetivos del proyecto:


 * Código de la plataforma es abierto (open source)


 * Crecimiento como OS de dispositivos embebidos


 * Completo entorno de desarrollo de aplicaciones


 * Versión de OpenCV compatible con la API 2.2 o superior

Habiendo definido todas estas características se comenzó a trabajar en la instalación y configuración del entorno de programación. Aquí en la sección de tutoriales se muestra detalladamente todo el proceso de instalación tanto del entorno de programación de Android como de la librería OpenCV.

Las primeras pruebas de programación se realizaron en la starpad t 111. Los programas básicos y de acceso a la cámara funcionaron bien, pero hubo problemas cuando se quería realizar procesamiento a las imágenes. Antes de explicar los problemas hare un breve resumen de la estructura de las aplicaciones usadas que se basa en los ejemplos que vienen en la librería.

En la siguiente figura se muestra un resumen de la estructura general de las aplicaciones que toman imágenes de la cámara para realizar un procesamiento previo a mostrarlas en la pantalla. En android se usa la clase SurfaceView para poder interactuar con la pantalla y poder añadirle los objetos que uno desee como por ejemplo botones. En este caso nos interesa que en la pantalla se muestren las imágenes procesadas que se adquirieron de la cámara. Por esta razón se crea la clase VistaCamara (clase 3) que es derivada de la clase SurfaceView. Esta clase se encarga de abrir la cámara y de crear un thread de procesamiento de imágenes, para separar el procesamiento del thread que corre la aplicación. La clase VistaProcesamiento que es derivada de la clase VistaCamara se encarga de definir la función de procesamiento de imágenes además de incializar y destruir las matrices necesarias en el proceso.

En android cada aplicación debe tener como mínimo una actividad asociada que es la que en principio realiza las configuraciónes iniciales y tiene el control de la aplicación. La clase 1 es esta actividad y cuando se crea (onCreate) se programa para que configure como interfaz de usuario la VistaProcesamiento que como derivada de la 2 y de SurfaceView permite la addquisición, procesamiento y despliegue de imágenes en la pantalla.

Por último se tiene la clase 4 (FpsMeter) que se encarga de medir la tasa de frames por segundo (fps) procesados.



Debido a los problemas con la starpad se dicidió adquirir el Samsumg Galaxy Mini S5570 que demostró no tener problema en correr los programas que no funcionaron en la Tablet. A continuación se muestran las pruebas con algunos de los clasificadores disponibles en la librería OpenCV.







Debido a que con los clasificadores anteriores se tiene la posibilidd de detectar los ojos cuando están abiertos, se hizo necesario encontrar la forma de dieñar un método que permitiera verificar que si los ojos estaban cerrados, es porque efectivamente se encuentran cerrados y no porque no se detectaron con los clasificadores, como ocurre en algunas ocasiones (pocas). Se uso el método de threshold gaussiano que tiene la ventaja de operar muy bien bajo condiciones de luz variables, El método para identificar el estado del ojo es el siguiente.



=Aplicación final y resultados=

A partir de las herramientas anteriores se creó la aplicación que se encarga del sistema de detección. En la siguiente figura se muestra el diagrama de flujo de la aplicación.



En el siguiente video se muestra el funcionamiento de la aplicación bajo buenas condiciones de luz.

3h6EcopSFLU

=Trabajo futuro=

Para el mejoramiento de la aplicación se proponen los siguientes espacios de invesigación y desarrollo:


 * Estudiar formas en que se pueda operar en condiciones de luz limitadas.


 * Construcción de clasificadores LBP para detección de ojos abiertos y cerrados.


 * Identificar cansancio del conductor previo a que se quede dormido mediante factores como el movimiento de la cabeza o la velocidad de parpadeo.

=Conclusiones=

Los resultados obtenidos aunque no son perfectos demuestran la potencialidad que se tiene para el diseño de aplicaciones que requieran procesar imágenes y tengan recursos limitados mediante el uso de Android y OpenCV. Hay que recordar que ambos recursos están específicamente diseñados para consumir la menor cantidad de recursos, y esto se hace evidente, ya que es impresionante que se alcance a hacer todo el reconocimiento realizado en un dispositivo del tamaño de la mano y completamente portátil.