Zuckende Streamer in einem PUBG-Match finden

Bild

Vor kurzem haben wir zusammen mit den Wiederholungen von minmax.gg/chickendinner eine neue Funktion veröffentlicht, mit der die von den teilnehmenden PUBG Twitch-Streamern ausgestrahlten Videos angezeigt werden. Um es zu implementieren, mussten wir Twitch-Streamer an ihren Namen im Spiel erkennen, was sich als ziemlich interessante Aufgabe herausstellte.


Unsere neue Twitch-Funktion in Aktion.

Die Wahrscheinlichkeit, dass Sie im selben Match mit dem Streamer spielen


Bevor wir mit der Entwicklung dieser Funktion begannen, wollten wir sicherstellen, dass die Wahrscheinlichkeit eines Spiels, in dem einer der Spieler auf Twitch gestreamt hat, groß genug ist, um unsere Bemühungen zu rechtfertigen. Wir können eine sehr grobe Schätzung vornehmen, indem wir die Anzahl der aktiven Spieler betrachten und sie mit der Anzahl der aktiven Sendungen vergleichen.

Zum Zeitpunkt des Schreibens sendete das Spiel auf Twitch ungefähr 2100 Benutzer, und auf Steam gab es ungefähr 700.000 aktive Spieler in PUBG. Dies bedeutet, dass zu diesem Zeitpunkt Streamer ungefähr 0,3% der Spielerbasis ausmachten.


Wenn man bedenkt, dass 100 Personen das Match am häufigsten spielen, ist die Wahrscheinlichkeit, dass mindestens einer von ihnen ein Streamer ist, das Gegenteil der Wahrscheinlichkeit, dass niemand ein Streamer ist. Da die Wahrscheinlichkeit, dass der Spieler kein Streamer ist, 99,7% beträgt, beträgt die Wahrscheinlichkeit, dass keiner der 100 Spieler ein Streamer ist, 0,997 hoch 100, d. H. 0,74. Mit anderen Worten, in jedem Spiel besteht eine Wahrscheinlichkeit von ungefähr 25 Prozent, dass mindestens ein Spieler auf Twitch streamt.

Es ist erwähnenswert, dass wir bei Twitch eine starke Verlagerung in Richtung Nordamerika im Vergleich zur allgemeinen Basis der PUBG-Spieler annehmen können. Wenn Sie also Spiele aus Nordamerika sehen, wird der Prozentsatz wahrscheinlich viel höher sein.

Errate die Namen


Jetzt, da wir wissen, dass es eine gute Chance gibt, in einem bestimmten Spiel einen Streamer zu finden, woher wissen wir, ob ein Spieler ein Spiel auf Twitch streamt?

Für zusätzliche Boni können Sie Ihr Twitch-Konto mit dem Spiel verbinden. Leider sind diese Daten nicht über die PUBG-API verfügbar. Wir brauchen eine andere Möglichkeit, den Spielernamen an den Streamer in Twitch zu binden.

Schauen wir uns einen hypothetischen Streamer mit einem Mitch- Kontonamen an. Mitch spielt regelmäßig in PUBG, aber sein Twitch-Kanal hat noch nicht das Niveau erreicht, von dem er träumt. Nach dem Nachdenken ändert er seinen Namen im Spiel in TwitchMitch . Jetzt weiß jeder, dass Mitch auf Twitch streamt.

Dieses Prinzip ist sehr verbreitet, manchmal mit leicht unterschiedlichen Variationen: TTVMitch oder Mitch_TV . Solche Namen können programmgesteuert erkannt und daraus ein Konto bei Twitch ermittelt werden, sodass wir Videos zur Anzeige in der Wiederholung des Spiels erhalten können.

Manuelle Zuordnung


Dieser Ansatz gibt uns einen sehr guten Bezugspunkt, ist aber bei weitem nicht genug. Die Namen der beliebtesten Streamer stimmen nicht mit diesem Muster überein. Um sie zu finden, müssen Sie vom PUBG-Konto aus individuell auf den Namen ihres Twitch-Kanals verlinken.

Um dies zu bewältigen, haben wir begonnen, manuell nach den beliebtesten Streamern auf Twitch zu suchen und die Namen der Spielkonten aufzuzeichnen, die auf dem Bildschirm angezeigt werden. Wenn Sie Glück haben, können Sie den Moment einfangen, in dem der Spieler in der Lobby wartet, wo Sie den Namen an mehreren Stellen finden können:


Es ist jedoch viel wahrscheinlicher, einen Spieler zu finden, der bereits im Spiel spielt. Wenn er mit der Mannschaft spielt, ist sein Name immer in der unteren linken Ecke sichtbar:


Es muss jedoch berechnet werden, welcher der Namen ihm gehört, da er nicht immer gleich ist. Der einfachste Weg, dies zu tun, besteht darin, auf die Minikarte in der unteren rechten Ecke zu schauen, die auf der Markierung des Spielers zentriert ist und mit einer Zahl und Farbe markiert ist.

Der ganzheitlichste Ansatz besteht darin, den zentralen unteren Teil des Bildschirms zu untersuchen, in dem Sie Folgendes finden:


Dieser Text enthält den Kontonamen, die aktuelle Version des Spiels, die letzten 6 Zeichen der Übereinstimmungskennung und die Serverregion. Es ist zu bedenken, dass es nicht immer so sauber ist wie oben gezeigt, da es sich normalerweise mit dem vermischt, was dahinter auf dem Bildschirm passiert. Der Text ist klein, was bedeutet, dass er bei schwerwiegenden Videoartefakten unscharf und schlecht lesbar sein kann. Aber früher oder später werden Sie einen Rahmen finden, der gut genug ist, um ihn zu lesen.

Vielleicht denken Sie bereits darüber nach, was wir damals realisiert haben - dies ist eine ideale Aufgabe für eine automatische Computerlösung!

Computer Vision


Unter idealen Bedingungen sollte der OCR- Algorithmus erkennen, was im folgenden Text geschrieben steht. Nachdem wir einige Optionen ausprobiert hatten, entschieden wir schließlich, dass die Google Cloud Vision-API die besten Ergebnisse liefert. Wir können ein Skript erstellen, das Folgendes ausführt:

  1. Ruft eine Live-PUBG-Sendung ab und schneidet den unteren Rand des Screenshots aus ( Twitch API bietet ein Vorschaubild in voller Größe, sodass wir keine Screenshots selbst machen müssen).
  2. Sendet einen Screenshot an die Cloud Vision-API und analysiert den Namen des Spielers aus dem Ergebnis.
  3. Überprüft über die PUBG-API, ob der Player vorhanden ist, und speichert dann das Twitch-Konto aus dem PUBG-Konto in unserer Datenbank.

Dies funktioniert bis auf ein kleines Detail hervorragend: Google verlangt 1,5 US-Dollar pro tausend Anfragen an die Cloud Vision-API. Zu jedem Zeitpunkt können ungefähr 2-3.000 aktive Streamer vorhanden sein, sodass selbst ein einzelner Skriptlauf bis zu 4,5 US-Dollar kostet. Angesichts der Tatsache, dass wir wahrscheinlich viele Screenshots mit unlesbarem Text erhalten, müssen Sie das Skript mehrmals ausführen, um eine signifikante Datenmenge zu erhalten. Mit anderen Worten, ein solcher Ansatz wird schnell zu einem sehr kostspieligen Unterfangen. Glücklicherweise können wir Anfragen für Cloud Vision etwas intelligenter organisieren. Wir können die Tatsache nutzen, dass Google die Zahlung für einzelne Anfragen anfordert, unabhängig von der Größe des Bildes. Das heißt, wir können viele Bilder mit dem Raster verbinden:


Dann senden wir dieses Bildraster an die API und hängen den resultierenden Text an das Bandlaufwerk an, das dem Bereich entspricht, in dem der Text gefunden wurde.

Die Größe der von Google gleichzeitig gesendeten Daten ist begrenzt. Daher nehmen wir 300 zusammengeklebte Bilder für eine Anfrage auf. Dies bedeutet, dass wir jetzt 300 Mal dasselbe Skript zum gleichen Preis wie zuvor ausführen können, was diesen Ansatz sehr praktikabel und effektiv macht.

Füllen Sie die letzten Lücken aus


Unser Skript hat ein paar Wochen funktioniert, und bisher haben wir 25.000 Vergleiche zwischen Twitch und PUBG erzielt. Das Skript konnte jedoch einige Streamer nicht binden, z. B. diejenigen, die über dem Text am unteren Bildschirmrand eine eigene Überlagerung haben.

Wir müssen diese Streamer manuell binden. Anstatt dies alleine zu tun, haben wir beschlossen, eine Funktion hinzuzufügen, mit der unsere Besucher den Namen eines Streamers senden können, den sie nicht in unserer Datenbank gefunden haben:


Wir werden gerne weiter mit den Methoden experimentieren, um solche Kontenpaare zu erhalten, und noch mehr möchten wir neue Wege finden, um vorhandene Informationen zu nutzen. Erwarten Sie neue Artikel von uns!

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


All Articles