これが私が実行しようとしているコードです:
import pyautogui
r=pyautogui.locateOnScreen('C:\Users\David\Desktop\index.png',grayscale=False)
print r
見つけるためには、ピクセル単位で完全に一致する必要があります。あらゆる種類の逸脱を許容するには、信頼パラメーターを呼び出すことができます。
例えば:
loc = pyautogui.locateOnScreen(image, grayscale=True, confidence=.5)
ただし、confidenceパラメーターを使用するには、opencv_pythonをインストールする必要があります。これは、pipを使用して簡単にインストールできます。
./python -m pip install opencv_python
その後、小さな違いを説明できるようになります。
私は同じ問題に遭遇していました、私がしたことは
import pyautogui
r= None
while r is None:
r=pyautogui.locateOnScreen('C:\Users\David\Desktop\index.png',grayscale=False)
print r
画像を探すのに時間がかかるからだと思います。あなたが私とより良い解決策の共有を見つけた場合:)
同様の問題がありました。
MSペイントで比較画像を最初にjpgとして保存し、次にpngとして保存していたのが私の欠点でした。
比較画像は必ずpng形式で保存してください。この後、Locate機能がうまくいきました。
locateOnScreen()
関数は、画面に画像が見つからなかった場合にNone
を返します。一致は一致するために完全なピクセルでなければならないことに注意してください。余分な詳細が一致を台無しにしないように、index.pngを認識可能な最小のサイズにトリミングしてください。また、探しているものがその上にある他のウィンドウによって隠されていないことを確認してください。
私は以下を使用してこれを機能させました:
r = None
while r is None:
r = pyautogui.locateOnScreen('rbin.PNG', grayscale = True)
print icon_to_click + ' now loaded'
キーは、grayscale = Trueにすることです。
問題を解決する方法を見つけました。できるだけ小さい画像のみを検索します。 3秒後に1ピクセルのみの画像が見つかりました。そして、500x500を超える画像を検索しようとすると、何も見つかりません。
私はその問題を抱えていましたが、写真を特定の部分に切り取り、それが検索されていて、時間がかかりました。
またはこれも機能します。
b = pyautogui.center('calc7key.png')
公式 ドキュメント は言う;
The Locate Functions
NOTE: As of version 0.9.41, if the locate functions can’t find the provided image,
they’ll raise ImageNotFoundException instead of returning None.
したがって、例外が発生したかどうかを判断できます。また、While True
ループではなく、有限回数試行する必要があります。
retry_counter = 0
while retry_counter < 5:
try:
result = pyautogui.locateOnScreen(IMAGE_PATH_TO_FIND)
if result:
time.sleep(1)
retry_counter = 10 # to break the loop
except:
time.sleep(1) # retry after some time, i.e. 1 sec
retry_counter += 1