Faire de la RPA avec python Lors de l'utilisation de pyautogui Il y a des moments où vous souhaitez effectuer une reconnaissance de tolérance ou d'échelle de gris. À ce moment-là, il sera nécessaire d'insérer opencv.
Cependant, je ne pouvais pas l'utiliser après tout. Je publierai les détails de l'erreur et les solutions de contournement.
pos = pyautogui.locateCenterOnScreen(GetImage(imgname), region=inputregion)
Ce code a fonctionné, mais a soudainement cessé de fonctionner.
pip opencv-python
,
pos = pyautogui.locateCenterOnScreen(GetImage(imgname), region=inputregion, grayscale=True)
J'ai essayé de le faire correspondre à l'échelle de gris en réécrivant.
output
============================= test session starts =============================
platform win32 -- Python 3.8.5, pytest-6.0.2, py-1.9.0, pluggy-0.13.1
================================== FAILURES ===================================
pos = pyautogui.locateCenterOnScreen(GetImage(imgname), region=inputregion,grayscale=True)
C:\tools\miniconda3\envs\rpa2\lib\site-packages\pyautogui\__init__.py:175: in wrapper
return wrappedFunction(*args, **kwargs)
C:\tools\miniconda3\envs\rpa2\lib\site-packages\pyautogui\__init__.py:207: in locateCenterOnScreen
return pyscreeze.locateCenterOnScreen(*args, **kwargs)
C:\tools\miniconda3\envs\rpa2\lib\site-packages\pyscreeze\__init__.py:400: in locateCenterOnScreen
coords = locateOnScreen(image, **kwargs)
C:\tools\miniconda3\envs\rpa2\lib\site-packages\pyscreeze\__init__.py:360: in locateOnScreen
retVal = locate(image, screenshotIm, **kwargs)
C:\tools\miniconda3\envs\rpa2\lib\site-packages\pyscreeze\__init__.py:340: in locate
points = tuple(locateAll(needleImage, haystackImage, **kwargs))
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
needleImage = array([[31, 31, 31, ..., 31, 31, 31],
[31, 31, 31, ..., 31, 31, 31],
[31, 31, 31, ..., 31, 31, 31],
...31, 31, 31, ..., 31, 31, 31],
[31, 31, 31, ..., 31, 31, 31],
[31, 31, 31, ..., 31, 31, 31]], dtype=uint8)
haystackImage = array([[60, 60, 60, ..., 60, 60, 60],
[60, 60, 60, ..., 60, 60, 60],
[60, 60, 60, ..., 60, 60, 60],
...16, 16, 16, ..., 16, 16, 16],
[16, 16, 16, ..., 16, 16, 16],
[16, 16, 16, ..., 16, 16, 16]], dtype=uint8)
grayscale = True, limit = 1, region = (0, 945.0, 240.0, 135.0), step = 1
confidence = 0.999
def _locateAll_opencv(needleImage, haystackImage, grayscale=None, limit=10000, region=None, step=1,
confidence=0.999):
"""
TODO - rewrite this
faster but more memory-intensive than pure python
step 2 skips every other row and column = ~3x faster but prone to miss;
to compensate, the algorithm automatically reduces the confidence
threshold by 5% (which helps but will not avoid all misses).
limitations:
- OpenCV 3.x & python 3.x not tested
- RGBA images are treated as RBG (ignores alpha channel)
"""
if grayscale is None:
grayscale = GRAYSCALE_DEFAULT
confidence = float(confidence)
needleImage = _load_cv2(needleImage, grayscale)
needleHeight, needleWidth = needleImage.shape[:2]
haystackImage = _load_cv2(haystackImage, grayscale)
if region:
> haystackImage = haystackImage[region[1]:region[1]+region[3],
region[0]:region[0]+region[2]]
E TypeError: slice indices must be integers or None or have an __index__ method
C:\tools\miniconda3\envs\rpa2\lib\site-packages\pyscreeze\__init__.py:202: TypeError
=========================== short test summary info ===========================
FAILED test_iqctrl.py::test_iqcreate - TypeError: slice indices must be integ...
============================== 1 failed in 2.03s ==============================
Une liste des modules python que vous utilisez.
conda install python
pip install pyautogui
pip install rope yapf black autopep8 pylint pytest
pip install tqdm
pip install pyperclip
pip install pyodbc
pip install cx_Oracle
J'ai ajouté opencv-python ici.
Le système d'exploitation est Windows 10.
La fonction _locateAll_opencv n'a pas été testée dans python3.x et est en cours de développement. J'obtiens une erreur telle que "L'index qui tranche le tableau doit être un entier". Je n'ai pas pu m'impliquer car c'était dans le module pyautogui.
Actuellement, supportez 2.X ou abandonnez opencv. Si ni l'un ni l'autre n'est acceptable, vous devrez peut-être abandonner la recherche d'images en niveaux de gris et ambiguës.
Si vous pouvez réécrire la fonction _locateAll_opencv elle-même, il serait utile que vous puissiez extraire la requête vers Github.
Recommended Posts