-
Notifications
You must be signed in to change notification settings - Fork 42
既存の認識シーンの調整、テスト
シーンクラスは、 IkaLog がビデオキャプチャデバイスや動画ファイルなどから入力したフレームを解析し、意図したフレームであるか(マッチしているか)を判断します。また、マッチしている場合には、そのシーン上にある情報(数値や文字列)を解析しデータとして IkaLog コンテキストに情報を代入します。
シーンクラスはこれまで画面の状態ごとにひとつのクラスとして作成していましたが、一部シーンでは処理内容が増えてきたため、もっと小さな粒度のクラスに分割する方針です(例:ゲーム中のタイマーアイコン、塗りカウンタ、やっつけた/やられた表示などはこれまで1クラスで処理していましたが将来的にはひとつひとつ別のクラスに分割します)
シーンクラスを Main として実行する場合は原則として PNG などの画像ファイルを引数として指定可能なように作成してあります(します)。シーンクラスのソースコードを Main として実行し、特定のフレームをそのクラスがどう解釈するのかを標準出力にアウトプットすることで、画像の False-Positive が発生した場合などに問題が再現するかをとりあえず確認したり、原因を改善するために1フレームのみ処理するために利用できます。
※ カレントディレクトリの ikalog モジュールを利用するため
dhcp44-82:IkaLog_github hasegaw$ export PYTHONPATH=.
dhcp44-82:IkaLog_github hasegaw$ python3 ikalog/scenes/result_detail.py screenshots/ikabattle_20150906_1010.png
start model.train 972
done model.train
Loaded weapons recoginization model.
matched [ True] analyzed True result lose fest False
rank 25 udemae None 1/1 weapon スプラローラーコラボ score 1131 , team 1 rank_in_team 1
rank 27 udemae None 3/2 weapon N-ZAP89 score 1103 , team 1 rank_in_team 2
rank 35 udemae None 6/2 weapon スプラローラーコラボ score 1052 , team 1 rank_in_team 3
rank 29 udemae None 0/2 weapon ボールドマーカー score 903 , team 1 rank_in_team 4
rank 27 udemae None 0/2 weapon プロモデラーRG score 1214 , team 2 rank_in_team 1
rank 39 udemae None 2/4 weapon プロモデラーRG score 738 *, team 2 rank_in_team 2
rank 30 udemae None 2/2 weapon スプラシューターコラボ score 519 , team 2 rank_in_team 3
rank 6 udemae None 3/4 weapon スプラシューターコラボ score 451 , team 2 rank_in_team 4
^CTraceback (most recent call last):
File "ikalog/scenes/result_detail.py", line 369, in <module>
cv2.waitKey()
KeyboardInterrupt
dhcp44-82:IkaLog_github hasegaw$
IkaLog では画面のきまった場所にきまったデータが出ているか判断するために IkaMatcher クラスをよく使います。画面認識で反応が鈍い、誤反応が多い場合には IkaMatcher のスコアを確認することがまず大事です。シーンクラスを Main として実行する場合には IkaMatcher クラスのデバッグモードを True にするようにしておくとよいでしょう。 IkaMatcher の調整に関しては IkaMatcher を確認してください。
dhcp44-82:IkaLog_github hasegaw$ python3 ikalog/scenes/game_start.py /Users/hasegaw/Pictures/vlcsnap-2015-10-16-15h59m45s117.png
IkaMatcher: result=False raito BG 0.115 FG 0.771 (threshold BG 0.300 FG 0.950) label:map:タチウオパーキング
IkaMatcher: result=True raito BG 0.003 FG 0.997 (threshold BG 0.300 FG 0.950) label:map:モズク農園
IkaMatcher: result=False raito BG 0.073 FG 0.894 (threshold BG 0.300 FG 0.950) label:map:ネギトロ炭鉱
IkaMatcher: result=False raito BG 0.116 FG 0.865 (threshold BG 0.300 FG 0.950) label:map:アロワナモール
IkaMatcher: result=False raito BG 0.100 FG 0.843 (threshold BG 0.300 FG 0.950) label:map:デカライン高架下
IkaMatcher: result=False raito BG 0.117 FG 0.896 (threshold BG 0.300 FG 0.950) label:map:Bバスパーク
IkaMatcher: result=False raito BG 0.075 FG 0.920 (threshold BG 0.300 FG 0.950) label:map:ハコフグ倉庫
IkaMatcher: result=False raito BG 0.079 FG 0.908 (threshold BG 0.300 FG 0.950) label:map:シオノメ油田
IkaMatcher: result=False raito BG 0.100 FG 0.787 (threshold BG 0.300 FG 0.950) label:map:モンガラキャンプ場
IkaMatcher: result=False raito BG 0.101 FG 0.935 (threshold BG 0.300 FG 0.950) label:map:ホッケふ頭
IkaMatcher: result=False raito BG 0.080 FG 0.851 (threshold BG 0.300 FG 0.950) label:map:ヒラメが丘団地
IkaMatcher: result=False raito BG 0.089 FG 0.842 (threshold BG 0.300 FG 0.950) label:map:マサバ海峡大橋
IkaMatcher: result=True raito BG 0.009 FG 0.993 (threshold BG 0.300 FG 0.950) label:rule:ガチエリア
IkaMatcher: result=False raito BG 0.087 FG 0.915 (threshold BG 0.300 FG 0.950) label:rule:ガチヤグラ
IkaMatcher: result=False raito BG 0.124 FG 0.845 (threshold BG 0.300 FG 0.950) label:rule:ガチホコバトル
IkaMatcher: result=False raito BG 0.170 FG 0.827 (threshold BG 0.300 FG 0.950) label:rule:ナワバリバトル
{'mask': <ikalog.utils.matcher.IkaMatcher object at 0x10d89e978>, 'name': 'モズク農園', 'file': 'masks/nawabari_mozuku.png'} {'map': {'mask': <ikalog.utils.matcher.IkaMatcher object at 0x10d89e978>, 'name': 'モズク農園', 'file': 'masks/nawabari_mozuku.png'}, 'rule': {'mask': <ikalog.utils.matcher.IkaMatcher object at 0x10d922f98>, 'name': 'ガチエリア', 'file': 'masks/gachi_tachiuo.png'}}
新たなシーンを作成する場合には、このような利用が可能なようコーディングをお願いします。標準出力への出力フォーマットなどについて細かな基準はありませんので、シーンの特徴ごとに開発者が検証に利用できる形となっていれば OK です。