Есть ли у вас какие-либо идеи о том, как ускорить выполнение этого кода, пожалуйста? Это функция, которая захватывает экран с помощью 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 пикселей