python 3.6, Windows 10: я пытаюсь сделать один (частичный) снимок экрана каждые 1-5 миллисекунд, чтобы затем запустить на нем пользовательский OCR для извлечения некоторых данных.Мой код для снятия снимков экрана с использованием пакета mss занимает от 16 до 47 мс в зависимости от количества пикселей, которые я пытаюсь захватить.
У меня есть 3 отдельные строки вопросов:
1.)Есть ли альтернатива mss, которая быстрее?
2.) Есть ли способ ускорить mss в 2-3 раза?
3.) Как я могу узнать через профилирование кода /Вывод cProfile, показанный ниже, как я могу добиться улучшения производительности?То, как я читаю вывод, состоит в том, что в функции «захват» тратится много времени, но неясно, что внутри функции захвата действительно занимает так много времени.
from mss import mss
import mss.tools as mss_tools
import cProfile, pstats, io
def profile(fnc):
def inner(*args, **kwargs):
pr = cProfile.Profile()
pr.enable()
retval = fnc(*args, **kwargs)
pr.disable()
s = io.StringIO()
sortby = 'cumulative'
ps = pstats.Stats(pr, stream=s).sort_stats(sortby)
ps.print_stats()
print(s.getvalue())
return retval
return inner
@profile
def main():
with mss() as sct:
for i in range(100):
monitor = sct.monitors[1]
left = monitor["left"]
top = monitor["top"]
right = left + 1
lower = top + 1
bbox = (left, top, right, lower)
shot = sct.grab(bbox)
# mss_tools.to_png(shot.rgb, shot.size, output='partialscreen.png') #no performance difference with or without this
# sct.shot() #code takes much more time (almost factor 10 higher compared to taking a large share of the screen)
main()