diff --git a/docs-tech/game-vision-companion/index.md b/docs-tech/game-vision-companion/index.md new file mode 100644 index 0000000..b2a5e44 --- /dev/null +++ b/docs-tech/game-vision-companion/index.md @@ -0,0 +1,155 @@ +--- +sidebar_position: 2 +title: ゲーム画面をリアルタイム翻訳するAIアプリを作った話 +description: ローカルVision LLMを使って、海外ゲームの画面をリアルタイムに翻訳するWindowsアプリを作った。 +hide_table_of_contents: false +displayed_sidebar: null +--- + +# ゲーム画面をリアルタイム翻訳するAIアプリを作った話 + +## きっかけ + +海外ゲームやってると、シナリオやクエストのテキストが全部英語(あるいはそれ以外の言語)で、雰囲気で進めちゃうことない?自分もそうだったんだけど、ちゃんとストーリーを理解しながらプレイしたいなと思って、リアルタイム翻訳できるツールを作ることにした。 + +「リアルタイム翻訳ソフトなんてもうあるじゃん」って思うかもしれないけど、既存のものは自分が求めるレベルに達してなかった。具体的には: + +- **リアルタイム性** — ゲームの進行を止めずに翻訳してほしい +- **ゲーム体験を損なわない** — 翻訳UIがゲームの邪魔になるのは本末転倒 +- **精度** — OCR+翻訳がちゃんと使えるレベルであること + +最近のVision LLM(画像を理解できるAI)はOCR+翻訳の精度がかなり上がってて、しかもVRAM 16GBあれば十分動く。ゲーム用とは別にGPUマシンもあったから、じゃあ作ってみるかと。 + +## 何ができるのか + +**Game Vision Companion** — Windows PCの画面をリアルタイムにキャプチャして、ローカルのVision LLMで分析・翻訳するアプリ。 + +![Game Vision Companionのスクリーンショット](./screenshot.png) + +### メイン機能:リアルタイム翻訳 + +一番力を入れたのがこれ。 + +- **翻訳エリアの自由指定** — 画面上の好きな場所をドラッグで範囲選択。会話ウィンドウだけ、とかクエストログだけ、みたいに自分で決められる +- **半透明オーバーレイ** — 翻訳結果がゲーム画面の上に半透明で表示される。別ウィンドウとして外に出すこともできる +- **テキストがない時は自動で薄くなる** — 翻訳するテキストがない場面では、ウィンドウがさらに薄くなってゲームの邪魔にならない + +この「テキストがない時はウィンドウを薄くする」ってのが地味に大事で、常時表示だとゲーム体験を損なうんだよね。必要な時だけ存在感を出して、不要な時は消える。これがやりたかった。 + +### おまけ機能 + +翻訳がメインだけど、他にも2つのモードがある: + +- **👥 友達モード** — 一緒にゲーム見てる友達みたいにリアクションしてくれる +- **🎙️ 実況モード** — ゲーム実況風の解説をしてくれる + +正直、この2つはまだまだ調整が必要。いつ喋らせるかのタイミングがうまくコントロールできてなくて、ずっと喋りかけてくるとちょっとうざい。ここは今後の課題。 + +### その他の機能 + +- **画像差分検出** — 画面に変化がない時は分析をスキップしてトークンを節約 +- **VOICEVOX音声合成** — AIの応答を音声で読み上げ(オプション) +- **フルスクリーン対応** — DXCamによるDirectXゲームキャプチャ +- **exe配布** — PyInstallerでビルドして配布可能 + +## アーキテクチャ + +``` +┌─────────────────┐ LAN ┌──────────────────┐ +│ ゲーミングPC │ ◄─────────► │ AIサーバー │ +│ (Windows) │ HTTP API │ (5060ti 16GB) │ +│ │ │ │ +│ Game Vision │ │ Ollama │ +│ Companion │ │ qwen3-vl:8b │ +│ ・画面キャプチャ │ │ -instruct │ +│ ・オーバーレイ │ │ │ +└─────────────────┘ └──────────────────┘ +``` + +ポイントは **ゲーム用PCとAI推論を別マシンに分けてる** こと。 + +ゲーム中にローカルでLLM推論も回すとGPU負荷がキツい。だから推論は別マシン(RTX 5060ti 16GB)のOllamaサーバーに任せて、ローカルネットワーク越しにAPIを叩く構成にしてる。LAN内だからレイテンシもほぼ気にならない。 + +## なぜ qwen3-vl:8b-instruct なのか + +Vision LLMのモデル選定はいくつか試した結果: + +| モデル | VRAM | 速度 | OCR精度 | 翻訳品質 | 総合 | +|--------|------|------|---------|---------|------| +| `qwen3-vl:2b-instruct` | ~4 GB | ◎ | △ | △ | 実用的じゃない | +| `qwen3-vl:8b-instruct` | ~8 GB | ○ | ◎ | ◎ | **ベストバランス** | + +2bモデルは速度は速いけど、OCRの精度がゲームのフォントに対して不安定で、翻訳品質も微妙だった。8bモデルなら16GB VRAMで余裕を持って動くし、OCR精度と翻訳品質のバランスがちょうどいい。 + +## 技術スタック + +| 要素 | 技術 | +|------|------| +| 言語 | Python 3.11+ | +| GUI | PyQt6 | +| 画面キャプチャ | MSS / DXCam | +| Vision LLM | Ollama (qwen3-vl:8b-instruct) | +| 音声合成 | VOICEVOX(オプション) | +| 配布 | PyInstaller (exe) | + +## 必要なもの + +- **ゲーミングPC** — Windows 10/11 +- **AIサーバー** — VRAM 16GB以上のGPU搭載マシン + Ollama + - 同一PCでもいけるけど、ゲーム中のGPU負荷を考えると別マシン推奨 +- **ローカルネットワーク** — ゲーミングPCとAIサーバーが同じLAN内 + +:::tip ゲーミングPCだけでやりたい場合 +VRAMに余裕があるなら(24GB以上)、同一PC内のOllamaでも動く。ただしゲームのfpsに影響する可能性はある。 +::: + +## 使い方 + +### 1. AIサーバー側(Ollama) + +```bash +# Ollamaインストール +curl -fsSL https://ollama.com/install.sh | sh + +# Vision モデルをダウンロード +ollama pull qwen3-vl:8b-instruct + +# 外部からアクセスできるように起動 +OLLAMA_HOST=0.0.0.0:11434 ollama serve +``` + +### 2. ゲーミングPC側 + +アプリを起動して: + +1. Ollama サーバーのアドレスを設定(例: `http://192.168.1.xxx:11434`) +2. 翻訳エリアをドラッグで指定 +3. 開始ボタンを押す + +あとはゲームするだけ。翻訳結果が半透明オーバーレイで表示される。 + +## やってみて思ったこと + +### 良かったところ + +- **Vision LLMの進化がすごい** — ゲーム画面のフォントをちゃんとOCRして、文脈を理解した翻訳ができる。数年前じゃ考えられなかった +- **ローカル推論の安心感** — クラウドAPIに画面を送らなくていい。プライバシー的にも、レイテンシ的にも +- **ゲーム体験を損なわない** — 半透明オーバーレイ + 自動フェードの組み合わせで、ゲームの邪魔にならない翻訳を実現できた + +### 課題 + +- **友達・実況モードのタイミング制御** — いつ喋らせるかの塩梅が難しい。常時喋ると鬱陶しいし、黙りすぎると意味がない +- **フォントによるOCR精度のブレ** — ゲームによって使われるフォントが違うので、精度にバラつきがある +- **GPUが余ってる前提** — 正直、AI推論用のGPUが別途必要ってのはハードルが高い + +## まとめ + +「海外ゲームをちゃんと理解しながらプレイしたい」という個人的な欲求から作ったアプリだけど、Vision LLMの実用性を実感できるいいプロジェクトになった。 + +特にOllamaのおかげで、ローカルVision LLMのセットアップが `ollama pull` 一発で済むのが本当にありがたい。翻訳精度もリアルタイム性も、もう実用レベルに来てると思う。 + +GPUの余裕がある人は、ぜひ試してみてほしい。 + +--- + +*この記事は2026年2月時点の情報です。*