Уведомления

Группа в Telegram: @pythonsu

#1 Ноя. 12, 2019 12:05:20

uteam
Зарегистрирован: 2019-11-12
Сообщения: 1
Репутация: +  0  -
Профиль   Отправить e-mail  

течёт память

Здравствуйте, я написал код поиска картинки. Так получается, что когда код не находит картинку, то память течёт. Я бы хотел, чтобы при вызове функции, придав ей значение поиска картинки несколько раз, код мог искать её хоть до посинения, но чтобы память не текла. Может кто помочь? Течёт на строке 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)

Офлайн

#2 Ноя. 12, 2019 13:07:33

PEHDOM
Зарегистрирован: 2016-11-28
Сообщения: 2196
Репутация: +  294  -
Профиль   Отправить e-mail  

течёт память

uteam
Течёт на строке 51
строка 51 в вашем коде это
 pyautogui.click()
наврядли тут может быть утечка..



==============================
Помещайте код в теги:
[code python][/code]
Бериегите свое и чужое время.

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version