Pythonを使用してパターン検出を行うアプリのGUIでボタンを検出するにはどうすればよいですか?


8

Windowsの電卓アプリのGUIを例に説明します。この電卓アプリケーションが開いていて集中している場合、すべてのボタンを検出する方法を見つける必要があります。非侵入型のメソッドしか使用できないため、ボタンIDなどは問題外です。これは私を画像認識に導きます。あるいは、特定の画像ではなく、特定のパターンに従う一連の画像が必要なので、画像検出と言います。特定のボタン画像と画像認識を使用して、クリック、右クリック、dblクリックなどを行う方法を知っています[1]。逆にどうすればよいかわかりません。GUIをスキャンして、ボタンであるという要件を満たす領域を見つけます(長方形、テキスト/アイコン/グラフィックラベルなど)。より大きな取り組みは、長方形の形状を持たないアイテムを検出することです(たとえば、Windowsデスクトップ上のアイコン)。

私が必要としているものに最も近いのは、写真から顔を検出することです。[2] しかし、これを私の場合に適用する方法がわかりません。人間の顔の検出では、Haarカスケード生成で顔の何百枚もの写真を使用する必要があることがわかりました(10〜15個のボタンのスナップショットだけでこれを行う方法がわからない)。リンゴのような別の種類のオブジェクトを検出する必要がある場合は、多くの画像を使用して、そのオブジェクトのHaarカスケードを再度生成する必要があります。

あなたは、パターン検出のみを使用して、GUIでボタン、アイテムなどを検出しようとしたことがありますか?「これはアイコン/ボタンです」と言って、その領域をスナップショットで取得できるようにするだけです。

[1] PythonでSikuliXを使用して、特定のパターンでアクションを実行します。

[2] OpenCVおよびHaarカスケード(XML形式)を使用すると、これが簡単にできることがわかりました。Haarカスケードを作成するには、少しの忍耐とスキルが必要です。

回答:


7

まず、OpenCVが提供するsquares.pyサンプルを見てください。それはいくつかの微調整でかなりの数のボタンタイプを処理する必要があります。

これが、電卓の例で得られた出力です(微調整を行っています)。 ここに画像の説明を入力してください

正方形アプリケーションに次の調整を加えました。

このコードを変更します(84行目から):

if(result.total == 4 and 
   abs(cv.ContourArea(result)) > 1000 and 
   cv.CheckContourConvexity(result)):

これに:

if(result.total == 4 and 
   abs(cv.ContourArea(result)) < 1300 and 
   abs(cv.ContourArea(result)) > 300 and
   cv.CheckContourConvexity(result)):

また、スケールや回転の変動を気にする必要がないため、matchTemplateを使用して確認してください。また、対応するチュートリアル(C ++)もここにあります

テンプレートマッチングが機能する別の例については、他の回答を参照してください。また、この回答は、との上位X一致の検出に役立つ場合がありますmatchTemplate

お役に立てば幸いです。


回答ありがとうございます。この計算機の領域の外に拡張できるものを探していますが、私はあなたのアイデアを試します。このアプローチは、正方形のボタンに最適です。(説明で述べたように)Windowsデスクトップ上のアイコンを検出するための動作がわからない。しかし、私はそれを試してみて、みんなに知らせます。ありがとうございました

プログラムはどの程度柔軟でなければなりませんか?解決しようとしている問題がより一般的です。解決策を達成することがより困難になります。

さて、今のところ、私は正方形に固執しても大丈夫です。もっと大きな問題があります。このように(squares.pyを実行すると、何かアイデアはありますか?) 126、on_trackbarでdrawSquares(img、findSquares4(img、storage))ファイル "squares.py"、行30、findSquares4でpyr = cv.CreateImage(sz.width / 2、sz.height / 2、8、3)AttributeError : 'tuple'オブジェクトに属性 'width'がありません
Radu Enea

上記の問題を解決しました。そして、多くの調査の結果、私は質問を言い換えなければならないと思います。
Radu Enea

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.