# プロジェクト概要
### 目的、背景
趣味の格闘ゲームにてマイナーなキャラクターを使用していると参考にできる動画が少ないという問題に陥ったことがありました。
大会動画ではなく配信者の動画の方がエンジョイ勢としては参考になることが多いのですが、1本数時間の配信でも自分が見たいキャラクター同士の対戦部分がないということがザラにありました。
そこで特定の配信者さんの特定のキャラクター同士が戦っている部分だけをピックアップして見れるようなサービスを作成すれば自分や同じような悩みを持っている人の助けになるのではないかと思い作成しました。
### 規模感、チーム構成、担当した役割
期間は企画からコーディングまですべて含め3カ月で一人で担当しました。
### 使用技術や開発環境
使用した技術としましては以下になります
フロント:Nextjs,Typescript, Tailwindcss
データ集め:Python
画像認識の学習に使用したモデル:Yolov11
# 取り組んだ課題
### どんな課題だったか
課題1:80キャラクター以上存在するゲームですべてのキャラクターを判断させるための学習済みモデル作成。
課題2:平均1つの動画が2~3時間のものに対し画像認識をおこなうため、如何に効率よく画像認識を行い終わらせるか。
### 技術的なアプローチや工夫した点
課題1に対しておこなったアプローチや工夫:
- 80数キャラ分の画像が必要であり、すべて手動で集めていると時間がかかりすぎるため、動画URLを入力するとランダムなフレーム画像を指定枚数分取得するプログラムを作成し、効率的に集めた。
- アノテーションは初めは人力で行ったが、ある程度画像認識の判断ができ始めてからは新しい画像に対して画像認識させ、その領域をアノテーションのフォーマットで出力させるようにすることで、間違っているアノテーションを修正するだけでいいような流れを作成した。
課題2に対しておこなったアプローチや工夫:
- 工夫した点としましては対戦ゲームの特徴を利用することで1動画あたりの調査時間を短縮しました。
対戦ゲームは右上に7分のタイマーがあるため戦っているキャラクターが分かれば後は開始時間を逆算できます。そのため動画をあえて後ろから検出開始することで、キャラクターが認識でき次第タイマーの時間から対戦開始時間を計算しそこまで動画を進めることで速度向上を図りました。
また対戦はどれくらい早くても30秒はかかるという特徴を生かし、検出したフレーム内にキャラクターが存在しなければ30秒進めるという処理を入れることでより処理速度向上に努めました。そのおかげもあり2時間程度の動画であれば10~20数秒で検出することができるものを作成することができました。
# 取り組みの成果
結果として人力で配信者の動画から見たい部分を見つける場合と比べて、時間を99%以上削減することができました。
またPC、スマホ、タブレットから見れるようにレスポンシブ対応も行ったため、いつでも時間が空いた際にキャラクター対策ができるようになりとても満足度の高いものを作成することができました。
今後の展望としてログイン機能を付けて、他人の動画ではなく自分の動画を非公開で調査できるようにできたらなということを考えております。