【Poke-Controller】画像認識コマンド拡張(マスク/二値化/色域指定/座標取得)

画像認識機能の拡張ファイルに関する解説です。
Poke-Controller-Modifiedでの使用を想定しています。

公開している色孵化プログラム等で使用していますが、他プログラムに流用いただけます。

できるようになること

  • マッチング位置の座標値を取得する

  • マッチング対象範囲を座標で指定する

  • マッチング対象範囲をマスクで指定する

  • 画像を二値化して判定を行う

  • 画像を指定の色範囲での二値化して判定を行う




コマンド一覧


コマンド特徴一覧

できること一覧
設定項目の一覧

isContainTemplate

一致画像の有無を返す

# 記述例 マッチング範囲を座標で指定
self.isContainTemplate('SV_util_shiny_mark.png', area=[0,100,1100,1280])

isContainTemplatePosition

一致画像の左上の座標を返す

# 記述例 マッチング範囲をマスク画像で指定
self.isContainTemplatePosition('SV_AutoHatching\inbox_row_space.png',threshold=0.8, mask_path='SV_AutoHatching\mask_boxarea.png')

isContainTemplatePositionBGR

一致画像の左上の座標を返す(指定の色のみ抽出する)

# 記述例 色域指定でボックスの黄色背景を抽出・マッチング範囲をマスク画像で指定
self.isContainTemplatePositionBGR('SV_util\_box_focus_cell_bg.png', threshold=0.8,  lower=[0,190,200], upper=[50,255,255], mask_path='SV_util\_mask_boxarea_partyarea.png')



マスク画像の設定について

白黒の画像を使用します。
座標指定ので範囲指定より、複雑な形での範囲指定が可能です。

黒=判定に使用したくない部分
白=判定に使用したい部分

ボックスのポケモンがいる部分のみを使用したい場合のマスク画像
マスク画像を使用し、判定に使用したくない部分を黒く塗りつぶすことで範囲を制限する


色域指定の設定について

抽出したい色をRGB値で指定します。
RGB値の下限、上限値を[B,G,R]で指定します。

RGBの方が馴染みがある方が多そうなので、RGBでの指定を採用しています。
環境ごとに表示される色が異なるので、うまくいかない場合は各自ご調整ください。

ボックスの黄色背景部分のみ抽出した結果(二値化されます)
上記の色の場合、[B,G,R]は[0,190,200]になります



導入

1.PythonCommandBaseTrim.py を配置

【配布場所】ポケモンSV自動化配付物\Commands
【配置場所】Poke-Controller-Modified\SerialController\Commands


2.使用したいpyファイルに継承する

ImageProcPythonCommandTrimクラス

from Commands.PythonCommandBaseTrim import ImageProcPythonCommandTrim
 (略) 
class AutoHatching_pkmnSV(ImageProcPythonCommandTrim):
 (略) 

# 座標指定してマッチング
    self.isContainTemplate('filepath',area=[0,300,0,200]): 
    # area=[top,bottom,left,right] 
# マッチング位置を座標で取得、マッチングなしはNoneが返る 
   self.isContainTemplatePosition('filepath'): 
   # return=[top,left]




具体的な使用例

配付している孵化プログラム等で使用しているので、そちらをご参照下さい。
※utilファイル内でImageProcPythonCommandTrimクラスは継承しています



謝辞

Poke-Controller-Modified

https://github.com/Moi-poke/Poke-Controller-Modified
大変便利なツールを開発いただきありがとうございます。

その他

  • 本プログラムは個人の趣味で作成しているものです。

  • ツールやデバイスの導入支援は行っておりません。多くの紹介記事等がすでに存在しているので、そちらをご参照下さい。

  • 自己責任で実施ください。
    データの破損等が発生した等があった場合でも責任は負いかねます。

  • Pythonのコーディングルール等についてきちんと勉強をしたことがないためなんとなく雰囲気で行ってます。不適切なコーディングをしている部分があるかもしれませんがご容赦ください。



いいなと思ったら応援しよう!