Найти - Пользователи
Полная версия: течёт память
Начало » Python для новичков » течёт память
1
uteam
Здравствуйте, я написал код поиска картинки. Так получается, что когда код не находит картинку, то память течёт. Я бы хотел, чтобы при вызове функции, придав ей значение поиска картинки несколько раз, код мог искать её хоть до посинения, но чтобы память не текла. Может кто помочь? Течёт на строке 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)
PEHDOM
uteam
Течёт на строке 51
строка 51 в вашем коде это
 pyautogui.click()
наврядли тут может быть утечка..
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB