Add comprehensive README
This commit is contained in:
303
README.md
303
README.md
@@ -1,213 +1,176 @@
|
||||
# 🎬 Twitch Highlight Detector
|
||||
# Twitch Highlight Detector 🎮
|
||||
|
||||
Pipeline automatizado para detectar y generar highlights de streams de Twitch y Kick.
|
||||
Sistema avanzado de detección de highlights para streams de Twitch usando VLM (Vision Language Models) y análisis de contexto.
|
||||
|
||||
## ✨ Características
|
||||
## 🎯 Características
|
||||
|
||||
- **Descarga automática** de VODs y chat
|
||||
- **Detección 2 de 3**: Chat saturado + Audio (gritos) + Colores brillantes
|
||||
- **Modo Draft**: Procesa en 360p para prueba rápida
|
||||
- **Modo HD**: Procesa en 1080p para calidad máxima
|
||||
- **Soporte GPU**: Preparado para NVIDIA (CUDA) y AMD (ROCm)
|
||||
- **CLI simple**: Un solo comando para todo el pipeline
|
||||
- **Detección de Gameplay Real**: Usa análisis visual para distinguir entre gameplay, selección de campeones y streamer hablando
|
||||
- **VLM Integration**: Compatible con Moondream, Video-LLaMA, Qwen2-VL
|
||||
- **Multi-Modal**: Combina Whisper (audio), Chat (texto), Video (visión) y Audio (picos)
|
||||
- **GPU Accelerated**: Optimizado para RTX 3050 (4GB) y RX 6800 XT (16GB)
|
||||
- **Pipeline Automatizado**: Descarga → Análisis → Generación de video en un solo comando
|
||||
|
||||
## 🚀 Uso Rápido
|
||||
|
||||
```bash
|
||||
# Modo Draft (360p) - Prueba rápida
|
||||
./pipeline.sh <video_id> <nombre> --draft
|
||||
# Detectar highlights en un stream
|
||||
python3 highlight_generator.py --video stream.mp4 --chat chat.json --output highlights.mp4
|
||||
|
||||
# Modo HD (1080p) - Alta calidad
|
||||
./pipeline.sh <video_id> <nombre> --hd
|
||||
# O usar el sistema completo con VLM
|
||||
python3 scene_detector.py # Detecta segmentos de gameplay
|
||||
python3 extract_final.py # Extrae highlights
|
||||
python3 generate_video.py --video stream.mp4 --highlights final_highlights.json
|
||||
```
|
||||
|
||||
### Ejemplo
|
||||
|
||||
```bash
|
||||
# Descargar y procesar en modo draft
|
||||
./pipeline.sh 2701190361 elxokas --draft
|
||||
|
||||
# Si te gusta, procesar en HD
|
||||
./pipeline.sh 2701190361 elxokas_hd --hd
|
||||
```
|
||||
|
||||
## 📋 Requisitos
|
||||
|
||||
### Sistema
|
||||
```bash
|
||||
# Arch Linux
|
||||
sudo pacman -S ffmpeg streamlink git
|
||||
|
||||
# Ubuntu/Debian
|
||||
sudo apt install ffmpeg streamlink git
|
||||
|
||||
# macOS
|
||||
brew install ffmpeg streamlink git
|
||||
```
|
||||
|
||||
### Python
|
||||
```bash
|
||||
pip install moviepy opencv-python scipy numpy python-dotenv torch
|
||||
```
|
||||
|
||||
### .NET (para TwitchDownloaderCLI)
|
||||
```bash
|
||||
# Descarga el binario desde releases o compila
|
||||
# https://github.com/lay295/TwitchDownloader/releases
|
||||
```
|
||||
|
||||
## 📖 Documentación
|
||||
## 📁 Archivos Principales
|
||||
|
||||
| Archivo | Descripción |
|
||||
|---------|-------------|
|
||||
| [README.md](README.md) | Este archivo |
|
||||
| [CONtexto.md](contexto.md) | Historia y contexto del proyecto |
|
||||
| [TODO.md](TODO.md) | Lista de tareas pendientes |
|
||||
| [HIGHLIGHT.md](HIGHLIGHT.md) | Guía de uso del pipeline |
|
||||
| `highlight_generator.py` | Detector híbrido unificado (recomendado) |
|
||||
| `scene_detector.py` | Detección de cambios de escena con FFmpeg |
|
||||
| `gpu_detector.py` | Análisis de frames en GPU |
|
||||
| `vlm_analyzer.py` | Análisis con VLM (Moondream/LLaVA) |
|
||||
| `chat_sync.py` | Sincronización de chat con video |
|
||||
| `6800xt.md` | **Guía completa para RX 6800 XT** |
|
||||
|
||||
## 🎮 Hardware Soportado
|
||||
|
||||
### RTX 3050 (4GB VRAM) - Configuración Actual
|
||||
- Modelo: Moondream 2B
|
||||
- Procesamiento: Frame por frame
|
||||
- Tiempo: ~20 min para 2 horas de video
|
||||
|
||||
### RX 6800 XT (16GB VRAM) - Mejor Opción
|
||||
- Modelo: Video-LLaMA 7B o Qwen2-VL 7B
|
||||
- Procesamiento: Batch de frames
|
||||
- Tiempo: ~5-8 min para 2 horas de video
|
||||
- Ver: `6800xt.md` para instrucciones completas
|
||||
|
||||
## 📊 Pipeline de Trabajo
|
||||
|
||||
```
|
||||
Video (2.3h)
|
||||
↓
|
||||
[Scene Detection] → Segmentos de 30s-5min
|
||||
↓
|
||||
[Clasificación] → GAMEPLAY / SELECT / TALKING / MENU
|
||||
↓
|
||||
[Filtrado] → Solo segmentos GAMEPLAY
|
||||
↓
|
||||
[Análisis Multi-Modal]
|
||||
- Whisper: Transcripción + Keywords
|
||||
- Chat: Picos de actividad
|
||||
- Audio: Detección de gritos
|
||||
- VLM: Confirmación visual
|
||||
↓
|
||||
[Extracción] → Mejores momentos de cada segmento
|
||||
↓
|
||||
[Generación] → Video final concatenado
|
||||
```
|
||||
|
||||
## 🔧 Instalación
|
||||
|
||||
### 1. Clonar el repo
|
||||
### Requisitos
|
||||
- Python 3.10+
|
||||
- CUDA/ROCm compatible
|
||||
- FFmpeg con CUDA
|
||||
|
||||
### Setup
|
||||
```bash
|
||||
git clone https://tu-gitea/twitch-highlight-detector.git
|
||||
cd twitch-highlight-detector
|
||||
# Entorno Python
|
||||
python3 -m venv vlm_env
|
||||
source vlm_env/bin/activate
|
||||
|
||||
# Dependencias base
|
||||
pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu118
|
||||
pip install transformers accelerate opencv-python pillow
|
||||
pip install openai-whisper scipy numpy
|
||||
|
||||
# Para RTX 3050 (actual)
|
||||
./install_vlm.sh
|
||||
|
||||
# Para RX 6800 XT (próximo)
|
||||
# Ver 6800xt.md
|
||||
```
|
||||
|
||||
### 2. Configurar credenciales
|
||||
## 📝 Configuración
|
||||
|
||||
### Variables de Entorno
|
||||
```bash
|
||||
cp .env.example .env
|
||||
# Edita .env con tus credenciales de Twitch
|
||||
export CUDA_VISIBLE_DEVICES=0 # Seleccionar GPU
|
||||
export PYTORCH_CUDA_ALLOC_CONF=max_split_size_mb:512
|
||||
```
|
||||
|
||||
### 3. Instalar dependencias
|
||||
```bash
|
||||
pip install -r requirements.txt
|
||||
```
|
||||
### Archivos de Configuración
|
||||
- `gameplay_scenes.json` - Segmentos de gameplay detectados
|
||||
- `highlights_*.json` - Timestamps de highlights
|
||||
- `transcripcion_*.json` - Transcripciones Whisper
|
||||
|
||||
### 4. Instalar TwitchDownloaderCLI
|
||||
```bash
|
||||
# Descargar desde releases
|
||||
curl -L -o TwitchDownloaderCLI https://github.com/lay295/TwitchDownloader/releases/latest/download/TwitchDownloaderCLI
|
||||
chmod +x TwitchDownloaderCLI
|
||||
sudo mv TwitchDownloaderCLI /usr/local/bin/
|
||||
```
|
||||
## 🎬 Salidas
|
||||
|
||||
## 🎯 Cómo Funciona
|
||||
El sistema genera:
|
||||
- `HIGHLIGHTS_FINAL.mp4` - Video de highlights (5-10 minutos)
|
||||
- `HIGHLIGHTS_FINAL.json` - Timestamps de clips
|
||||
- `gameplay_*.json` - Mapa de segmentos de gameplay
|
||||
|
||||
### Pipeline (2 de 3)
|
||||
## 🔬 Metodología
|
||||
|
||||
El sistema detecta highlights cuando se cumplen al menos 2 de estas 3 condiciones:
|
||||
### Detección de Gameplay
|
||||
Usa análisis multi-factor:
|
||||
1. **Variación de color** - Gameplay tiene más movimiento
|
||||
2. **Canal verde** - Mapa de LoL es predominantemente verde
|
||||
3. **Detección de bordes** - UI de LoL tiene bordes definidos
|
||||
4. **VLM** - Clasificación visual con modelo de lenguaje
|
||||
|
||||
1. **Chat saturado**: Muchos mensajes en poco tiempo
|
||||
2. **Audio intenso**: Picos de volumen (gritos, momentos épicos)
|
||||
3. **Colores brillantes**: Efectos visuales, cambios de escena
|
||||
### Detección de Highlights
|
||||
Combina 4 señales:
|
||||
1. **Rage keywords** - "puta", "mierda", "me mataron"
|
||||
2. **Picos de chat** - Mensajes/segundo
|
||||
3. **Picos de audio** - Volumen/gritos
|
||||
4. **Contexto temporal** - Extensión inteligente de clips
|
||||
|
||||
### Flujo
|
||||
|
||||
```
|
||||
1. streamlink → Descarga video (VOD)
|
||||
2. TwitchDownloaderCLI → Descarga chat
|
||||
3. detector_gpu.py → Analiza chat + audio + color
|
||||
4. generate_video.py → Crea video resumen
|
||||
```
|
||||
|
||||
## 📁 Estructura
|
||||
|
||||
```
|
||||
├── .env # Credenciales (noCommit)
|
||||
├── .gitignore
|
||||
├── requirements.txt # Dependencias Python
|
||||
├── main.py # Entry point
|
||||
├── pipeline.sh # Pipeline completo
|
||||
├── detector_gpu.py # Detector (chat + audio + color)
|
||||
├── generate_video.py # Generador de video
|
||||
├── lower # Script descarga streams
|
||||
├── README.md # Este archivo
|
||||
├── CONtexto.md # Contexto del proyecto
|
||||
├── TODO.md # Tareas pendientes
|
||||
└── HIGHLIGHT.md # Guía detallada
|
||||
```
|
||||
|
||||
## ⚙️ Configuración
|
||||
|
||||
### Parámetros del Detector
|
||||
|
||||
Edita `detector_gpu.py` para ajustar:
|
||||
## 🛠️ Troubleshooting
|
||||
|
||||
### Out of Memory
|
||||
```python
|
||||
--threshold # Sensibilidad (default: 1.5)
|
||||
--min-duration # Duración mínima highlight (default: 10s)
|
||||
--device # GPU: auto/cuda/cpu
|
||||
# Reducir batch_size o usar quantization
|
||||
from transformers import BitsAndBytesConfig
|
||||
quantization_config = BitsAndBytesConfig(load_in_4bit=True)
|
||||
```
|
||||
|
||||
### Parámetros del Video
|
||||
### Lento
|
||||
- Usar CUDA Graphs
|
||||
- Reducir resolución de frames (320x180 → 160x90)
|
||||
- Procesar en batches
|
||||
|
||||
Edita `generate_video.py`:
|
||||
### Precision baja
|
||||
- Aumentar umbral de detección
|
||||
- Usar modelo VLM más grande
|
||||
- Ajustar ponderaciones de scores
|
||||
|
||||
```python
|
||||
--padding # Segundos extra antes/después (default: 5)
|
||||
```
|
||||
## 📚 Documentación Adicional
|
||||
|
||||
## 🖥️ GPU
|
||||
|
||||
### NVIDIA (CUDA)
|
||||
```bash
|
||||
pip install torch torchvision --index-url https://download.pytorch.org/whl/cu121
|
||||
```
|
||||
|
||||
### AMD (ROCm)
|
||||
```bash
|
||||
pip install torch torchvision --index-url https://download.pytorch.org/whl/rocm7.1
|
||||
```
|
||||
|
||||
**Nota**: El procesamiento actual es CPU-bound. GPU acceleration es future work.
|
||||
|
||||
## 🔨 Desarrollo
|
||||
|
||||
### Tests
|
||||
```bash
|
||||
# Test detector con video existente
|
||||
python3 detector_gpu.py --video video.mp4 --chat chat.json --output highlights.json
|
||||
```
|
||||
|
||||
### Pipeline Manual
|
||||
```bash
|
||||
# 1. Descargar video
|
||||
streamlink "https://www.twitch.tv/videos/ID" best -o video.mp4
|
||||
|
||||
# 2. Descargar chat
|
||||
TwitchDownloaderCLI chatdownload --id ID -o chat.json
|
||||
|
||||
# 3. Detectar highlights
|
||||
python3 detector_gpu.py --video video.mp4 --chat chat.json --output highlights.json
|
||||
|
||||
# 4. Generar video
|
||||
python3 generate_video.py --video video.mp4 --highlights highlights.json --output final.mp4
|
||||
```
|
||||
|
||||
## 📊 Resultados
|
||||
|
||||
Con un stream de 5.3 horas (19GB):
|
||||
- Chat: ~13,000 mensajes
|
||||
- Picos detectados: ~139
|
||||
- Highlights útiles (>5s): 4-10
|
||||
- Video final: ~1-5 minutos
|
||||
- `6800xt.md` - Guía completa para RX 6800 XT
|
||||
- `contexto.md` - Contexto del proyecto
|
||||
- `GPU_ANALYSIS.md` - Análisis de rendimiento GPU
|
||||
|
||||
## 🤝 Contribuir
|
||||
|
||||
1. Fork el repo
|
||||
2. Crea una branch (`git checkout -b feature/`)
|
||||
3. Commit tus cambios (`git commit -m 'Add feature'`)
|
||||
4. Push a la branch (`git push origin feature/`)
|
||||
5. Abre un Pull Request
|
||||
1. Fork del repositorio
|
||||
2. Crear branch: `git checkout -b feature/nueva-funcionalidad`
|
||||
3. Commit: `git commit -am 'Agregar funcionalidad X'`
|
||||
4. Push: `git push origin feature/nueva-funcionalidad`
|
||||
5. Crear Pull Request
|
||||
|
||||
## 📝 Licencia
|
||||
|
||||
MIT License - Ver LICENSE para más detalles.
|
||||
MIT License - Libre para uso personal y comercial.
|
||||
|
||||
## 🙏 Créditos
|
||||
## 👥 Autores
|
||||
|
||||
- [TwitchDownloader](https://github.com/lay295/TwitchDownloader) - Chat downloading
|
||||
- [streamlink](https://streamlink.github.io/) - Video downloading
|
||||
- [MoviePy](https://zulko.github.io/moviepy/) - Video processing
|
||||
- [PyTorch](https://pytorch.org/) - GPU support
|
||||
- **IA Assistant** - Implementación inicial
|
||||
- **renato97** - Testing y requisitos
|
||||
|
||||
---
|
||||
|
||||
**Nota**: Para configuración específica de RX 6800 XT, ver archivo `6800xt.md`
|
||||
|
||||
Reference in New Issue
Block a user