自力で作れないものをJunieに作ってもらおう!
#開発 #junie #コーディングエージェント #ai #intellij
以前 動画の機械学習についておべんきょ でゲーム動画から画像を取り出して、
それをOCRにかけてテキストを取ろうとしたことがあった。
最終的に綺麗にはとれなかったんやけど、これに近いことをJunieの力を借りて出来ないかという挑戦
OCR自体に向き不向きがあるので、今回はゲーム内の物体検知をやっていく。
それがうまくいったら、物体検知とかからゲームのプレイの評価なんかも出来たらいいなーとは思うけど、
それはいったん後回しってことで。
プロンプト履歴
基本的にはJunieの変更をすべて受け入れる
ただ、README.mdを手動で書いたりとか、そういうところは自分で書く。
$ git init を実行
$ .gitignoreを作成し、IntelliJ関連ファイルの除外設定を追加
$ ここまでの変更をコミット。コミットログは日本語で書く
$ README.mdを作成し、コミットログは日本語で書くことをガイドラインに追加
ゲーム動画を分析して評価するツールを作ること、必要であれば学習のツールを作ること、動画のファイル形式くらいをざっと概要に書く
$ READMEに概要を書いた。概要に書くにはふさわしくない内容があれば、新しい見出しを作ってそちらに移動する
$ ここまでの変更をコミット
$ dataディレクトリを作り、.gitkeepを設置。また、.gitignoreにdata/.gitkeep以外のファイルを除外する設定を追加
$ pythonプロジェクトを初期化し、hello, worldをする
$ ここまでの変更をコミットする
$ ファイル保存時には末尾に空行を付けることをガイドラインに追加
$ 改行コードは \n で統一することをガイドラインに追加
$ ここまでの変更をコミット
dataディレクトリに1時間くらいのゲームのプレイ動画を設置
$ dataディレクトリ内の動画を読み取り、各Waveの開始時刻とそのWaveで持っている武器の情報を読み取ってテキストかCSVで出力するツールの作成
スプラトゥーンで登場するワードが登場して、かなり曖昧に命令したけど実行できるのか
数分とかからずに終わった
$ pip install -r requirements.txt
こっちの方がはるかに長い時間がかかった
pandsのインストール中と思われるタイミングでエラーが発生
$ pip install -r requirements.txt を実行するとエラーが発生
$ pip install -r requirements.txt
またもエラーが…
エラーメッセージをJunieに投げる
READMEにpipを更新する手順が追加された
$ python -m pip install --upgrade pip
$ pip install -r requirements.txt
またもエラー
エラーメッセージをJunieに投げる
徐々にnumpyやpandasのバージョンが下がっていってる
$ pip install -r requirements.txt
またもエラー
何回か実行してもエラーになるので、いったんこのプロンプトの実行前に戻す
$ dataディレクトリ内の動画を読み取り、暗転を検知し、その時間をCSVかテキストに出力するツールの作成
依存するライブラリを減らせるかなーってことで、暗転だけ検知するのをまずはやってみる
動いたけど、全フレームを読み込むから1時間のファイルの処理が終わらない
$ 暗転検知ツールで、何フレーム毎に読み込むかを設定できるうパラメータを追加する
$ python main.py --frame-skip 15
全フレーム読み込むより15倍の速度で終わるはず!
それでも5分待っても終わらない
$ 全体フレームのうち何%進んだかをプログレスバーで表示できるようにする
$ pip install -r requirements.txt
$ python main.py --frame-skip 30 --min-duration-frames 3
https://scrapbox.io/files/67edd93a6f19ec81c8d729f6.png
進捗のバーだけじゃなくて、何フレーム読み込んだか、毎秒何フレームくらい処理できてるかも出してくれてる
言われたこと以上をやってるのすごい
結局15分くらいかかるけど、期待する結果は得られた!
$ フレームスキップ数の設定を追加したので、最小フレーム数の設定を暗いと検知された回数に変更する
結局、 dark_frame_count += frame_skip って変更されたので、skipを30フレームにしたなら、min_durationを90にしたら3回連続くらい判定されたら暗転とする。って感じ
期待通りのものが出来た感じはある
$ ここまでの変更をコミットする
$ READMEに分析の対象としているスプラトゥーン3のサーモンランの概要を追加し、ツールの開発に必要な用語を記述する項目を追加する
いくつか正しくない情報があったので修正し、追加でいくつかの情報を手書き
$ README.mdに誤字があれば修正する
$ ここまでの変更をコミットする
$ dataディレクトリ内の動画ファイルを読み取り、ウェーブの開始をウェーブの修了を検知し、そのウェーブをクリアできたかと一緒にCSVかテキストファイルに出力する。ガイドラインはREADMEを参照のこと。
暗転毎に切ることは出来るようになった感じやけど、ウェーブごとではない
ジョブとウェーブの情報をREADME.mdに追加し、更にいい結果が出せるよう調整する
$ --frame-skip のデフォルト値は30にする
$ READMEにサーモンランの大まかな流れを追加したので、誤字脱字を修正しながら、適切な見出しを付けて整理する
$ wave_detector.pyはジョブの開始と終了を検知することは出来ているが、ウェーブの開始と終了を検知することができていない。ウェーブの開始と終了は暗転がはさまらないので、暗転だけを条件にすることはできない。READMEにサーモンランの流れを追加したので、これを参考に修正する
この方法だと適切に区切れなさそうなので、別のアプローチを考える。
$ READMEにサーモンランの大まかな流れを追加。誤字脱字を修正し、適切な見出しを付けたうえで、コミットする。コミットログは日本語で書く。
code:prompt
dataにある動画ファイルを読み取り、場面、ウェーブの状況、納品ノルマの状況、制限時間の状況、リザルトの結果をCSVかテキストに出力するツールを作成する。
場面の切り替わりでは、その場面がロビーでのマッチング、ウェーブ開始前、ウェーブ中、ウェーブ終了後、リザルト画面を判定する。
ウェーブの状況は現在がジョブの何ウェーブ目か、
納品ノルマの状況は、ノルマが何個で、現在何個納品しているか、
制限時間の状況は、現在のウェーブの残り時間が何秒か、
リザルトの結果は、そのジョブが成功か失敗か
を検知する。
プログラムのロジックだけでは難しいと考えられるため、文字検知や物体検知といった機械学習の技術を用いる必要があると予想される
このプロンプトに含まれた内容の意味が分からない場合、READMEを参照する。
それでも不明な場合、READMEに不明な項目を追加し、あとから内容を追加できるようにする。
一気にかなり長文の命令を投げてみた
$ pip install -r requirements.txt
OCR目的でtesseractが追加されてる
30フレーム間隔で実行したところ、合計45分くらいかかった
シーンの判定は大まかには出来ていた
ただ、Extra Waveという例外が発生したところで正しく動作しなくなった
ゲーム画面上にしか存在しない情報はやはり読み取れない。残り時間や、目標到達状況など
JunieにはAsk機能があるから試してみる
Ask 動画に表示されているタイマーや進捗の状況を読み取るツールを作ってほしい。そうなると文字認識が必要になる。どの位置に目的の情報がくるかなどをJunieに教えたいけど、どうやって教えたらいい?
現在のプロジェクト構造を考慮すると、以下の実装が最適です:
1. まずは設定ファイルによる座標指定を実装(最も簡単)
2. 次にGUIツールによる領域選択機能を追加(ユーザーフレンドリー)
3. 必要に応じてテンプレートマッチングや機械学習による検出を実装(より高度)
とのこと。最終的には物体検知などをして、プレイングの評価まで進めたいから、高度な機械学習を進めるためのツールを先に用意する必要がありそう
ここで一回仕切りなおして、別プロジェクトでサーモンランの物体検知学習用データ作成ツールを作ってもらう。
一言で書いたら意味不明なので
サーモンランのプレイング評価ツールが作りたい
プレイングを評価するためにゲームの情報を画面から判定する必要がある
ゲームの情報を画面から取り出すのに、動画処理や画像処理技術と機械学習を組み合わせる必要がある
機械学習のためには機械に学習させるデータが必要になる
このデータを作るためのツールが必要
ってことで、学習データを作るツールをJunieに作ってもらう方針に転換!
機械学習するためのデータを作成するツールをJunieに作ってもらう
詰まったところ
SDK設定
Junieを使うにはSDKにjavaを指定しておく必要があるが、
pythonを実行するにはSDKにpythonを指定しておく必要がある
Shift + Ctrl + Alt + Sでプロジェクトの設定を開く
ProjectのSDKにはjavaを
ModulesのModule SDKにはpythonを指定する
pip installを失敗し続ける
$ pip install -r requirements.txt
を何回実行しても失敗するタイミングがあった
結局最終的に明示的な依存ライブラリのバージョンを明記しないようにすることで解決できた
この辺はpythonの知識が乏しいから分からんねんけど、そんなに環境依存性強いもんなんかな
見切り発車ではゴールにたどり着けない
最終的に欲しいもの、それに必要なものをある程度想像しておく必要がある。
じゃないと、Junieに適当な命令を投げ続けても目標に近づけているのか分からない。
チェックポイントを設定し、そのチェックポイントを超えていけるようにする
ゴールだけ渡してあと全部よろしくは上手くいかない。
更新履歴
2025/04/04 機械学習するためのデータを作成するツールをJunieに作ってもらう を先に進める
2025/04/02 かきはじめ