PyAutoGUIによる画像認識の精度を上げる方法

PyAutoGUIによる画像認識の精度を上げる方法 プログラミング

「PyAutoGUIの画像認識でエラーが出る」
「PyAutoGUIを使った画像認識の精度が悪い・・・」
「PyAutoGUIによる画像認識の処理速度が遅い」

このような場合には、この記事の内容が役に立ちます。
この記事では、PyAutoGUIによる画像認識について解説しています。

本記事の内容

  • PyAutoGUIによる画像認識の仕組み
  • PyAutoGUIによる画像認識の精度を上げる

それでは、上記に沿って解説していきます。

PyAutoGUIによる画像認識の仕組み

PyAutoGUIによる画像認識の仕組みを理解しておきましょう。
基本的には、PyAutoGUIではデスクトップの画面全体が対象になります。

そして、そのデスクトップ上の座標をもとに操作を行います。
操作とは、クリックであったり、スクリーンショットの撮影であったりします。

ここまでは、大丈夫ですね?
この状況において、次のボタンをクリックすることを考えましょう。
サイズは、横27px・縦21pxとなります。

close.png

ごくごく普通の閉じるボタンです。
アイコンとも言いますが、ここではボタンと呼びます。

そして、デスクトップ上は次のような状況だとします。

閉じるボタンが、3つ存在しています。
この時、PyAutoGUIでは次のように画像を認識できています。

Box(left=1525, top=68, width=27, height=21) 
Box(left=1863, top=136, width=27, height=21) 
Box(left=1631, top=255, width=27, height=21)

結果を見ると、上から(top=0)サーチしているようです。
上記情報は、次のコードで表示しています。

import pyautogui 

for pos in pyautogui.locateAllOnScreen("close.png"): 
    print(pos)

認識できた画像の情報をすべて表示するコードです。
今回は、わかりやすい画像のため3つすべてが認識できています。

ただ、close.pngは計算機(left=1863, top=136)における閉じるボタンの画像です。
この場合、「locateOnScreen」を用いると先頭の閉じるボタンが選択されます。

import pyautogui 

p = pyautogui.locateOnScreen("close.png") 
if p: 
    x, y = pyautogui.center(p) 
    print(p)

上記を実行した結果は、以下。

Box(left=1525, top=56, width=27, height=21)

なお、locateOnScreenについては次の記事で解説しています。

そうなると、どうやって計算機の閉じるボタンを選択すればよいのでしょうか?
言い換えると、画像認識の精度をどうやって上げることができるのでしょうか?

以下では、画像認識の精度を上げる方法を説明します。

PyAutoGUIによる画像認識の精度を上げる

結論から言うと、範囲を絞ることで精度を上げます。
サーチする範囲を限定するのです。

そうすれば、対象以外は無視できます。
今回のケースであれば、計算機以外の閉じるボタンを無視するのです。

範囲を限定することにより、サーチの処理速度を上げることができます。
画面全体をサーチ対象にする必要が、なくなっていますからね。
実は、この効果が結構デカイのです。

そして、そのためのコードが以下。

import pyautogui 

# 範囲指定
target_range = (1576, 126, 328, 79) 
p = pyautogui.locateOnScreen("close.png", region=target_range) 
if p: 
    x, y = pyautogui.center(p) 
    print(p)

上記の実行結果は、以下。

Box(left=1863, top=136, width=27, height=21)

計算機の閉じるボタンを認識できています。
あとは、自動クリックで煮るなり閉じるなりご自由に。

これが実現できたのは、次のコードによります。

# 範囲指定 
target_range = (1576, 126, 328, 79) 
p = pyautogui.locateOnScreen("close.png", region=target_range)

指定した範囲の中で閉じるボタンをサーチしています。
範囲については、ツールを用いて取得しています。

窓フォトというツールを利用すれば、簡単に範囲を取得可能です。
窓フォトについては、次の記事で説明しています。

RPAのような自動処理においては、基本的にはウィンドウ位置は固定が多いはずです。
座標をもとにして処理を行うことが多いですからね。

もし固定でなければ、ウィンドウをサーチして見つけ出します。
今回なら、計算機自体を最初に画像認識します。

その際は、この画像を利用することになるでしょう。
そして、見つけた計算機の座標をもとに「target_range」に設定する値を決めます。

そうすれば、予め「target_range」の値が不明でも対応できるはずです。
とにかく、PyAutoGUIを使えば大抵のことはできるでしょう。

以上、PyAutoGUIによる画像認識の精度を上げる方法を説明しました。

タイトルとURLをコピーしました