Nombre de la actividad: Reconocimiento facial usando Inteligencia Artificial y Raspberry Pi 5
Módulo/Asignatura/Curso: Servicios en Red e Internet
Sesiones de trabajo estimadas: 10
Dificultad ( baja, media, alta): alta
Profesor/a: Íñigo de la Fuente Ubanell
Grupo: 2º ASIR
Fecha: 22/01/2025
En esta ocasión, nuestros alumnos y alumnas de 2R realizan uno de los proyectos sobre los que surgió la idea de nuestro proyecto CITE-STEAM, que era el conseguir iniciar proyectos de Inteligencia Artificial haciendo uso de una Raspberry Pi 5.
Este proyecto hace uso de algoritmos con Inteligencia Artificial para el reconocimiento de rostros, por lo que durante el proceso hay que entrenar el modelo de Inteligencia Artificial con los rostros que se desea reconocer, en este caso el alumnado de la clase.
Los pasos que se han seguido han sido los siguientes:
Actualizar sistema
apt update
apt full-upgrade

Después conectar las Raspberry Cam v2 al puerto correspondiente de la Raspberry Pi.




Se debe probar el funcionamiento de la cámara con unos sencillos comandos desde terminal:


Los siguientes pasos son la descarga e instalación de todas las librerías necesarias para la realización del proyecto.
Durante la instalación de las librerías necesarias, nos saldrán mensajes de error externally-managed-environment. Esto es debido a que el entorno de Python está manejado externamente por un administrador de paquetes, lo que impide el uso directo de pip o pip3 para instalaciones en el sistema y así evitar conflictos o problemas. Podemos evitar esto añadiendo la siguiente línea en pip.conf.
fichero /etc/pip.conf
añadir línea break-system_packages=true
Otra solución es crear un entorno virtual de python, e instalar todo en dicho entorno para no manipular la parte real y no dañar el sistema al instalar ciertos tipos de librerías. En esta ocasión optamos por instalarlas directamente en el sistema, ya que no nos dará ningún tipo de problemas en la máquina real.

Instalar librerías requeridas
Para procesamiento de imágenes: reconocimiento de rostros, dibujar rectángulos en las caras detectadas, guardar imágenes, etc.
apt-get install python3-opencv
Interfaz gráfica de usuario e instalación de dependencias backend
apt-get install libqt5gui5 libqt5test5 python3-pyqt5 libatlas-base-dev libhdf5-dev libhdf5-serial-dev -y
OpenCV con instalación de módulos de contribución
pip3 install opencv-contrib-python==4.5.5.62
Saldrá una advertencia que nos indicará que ejecutar con permisos de root puede dar problemas en el sistema, recomendando crear un entorno virtual para estas operativas. Lo ignoramos, porque no nos dará problemas.

Picamera2, para interactuar con el módulo de cámara de Raspberry Pi
apt-get install python3-libcamera python3-kms++ python3-pyqt5 libatlas-base-dev
CMake: un compilador para proyectos, para asegurar la compatibilidad entre sistemas, por si hiciera falta.
apt install cmake
Dlib Library : proporciona las herramientas para la detección facial y generación de los encodings de los rostros que queremos reconocer. Hay que tener paciencia porque tardará un buen rato.
pip3 install dlib

Face Recognition Library : para detectar y reconocer rostros en imágenes y videos. Esta librería es la que hace uso de algoritmos con inteligencia artificial para el reconocimiento de las personas con las que se haya entrenado el modelo.
pip3 install face_recognition
Esta instalación puede dar fallos. Hay que insistir, ya que los fallos son porque se corta la bajada, no termina alguna parte. Si estás usando algún repetidor wifi te puede fallar.

Xml file : este fichero es necesario porque es el clasificador pre-entrenado para la detección de rostros, y es el que debemos entrenar con las imágenes de los rostros de las personas que queramos identificar. Se descarga y guarda en la misma ruta en la que tengamos los programas en python.
https://github.com/opencv/opencv/blob/master/data/haarcascades/haarcascade_frontalface_default.xml
Si esta descarga falla, al final del artículo os dejamos enlace para que lo podáis descargar de nuestro drive.
Para probar el funcionamiento:
Creamos tres programas en python guardados en la misma carpeta junto con el xml file con el código de los ficheros necesarios, y los ejecutamos en el siguiente orden:

face_shot.py para capturar los rostros de las personas que queremos reconocer. Se deben sacar más de 50 fotos de cada persona a reconocer, en diferentes direcciones: mirando de frente, de lado, para arriba, para abajo. Creará una carpeta para cada persona que se quiera reconocer. Para ello, antes de ejecutarlo, se modifica el código de este programa, poniendo el nombre de la persona en la variable correspondiente.


train_model.py. Una vez que tengamos todas las fotos de todas las personas toca entrenar el modelo. Hay que ejecutar este programa para ello. Dependiendo del número de personas y de fotos tomadas tardará más o menos tiempo. Aquí es donde se nota que el equipo es una Raspberry, ya que se potencia de proceso es limitada, se calienta bastante y en nuestro caso tardó aproximadamente 30 minutos en entrenar el modelo con 18 alumnos y alumnas con unas 180 fotos por persona. En una prueba posterior con menos fotos tardó algo menos de la mitad, y el reconocimiento de las personas fue prácticamente igual.


face_rec.py. Es el programa que detecta los rostros en tiempo real y nos indica si los rostros encontrados en el video los conoce o no. El resultado es bastante bueno, aunque no ideal, ya que pudimos comprobar que rostros con gafas los confundía, orejas, incluso algunos pliegues de las ropas podía reconocerlos como caras aunque desconocidas. Esto se debe a que este modelo realiza una vectorización de las caras, por lo que en una imagen pueden reconocerse como rostros algunos pliegues si estos son parecidos a dichas representaciones vectoriales de rostros.
Estos son los videos con el reconocimiento de los alumnos de clase: