#背景
社内のシステム開発者向けにテスト自動化システムを構築・運用している。(SikuliX + Testablish)
その中で日常的に出てくる技術課題ややりたいことをメモ書き。
Sikuliが楽しい!
#課題
SikuliはOSSのRPAツールである。
となると、RPAツールにありがちな環境差異での画像のちょっとしたズレによる認識失敗がとても気になる。
実際、Win10&Edgeで画面解像度やツール設定を同一にしても、モニタの接続有無や細かいバージョン差ですぐ失敗になってしまう事例が多い。テスト自動化の大敵は冪等性が中々確保し辛い点である。一方で手動テスト(人)の場合は、多少の差異があっても曖昧さを頭で解釈して作業を進めることが出来る。(ので、ずるい。ただし、それが品質を悪くすることもある) Sikuliにも多少の寛容さを求めたいところである。
#対応
Sikuliの画像認識(OpenCV)には、曖昧さを設定できるオプションがある。
ならば始めは精確さを求めて探索し、徐々に引き下げて曖昧さを増やしていくようにしてはどうか。
また、精確さはデフォルト0.7になっているらしいが、それも厳密にいえばどうかと思う。(同一画面上の似た別要素を誤認識することもある) やはり0.99辺りから始めるのが論理的に良い気がする。
考えたロジック
認識率0.99から始め、見つからない場合は認識率を0.1ずつ下げて判定する。(0.4をMinとする)
#目的
RaiMan氏曰く『Sikuli is God's eye』とのことで、神のような寛容さを持った、多少の画像のズレは許容できる画像認識を実現する。
#内容
以下実装で検証。
-----------------------
import sys
dir = os.getcwd()
acc = 0.99
saveFileName = "ファイル名"
saveFilePath = os.path.join(dir, saveFileName)
while acc > 0.4:
if exists(Pattern(saveFilePath).similar(acc)):
find(Pattern(saveFilePath).similar(acc)).highlight()
wait(1)
highlightAllOff()
find(Pattern(saveFilePath).similar(acc)).click()
break
else:
acc = acc - 0.1
wait(1)
-----------------------
#結果 or 気付いた点
多少のズレでも認識できるようになった!!(対象画像を80%へ縮めても特定可能)
文字の判定は苦手(線で描かれており、面積的に比率が少ないため? 文字はOCR機能の方がよさげ)
画像認識はOCRに比べ各段に早い
#結論
RPAでの画像認識操作では必須かも