Sistema de detección de marcas en videos utilizando inteligencia artificial con YOLO y Computer Vision.
Este proyecto implementa un sistema completo de detección de logos en videos para empresas de publicidad que necesitan medir el tiempo de exposición de marcas en contenido audiovisual. El sistema utiliza un modelo YOLO entrenado para detectar logos específicos (Adidas, Coca-Cola, y logos genéricos) en videos de YouTube y otras plataformas.
- Detección automática de logos en videos usando YOLO
- Procesamiento de videos desde URLs de YouTube/Vimeo con yt-dlp
- Interface web moderna con Streamlit y diseño profesional
- API REST con FastAPI para integración
- Base de datos Supabase para almacenamiento persistente
- Visualizaciones interactivas con Plotly
- Almacenamiento de crops en Supabase Storage
┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐
│ Frontend │ │ Backend │ │ Database │
│ Streamlit │◄──►│ FastAPI │◄──►│ Supabase │
│ │ │ │ │ │
│ - Dashboard │ │ - Video Proc. │ │ - Videos │
│ - Process Video │ │ - YOLO Model │ │ - Brands │
│ - Analytics │ │ - API Endpoints │ │ - Detections │
└─────────────────┘ └─────────────────┘ └─────────────────┘
- FastAPI - Framework web para API REST
- YOLO (Ultralytics) - Modelo de detección de objetos
- OpenCV - Procesamiento de imágenes
- yt-dlp - Descarga de videos
- Supabase - Base de datos y almacenamiento
- Streamlit - Framework para aplicaciones web
- Plotly - Visualizaciones interactivas
- Pandas - Manipulación de datos
- CSS personalizado - Diseño profesional
- YOLO v8 - Detección de objetos en tiempo real
- Clases detectadas: Adidas Logo, Coca-Cola, Logo genérico
G3-COMPUTER-VISION/
├── server/ # Backend FastAPI
│ ├── main.py # Aplicación principal
│ ├── model_loader.py # Cargador del modelo YOLO
│ ├── database/ # Configuración de BD
│ │ ├── connection.py # Conexión Supabase
│ │ └── schemas.py # Esquemas Pydantic
│ ├── models/ # Modelos entrenados
│ │ └── best.pt # Modelo YOLO entrenado
│ └── uploads/ # Archivos temporales
├── frontend_streamlit.py # Frontend Streamlit
├── logo.png # Logo del proyecto (opcional)
├── requirements.txt # Dependencias
└── README.md # Este archivo
- Python 3.8+
- pip
- Cuenta de Supabase
git clone <repository-url>
cd G3-COMPUTER-VISIONpython -m venv venv
source venv/bin/activate # En Windows: venv\Scripts\activatepip install -r requirements.txt- Crea un proyecto en Supabase
- Configura las credenciales en
server/database/connection.py - Crea las siguientes tablas:
-- Tabla de marcas
CREATE TABLE brands (
id SERIAL PRIMARY KEY,
name VARCHAR(255) UNIQUE NOT NULL
);
-- Tabla de videos
CREATE TABLE videos (
id SERIAL PRIMARY KEY,
filename VARCHAR(255) NOT NULL,
path VARCHAR(500),
url VARCHAR(500),
uploaded_at TIMESTAMP DEFAULT NOW(),
duration FLOAT
);
-- Tabla de detecciones
CREATE TABLE detections (
id SERIAL PRIMARY KEY,
video_id INTEGER REFERENCES videos(id),
brand_id INTEGER REFERENCES brands(id),
start_time FLOAT NOT NULL,
end_time FLOAT NOT NULL,
confidence FLOAT,
bbox_image_path VARCHAR(500)
);Crea los siguientes buckets en Supabase Storage:
videos- Para almacenar videos procesadoscrops- Para almacenar recortes de detecciones
cd server
uvicorn main:app --reload --host 0.0.0.0 --port 8000streamlit run frontend_streamlit.py- Frontend: http://localhost:8501
- API Backend: http://localhost:8000
- Documentación API: http://localhost:8000/docs
- Métricas en tiempo real de videos procesados
- Gráficos de marcas más detectadas
- Distribución de niveles de confianza
- Videos procesados recientemente
- Entrada de URLs de YouTube/Vimeo
- Barra de progreso en tiempo real
- Detección automática de logos
- Almacenamiento de resultados
- Lista de todos los videos procesados
- Filtros por nombre y número de detecciones
- Estadísticas por video
- Enlaces a videos originales
- Tabla interactiva de marcas detectadas
- Gráficos de rendimiento por marca
- Estadísticas de confianza promedio
GET /videos/- Listar todos los videosPOST /videos/- Crear nuevo videoGET /videos/{id}- Obtener video específicoPUT /videos/{id}- Actualizar videoDELETE /videos/{id}- Eliminar video
GET /brands/- Listar todas las marcasPOST /brands/- Crear nueva marcaPUT /brands/{id}- Actualizar marcaDELETE /brands/{id}- Eliminar marca
GET /detections/- Listar todas las deteccionesPOST /detections/- Crear nueva detecciónGET /detections/{id}- Obtener detección específicaPUT /detections/{id}- Actualizar detecciónDELETE /detections/{id}- Eliminar detección
POST /process-video-url/- Procesar video desde URL
En pruebas realizadas con videos de YouTube:
- Videos procesados: 1
- Frames analizados: 360
- Logos detectados: 4 instancias
- Coca-Cola: 3 detecciones
- Adidas Logo: 1 detección
- Confianza promedio: >80%
- 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 LICENSE para más detalles.
- Proyecto: Brand Detection System
- Tecnología: Computer Vision + IA
- Framework: FastAPI + Streamlit
- Ultralytics YOLO - Modelo de detección
- Streamlit - Framework de frontend
- FastAPI - Framework de backend
- Supabase - Base de datos y almacenamiento