Python的速度超过每秒10张截图的速度吗?

Python的速度超过每秒10张截图的速度吗?

问题描述:

现在我需要一个非常快速的屏幕截图,将屏幕截图提供给CNN,该屏幕截图将根据截图更新鼠标移动。我正在模拟this paper中提出的同一种行为,并且同样执行图6中的步骤(没有极坐标转换)。由于需要真正快速输入的结果,我搜索了一下周围,并已经能够获得这个脚本from here稍加修改,输出10FPSPython的速度超过每秒10张截图的速度吗?

from PIL import ImageGrab 
from datetime import datetime 

while True: 
    im = ImageGrab.grab([320, 180, 1600, 900]) 
    dt = datetime.now() 
    fname = "pic_{}.{}.png".format(dt.strftime("%H%M_%S"), dt.microsecond // 100000) 
    im.save(fname, 'png') 

我可以期待什么速度?如果可以使用其他程序,我会很好。

+0

你需要拍摄完整的截图吗?如果这只是您需要的,可能只需要直接捕获鼠标坐标。 – dimo414

+0

啊谢谢:P无法发现它。游标的移动将根据截图上的其他元素进行移动,就像纸张中的玩家根据游戏中的墙壁改变其位置一样。 – Dinoswarleafs

+0

您使用的是SSD吗? – cup

写入磁盘非常缓慢,可能是使您的循环需要这么长时间的很大一部分。尝试对im.save()行进行注释并查看可以捕获多少个屏幕截图(添加一个counter变量或类似的东西来计算正在捕获多少屏幕截图)。

假设磁盘I/O是瓶颈,您需要将这两个任务分开。有一个循环捕获屏幕截图并将它们存储在内存中(例如以时间戳作为键的字典),然后在单独的线程中将元素从字典中提取出来并将它们写入磁盘。

请参阅this question以获取Python中的线程指针,如果您之前没有做过很多工作。

+0

哦,你是对的,我的磁盘严重瓶颈。在我的情况下,我实际上不需要将文件保存到磁盘,我只需要在tensorflow中读取它们。我想我可以直接在一个tf脚本中使用图像抓取,这似乎是20-30帧左右,这是我需要的:)我不知道为什么我没有考虑这个,但现在它一切都显而易见。非常感谢您的回答!它可能只是节省了我吨的时间 – Dinoswarleafs

+0

很高兴我可以帮助:) – dimo414