Encontrar Twitch Streamers en una partida de PUBG

imagen

Recientemente, junto con las repeticiones de minmax.gg/chickendinner , lanzamos una nueva función que muestra los videos transmitidos por los streamers de PUBG Twitch participantes. Para implementarlo, necesitábamos reconocer a los streamers de Twitch por sus nombres en el juego, lo que resultó ser una tarea bastante interesante.


Nuestra nueva función de Twitch en acción.

La probabilidad de que juegues en el mismo partido con el streamer


Antes de comenzar a desarrollar esta función, queríamos asegurarnos de que la probabilidad de un partido en el que uno de los jugadores transmitiera en Twitch fuera lo suficientemente grande como para justificar nuestros esfuerzos. Podemos hacer una estimación muy aproximada mirando el número de jugadores activos y comparándolo con el número de transmisiones activas.

En el momento de escribir este artículo, el juego transmitió en Twitch alrededor de 2100 usuarios, y en Steam había alrededor de 700 mil jugadores activos en PUBG. Esto significa que en ese momento los streamers representaban aproximadamente el 0.3% de la base de jugadores.


Dado que 100 personas juegan el partido con mayor frecuencia, la probabilidad de que al menos uno de ellos sea una serpentina es lo opuesto a la probabilidad de que nadie sea ​​una serpentina. Dado que la probabilidad de que el jugador no sea un streamer es del 99,7%, la probabilidad de que ninguno de los 100 jugadores sea un streamer es de 0,997 a la potencia de 100, es decir, 0,74. En otras palabras, en cualquier partido hay aproximadamente un 25 por ciento de posibilidades de encontrar al menos un jugador transmitiendo en Twitch.

Vale la pena señalar que podemos suponer en Twitch un fuerte cambio hacia la región de América del Norte en comparación con la base general de jugadores de PUBG, por lo que si ve partidos desde América del Norte, el porcentaje probablemente será mucho mayor.

Adivina los nombres


Ahora que sabemos que hay una buena posibilidad de encontrar un transmisor en cualquier partido elegido, ¿cómo sabemos si un jugador está transmitiendo un juego en Twitch?

Para obtener bonos adicionales, puede conectar su cuenta de Twitch al juego, pero, desafortunadamente, estos datos no están disponibles en la API de PUBG . Necesitamos otra forma de vincular el nombre del jugador al streamer en Twitch.

Veamos un transmisor hipotético con un nombre de cuenta de Mitch . Mitch juega regularmente en PUBG, pero su canal Twitch aún no ha alcanzado el nivel de vistas con el que sueña. Tras reflexionar, cambia su nombre en el juego a TwitchMitch . Ahora todos saben que Mitch transmite en Twitch.

Este principio es muy común, a veces con variaciones ligeramente diferentes: TTVMitch o Mitch_TV . Dichos nombres se pueden detectar mediante programación y determinar a partir de ellos una cuenta en Twitch, lo que nos permite recibir videos para mostrar en la repetición del partido.

Mapeo manual


Este enfoque nos da un muy buen punto de referencia, pero está lejos de ser suficiente. Los nombres de los streamers más populares no coinciden con este patrón. Para encontrarlos, debe vincular individualmente desde la cuenta PUBG al nombre de su canal de Twitch.

Para hacer frente a esto, comenzamos a buscar manualmente los streamers más populares en Twitch y a registrar los nombres de cuenta en el juego que son visibles en la pantalla. Si tienes suerte, podrás ver el momento en que el jugador está esperando en el lobby, donde puedes encontrar el nombre en varios lugares:


Sin embargo, es mucho más probable encontrar un jugador que ya esté jugando en el partido. Si juega con el equipo, su nombre siempre será visible en la esquina inferior izquierda:


Sin embargo, es necesario calcular cuál de los nombres le pertenece, porque no siempre será el mismo. La forma más fácil de hacer esto es mirar el minimapa en la esquina inferior derecha, que se centra en el marcador del jugador, marcado con un número y un color.

El enfoque más holístico será estudiar la parte inferior central de la pantalla, donde puede encontrar lo siguiente:


Este texto contiene el nombre de la cuenta, la versión actual del juego, los últimos 6 caracteres del identificador del partido y la región del servidor. Vale la pena considerar que no siempre es tan limpio como se muestra arriba, porque generalmente se mezcla con lo que sucede detrás de él en la pantalla. El texto es pequeño, lo que significa que puede ser borroso y mal leído cuando ocurren artefactos serios de video. Pero tarde o temprano captará un marco lo suficientemente bueno como para leerlo.

Quizás ya esté pensando en lo que nos dimos cuenta en ese momento: ¡esta es una tarea ideal para una solución informática automática!

Visión por computadora


En condiciones ideales, el algoritmo OCR debe reconocer lo que está escrito en el texto a continuación. Después de probar un par de opciones, finalmente decidimos que la API de Google Cloud Vision ofrece los mejores resultados. Podemos crear un script que haga lo siguiente:

  1. Obtiene una transmisión de PUBG en vivo y recorta la parte inferior de la captura de pantalla ( Twitch API proporciona una imagen de vista previa de tamaño completo, por lo que no necesitamos tomar capturas de pantalla nosotros mismos).
  2. Envía una captura de pantalla a la API de Cloud Vision y analiza el nombre del jugador a partir del resultado.
  3. Verifica a través de la API de PUBG que el reproductor existe y luego guarda la cuenta de Twitch de la cuenta de PUBG en nuestra base de datos.

Esto funcionará muy bien, excepto por un pequeño detalle: Google solicita $ 1.5 por cada mil solicitudes a la API de Cloud Vision. En cualquier momento, puede haber alrededor de 2-3 mil transmisores activos, por lo que incluso una sola ejecución del script nos costará hasta $ 4.5. Teniendo en cuenta el hecho de que es probable que obtengamos muchas capturas de pantalla con texto ilegible, deberá ejecutar el script varias veces para obtener una cantidad significativa de datos. En otras palabras, este enfoque se convertirá rápidamente en una tarea muy costosa. Afortunadamente, podemos organizar solicitudes de Cloud Vision un poco más inteligentes. Podemos aprovechar el hecho de que Google solicita el pago de solicitudes individuales, independientemente del tamaño de la imagen. Es decir, podemos conectar muchas imágenes a la cuadrícula:


Luego enviamos esta cuadrícula de imagen a la API y adjuntamos el texto resultante a la unidad de cinta correspondiente al área en la que se encontró el texto.

Existe un límite en el tamaño de los datos enviados por Google al mismo tiempo, por lo que tomaremos 300 imágenes pegadas para una solicitud. Esto significa que ahora podemos ejecutar el mismo script 300 veces al mismo precio que antes, lo que hace que este enfoque sea muy viable y efectivo.

Completa los últimos huecos


Nuestro guión funcionó durante un par de semanas, y hasta ahora hemos obtenido 25 mil comparaciones entre Twitch y PUBG. Sin embargo, el script no pudo vincular a algunos streamers, por ejemplo, aquellos que tienen su propia superposición en la parte superior del texto en la parte inferior de la pantalla.

Tenemos que vincular estos streamers manualmente. En lugar de hacer esto por nuestra cuenta, decidimos agregar una función que permita a nuestros visitantes enviar el nombre de cualquier transmisor que no encontraron en nuestra base de datos:


Estaremos encantados de seguir experimentando con los métodos para obtener estos pares de cuentas, y aún más queremos encontrar nuevas formas de utilizar la información existente. ¡Espere nuevos artículos de nosotros!

Source: https://habr.com/ru/post/438294/


All Articles