Algoritmo para la detección de mascarilla

Inteligencia Artificial en Salud

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)

 

python train_mask_detector.py --dataset dataset

3.) A detectar caras con/sin  mascarilla.  El proceso de detección / clasificación

Para finalizar,  ejecute el comando que utiliza la webcam para clasificar las  imágenes en tiempo real (prepare su Webcam) y podrá ver como en la pantalla se muestran las caras de las personas enmarcadas con una etiqueta que dice  ( Con mascarilla)  o Sin mascarilla ) y con un % del nivel de precisión con el que el algoritmo esta clasificando esa imagen.

Note  que éste programa tiene dos funciones:  

a.) el algoritmo de detección de las caras de las personas  (este ya es una librería de dominio público )   y

b.) el algoritmo que  detecta si la persona tiene o no puesta la mascarilla. El algoritmo permite detectar varias ´personas simultáneas en la misma pantalla.

 

 

python detect_mask_video.py

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

  1. Sergio Miranda dice:

    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.

  2. Juan Ignacio Barrios Arce dice:

    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

    • victor dice:

      Hola, disculpe la carpeta drive está vacía me podría pasar el proyecto a mi correo victor.galvez56@gmail.com Muchas gracias

      • Juan Ignacio Barrios Arce dice:

        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

  3. Pablo Cevallos dice:

    Gracias por tu aporte a la humanidad

  4. Axel Carmona dice:

    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!!!

    • Juan Ignacio Barrios Arce dice:

      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

  5. Diego dice:

    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.

    • Juan Ignacio Barrios Arce dice:

      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

  6. Miguel Vazquez dice:

    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!

  7. Miguel Vazquez dice:

    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!

  8. Miguel Vazquez dice:

    muchas gracias, aun que aun no tengo acceso.

  9. Isaac Saenz dice:

    Buenas noches, una pregunta, si quisiera detectar mas de 2 rostros a la vez se podria? como se haria?

  10. Carlos Murcia dice:

    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.

    • Juan Ignacio Barrios Arce dice:

      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.

  11. Ramiro dice:

    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

    • Juan Ignacio Barrios Arce dice:

      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

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

HTML Snippets Powered By : XYZScripts.com