実現したいこと
- PyAUtoGUIのlocateCenterOnScreenでconfidenceを設定したい
前提
PyAutoGUIで画像認識で,confidenceをデフォルトより低い値で設定して,画像認識の精度を向上させたい.
しかし,OpenCVはインストール済みにも関わらず実行できない.
発生している問題・エラーメッセージ
NotImplementedError Traceback (most recent call last) Cell In[3], line 3 ----> 3 locate = pg.locateCenterOnScreen(path, confidence=0.8) File c:\Users\Owner\AppData\Local\Programs\Python\Python38\lib\site-packages\pyautogui\__init__.py:175, in raisePyAutoGUIImageNotFoundException..wrapper(*args, **kwargs) 172 @functools.wraps(wrappedFunction) 173 def wrapper(*args, **kwargs): 174 try: --> 175 return wrappedFunction(*args, **kwargs) 176 except pyscreeze.ImageNotFoundException: 177 raise ImageNotFoundException File c:\Users\Owner\AppData\Local\Programs\Python\Python38\lib\site-packages\pyautogui\__init__.py:207, in locateCenterOnScreen(*args, **kwargs) 205 @raisePyAutoGUIImageNotFoundException 206 def locateCenterOnScreen(*args, **kwargs): --> 207 return pyscreeze.locateCenterOnScreen(*args, **kwargs) File c:\Users\Owner\AppData\Local\Programs\Python\Python38\lib\site-packages\pyscreeze\__init__.py:413, in locateCenterOnScreen(image, **kwargs) 409 def locateCenterOnScreen(image, **kwargs): 410 """ 411 TODO 412 """ --> 413 coords = locateOnScreen(image, **kwargs) ... --> 253 raise NotImplementedError('The confidence keyword argument is only available if OpenCV is installed.') 255 # setup all the arguments 256 if grayscale is None: NotImplementedError: The confidence keyword argument is only available if OpenCV is installed.
該当のソースコード
python
1import PySimpleGUI as sg 2locate = pg.locateCenterOnScreen(path, confidence=0.8)
試したこと
OpenCVはpip install opencv-pythonでインストール済みです.
補足情報(FW/ツールのバージョンなど)
OS : Windows 10
Python 3.8.2(64bit)
エディター VSCode(pipはターミナルから実行)
PyAutoGUI 0.9.53
opencv-python 4.5.4.58
コードの実行方法(コマンドプロンプト、Jupyterなど)について記載ください。
> Cell In[3], line 3
というエラーメッセージからJupyter上であれば
Jupyterを閉じて再実行してもエラー再現するかを記載ください。
コードの実行方法について追記いたしました.
pipでのインストール後,再起動して実行しましたが,同様のエラーが出現しました.
エラーが発生している pyscreeze/__init__.py には以下の様なコードがあります。numpy はインストールされていますか?
try:
import cv2, numpy
useOpenCV = True
RUNNING_CV_2 = cv2.__version__[0] < '3'
except ImportError:
useOpenCV = False
numpyはインストール済みです。(ver 1.24.2)
そうなりますと、pip と python のバージョンが適合していないのかもしれません。
pip -V
の実行結果を教えていただけますか。
pip 23.0.1でした。
その後に表示されている、対応している Python のバージョンを教えていただけますか。
お手数おかけしてしまい,申し訳ございません.
出力の全文です.
pip 23.0.1 from c:\users\(中略)\pip (python 3.8)
> NotImplementedError: The confidence keyword argument is only available if OpenCV is installed.
となる状態で、下記のpythonコードは、エラーが出ずに正常に実行可能でしょうか?
import cv2
import numpy
実行したところ,cv2のインポートに失敗しました.
ImportError Traceback (most recent call last)
Cell In[4], line 2
1 import numpy
----> 2 import cv2
ImportError: DLL load failed while importing cv2: %1 は有効な Win32 アプリケーションではありません。
> cv2のインポートに失敗
が
> NotImplementedError: The confidence keyword argument is only available if OpenCV is installed.
の原因でしょうね
パスが通ってないかと思って,環境変数にパスを追加しましたが,相変わらず同様のエラーが出現しました.
もしご存じでしたら対処法についてお教えいただけないでしょうか?
もし、pythonの「sys.path」を自分で設定してたら、元に戻してください (何もしてないデフォルトの状態に戻す)
もし、「PYTHON」が付く環境変数を設定してたら、削除してください
(「PYTHONPATH」とか「PYTHONHOME」とか)
上記のどちらかでも該当したら、設定を変えてパソコンを再起動させてから、どうなるのか試してみてください
私の一つ前のコメントに書いたことが、どちらも該当しないか、該当するけど設定を変えても直らない場合は、下記を見てください
(必ずこれよりも先に、一つ前のコメントに書いたことをやってください)
おそらく、
c:\Users\Owner\AppData\Local\Programs\Python\Python38\lib\site-packages
に「cv2」というディレクトリがあると思います
もしあれば、そこに「cv2.pyd」というファイルがあるか、確認してください
「cv2.pyd」があれば、それが32, 64bitのどちら用なのかを、確認してみてください
https://pslabo.hatenablog.com/entry/2018/11/10/184109
また、「import cv2」がうまくいかないpythonで、下記を実行して、pythonが32, 64bitのどちら用なのかを、確認してみてください
import platform
print(platform.architecture())
pythonと「cv2.pyd」のbit(32か64か)は、一致してますでしょうか?
私の二つ前と一つ前のコメントに書いたことをやっても直らない場合は、下記を見てください
(必ずこれよりも先に、二つ前と一つ前のコメントに書いたことをやってください)
「cv2.pyd」が依存してるdllを調べて、それに不足が無いか確認してみてください
https://hourouneko.hateblo.jp/entry/2022/10/12/113642
https://note.com/1in9mu/n/ndaf4f15b247d
ありがとうございます.
環境変数にPYTHONがあったため,削除・再起動後,実行しましたが,同様のimport errorが出現しました.
cv2.pydを確認したところ,64bit用であり,pythonも64bit用で対応していました.
> cv2.pydを確認したところ,64bit用であり,pythonも64bit用で対応していました.
それでしたら、私の一つ前のコメントに挙げたwebページを参照して、「cv2.pyd」が依存してるdllを調べて、それに不足が無いか確認してみてください

あなたの回答
tips
プレビュー