Форум сайта python.su
0
Здравствуйте, я написал код поиска картинки. Так получается, что когда код не находит картинку, то память течёт. Я бы хотел, чтобы при вызове функции, придав ей значение поиска картинки несколько раз, код мог искать её хоть до посинения, но чтобы память не текла. Может кто помочь? Течёт на строке 51
import numpy import cv2 from PIL import ImageGrab import time import os import pyautogui import gc def Find_image(first_x, first_y, end_x, end_y, template, how_many): """ #базовый скрин - это границы скриншота, на котором будем искать шаблон first_x - это начало границ поиска на базовом скрине по оси x first_y - это начало границ поиска на базовом скрине по оси y end_x - это конец границ поиска на базовом скрине по оси x end_y - это конец границ поиска на базовом скрине по оси y template - это имя шаблона шаблон (например "image.png") how_many - это количество повторов поиска""" #Делаем базовый скрин, сохраняем его в директории our_base_screen = ImageGrab.grab(bbox=(first_x, first_y, end_x, end_y,)) our_base_screen.save('/Users/uteam/Desktop/base_screen.png') #Делаем базовый скрин серым, для лучшего поиска шаблона на нём и считываем шаблон rgb_image = cv2.imread('/Users/uteam/Desktop/base_screen.png') gray_base_screen = cv2.cvtColor(rgb_image, cv2.COLOR_BGR2GRAY) our_template = cv2.imread('C:/Users/uteam/Desktop/Create_vm/' + str(template) + '.png', 0) #Производим поиск шаблона на сером базовом скрине и ищем лучшее совпадение res = cv2.matchTemplate(gray_base_screen, our_template, cv2.TM_CCOEFF_NORMED) loc = numpy.where(res >= 0.8) for pt in zip(*loc[::-1]): x = int(pt[0]) y = int(pt[1]) time.sleep(1) #Удаляем наш базовый скриншот os.remove('/Users/uteam/Desktop/base_screen.png') #Количество повторов поиска совпадения, в зависимости от переменной how_many, # значение которой мы задали при вызове функции if how_many == 1: if (len(loc[0])) == 0: print('Не нашли ' + str(template)) else: print('Успех. Мы нашли совпадение.\nВот координаты ' + str(template) + '.png', (first_x + x),(first_y + y)) time.sleep(1) pyautogui.moveTo(first_x + x, first_y + y, duration=0.5) pyautogui.click() elif how_many > 1: if (len(loc[0])) == 0: print('Не нашли ' + str(template) + ' пробуем снова') time.sleep(1) Find_image(first_x, first_y, end_x, end_y, template, how_many) else: print('Успех. Мы нашли совпадение.\nВот координаты ' + str(template) + '.png', (first_x + x),(first_y + y)) time.sleep(1) pyautogui.moveTo(first_x + x, first_y + y, duration=0.5) pyautogui.click() else: print('Искать даже не буду') #Удаляем все переменные del(rgb_image) del(gray_base_screen) del(our_template) del(res) del(loc) del(first_x) del(first_y) del(end_x) del(end_y) del(template) del(how_many)
Офлайн
294
uteamстрока 51 в вашем коде это
Течёт на строке 51
pyautogui.click()
[code python][/code]
Офлайн