При создании множества скриншотов с помощью MSS память быстро заполняется и вылетает python - PullRequest
0 голосов
/ 16 февраля 2019

Вот мой код:

import time
import cv2
import mss
import numpy as np

Frame = [0, 0, 1920, 1080]

def GetFrame():
    monitor = {"top": Frame[0], "left": Frame[1], "width": Frame[2], "height": Frame[3]}
    sct_img = mss.mss().grab(monitor)
    return np.asarray(sct_img)



while (True):
    inimg = GetFrame()
    cv2.imshow("WHY IS MEMORY SO HIGH???????", inimg)
    if cv2.waitKey(1) & 0xFF == ord('q'):
        break
cv2.destroyAllWindows() 

Когда он запускается, он не выдает никаких ошибок, но, глядя в диспетчере задач, моя память заполняется быстро (после 200 итераций или около того), в конечном итоге сбой моего рабочего стола, то питон.Я посмотрел на сборщик мусора , но не повезло.

Python version 3.7.0
MSS version 4.0.1

1 Ответ

0 голосов
/ 16 февраля 2019

Хм, я исправил это сам, понятия не имею почему работает, но делает .Вот мое решение с высоким IQ:

import time
import cv2
import mss
import numpy as np

Frame = [0, 0, 1920, 1080]

def GetFrame():
    #########solution here
    with mss.mss() as sct: #<-- thats the solution.... yep
        monitor = {"top": Frame[0], "left": Frame[1], "width": Frame[2], "height": Frame[3]}
        sct_img = sct.grab(monitor)
        return np.asarray(sct_img)



while (True):
    inimg = GetFrame()
    cv2.imshow("Normal memory!!", inimg)
    if cv2.waitKey(1) & 0xFF == ord('q'):
        break
cv2.destroyAllWindows()

если кто-то захочет прокомментировать и объяснить, почему это работает для меня, тогда я буду благодарен:)

...