API para la detección de logos en imágenes y videos usando las siguientes tecnologías:
- Python como lenguaje principal.
- Roboflow (https://app.roboflow.com/) para generar el dataset de logos, con anotaciones de clases asociadas a Bounding Boxes.
- PyTorch y Ultralytics YOLOv8m para detección de objetos.
- Hugging Face (https://huggingface.co/) para albergar el modelo YOLOv8m personalizado
- Supabase para almacenamiento de archivos (buckets) y base de datos.
- FastAPI para a la creación de la API REST del backend.
- React para el desarrollo del frontend.
- Docker para contenerización y despliegue.
E4_COMPUTER_VISION/
├── main.py # Aplicación principal FastAPI
├── best.pt # Modelo YOLO entrenado
├── image.png # Imagen de prueba
├── .env # Variables de entorno (no en git)
├── .gitignore # Archivos excluidos de git
├── README.md # Este archivo
├── DEPLOYMENT.md # Guía de despliegue
├── **backend/** # Módulos del backend
│ ├── __init__.py
│ ├── api/ # Endpoints de la API
│ │ ├── __init__.py
│ │ └── endpoints.py # Rutas de consulta
│ ├── core/ # Lógica de negocio
│ │ ├── __init__.py
│ │ ├── config.py # Configuración
│ │ ├── processing_service.py # Servicio de procesamiento
│ │ ├── video_processor.py # Procesamiento de videos
│ │ └── stats_calculator.py # Cálculo de estadísticas
│ ├── database/ # Capa de datos
│ │ ├── __init__.py
│ │ └── supabase_client.py # Cliente de Supabase
│ └── models/ # Modelos de ML
│ ├── __init__.py
│ └── yolo_processor.py # Procesador YOLO
├── setup/ # Archivos de instalación
│ ├── setup.bat # Script instalación Windows
│ ├── setup.sh # Script instalación Linux/Mac
│ ├── run.bat # Script ejecución Windows
│ ├── run.sh # Script ejecución Linux/Mac
│ ├── requirements.txt # Dependencias Python
│ ├── .env.example # Template variables entorno
│ ├── database_schema.sql # Esquema base de datos
│ ├── Dockerfile # Contenedor Docker
│ └── docker-compose.yml # Orquestación Docker
├── database/
│ ├── migrations/
│ │ └── create_frame_captures_table.sql
├── tests/ # Tests
│ ├── __init__.py
│ ├── test_api.py # Tests básicos
│ └── test_improved.py # Tests avanzados
├── temp/ # Archivos temporales
│ ├── uploads/
│ ├── frames/
│ └── crops/
├── **front/** # Código del frontend
│ ├── public
│ │ ├── index.html # Interfaz web simple
| │ └── ... # Otros archivos frontend
| └── src
| └── ... # Código fuente frontend
├── README.md # Documentación del proyecto
└── ... # Otros archivos y carpetas
git clone https://github.com/Bootcamp-IA-P4/E4_Computer_Vision/
cd E4_COMPUTER_VISIONWindows:
cd setup
setup.bat
Linux/Mac:
cd setup
chmod +x setup.sh
./setup.sh
⚠️ Importante: Los scripts deben ejecutarse desde dentro de la carpetasetup/
- Edita el archivo
.envcreado automáticamente - Reemplaza las credenciales de Supabase:
SUPABASE_URL=https://********************.supabase.co/
SUPABASE_SERVICE_ROLE=
SUPABASE_KEY=Puedes descargar el nuestro desde https://huggingface.co/Mariden/ComputerVisionF5/blob/main/model.pt
- Ve a tu proyecto en Supabase
- Ejecuta el script
setup/database_schema.sqlen el SQL Editor - Crea los buckets de almacenamiento en Supabase:
images(para imágenes y crops)videos(para archivos de video)
Si prefieres instalar manualmente:
- Python 3.8 o superior
- Proyecto de Supabase configurado
# 1. Crear entorno virtual
python -m venv venv
# 2. Activar entorno virtual
# Windows:
venv\Scripts\activate
# Linux/Mac:
source venv/bin/activate
# 3. Instalar dependencias
pip install -r setup/requirements.txt
# 4. Configurar variables de entorno
cp setup/.env.example .env
# Editar .env con tus credenciales
# 5. Crear directorios
mkdir -p temp/uploads temp/frames temp/crops
# 6. Ejecutar servidor
python main.py💡 Tip: Para automatizar este proceso, usa los scripts en la carpeta
setup/
Windows:
cd setup
run.batLinux/Mac:
cd setup
chmod +x run.sh
./run.sh📝 Nota sobre el modelo YOLO: El proyecto incluye un modelo personalizado
best.pt. Si no aparece en tu copia clonada, el sistema usará automáticamente el modelo YOLOv8n por defecto.
cd front
npm install
npm start# 1. Configurar variables de entorno
cp setup/.env.example .env
# Editar .env con tus credenciales
# 2. Ejecutar con Docker Compose
docker-compose -f setup/docker-compose.yml up --build# 1. Construir imagen
docker build -f setup/Dockerfile -t logo-detection-api .
# 2. Ejecutar contenedor
docker run -p 8000:8000 --env-file .env logo-detection-apiSube y procesa un archivo de imagen o video.
Parámetros:
file: Archivo de imagen o video (multipart/form-data)
Formatos soportados:
- Videos: .mp4, .avi, .mov, .mkv
- Imágenes: .jpg, .jpeg, .png, .bmp
Respuesta:
{
"message": "File uploaded successfully and processing started",
"file_id": 123,
"filename": "video.mp4",
"file_size": 1234567
}Obtiene todas las detecciones para un archivo específico.
Obtiene las predicciones/estadísticas para un archivo específico.
Lista todos los archivos procesados.
Verifica el estado de la API y del modelo.
# Subir un video
curl -X POST "http://localhost:8000/upload" \
-H "accept: application/json" \
-H "Content-Type: multipart/form-data" \
-F "file=@video.mp4"
# Obtener detecciones
curl -X GET "http://localhost:8000/detections/1"
# Obtener estadísticas
curl -X GET "http://localhost:8000/predictions/1"- Carga de archivo: El usuario sube una imagen o video
- Almacenamiento: El archivo se guarda en Supabase Storage
- Registro en BD: Se crea un registro en la tabla
files - Extracción de frames: Para videos, se extraen frames a la velocidad configurada
- Detección: Se ejecuta el modelo YOLO en cada frame/imagen
- Almacenamiento de detecciones: Se guardan las detecciones en la tabla
detections - Recortes: Se guardan recortes de las áreas detectadas
- Estadísticas: Se calculan y guardan estadísticas en la tabla
predictions
SUPABASE_URL: URL de tu proyecto SupabaseSUPABASE_SERVICE_ROLE: Clave de service role para operaciones admin
MODEL_PATH: Ruta al modelo YOLO (default: "best.pt")CONFIDENCE_THRESHOLD: Umbral de confianza para detecciones (default: 0.5)TARGET_FPS: Frames por segundo para extracción (default: 1)MAX_FILE_SIZE: Tamaño máximo de archivo (default: 100MB)
La API utiliza Supabase PostgreSQL con las siguientes tablas:
brands: Marcas detectablesfiles: Archivos procesadosdetections: Detecciones individualespredictions: Estadísticas agregadas
Ver setup/database_schema.sql para el esquema completo.
uvicorn main:app --reload --host 0.0.0.0 --port 8000Una vez ejecutando, visita:
- Swagger UI:
http://localhost:8000/docs - ReDoc:
http://localhost:8000/redoc
python -m pytest tests/- ✅ Detección de logos en imágenes y videos
- ✅ Procesamiento con modelo YOLO entrenado personalizado
- ✅ Almacenamiento en Supabase
- ✅ Extracción de estadísticas de presencia de marcas
- ✅ Recortes automáticos de detecciones
- ✅ API REST completa con documentación
- ✅ Procesamiento en background
- ✅ Soporte para Docker
- ✅ Tests automatizados
- WebSockets para updates en tiempo real del procesamiento
- Batch processing para múltiples archivos
- API para entrenar modelos personalizados
- Dashboard web para visualizar resultados
- Optimizaciones de rendimiento
- Autenticación y autorización
- Rate limiting
- Métricas y monitoreo
Problema: Si estás usando Python 3.13 y ves errores como:
AttributeError: module 'pkgutil' has no attribute 'ImpImporter'
Getting requirements to build wheel did not run successfully
Causa: Python 3.13 es muy nuevo y muchas librerías no tienen soporte completo.
Solución rápida:
cd setup
fix-python313.batRecomendación: Usa Python 3.11 o 3.12 para mejor compatibilidad y estabilidad.
Causa: NumPy compilado con MINGW-W64 en Windows es experimental y puede causar problemas.
Síntomas:
Warning: Numpy built with MINGW-W64 on Windows 64 bits is experimental
CRASHES ARE TO BE EXPECTED - PLEASE REPORT THEM TO NUMPY DEVELOPERS
RuntimeWarning: invalid value encountered in exp2
Solución rápida:
# Ejecutar el script de reparación:
cd setup
fix-numpy.bat
# O reinstalar todo el entorno:
Remove-Item -Recurse -Force ..\venv # PowerShell
setup.batSolución manual:
# Activar entorno virtual
cd setup
call ..\venv\Scripts\activate.bat
# Reinstalar NumPy con versión estable
pip uninstall -y numpy
pip install "numpy>=1.21.0,<1.25.0"Causa: La versión específica de PyTorch ya no está disponible en PyPI.
Solución:
# El requirements.txt ya está actualizado con versiones compatibles
# Simplemente ejecuta setup nuevamente:
cd setup
./setup.bat # Windows
./setup.sh # Linux/Mac
# Si persiste el problema, instala PyTorch manualmente:
pip install torch torchvision --index-url https://download.pytorch.org/whl/cpuCausas y soluciones:
-
El entorno virtual no está activado
# Los scripts run.bat/run.sh ya verifican esto automáticamente # Si ves este error, ejecuta setup nuevamente: cd setup ./setup.bat # Windows ./setup.sh # Linux/Mac
-
Las dependencias no se instalaron correctamente
# Reinstalar dependencias: cd setup ./setup.bat # Windows - reinstala automáticamente ./setup.sh # Linux/Mac - reinstala automáticamente
-
Problema con el entorno virtual
# Eliminar y recrear entorno virtual: rmdir /s venv # Windows rm -rf venv # Linux/Mac # Luego ejecutar setup nuevamente cd setup ./setup.bat
Posibles causas y soluciones:
-
Ejecutar script desde ubicación incorrecta
# ❌ Incorrecto: ./setup.bat # ✅ Correcto: cd setup ./setup.bat
-
El modelo no está en el repositorio
- El sistema usará automáticamente YOLOv8n como fallback
- Para usar un modelo personalizado, coloca
best.pten la raíz del proyecto
-
Verificar ubicación del modelo
- El script mostrará la ruta donde busca el modelo
- Asegúrate de que
best.ptesté enE4_COMPUTER_VISION/best.pt
# Solución:
cd setup
./setup.bat # Windows
./setup.sh # Linux/Mac# Si hay problemas con pip, actualiza primero:
python -m pip install --upgrade pip
# Luego ejecuta el setup nuevamente
cd setup
./setup.bat# El entorno virtual se debe crear desde la carpeta setup:
cd setup
./setup.bat # Windows
./setup.sh # Linux/Mac
# Los scripts verifican automáticamente todas las dependencias- Los archivos se procesan en background tasks para no bloquear la API
- Los frames temporales se limpian automáticamente después del procesamiento
- Los recortes de detecciones se almacenan en Supabase Storage
- El modelo YOLO se carga una vez al iniciar la aplicación
- La aplicación crea directorios temporales automáticamente
- Fork el proyecto
- Crea una rama para tu feature (
git checkout -b feature/AmazingFeature) - Commit tus cambios (
git commit -m 'Add some AmazingFeature') - Push a la rama (
git push origin feature/AmazingFeature) - Abre un Pull Request
Este proyecto está bajo la Licencia MIT - ver el archivo LICENSE para más detalles.