Как запустить эту функцию быстрее (пока l oop, mss, cv2, сопоставление с шаблоном) - PullRequest
0 голосов
/ 15 марта 2020

Есть ли у вас какие-либо идеи о том, как ускорить выполнение этого кода, пожалуйста? Это функция, которая захватывает экран с помощью mss и сопоставляет шаблон с использованием cv2.

Она не должна оставаться функцией. Все, что может ускорить его, даже если он делает код полностью нечитаемым, хорошо.

Я не знаю, как использовать списочные выражения (я слышал, что они быстрее) с while l oop.

* 1006. * Разрешение захвата экрана должно оставаться неизменным, и соответствующий метод должен быть TM_SQDIFF_NORMED

Среднее время работы на моем компьютере составляет 0,19994398

Комментарии в блоке оператора IF не включены, но только для того, чтобы показать, что они мне нужны две переменные позже

from time import time
import cv2
import mss
from mss import mss
import mss.tools
import numpy as np
import threading
import multiprocessing 
square = cv2.imread("square.png", cv2.IMREAD_COLOR)
def mainloop():
    with mss.mss() as sct:
        while True:
            t = time()
            (min_v, max_v, min_l, max_l) = cv2.minMaxLoc(cv2.matchTemplate(np.array(mss.mss().grab({'top': 0, 'left': 0, 'width': 1680, 'height': 1050}))[:,:,0], square[:,:,0], cv2.TM_SQDIFF_NORMED)) 
            t = time() - t
            print("{}".format(t))            
            # if min_v < 0.048: 
                # print(min_l[0], min_l[1])
mainloop()

Я также попытался использовать модули многопроцессорной обработки, как указано ниже, но это не ускоряет время выполнения, просто выполняет его несколько раз параллельно

if __name__ == '__main__':
    jobs = []
    for i in range(2):
        p = threading.Thread(target=mainloop)
        jobs.append(p)
        p.start()

. шаблон - просто красный квадрат 15 х 15 пикселей square

...