同じネタで何回投稿するのか?と指摘されてしまうかもしれませんが、私なりに頑張った成果の一つなので許してください。
ゲームのプレイ動画からユーザー名を黒塗りするWindowsアプリを作りました!
私がずっとプレイしているFinalFantasyXIVのプレイ動画からユーザー名を黒塗りしてくれるWindowsアプリを作りました。
一番下の参考リンク先に処理結果の動画なども掲載しているので、良かったら見てみてください。
FinalFantasyXIVとは?
スクウェア・エニックスが運営している14番目のファイナルファンタジーでMMORPGです。PS4、PS5、PC、Steam、Mac、XBOXのクロスプラットフォームで展開されており、プラットフォーム問わずに同じサーバーでプレイが可能、プレイヤーのアバターとなるキャラクターには多くの種族、20を超えるの戦闘ジョブ、クラフターやギャザラーなどの生産系ジョブ、ファイナルファンタジーの代名詞ともいえる召喚獣(FF14では蛮神)戦、ファイナルファンタジーらしいボリュームがあり重厚なメインシナリオ、MMOでありながらひとりでもコンテンツを進めることができるサポーターシステム、ゲーム内ゲームが楽しめるゴールドソーサー、様々なコーディネートを楽しめるミラージュプリズムシステム、自分だけの家や部屋を自分好みにカスタマイズできるハウジングシステム、などなど、コアなゲーマーからライトなプレイヤーまで幅広い客層をターゲットとした大人気オンラインゲームです。
通常ゲーム3本分とも言われるメインシナリオ3章分はフリープレイで無料でも遊べます!
1/6まではダウンロード版が30%オフらしいので、自分へのクリスマスプレゼントにも最適かもしれません!
私は青魔道士が好きなので、よかったら一緒に青魔道士しましょう!
なぜゲームプレイ動画からユーザー名を黒塗りしたいのか?
ゲームプレイをyoutubeなどの動画サイトにアップする時、自分以外のユーザー名を表示していても規約違反などにはならないのですが、動画投稿者の意図とは別の視点、例えばあるプレイヤーの失敗を嘲笑するようなことになると、投稿者にその意図はなくても問題視されてしまいます。
また最近の動画配信文化などから、ゲーム動画を配信する際には他のプレイヤーは匿名状態でなければならない、というような暗黙でありながら鉄の掟のようなものが確かに存在していると感じています。
そのような配信文化を考慮してか、FF14にはユーザー名をイニシャル表示にする、というような機能が備わっていたりしますが、全てそのような設定にしてしまうと他のユーザーをNPCのように扱ってしまうようで、ゲームプレイから一期一会の会話、MMOらしさというものは失われてしまうのではないか、と考えています(個人の感想です)。
そこで、実際のゲームプレイではフルネームを表示しながらも、録画した動画や配信では、ユーザー名を見えなくすることができれば、MMOらしいゲームプレイ感を損ねず、また他のユーザーのプライバシーにも配慮することができるのではないか?と考えました。
どうやって動画からユーザー名を黒塗りするか?
動画配信の対応(リアルタイム対応)も行いたいところですが、技術的なハードルが高いので、まずは録画したゲーム動画からユーザー名を見つけ、黒塗りする方法を検討しました。
動画からユーザー名の検出方法
動画からユーザー名を見つける方法は、OCRやテンプレートマッチングなどいろんな方法を考えましたが、最終的には物体検出を利用しています。当初はMMDetectionとDETRを利用していましたが実際のアプリでの処理速度が遅かったため、現在はUltralytics yolov8を利用しています。
ゲーム画面のユーザー名は実世界には存在しないもので、物体検出できるものかと当初は少し心配でしたが、画面中には確実に存在するためか学習を行うことで物体検出することが可能でした。
検出部分の黒塗りなどの処理はOPENCV-pythonを利用しています。
動画の入出力処理
当初はmoviepyを利用していましたが、現在はffmpeg-pythonでffmpegを利用しています。物体検出でGPUを利用して処理速度の向上を図っているのと同様に、動画の入出力にもGPUのハードウェアエンコーダを利用しています。
ユーザーへの提供方法
動画をアップロードしてもらい、サーバーで処理をして、動画を出力する、というような形も考えてましたが、動画ファイルのファイルサイズや物体検出処理でGPUが必須ということ、また利用頻度があまり高くなさそうなことから、Windowsクライアントでのアプリケーションとしました。
pythonで開発しており、UIはFlet、EXE化にはpyinstallerを利用しています。
苦労したことや楽しかったことなど
苦労した点は処理速度の改善です。
開発当初はユーザー名を消すことを優先しすぎていたため、アプリケーションの処理速度が3FPSとかなり遅いものとなってしまっていました。
処理速度改善のために、ultralytics yolov8、ffmpeg-pythonなどライブラリの変更をしたり、ultralyticsのdiscordに教えを請いに伺ったり、できることは何でもしようとトライしました。
現在は20~25FPSで処理できるようにまで改善していますが、そろそろ限界なので、C#かC++での再実装を検討しています。
楽しかったことは、動画からユーザー名を黒塗りするWindowsアプリを作れたことですね。自分が妄想していたことが実現できたというのは良い体験になりました。
ご参考