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

6.5 KiB

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:

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):

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):

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