Este proyecto es una aplicación de reconocimiento facial en tiempo real que utiliza la biblioteca face_recognition
y otras tecnologías de IA para detectar e identificar rostros a través de una cámara web.
###La aplicación está diseñada para ser desplegada fácilmente en entornos como Docker y Kubernetes.
- Librerías utilizadas
- Descripción de los archivos
- Instrucciones para configurar el entorno
- Cómo ejecutar la aplicación localmente
- Creación del contenedor Docker
- Despliegue en Kubernetes
- Futuras mejoras
face_recognition
: Utilizada para detectar y reconocer rostros. Esta biblioteca simplifica el reconocimiento facial utilizando modelos preentrenados.numpy
: Manipula las imágenes como arrays numéricos para su procesamiento.Pillow
: Biblioteca de procesamiento de imágenes utilizada para cargar y transformar las imágenes antes de su procesamiento.pickle
: Se utiliza para serializar y guardar las codificaciones faciales y los nombres en archivos.Flask
: Framework web en Python para crear la interfaz y API que permite procesar las imágenes en tiempo real.gspread
ygoogle-auth
: Utilizadas para conectar la aplicación a Google Sheets y registrar las detecciones de rostros.
Este archivo contiene la lógica del servidor web utilizando Flask. La aplicación permite:
- Capturar video en tiempo real desde la cámara web.
- Detectar y reconocer rostros utilizando las codificaciones faciales generadas por el archivo de entrenamiento.
- Registrar las detecciones en tiempo real en una hoja de Google Sheets.
- Proveer una interfaz de usuario para visualizar el video en tiempo real y las detecciones.
Este script se encarga de:
- Procesar imágenes de rostros almacenadas en el directorio
imagenes/
. - Extraer las codificaciones faciales utilizando la biblioteca
face_recognition
. - Guardar estas codificaciones en un archivo (
codificaciones.pkl
), que luego será utilizado por la aplicación Flask para identificar rostros en tiempo real.
Este archivo contiene pruebas automatizadas para verificar que el modelo de entrenamiento funcione correctamente, incluyendo:
- Verificación de que se detectan los rostros en las imágenes de prueba.
- Validación de que las codificaciones se almacenan correctamente en el archivo
pickle
.
Para aislar las dependencias del proyecto, es recomendable utilizar un entorno virtual. Sigue los pasos a continuación:
python3 -m venv venv
source venv/bin/activate
python -m venv venv
venv\Scripts\activate
Instala las dependencias necesarias desde el archivo requirements.txt
:
pip install -r requirements.txt
El archivo requirements.txt debe contener:
face_recognition
Flask
numpy
Pillow
gspread
google-auth
opencv-python-headless
Antes de ejecutar la aplicación, necesitas procesar las imágenes y generar las codificaciones faciales. Ejecuta el script modelo_entrenamiento.py
:
Una vez que el modelo esté entrenado, puedes iniciar la aplicación Flask:
python app.py
Luego, abre un navegador y accede a http://localhost:5000
para ver la aplicación en acción.
Asegúrate de que tu directorio contenga un archivo Dockerfile
con el siguiente contenido:
# Utilizar una imagen base de Python
FROM python:3.9-slim
# Establecer el directorio de trabajo
WORKDIR /app
# Copiar los archivos de la aplicación al directorio de trabajo
COPY . .
# Instalar las dependencias
RUN pip install --no-cache-dir -r requirements.txt
# Exponer el puerto en el que correrá la aplicación Flask
EXPOSE 5000
# Comando para ejecutar la aplicación Flask
CMD ["python", "app.py"]
docker build -t face-recognition-app .
docker run -p 5000:5000 face-recognition-app
Esto ejecutará la aplicación dentro de un contenedor Docker y estará disponible en http://localhost:5000
.
Para desplegar la aplicación en un clúster de Kubernetes, sigue estos pasos:
Crea un archivo kubernetes-deployment.yaml
con el siguiente contenido:
apiVersion: apps/v1
kind: Deployment
metadata:
name: face-recognition-deployment
spec:
replicas: 3
selector:
matchLabels:
app: face-recognition
template:
metadata:
labels:
app: face-recognition
spec:
containers:
- name: face-recognition
image: face-recognition-app:latest
ports:
- containerPort: 5000
---
apiVersion: v1
kind: Service
metadata:
name: face-recognition-service
spec:
selector:
app: face-recognition
ports:
- protocol: TCP
port: 80
targetPort: 5000
type: LoadBalancer
- Sube la imagen de Docker a un registro de contenedores (por ejemplo, Docker Hub o Google Container Registry).
- Edita el archivo YAML para usar la imagen subida.
- Aplica el archivo YAML en Kubernetes:
kubectl apply -f kubernetes-deployment.yaml
Puedes verificar que el despliegue esté funcionando con los siguientes comandos:
kubectl get deployments
kubectl get services