Python делает код распознавания изображений цикличным, пока что-то не произойдет и не сломает его - PullRequest
0 голосов
/ 11 декабря 2018

У меня есть этот код:

import cv2
import numpy as np
import pyautogui
import time

#image recognition
def imagesearch(image, precision=0.8):
    im = pyautogui.screenshot()
    img_rgb = np.array(im)
    img_gray = cv2.cvtColor(img_rgb, cv2.COLOR_BGR2GRAY)
    template = cv2.imread(image, 0)
    template.shape[::-1]

    res = cv2.matchTemplate(img_gray, template, cv2.TM_CCOEFF_NORMED)
    min_val, max_val, min_loc, max_loc = cv2.minMaxLoc(res)
    if max_val < precision:
        return [-1,-1]
    return max_loc

#continuous image searching on screen
def imagesearch_loop(image, timesample, precision=0.8):
    pos = imagesearch(image, precision)
    while pos[0] == -1:
        print(image+" not found, waiting")
        time.sleep(timesample)
        pos = imagesearch(image, precision)
    return pos

pos = imagesearch_loop("Bonus_Box.png", 0.5)
while not (imagesearch_loop("Bonus_Box.png", 0.5)):
    print("Hello")
    #do things..., after everything finishes and no image found return to while
print("image found ", "x:", pos[0], "y:", pos[1])

Я пытаюсь сделать цикл в соответствии с условием.Хотя это не imagesearch_loop("Bonus_Box.png", 0.5) Я хочу заставить что-то делать, но после того, как все закончится, и мое изображение больше не будет найдено на экране, я хочу вернуться к while not (imagesearch_loop("Bonus_Box.png", 0.5)):, чтобы начать поиск снова.

Спасибо за ваше время

1 Ответ

0 голосов
/ 11 декабря 2018

вы кодируете другим циклом, и самый простой способ - просто прервать его с помощью обычного Ctrl-C:

import cv2
import numpy as np
import pyautogui
import time

#image recognition
def imagesearch(image, precision=0.8):
    im = pyautogui.screenshot()
    img_rgb = np.array(im)
    img_gray = cv2.cvtColor(img_rgb, cv2.COLOR_BGR2GRAY)
    template = cv2.imread(image, 0)
    template.shape[::-1]

    res = cv2.matchTemplate(img_gray, template, cv2.TM_CCOEFF_NORMED)
    min_val, max_val, min_loc, max_loc = cv2.minMaxLoc(res)
    if max_val < precision:
        return [-1,-1]
    return max_loc

#continuous image searching on screen
def imagesearch_loop(image, timesample, precision=0.8):
    pos = imagesearch(image, precision)
    while pos[0] == -1:
        print(image+" not found, waiting")
        time.sleep(timesample)
        pos = imagesearch(image, precision)
    return pos


try:
    while True:
        pos = imagesearch_loop("Bonus_Box.png", 0.5)
        while not (imagesearch_loop("Bonus_Box.png", 0.5)):
          print("Hello")
          #do things..., after everything finishes and no image found return to while
        print("image found ", "x:", pos[0], "y:", pos[1])
except KeyboardInterrupt:
    pass
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...