Algoritmo para la detección de mascarilla
En tiempos de Pandemia es recomendable el uso de mascarilla. Inicialmente OMS había recomendado que se utilizase únicamente para las personas enfermas, pero recientemente ha cambiado su posición y recomienda su uso mas generalizado. Por ese motivo me di a la tarea de poner a disposición de mis lectores el presente artículo que incluye un Algoritmo de Inteligencia Artificial para la detección del uso de la mascarilla en tiempo real, para épocas de Pandemia. Este algoritmo se puede instalar en un computador con una simple cámara web a la entrada de una oficina, de un comercio, de un sitio público o de cualquier sitio donde se quiere verificar el uso de este dispositivo de protección individual.
Algoritmos de aprendizaje profundo
Este algoritmo para la detección del uso de la mascarilla en tiempo real, esta elaborado utilizando herramientas de aprendizaje automático dentro de una disciplina que se conoce como Visión por computador. El objetivo es que la aplicación que contiene este algoritmo pueda detectar si una persona lleva no la mascarilla puesta. Algo que podría resultar para nuestro cerebro una tarea bastante simple, reviste de alguna complejidad, y lo hacemos utilizando una tecnología conocida como Aprendizaje Profundo (Deep Learning) donde resaltan las CNN. En términos de procesos primero enseñamos a nuestro algoritmo a que «aprenda» ( por eso se llama Inteligencia Artificial) y logre distinguir si lo que ve es una persona y luego si una persona lleva o no puesta la mascarilla. Como lo hace ? Esto se hace con imágenes o fotografías de personas con y sin mascarilla, luego de ver una y mil veces las imágenes nuestro sistema habrá capturado las características de las imágenes tal y como como lo explico de forma muy detallada en el artículo sobre las redes neuronales convolucionales .
Descripción del Proyecto:
Titulo: Sistema para la detección del uso de mascarillas faciales construido con OpenCV, Keras y TensorFlow utilizando conceptos de aprendizaje profundo (deep Learning) y visión por computadora a través de cámaras en tiempo real. Todas estas herramientas antes mencionadas fueron desarrolladas en su momento por Google, para mas información sobre estas, haga clic en este enlace
Plataformas empleadas:
Nuestro set de Datos:
Recordemos que vamos a utilizar un algoritmo de aprendizaje automático SUPERVISADO y por tanto nuestra red neuronal aprenderá de imágenes previamente etiquetadas donde ya se han clasificado «de previo» las características que a futuro vamos a querer que el algoritmo reconozca. Como lo hará ? Utilizando imágenes de personas con y sin mascarilla. Le diremos al algoritmos cuales imágenes tienen mascarilla y cuales no.
Este conjunto de datos consta de 3835 imágenes que pertenecen a dos clases:
- con mascarilla: 1916 imágenes
- sin mascarilla: 1919 imágenes
Las imágenes que utilizaremos son imágenes reales de rostros con y sin mascarilla. Las imágenes fueron recolectadas de las siguientes fuentes:
- API de Bing Search con este script se recolectan las imágenes de las web directamente, en este caso con el buscador de Microsoft «BING»
- Conjuntos de datos de Kaggle
Comencemos :
Vmos a crear en nuestro computador un ambiente de trabajo basado en el lenguaje Python. Además contaremos con un conjunto de programas y algoritmos previamente elaborados y un conjunto de datos (data set) que en su conjunto nos permitirá contar con nuestro sistema D detección de mascarillas
Plataforma principal
Puede descargar Python desde este enlace , también puede descargar el ambiente completo de de Anaconda que incluye Python y además es el ambiente preferido de los Científicos de Datos desde este otro enlace
Instalar el conjunto de programas y otros requisitos:
Sugerencia:
Haga un directorio dentro de su máquina Ej. detector de mascarillas
Descargue el conjunto de programas, modelos y datos del siguiente enlace
Una vez descargado el archivo puede extraer los diferentes archivos y carpetas con ayuda del programa Winzip ó Winrar
y deberá llegar a obtener una estructura de carpetas y archivos similar a ésta:
El primer paso es ingresar al Windows Power Shell ( Hágalo en modo administrador usando el clic derecho del ratón, para tener derechos de «Administrador» )
1.) PREPARACION DEL AMBIENTE VIRTUAL (esto se puede hacer desde Windows o desde Anaconda y Jupyter Notebook )
a.) Una vez instalado Python, proceda a crear un entorno virtual (por ejemplo a este entorno virtual, le llamaremos mascarilla )
Primero instalar la librería de ambientes ó entornos virtuales ( Virtual environments) «virtualenv» . Vaya a Windows PowerShell PERO asegúrese que está en el directorio donde descargó los programas , etc.) y ahora escriba los siguientes comandos:
pip install virtualenv, si recibe un mensaje de error es que aún su versión de Python no está debidamente instalada
y luego para crear el ambiente escribimos el comando: (aca le estoy poniendo al ambiente el nombre de «mascarilla»
Python -m venv mascarilla, ATENCION: Si está en Windows escriba el comando con la ruta completa por ejemplo:
Python3 -m venv /mascarilla/Scripts/activate De esta forma quedaría activado el ambiente virtual
verifique que el ambiente virtual se haya creado el directorio Scripts
Instalación de las librerías
Python es una plataforma modular y va a requerir de un conjunto de librerías adicionales para poder trabajar con este algoritmo.
Las librerías requeridas en este caso son estos con sus respectivas versiones son: ( La lista y versiones de estas librerías están en el archivo requirements.txt que usted ya descargó )
tensorflow>=1.15.2
keras==2.3.1
imutils==0.5.3
numpy==1.18.2
opencv-python==4.2.0.*
matplotlib==3.2.1
argparse==1.1
scipy==1.4.1
Es muy importante instalar las librerías una vez creado el ambiente virtual .
Proceda a actualizar las librerías necesarias con el siguiente comando desde el Power Shell ( dependiendo de la fecha en la que usted haya leído este post es posible que muchas de las librerías se hayan actualizado, por ese motivo les recomiendo crear un ambiente virtual en su Anaconda Navigator con una versión de Python 37. Deben instalar exactamente las librerías según lo que define el archivo requirements.txt. no hace falta copiar cada linea e instalar uno a uno; se pueden hacer todos de una sola vez con el comando que esta abajo .
Si usted instala este modelo en un ambiente virtual, se garantiza de que NO o va a modificar las versiones de sus librerías actualmente en uso, por versiones anteriores. Si quiere adquirir destrezas en el proceso de instalación de librerías también puede ir ejecutando el código paso a paso e ir instalando las librerías conforme el código se lo vayan solicitando. (conforme usted va corriendo el código pueden aparecer errores donde se menciona que alguna librería está haciendo falta, esto se puede ver al final del mensaje de error. La librerías se instalan con el comando PIP, desde el poner Shell de Windows . tambien lo puede hacer desde Anaconda y podrá instalar todas las librerías de forma más completa con dependencias con el comando :conda ( Ej. conda install -c conda-forge librería-deseada, )
pip install -r requirements.txt
Despues de un largo tiempo, al final tendremos algo similar a esto : (los mensajes de WARNING en este caso alertan de instalaciones previas de Python) si los mensajes aparecen en ROJO tendremos verificar que ocurre. y resolverle en primer lugar éstas deficiencias.
Una vez instaladas las librerías tendremos que realizar unos pasos adicionales para tener nuestro ambiente de trabajo preparado .
Instale adicionalmente las siguientes librerías , que no están en el requirements.txt , pero que son necesarias :
pip install sklearn pip install Pillow
En ocasiones es necesario actual adicionalmente otras herramientas: (recomiendo)
python -m pip install –upgrade pip setuptools
En ciertos procesadores utilizando Windows 10 es posible que también sea necesario instalar el modulo GPU de Tensorflow, y el protobuf. ( estas versiones no son estrictamente necesarias para «correr» este algoritmo.)
2.) Trabajando el modelo con Jupyter Notebooks de Anaconda Navigator
existe otra forma de trabajar con este modelo y es a través de Anaconda Navigator . La plataforma anaconda desde su menú principal permite la creación de ambientes de trabajo y la manipulación de las librerías que vayamos a utilizar en nuestro ambiente «Python» . Sin embargo en este tutorial queremos que las personas adquieran destrezas en el uso de Python desde el Windows powershell según se expone más adelante. Esta es una forma un tanto manual de hacer el trabajo pero sin duda es la forma en la que la persona tiene más control sobre lo que se está haciendo.
Anaconda navigator permite crear los ambientes virtuales desde el menú principal (ver imagen abajo), una vez creados los ambientes también puede instalar las a librerías desde la página principal de Environments , o bien puede hacerlo ingresando al Jupyter notebooks y hacerlo desde la opción terminal.
Sin embargo, para que el modelo de la mascarilla funcione no es estrictamebte necesario utilizar Anaconda , sino que invocaremos Python directamente desde el Powershell De Windows, (utilizar el Power Shell de Windows o bien utilizar el modo terminal desde Júpiter notebooks vienen siendo formas equivalentes de interctuar con Python , segun se describe a continuación
En la foto superior seleccionamos la opción Ambientes ( Environments) luego seleccionamos el ambiente recién creado y luego la opcion de «Open with Jupyter notebooks» . en esta pantalla yo hice un ambiente llamado «v-env». Desde esta misma pantalla podemos seleccionar nuevas librerías que quisiéramos instalar lo que favorece muchísimo el proceso de instalación
Para nuestro modelo utilizaremos dos de los programas en Python incluidos en el archivo .zip ( estos son los que tienen extensión .py y en nuestro caso son: train_mask_detector.py ( que es el que va a crear el modelo con el aprendizaje ) y luego detect_mask_video.py ( que es el programa principal que va detectar las personas que tienen puesta la mascarilla)
3.) Proceso de entrenamiento ( solo para fines de referencia)
Ls procesos de aprendizaje supervisado en el Machine learning requieren de un entrenamiento que se realiza a través de imágenes . En este caso imagenes de personas con mascarilla, y sin mascarilla. Usualmente se utilizan la misma cantidad de imágenes de un tipo y de otro tipo. En este módulo les enseñaremos a nuestro algoritmo a detectar esas diferencias a traves de un proceso de aprendizaje supervisado, (ya que le estamos diciendo de previo cuales imagenes llevan mascarilla y cuales no.) Posteriormente, el algoritmo será capaz de detectar si una persona tiene o no la mascarilla puesta sin haber visto esa imagen nunca antes gracias a lo que conoceos como GENERALIZACION de lo aprendidó. La generalización es la aplicación del aprendizaje adquirido sobre nuevas imágenes que nunca han sido vistas anteriormente.
(OJO esto puede tardar mas de 40 minutos, dependiendo de la memoria RAM y del procesador de su equipo) esto es porque en este paso, el algoritmo va a aprender de las imágenes, en este caso lo haremos 20 veces seguidas ( el número de entrenamientos se conocen como EPOCAS , o EPOCHS ) esto se hace varias veces para aumentar la precisión del modelo: ( ATENCIÓN: esto solo se realiza una vez, ) Una vez creado el modelo ya no es necesario «entrenarlo» nuevamente, excepto que usted quiera incluir nuevas imágenes.
El archivo mask_detector.model ya fué entrenado por mi, es el que recoge ese aprendizaje . NO ES NECESARIO COMO MENCIONE pasar por este paso nuevamente …. 20 veces es el numero de veces en donde se vio que la precisión del algoritmo llega a un punto de precisión mas alto. despues de 20 veces no debe seguirse sobre entrenando porque se produce un fenómeno conocido como overfitting , lo que provoca que el algoritmo empiece a fallar a la hora de detectar las imágenes.
Entonces,Si de todas formas usted quiere realzar su propio proceso de entrenamiento, escriba el siguiente comando en el Power Shell de Windows con derechos de administrador)
Hay que esperar unos 30 segundos para que el algoritmo comience a funcionar y primero que: reconozca la Webcam de su computador. Luego aparecerá una ventanilla de video donde se comenzarán a presentar las imágenes:
Tome en cuenta que acá ocurren varias cosas:
1.) El algoritmo detecta la (s) cara (s) de las personas en el video.
2.) El algoritmo detecta si la persona lleva la mascarilla puesta
3.) El algoritmo muestra el grado de precisión de la predicción del punto 2.)
4. ) Si lo desea puede crear un archivo . EXE con todo lo necesario para usar el modelo en otro ordenador sin tener que instalar Python ni nada
Una vez que usted comprueba que la aplicación funcionó en el punto anterior, puede crear un archivo .EXE con todo el algoritmo (librerías, modelos, etc,) que luego puede instalar en cualquier otro computador sin necesidad de instalar Python.
Esta conversión de Python a .EXE la puede realizar con un utilitario conocido como : Auto PY to EXE
este utilitario se instala con este comando de la misma forma que todo lo anterior desde el terminal o desde Windows Power Shell :
pip install auto-py-to-exe
y para ejecutarlo se hace con el comando:
auto-py-to-exe
La operación es muy simple: se selecciona nuestro programa en Python que queremos convertir en .exe ( en este caso detect_mask_video.py ) dejamos luego todas las opciones que vienen por defecto y a los minutos va a generar una carpeta con un conjunto de programas , y librerías y un archivo .exe , en ese caso el programa resultante se llamará: detect_mask_video.EXE y quedará en la carpeta de salida
Sobre la base del Algoritmo para la detección del uso de la mascarilla en tiempo real, se pueden crear otro conjunto de aplicaciones relacionadas.
La librería de programas y modelos se puede descargar desde éste enlace
Nota: El siguiente tutorial fue elaborado por el Dr. Juan Ignacio Barrios quién es médico especialista en informática médica máster en Business Intelligence y experto en Big Data y ciencia de datos. El doctor barrios es profesor visitante de la cátedra de informática médica en la Universidad de Barcelona y aplica modelos de Machine learning e inteligencia artificial en su trabajo diario. También es miembro de la facultad de salud pública y de la Facultad de Gin ecología y Obstetricia de la Universidad de Rochester, NY de los Estados Unidos.
19 Responses
Hola buenas tardes, podrias compartir el link para descargar el codigo fuente o los ejemplos? No llego a encontrar ese link en el post.
Gracias.
Disculpe Don Sergio que hasta ahora veo su mensaje. Aca le anexo en enlace. cualquier cosa me escribe a mi correo personal.
https://drive.google.com/drive/folders/15WKGMhVmv6h7OsJ-YzJU26C7F4GQY0fu?usp=sharing
Hola, disculpe la carpeta drive está vacía me podría pasar el proyecto a mi correo victor.galvez56@gmail.com Muchas gracias
Hola Victor.
Ya puedes descargar el codigo fuente del algoritmo de la mascarilla. desde la página del «post»
Te pido disculpas por haberlo borrado pero la gente habia dejado de visitar esa página por lo que hace unas semanas decidi borrarla, PERO ya está de nuevo disponible.
Gracias por visitar el proyecto.
Juan Ignacio
Gracias por tu aporte a la humanidad
Buenas tardes,
Podría compartir el código fuente. En el enlace del drive la carpeta figura como vacía.
A la espera de su respuesta.
Gracias!!!
Hola Axel. Disculpas por haber borrado la carpeta. Poca gehte la ha visitado y hace algunos dias decidi borrarla PERO siguien visitandola y por tanto decidi restaurarla
ya está de nuevo a tu disposición. Disculpas por responder hasta ahora !
Gracias
Juan
Hola, Juan, que pena molestarte, la carpeta con los archivos dice que está en la papelera, ¿hay posibilidad de restaurarla?. De ante mano te agradezco el tiempo.
Hola Diego:
Ya puedes descargar el codigo fuente del algoritmo de la mascarilla. desde la pagina del «post»
Te pido disculpas por haberlo borrado pero la gente habia dejado de visitar esa página por lo que hace unas semanas decidi borrarla, PERO ya está
de nuevo disponible.
Gracias por visitar el proyecto.
Juan Ignacio
Hola, Juan
Quiero agradecerte por compartir el proyecto y tu conocimiento, de verdad. Es un excelente trabajo.
Un abrazo desde Colombia.
Hola, Juan Ignacio Barrios Arce.
Podría compartir nuevamente el código fuente. En el enlace del Google Drive figura como que ya no esta disponible.
A la espera de su respuesta.
!Muchas Gracias!
Buenos Días Juan Ignacio Barrios Arce.
Podría compartir el código fuente. En el enlace del drive, el enlace figura como ya no disponible.
A la espera de su respuesta.
Excelente aporte.
¡Gracias!
Hola Miguel:
Disculpas por haber quitado el enlace, lo hicimos porque el número de visitas a esa publicación había disminuido.
Pero ya está activo nuevamente.
https://drive.google.com/drive/folders/1wSgdQPBuJJCn0pOqg8MrlYKEbvtNKu4B?usp=sharing
Gracias por leer nuestras publicaciones.
Atentamente,
El equipo de Juanbarrios.com
muchas gracias, aun que aun no tengo acceso.
Buenas noches, una pregunta, si quisiera detectar mas de 2 rostros a la vez se podria? como se haria?
Estimado Juan buenos días, te felicito por este proyecto. Me ha llamado mucho la atención porque resulta que estoy haciendo mi tesis de grado sobre algo muy parecido. Estoy muy interesado en saber si alcanzaste a realizar algún tipo de publicación científica de lo que hiciste, ya que me gustaría mucho poder referenciar tu proyecto en mi trabajo. Quedo atento, que tengas un feliz día.
Hola Carlos. No publico mis articulos porque son parte de mis lecciones a los estudiantes y por tanto no hay tiempo de hacer la parte referente a visualización / analisis y presentación de los datos . Cada semana escribo uno o dos post y creo que como tu dices ya deberia tener dentro del grupo a alguien que escriba los resultados en Revistas. pr la referencia de mi página. Estare muy complacido de que lo hagas.
Hola Juan, gracias por compartir el conocimiento me has ayudado a incurisonar en este mundo de IA estuve implementando tu algoritmo como manera de prepararme pero aveces surge cuando corro el python detect_mask_video.py por powershell sale el siguiente error:
Layer «model» expects 1 input(s), but it received 2 input tensors. Inputs received: [, ]
Sabes a que se debe
en ocasiones si sta recibiendo dos imágenes como 2 caras que se mueven adelante y atras se puede producir ese error. Prueba primero con una sola cara, y luego lo vas complicando …. Gracias