Localizando Twitch Streamers em uma partida do PUBG

imagem

Recentemente, juntamente com os replays minmax.gg/chickendinner , lançamos um novo recurso que exibe os vídeos transmitidos pelos streamers participantes do PUBG Twitch. Para implementá-lo, precisamos reconhecer os streamers do Twitch por seus nomes no jogo, o que acabou sendo uma tarefa bastante interessante.


Nosso novo recurso do Twitch em ação.

A probabilidade de você jogar na mesma partida com o streamer


Antes de começarmos a desenvolver esse recurso, queríamos ter certeza de que a probabilidade de uma partida em que um dos jogadores transmitisse no Twitch fosse grande o suficiente para justificar nossos esforços. Podemos fazer uma estimativa bastante aproximada, analisando o número de participantes ativos e comparando-o com o número de transmissões ativas.

No momento da redação deste artigo, o jogo transmitia no Twitch cerca de 2100 usuários, e no Steam havia cerca de 700 mil jogadores ativos no PUBG. Isso significa que, naquele momento, as serpentinas representavam aproximadamente 0,3% da base de jogadores.


Dado que 100 pessoas jogam a partida com mais frequência, a probabilidade de que pelo menos uma delas seja uma serpentina é o oposto da probabilidade de que ninguém seja uma serpentina. Como a probabilidade de o jogador não ser um streamer é de 99,7%, a probabilidade de nenhum dos 100 jogadores ser um streamer é de 0,997 à potência de 100, ou seja, 0,74. Em outras palavras, em qualquer partida, há uma chance de aproximadamente 25% de encontrar pelo menos um jogador transmitindo no Twitch.

Vale ressaltar que podemos assumir no Twitch uma forte mudança em direção à região da América do Norte em comparação com a base geral de jogadores do PUBG. Portanto, se você assistir a jogos da América do Norte, a porcentagem provavelmente será muito maior.

Adivinhe os nomes


Agora que sabemos que há uma boa chance de encontrar uma serpentina em qualquer partida, como sabemos se um jogador está transmitindo um jogo no Twitch?

Para bônus adicionais, você pode conectar sua conta do Twitch ao jogo, mas, infelizmente, esses dados não estão disponíveis na API do PUBG . Precisamos de outra maneira de vincular o nome do jogador ao streamer no Twitch.

Vejamos uma serpentina hipotética com um nome de conta Mitch . Mitch toca regularmente no PUBG, mas seu canal no Twitch ainda não alcançou o nível de visualizações que ele sonha. Após refletir, ele muda seu nome no jogo para TwitchMitch . Agora todo mundo sabe que Mitch transmite no Twitch.

Esse princípio é muito comum, às vezes com variações ligeiramente diferentes: TTVMitch ou Mitch_TV . Esses nomes podem ser detectados programaticamente e determinados a partir deles uma conta no Twitch, permitindo-nos receber vídeo para exibição no replay da partida.

Mapeamento Manual


Essa abordagem nos fornece um ponto de referência muito bom, mas está longe de ser suficiente. Os nomes dos streamers mais populares não correspondem a esse padrão. Para encontrá-los, você deve vincular individualmente da conta do PUBG ao nome do canal do Twitch.

Para lidar com isso, começamos a procurar manualmente as serpentinas mais populares do Twitch e a registrar os nomes das contas do jogo que são visíveis na tela. Se você tiver sorte, poderá capturar o momento em que o jogador está esperando no lobby, onde você pode encontrar o nome em vários lugares:


No entanto, é muito mais provável encontrar um jogador que já esteja jogando na partida. Se ele jogar com o time, o nome dele sempre será visível no canto inferior esquerdo:


No entanto, é necessário calcular qual dos nomes pertence a ele, porque nem sempre será o mesmo. A maneira mais fácil de fazer isso é observando o minimapa no canto inferior direito, centralizado no marcador do jogador, marcado com um número e cor.

A abordagem mais holística será estudar a parte inferior central da tela, onde você pode encontrar o seguinte:


Este texto contém o nome da conta, a versão atual do jogo, os últimos 6 caracteres do identificador da partida e a região do servidor. Vale a pena considerar que nem sempre é tão limpo como mostrado acima, porque geralmente se mistura com o que está acontecendo atrás da tela. O texto é pequeno, o que significa que pode ser borrado e mal lido quando ocorrem artefatos de vídeo sérios. Mas, mais cedo ou mais tarde, você verá um quadro bom o suficiente para lê-lo.

Talvez você já esteja pensando no que percebemos naquele momento - essa é uma tarefa ideal para uma solução automática de computador!

Visão computacional


Sob condições ideais, o algoritmo de OCR deve reconhecer o que está escrito no texto abaixo. Depois de tentar algumas opções, finalmente decidimos que a API do Google Cloud Vision fornece os melhores resultados. Podemos criar um script que faça o seguinte:

  1. Recebe uma transmissão ao vivo do PUBG e corta a parte inferior da captura de tela (a API do Twitch fornece uma imagem de visualização em tamanho real, para que não precisemos fazer capturas de tela por conta própria).
  2. Envia uma captura de tela para a API do Cloud Vision e analisa o nome do player do resultado.
  3. Verifica através da API do PUBG que o player existe e salva a conta do Twitch da conta do PUBG em nosso banco de dados.

Isso funcionará muito bem, exceto por um pequeno detalhe: o Google solicita US $ 1,5 para cada mil solicitações à API do Cloud Vision. A qualquer momento, pode haver cerca de 2-3 mil streamers ativos, portanto, mesmo uma única execução de script nos custará até US $ 4,5. Considerando o fato de que provavelmente obteremos muitas capturas de tela com texto ilegível, você precisará executar o script várias vezes para obter uma quantidade significativa de dados. Em outras palavras, essa abordagem rapidamente se tornará um empreendimento muito caro. Felizmente, podemos organizar solicitações para o Cloud Vision um pouco mais inteligentes. Podemos aproveitar o fato de o Google solicitar pagamento por solicitações individuais, independentemente do tamanho da imagem. Ou seja, podemos conectar muitas imagens à grade:


Em seguida, enviamos essa grade de imagem para a API e anexamos o texto resultante à unidade de fita correspondente à área em que o texto foi encontrado.

Há um limite no tamanho dos dados enviados pelo Google ao mesmo tempo, portanto, coletaremos 300 imagens coladas para uma solicitação. Isso significa que agora podemos executar o mesmo script 300 vezes pelo mesmo preço de antes, o que torna essa abordagem muito viável e eficaz.

Preencha as últimas lacunas


Nosso script funcionou por algumas semanas e, até agora, fizemos 25 mil comparações entre o Twitch e o PUBG. No entanto, o script não pôde vincular alguns streamers, por exemplo, aqueles que têm sua própria sobreposição na parte superior do texto na parte inferior da tela.

Temos que ligar esses streamers manualmente. Em vez de fazer isso por conta própria, decidimos adicionar uma função que permite que nossos visitantes enviem o nome de qualquer serpentina que eles não encontrem em nosso banco de dados:


Teremos o maior prazer em continuar experimentando os métodos para obter esses pares de contas e, ainda mais, queremos encontrar novas maneiras de usar as informações existentes. Espere novos artigos de nós!

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


All Articles