私は自動化ツールを作成しようとしており、スクリーンショットを取り、ユーザー入力を記録するタイプの記録を試しています。アイデアは、ユーザーがスナップショットを撮り、「送信」ボタンのスナップショットの四角を強調表示することです。再生中、プログラムは開いているウィンドウのスクリーンショットを撮り、スナップショットを検索してボタンの座標を見つけます。したがって、画像からボタンの正確な (または非常に近い) 画像を検索するアルゴリズムが必要です。私がこれまでに見つけたアルゴリズムは、画像の類似性を比較しますが、サブイメージでそれを見つけることができず、オブジェクト認識のアルゴリズムは、私が見つけようとしている「オブジェクト」がほぼ完全に一致することを考えると、少し過剰に思えます。何か案は?
3 に答える
次のツールが役立ちます。
- プレハブ: http://github.com/prefab
- シクリ: http://www.sikuli.org
必要なのは、効率的な特徴抽出方法です。これは探しているものによって異なりますが、この画像の [送信] ボタンを探していると仮定しましょう:
このボタンの特徴の 1 つは、上下に一対の平行な線分が含まれていることです。同じことが 2 つのテキスト入力フィールドにも当てはまりますが、ボタンの場合、このオフセットはちょうど 17 ピクセルです。
これは、ソース画像の最大ピクセル値とそれ自体を垂直方向に 17 ピクセルずらして計算すると得られるものです。
[送信] ボタンが実線の水平線として表示されるようになりました。これは、画像にしきい値を設定し、切れ目のない一連の黒いピクセルを探すことで、非常に簡単に検出できます。参考までに、10 ピクセルの水平方向のモーション ブラーを適用し、グレー レベル 128 でしきい値処理を行った結果を次に示します。
このプロセスにより、候補者の位置が非常に迅速に特定されます。その後、これらの場所を 2D 畳み込みやOCRなどのより強力な手法にさらすことができ、パフォーマンスをあまり低下させることはありません。
ボタン画像の特徴を見つける
たとえば、ボタンの面の色に隣接するエッジの色、または派生、形状、または正方形のサブイメージの平均色 (8x8 ピクセル ...) を使用できます。
この機能のスナップショットを検索
最初に平均色を使用するので、画像をピクセル領域に分割し
N x N
、それらの平均色を計算します。ボタンの平均色と同様の平均色を持つ正方形が見つかった場合は、おそらく場所があります。この後、ボタンがあれば近くのエリアを総当たり攻撃できます
この段階では、色を直接比較しないでください (アンチエイリアシングやフィルターによって歪む可能性があります...)。より良い方法は、派生物を
+/-
ある程度の精度で比較することです。ボタンの存在確率の係数を作成できます。p(x,y)=count(matching pixels) / (button pixels)
十分に近い場合は
1.0
、ボタンが見つかりました。
PS。ステージ3では、グレースケール画像を使用して物事を簡素化できます