PlayerUnknown’s Battlegrounds ライブ・ストリームのコンピューター・ビジョンを実装する

概要

PUBG Rotisserie は、絶大な人気を誇るマルチプレイヤー・ビデオ・ゲーム、PlayerUnknown’s Battlegrounds (PUBG) のプレイヤー動画ストリームを特色とする Web アプリケーションです。この Web アプリケーションは、Twitch 上で検出されたライブ・ストリームに対して光学式文字認識 (OCR) 処理を適用し、少数のプレイヤーしか残っていないストリームと、ゲームの最期に近いストリームを識別します。コンピューター・ビジョンを実装して動画からデータを抽出する方法はさまざまにありますが、このコード・パターンで、その 1 つを学んでください。

説明

Twitch などの Web サイト上では、コンピューター・ゲーム・プレイヤーのプロや常連が、ゲームの実況をストリーム配信しています。Twitch 上では常に何千ものプレイヤーがストリーム配信していて、何十万人もの閲覧者がこれらのストリームを見ています。

PUBG は、1 人称視点または 3 人称視点でプレイするシューティング・ゲームです。孤島に放たれた 100 人のプレイヤーが、現地調達した武器や装備を使って最後の生き残りになるまで殺し合いを続けます。1 度負けたプレイヤーが復活することはありません。勝ち残るのはプレイヤー 1 人、または 1 チームだけです。ハンガー・ゲームがバトルフィールドと出会ったようなエキサイティングなゲームですが、途中が比較的退屈だという難点があります。

もうすぐ勝敗が決まるという頃 (生き残っているプレイヤーが 25 人以下になった頃) のストリームは、見ていてかなりハラハラドキドキしますが、戦っているプレイヤーがまだ 90 人もいる段階、あるいは 50 人に減ったとしても、ゲームのストリームを見るのはそれほど面白いものではありません。このコード・パターンでは、コンピューター・ビジョンを実装して動画からデータを抽出するさまざまな方法のうちの 1 つを紹介します。PUBG Rotisserie アプリケーションをローカルに、またはコンテナー内にセットアップする方法を学んでください。さらに、このコード・パターンを通してコンテナー・オーケストレーション・プラットフォーム Kubernetes を舞台にした開発にも乗り出すことができます。

PUBG Rotisserie は、Twitch 上で配信されているすべてのストリームを監視し、ストリームを切り替えて最もエキサイティングなストリームを表示します。したがって、ロビーやスポーツ・バーで、2 つ目のモニターまたは TV に最もエキサイティングなストリームを映し続けることができます。

コンピューターを使用してゲームのストリーミング空間全体を監視するというアプリケーションは、目下、PUBG Rotisserie 以外にない新しいものです。バーチャル・ディレクターのようなアルゴリズムを使用してストリームを切り替えることが、さらなる革新的ステップとなります。

フロー

フロー

  1. メイン・アプリケーションでは、Twitch API を使用して PUBG ストリームのリストをフェッチします。Livestreamer というオープンソース・プロジェクトを使用して、リストに含まれる各ストリームを短時間録画します。
  2. FFmpeg を使用して、短時間の録画から単一のフレームを抽出します。
  3. 抽出したフレームを ImageMagick によってトリミングし、生き残っているプレイヤーだけが画像に含まれるようにします。
  4. 処理された画像が OCR サービスにプッシュされます。OCR サービスでは Tesseract というオープンソース OCR エンジンを使用して、画像上のプレイヤーの数を読み取ります。
  5. 変換されたデータが JSON ブロックに格納されてメイン・アプリに渡されます。アプリは 15 分間隔で別のストリーム・リストをフェッチします。
  6. ユーザーには、生き残っているプレイヤーの数が最も少ないストリームが表示されます。このフロントエンドは、メインの Node.js アプリで対応します。ユーザーのクライアントは、生き残っているプレイヤーの数がさらに少ないストリームがあるかどうかを 15 分間隔でチェックし、該当するストリームが見つかったら、そのストリームに表示を切り替えます。

手順

Find the detailed steps for this pattern in the README.