Sistema de detección automática de logos de marcas de videojuegos en vídeo, desarrollado como prueba de concepto para analizar el tiempo de aparición de cada marca en pantalla.
- Descripción
- Marcas detectadas
- Arquitectura
- Métricas del modelo
- Instalación
- Uso
- Estructura del proyecto
- Base de datos
- Despliegue
- Tecnologías
Este proyecto implementa un pipeline completo de Computer Vision para detectar logos de marcas de videojuegos en vídeos. El sistema analiza el vídeo frame a frame, localiza los logos con bounding boxes, muestra el nombre de la clase y el porcentaje de confianza, y genera un informe con el tiempo y porcentaje de aparición de cada marca.
Casos de uso:
- Análisis de cobertura de marca en trailers y eventos
- Medición de presencia de logos en gameplay y streams
- Informes automáticos para equipos de publicidad y marketing
| Marca | Color del bbox |
|---|---|
| Nintendo | 🔴 Rojo |
| PlayStation | 🔵 Azul |
| Xbox | 🟢 Verde |
| Nvidia | 🟩 Verde claro |
| Sega | 💙 Azul claro |
| Blizzard Entertainment | 🟡 Amarillo |
v3/
├── src/
│ ├── v3_inference.py # Pipeline de vídeo frame a frame
│ ├── v3_database.py # Persistencia en SQLite
│ ├── v3_report.py # Generación de informes y gráficas
│ └── v3_preprocessing.py # Resize, normalización y escalado
├── notebooks/
│ └── v3_training_colab.ipynb # Entrenamiento en Google Colab
├── models/
│ └── best.pt # Pesos del modelo (no incluido en repo)
├── data/ # Vídeos de prueba (no incluidos en repo)
├── outputs/ # Vídeos procesados e informes
├── database/ # Base de datos SQLite
├── main.py # API REST con FastAPI
├── app.py # Frontend con Streamlit
├── Dockerfile # Entorno local
└── requirements.txt
Entrenado con YOLOv8n (transfer learning) sobre dataset de Roboflow — 50 epochs, GPU T4:
| Métrica | Valor |
|---|---|
| mAP50 | 0.72 |
| mAP50-95 | 0.49 |
| Precisión | 0.83 |
| Recall | 0.69 |
- Python 3.11+
- Docker (opcional)
git clone https://github.com/Bootcamp-IA-P6/Computer-Vision-Team2.git
cd Computer-Vision-Team2
git checkout v3python -m venv .venv
source .venv/bin/activate # Windows: .venv\Scripts\activate
pip install -r requirements.txtcp .env.example .env
# Edita .env y añade tu API key de RoboflowEl modelo best.pt no está incluido en el repositorio. Tienes dos opciones:
Opción A — Descargar desde HuggingFace:
huggingface-cli download Michh14/logo-detector models/best.pt --local-dir .Opción B — Entrenar desde cero:
Abre notebooks/v3_training_colab.ipynb en Google Colab y ejecuta todas las celdas. Al terminar descarga el best.pt generado y colócalo en models/.
Procesa un vídeo y genera el informe sin frontend:
# Inferencia sobre un vídeo
python src/v3_inference.py --model models/best.pt --video data/test_video.mp4 --output outputs/resultado.mp4
# Ajustar umbral de confianza (default: 0.4)
python src/v3_inference.py --model models/best.pt --video data/test_video.mp4 --conf 0.6
# Generar informe desde la base de datos
python src/v3_report.py # último vídeo analizado
python src/v3_report.py --video_id 1 # vídeo concreto por ID
python src/v3_report.py --list # listar todos los vídeosLevanta el backend y el frontend en dos terminales:
# Terminal 1 — Backend FastAPI
uvicorn main:app --reload --host 0.0.0.0 --port 8000
# Terminal 2 — Frontend Streamlit
streamlit run app.pyAbre http://localhost:8501 en el navegador.
El frontend tiene dos modos:
- 🔗 URL de YouTube (local) — introduce una URL y el backend la descarga y analiza
- 📁 Subir vídeo (HuggingFace) — sube un archivo de vídeo a la API desplegada en cloud
# Construir la imagen
docker build -t v3-logo-detection .
# Ejecutar
docker run --rm \
-v $(pwd)/data:/app/data \
-v $(pwd)/models:/app/models \
-v $(pwd)/outputs:/app/outputs \
-v $(pwd)/database:/app/database \
v3-logo-detection \
python src/v3_inference.py --model models/best.pt --video data/test_video.mp4Las detecciones se guardan automáticamente en database/v3_detecciones.db (SQLite).
Tabla videos
| Campo | Tipo | Descripción |
|---|---|---|
| id | INTEGER | Clave primaria |
| nombre | TEXT | Nombre del archivo de vídeo |
| ruta | TEXT | Ruta completa al vídeo |
| total_frames | INTEGER | Total de frames del vídeo |
| fps | REAL | Frames por segundo |
| duracion_s | REAL | Duración en segundos |
| fecha_analisis | TEXT | Fecha y hora del análisis |
Tabla detecciones
| Campo | Tipo | Descripción |
|---|---|---|
| id | INTEGER | Clave primaria |
| video_id | INTEGER | FK → videos.id |
| clase | TEXT | Nombre de la marca detectada |
| confianza | REAL | Puntuación de confianza (0-1) |
| frame | INTEGER | Número de frame |
| timestamp_s | REAL | Tiempo en segundos |
| bbox_x1/y1/x2/y2 | INTEGER | Coordenadas del bounding box |
| crop_base64 | TEXT | Imagen recortada en base64 |
Para visualizar la base de datos instala la extensión SQLite Viewer en VSCode.
La API está desplegada en HuggingFace Spaces:
🔗 API: https://michh14-logo-detector.hf.space
Endpoints disponibles:
| Método | Endpoint | Descripción |
|---|---|---|
| GET | / |
Estado del servidor y clases disponibles |
| POST | /analizar |
Analiza un vídeo subido como archivo |
| GET | /videos |
Lista todos los vídeos analizados |
| GET | /informe/{id} |
Informe de un vídeo por ID |
Ejemplo de uso de la API:
# Verificar estado
curl https://michh14-logo-detector.hf.space/
# Analizar un vídeo
curl -X POST https://michh14-logo-detector.hf.space/analizar \
-F "file=@test_video.mp4" \
-F "conf=0.45"| Categoría | Tecnología |
|---|---|
| Lenguaje | Python 3.11 |
| Modelo | YOLOv8n (Ultralytics) |
| Computer Vision | OpenCV |
| Entrenamiento | Google Colab (GPU T4) |
| Dataset | Roboflow Universe |
| Base de datos | SQLite |
| API | FastAPI + Uvicorn |
| Frontend | Streamlit |
| Contenedor | Docker |
| Despliegue | HuggingFace Spaces |
| Control de versiones | Git / GitHub |
Proyecto desarrollado por el equipo 2 — Bootcamp IA Factoría F5
| Rama | Desarrollador |
|---|---|
| v1 | Naizabeth |
| v2 | Joaquin |
| v3 | Michelle |
Este proyecto es de uso académico y educativo.