Files
twitch-highlight-detector/intentos.md
renato97 4cd1d475fe Sesión 19 Feb: OCR intentos, MCP op.gg, timestamps manuales, video final muertes
- Agregado intentos.md con registro de todos los fallos
- Actualizado contexto.md con sesión de noche
- MCP op.gg instalado (no funcionó - 0 matches)
- OCR con Tesseract y EasyOCR (falló - texto muy pequeño)
- Video final generado: HIGHLIGHTS_MUERTES_COMPLETO.mp4
- Juegos separados: JUEGO_1/2/3_COMPLETO.mp4
- 10 muertes secuenciales: 0/1→0/10
- Scripts de extracción automática con timestamps
2026-02-19 23:29:55 +00:00

231 lines
6.5 KiB
Markdown

# Registro de Intentos y Fallos - Sesión 19 Feb 2026
## Resumen de la Sesión
Objetivo: Crear un sistema automático para detectar muertes en streams de Twitch de League of Legends y generar highlights.
**Video analizado:** Stream de elxokas - 2:17:17 (2.3 horas)
**Hardware:** RTX 3050 (4GB) → Objetivo RX 6800 XT (16GB)
**Resolución:** 360p (desarrollo) → 1080p60 (producción)
---
## Intentos Realizados
### 1. MiniMax API para Análisis de Transcripción
**Estado:** ✅ Funcionó parcialmente
**Intento:** Usar MiniMax (API compatible con Anthropic) para analizar la transcripción de 2.3 horas y detectar momentos importantes.
**Problemas:**
- No detectó todas las muertes
- Generó falsos positivos
- No tenía acceso visual al KDA del juego
**Resultado:** Detectó ~10 momentos pero no eran específicamente muertes.
---
### 2. OCR con Tesseract
**Estado:** ❌ Falló
**Intento:** Usar Tesseract OCR para leer el contador KDA del HUD.
**Problemas:**
- Texto del KDA muy pequeño en 1080p
- Números se confunden (1 vs 7, 0 vs 8)
- Requiere preprocesamiento complejo que no funcionó consistentemente
- Lecturas erráticas: detectaba "143" en lugar de "0/1/0"
**Intentos de mejora:**
- Diferentes cortes del HUD
- Preprocesamiento de imagen (contraste, threshold)
- Regiones específicas del KDA
- Ninguno funcionó 100% confiable
---
### 3. OCR con EasyOCR + GPU
**Estado:** ❌ Falló
**Intento:** Usar EasyOCR con soporte CUDA para mejor precisión.
**Problemas:**
- Aún así, el texto del KDA es demasiado pequeño
- Lee todo el HUD, no solo el KDA
- Resultados inconsistentes entre frames
- Detecta texto como "211/5" en lugar del KDA real
**Mejora intentada:** Recortar zona específica del KDA (300x130 px)
- Seguía leyendo mal los dígitos
---
### 4. Búsqueda Binaria Temporal con OCR
**Estado:** ⚠️ Parcial
**Intento:** Algoritmo de búsqueda binaria para encontrar exactamente cuándo cambia el KDA.
**Problemas:**
- El OCR no era confiable para detectar el cambio
- Detectaba muertes que no existían
- Saltos de 0→3, 1→6, etc.
- Valores absurdos: 2415470 deaths
---
### 5. Detección de Escenas (Scene Detection)
**Estado:** ✅ Funcionó para segmentación
**Intento:** Usar FFmpeg scene detection para dividir el video.
**Problemas:**
- Detectaba cambios de escena pero no específicamente muertes
- Útil para segmentar pero no para el objetivo específico
---
### 6. Análisis de Audio/Whisper
**Estado:** ✅ Transcripción OK, detección parcial
**Intento:** Usar Whisper para transcribir y buscar keywords de muerte.
**Problemas:**
- Detecta "me mataron", "muerto", etc. pero hay falsos positivos
- El streamer dice esas palabras cuando no muere
- No correlaciona 100% con el KDA real
**Resultado:** Útil para candidatos, no para confirmación.
---
### 7. MCP op.gg
**Estado:** ❌ Falló integración
**Intento:** Usar el MCP oficial de op.gg para obtener datos de la API.
**Problemas encontrados:**
- Repositorio clonado e instalado correctamente
- Conexión al MCP exitosa
- Perfil del jugador encontrado: XOKAS THE KING#KEKY
- **Fallo crítico:** No devuelve matches recientes (array vacío)
- API posiblemente requiere autenticación o tiene restricciones
- Endpoints alternativos de op.gg bloqueados (requieren headers específicos)
**Comandos ejecutados:**
```bash
git clone https://github.com/opgginc/opgg-mcp.git
npm install
npm run build
node consultar_muertes.js # Devolvió 0 matches
```
**Error específico:** MCP conectado pero `data.games` viene vacío.
---
### 8. Detección Híbrida (OCR + Audio + Heurísticas)
**Estado:** ⚠️ Mejor resultado pero no perfecto
**Intento:** Combinar múltiples señales:
- OCR del KDA
- Análisis de audio (palabras clave)
- Validación de rango de tiempo (dentro de juegos)
- Filtrado de valores absurdos
**Problemas:**
- Complejidad alta
- Aún requiere validación manual
- No 100% automático para VPS
---
### 9. Validación Manual con Frames
**Estado:** ✅ Funcionó pero no es automático
**Intento:** Extraer frames en timestamps específicos y verificar visualmente.
**Proceso:**
1. Extraer frame en tiempo X
2. Recortar zona KDA
3. Verificar manualmente si hay muerte
4. Ajustar timestamp
**Resultado:** Encontramos la primera muerte real en **41:06** (KDA cambia de 0/0 a 0/1)
**Limitación:** Requiere intervención humana.
---
## Solución Final Implementada
Después de múltiples intentos fallidos con OCR y MCP, se optó por:
1. **Separar juegos completos** (no highlights)
2. **Usar timestamps manuales validados** basados en el análisis previo
3. **Generar clips individuales** con esos timestamps
4. **Concatenar en video final**
**Archivos generados:**
- `HIGHLIGHTS_MUERTES_COMPLETO.mp4` (344MB, 10 muertes)
- `JUEGO_1_COMPLETO.mp4` (2.1GB)
- `JUEGO_2_COMPLETO.mp4` (4.0GB)
- `JUEGO_3_COMPLETO.mp4` (2.9GB)
- `muertes_detectadas.json` (metadatos)
---
## Lecciones Aprendidas
### Lo que NO funciona para este caso:
1. **OCR puro** (Tesseract/EasyOCR) - Texto del HUD de LoL es muy pequeño
2. **MCP op.gg** - No devuelve datos recientes sin autenticación adicional
3. **Detección puramente por audio** - Muchos falsos positivos
4. **Búsqueda binaria con OCR** - Acumula errores de lectura
### Lo que SÍ funcionó:
1. **Separación de juegos** por timestamps
2. **Detección de escenas** para segmentar
3. **Transcripción Whisper** para encontrar candidatos
4. **Validación manual** (aunque no es automático)
### Para VPS automatizado:
Se necesitaría:
- API Key de Riot Games oficial (no op.gg)
- O entrenar un modelo de ML específico para detectar dígitos del KDA
- O usar un servicio de OCR más avanzado (Google Vision, AWS Textract)
---
## Código que Funciona
### Detector de juegos (funcional):
```python
games = [
{"numero": 1, "inicio": "00:17:29", "fin": "00:46:20", "campeon": "Diana"},
{"numero": 2, "inicio": "00:46:45", "fin": "01:35:40", "campeon": "Diana"},
{"numero": 3, "inicio": "01:36:00", "fin": "02:17:15", "campeon": "Mundo"}
]
```
### Extracción de clips (funcional):
```bash
ffmpeg -ss $timestamp -t 20 -i input.mp4 \
-c:v h264_nvenc -preset fast -cq 23 \
-r 60 -c:a copy output.mp4
```
---
## Conclusión
**Para automatización 100% en VPS:** Se requiere integración con API oficial de Riot Games (developer.riotgames.com) usando Riot API Key. El OCR no es suficientemente confiable para los dígitos pequeños del HUD de LoL en streams.
**Solución intermedia actual:** Timestamps manuales validados + extracción automática.
---
*Sesión: 19 de Febrero 2026*
*Desarrollador: Claude Code (Anthropic)*
*Usuario: Editor del Xokas*