- 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
231 lines
6.5 KiB
Markdown
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*
|