python延时函数_Python实现屏幕自动截图
教程目录
需要实现的功能:自动屏幕截图
具体需求:
1. 支持设置截图频率和截图文件存储路径
2. 在存储截图时判断与前一张截图的相似度,只有屏幕发生了显著的变化才存储截图
所需技术(搜索关键词):
1. 屏幕截图
推荐教程:https://blog.csdn.net/m0_37868504/article/details/86246810
2. 图片相似度比较
推荐教程:https://blog.csdn.net/lly1122334/article/details/89431244#_18
说明:PIL的抓取效率比文中说得要高,平均在50-90毫秒之间(配置:1920*1080 I7-7700 NVIDIA-GTX-1060-6GB)
应用场景:
1. 截取视频中的各个镜头
2. 截取游戏中的各个场景、地图
实现思路
根据需求,我们可以得出如下流程图(忽略延时环节)如下:
屏幕自动截图流程图
其中执行屏幕截图,可以使用Pillow(PIL)的ImageGrab函数;比较截图是否差异明显可以使用numpy的余弦相似度比较。
实现代码
import datetimeimport timeimport numpy as npfrom PIL import ImageGrabfrom scipy.spatial.distance import pdistdef cosine(image1, image2):""" 比较两幅图片(两个一维数组)的余弦相似度:param image1: 图片1的一维数组:param image2: 图片2的一维数组:return: 两幅图片(两个一维数组)的余弦相似度 """cosin = np.vstack([image1, image2])return pdist(cosin, 'cosine')[0]def save_image(image, pid: int, path: str):""" 存储截图文件:param image: 截图对象:param pid: 截图ID:param path: 截图文件存储路径 """name_time = str(datetime.datetime.now().strftime("%Y%m%d_%H%M%S")) # 生成文件名中的时间部分image.save(path + name_time + "_" + str(pid).zfill(3) + ".png") # 将截图文件存储到本地def auto_screenshot(inc, threshold=0.1, path="E:截图测试"):""" 自动屏幕截图函数:param inc: 截图间隔时长(单位:秒):param threshold: 存储相似度阈值 [适用阈值列表]视频按镜头截图 = 0.1:param path: 截图文件存储路径:return: """pid = 1 # 截图IDnp_last = None # 上一个存储的截图while True: start_time = time.time() # 启动时间img_now = ImageGrab.grab() # 获取屏幕截图np_now = np.asarray(img_now).flatten() # 生成一维数组if np_last is not None: cosin = cosine(np_now, np_last) # 计算余弦相似度if cosin > threshold: # 如果相似度大于阈值则存储该图片save_image(img_now, pid, path) # 存储屏幕截图pid += 1np_last = np_nowprint(pid - 2, "→", pid - 1, ";相似度:", round(cosin, 5))else: # 若当前是第一幅截图()则自动保存save_image(img_now, pid, path) # 存储屏幕截图pid += 1np_last = np_now end_time = time.time() # 运行结束时间if inc - (end_time - start_time) > 0: time.sleep(inc - (end_time - start_time)) # 执行延时if __name__ == "__main__": auto_screenshot(1)
运行结果:
视频自动截图运行测试
作者:长行 (Python系列教程:C001)
python延时函数_Python实现屏幕自动截图相关推荐
- python中延时函数_python延时函数
广告关闭 腾讯云11.11云上盛惠 ,精选热门产品助力上云,云服务器首年88元起,买的越多返的越多,最高返5000元! 可以使用python的time模块来实现类似于c中的sleep函数作用代码如下: ...
- python中延时函数_Python延时操作实现方法示例
本文实例讲述了Python延时操作实现方法.分享给大家供大家参考,具体如下: 在日常的开发中,往往会遇到这样的需求,需要某一个函数在一段时间之后才执行以达到某种特定的效果.此时,我们就需要某种机制,使 ...
- 技术要点|Python监控学生端电脑屏幕自动识别学习状态
技术要点: 1)使用pillow扩展库进行屏幕截图: 2)使用多线程监听学生端连接: 3)使用TCP协议传输屏幕图像: 4)使用标准库zlib进行数据压缩: 5)使用OCR提取屏幕截图中的文字. 具体 ...
- python describe函数_Python基础知识点梳理2,推荐收藏
接着昨天的基础知识点继续梳理,昨天的 Python基础知识梳理1 8.函数 1.定义函数: 使用关键字def来告诉python你要定义一个函数 接着指出函数名:如下面函数名是-greet_user ( ...
- python fields函数_Python函数详解
# ------------------------------------一等函数------------------------------------ # 龟叔: 虽然我把函数定为一等对象,但是 ...
- python hasattr函数_python学习-type(),isinstance(),dir(),getattr(),setattr(),hasattr()
isinstance() 与 type() 区别: type() 不会认为子类是一种父类类型,不考虑继承关系. isinstance() 会认为子类是一种父类类型,考虑继承关系. 如果要判断两个类型是 ...
- python not函数_python 函数
1 为什么使用函数 在没有接触函数时,有时候需要将一个功能多次写,如果需要修改其中一个变量,则需要把所有实现该功能的代码一处一处改.不利于代码维护,代码量大了,组织结构也会很不清晰. 所以总结不使用函 ...
- python include函数_python 库函数
python的内建函数和库函数的区别是什么? [区别]:标准库函数都需要import xxx才能取得.内建函数都在__builtins__里面,在global里直接就能用. [补充]:1.python ...
- python islower函数_python字符串是否是小写-python 字符串小写-python islower函数-python islower函数未定义-嗨客网...
Python字符串是否是小写教程 在开发过程中,有时候我们需要判断一个 Python islower()函数详解 语法 str.islower() -> bool 参数 参数 描述 str 表示 ...
最新文章
- “双一流”本科生可得13.2万补贴!这座城市发布重磅人才新政
- 淘宝内部分享:怎么跳出MySQL的10个大坑
- 《构建高可用Linux服务器》卓越网和互动网上架了
- 关于Angular里给Component protected方法写单元测试的技巧
- leetcode881. 救生艇(贪心算法加双指针)
- 免插件为WordPress文章中标签添加内链
- vuex commit 传参数,传递多个参数
- SQL server数据异地备份到OSS
- 雷神开机logo更改_黑武士再度来袭 雷神第三代911黑武士游戏台式机评测
- Unity开发 罗技方向盘 G29 白话版
- 计算机上u盘打不开,u盘打不开怎么办,插在电脑上有显示,但是打不开?
- Kernel中bluetooth相关的config选项
- 查询oracle job命令,oracle命令之job详解
- 三维空间的三角剖分( 3D Delaunay Triangulated graph)第一部分:从二维空间的三角剖分做起
- canvas学习绘制渐变色
- 解决VMware虚拟机中没有vmnet0的情况
- 脉冲触发器(JK触发器)
- c++程序设计练习2.1
- 中国可降解塑料行业深度分析及未来发展趋势展望2021年版
- kinetics-skeleton格式行为数据提取方法