cardstream
Acerca de

La idea es preguntar una vez por carta, no una vez por fotograma

El reconocimiento de cartas ya funciona. Apunta un buen modelo a una carta coleccionable y el nombre, el set y el número vuelven en medio segundo. Donde se rompe es al aplicarlo a vídeo: no por un problema técnico, sino por puro volumen.

El vídeo es, sobre todo, repetición. Una carta sostenida cuatro segundos a quince fotogramas por segundo son sesenta fotos de la misma carta, y preguntarle sesenta veces a un endpoint de identificación te devuelve sesenta veces la misma respuesta. Todos los pipelines ingenuos de streaming hacen exactamente eso, y por eso el análisis de directos tiene fama de ser algo que solo puede permitirse una plataforma con financiación.

cardstream existe para eliminar esa repetición. Es una pequeña máquina de estados entre tu vídeo y la llamada de reconocimiento, construida casi por completo con señales que calcula por sí misma: ¿se ha quedado quieta la escena?, ¿es la misma carta de hace un momento?, ¿hay siquiera una carta en el encuadre? La llamada se dispara cuando una carta realmente nueva se ha quedado quieta, y en ningún otro caso. Todo lo demás corre en hardware que ya tienes.

Las cuentas

Una llamada por carta, no por fotograma

Una hora de show a quince fotogramas por segundo (el máximo con el que está verificado el proyecto) y alrededor de cien cartas distintas delante del objetivo. Dos formas de analizar exactamente el mismo vídeo:

Fotograma a fotograma 54,000

llamadas de identificación: una por fotograma, la mayoría repitiendo una pregunta que ya se respondió hace un instante.

Con cardstream ~100

llamadas de identificación: una por carta distinta, sea cual sea tu tasa de fotogramas y por mucho que sostengas cada carta.

Unas 540 veces menos llamadas, y la diferencia no es un truco de los números: es todo el diseño. Mantén una carta quieta y el contador no se mueve. Sube la velocidad de la cámara y el contador no se mueve. El número de llamadas sigue a las cartas que muestras, no a las horas que transmites.

Quién está detrás

Quién lo mantiene en marcha

Hecho por gente que pone reconocimiento en producción

cardstream nace del equipo que está detrás del reconocimiento de coleccionables de Ximilar. Los endpoints de identificación a los que llama son los mismos que operamos en producción, así que el cliente y el servicio los mantienen las mismas personas.

El trabajo se hace a la vista

El paquete completo está en GitHub: la máquina de estados, las dos formas de despliegue y la interfaz del navegador. Nada de la lógica de decisión se esconde detrás de un servicio que no puedas inspeccionar.

Probado sin red

Toda la suite se ejecuta sin conexión, con dobles que sustituyen a los archivos de modelo y a las llamadas HTTP. Haz un fork del repositorio en un portátil sin clave de API y aun así sabrás si has roto algo.

Principios

Lo que el código no puede olvidar

  1. Una llamada por carta, no por fotograma

    Toda decisión de diseño empieza aquí. Si una señal puede calcularse en local, se ejecuta antes de la única llamada que sale de la máquina.

  2. Una sola copia de la lógica de decisión

    Cuándo llamar vive en un único módulo. No repartido entre un driver, un transporte y una interfaz donde tres personas pueden cambiarlo de tres maneras: un archivo, legible de una sentada.

  3. Los drivers se mantienen finos

    La planificación, el registro y la E/S son del driver; qué cuenta como carta nueva es del motor. Cambiar cómo llegan los fotogramas nunca altera en silencio cuándo sale una llamada.

  4. Nada bloquea el bucle de fotogramas

    Decodificación, detección, HTTP y disco corren fuera del bucle. Una identificación lenta descarta un fotograma; nunca convierte tu directo en un retraso que crece.

  5. Sin dependencia de proveedor, incluidos nosotros

    La llamada de identificación es un paso intercambiable detrás de una interfaz pequeña. Todas las compuertas, limitadores y cachés siguen funcionando si la apuntas a un sitio completamente distinto.

  6. Autoalojado por defecto

    Tu hardware, tu clave, tu vídeo. En modo cliente, lo único que sale de la máquina es un recorte por carta distinta, salvo que decidas guardar el show en tu propia cuenta de Ximilar.

Notas de campo

Lo que nos enseñaron las cartas

Parte de esto es tan poco intuitivo que lo dejamos escrito donde lo encontrará la siguiente persona: en el repositorio, junto al código al que afecta.

Una pista útil puede costarte precisión

Decirle al endpoint de qué juego es una carta desactiva su propio clasificador de sistema de escritura, que entonces asume alfabeto latino, así que una carta japonesa coincide sin avisar con su edición inglesa. Medido, no supuesto, y por eso indicar un juego sin sistema de escritura se trata como un error.

Un recorte algo holgado coincide mejor

Un corte ajustado al borde de la carta parece correcto y funciona peor. El recorte que se envía lleva un margen deliberado, porque un poco de contexto vale más que un borde limpio.

Recuperarse es mejor que fingir

Cuando una llamada supera su tiempo de espera, el pipeline se desatasca y sigue adelante en lugar de esperar un resultado que quizá nunca llegue. La limitación está documentada en el repositorio, no disimulada.

Código fuente y contribuciones

Léelo, ejecútalo, envía parches

El repositorio es público: un paquete de Python instalable con extras independientes y una interfaz de navegador. Los pesos del localizador y del embedding son nuestros, entrenados y publicados con licencia Apache-2.0 junto a cada versión. Los issues y los pull requests son bienvenidos, sobre todo los reportes de shows reales, que sacan a la luz cosas que ningún banco de pruebas encuentra.

El reconocimiento en sí es el endpoint de Ximilar y siempre lo será; esa es la parte que tiene detrás la base de datos de cartas. Todo lo que hay alrededor es tuyo para cambiarlo.

Código abierto. Autoalojado. Tu directo, tu stack.

Sin plataforma intermediaria ni licencias por puesto: conecta la API de Ximilar o tu propio sistema de identificación y cardstream lo llama una vez por cada carta distinta, no una vez por fotograma. Da igual si haces breaks en Whatnot, llevas un show al estilo de Fanatics Live o transmites tu propio live commerce: pon cardstream en marcha esta misma noche con el hardware que ya tienes.