教程目录

需要实现的功能:自动屏幕截图

具体需求:

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实现屏幕自动截图相关推荐

  1. python中延时函数_python延时函数

    广告关闭 腾讯云11.11云上盛惠 ,精选热门产品助力上云,云服务器首年88元起,买的越多返的越多,最高返5000元! 可以使用python的time模块来实现类似于c中的sleep函数作用代码如下: ...

  2. python中延时函数_Python延时操作实现方法示例

    本文实例讲述了Python延时操作实现方法.分享给大家供大家参考,具体如下: 在日常的开发中,往往会遇到这样的需求,需要某一个函数在一段时间之后才执行以达到某种特定的效果.此时,我们就需要某种机制,使 ...

  3. 技术要点|Python监控学生端电脑屏幕自动识别学习状态

    技术要点: 1)使用pillow扩展库进行屏幕截图: 2)使用多线程监听学生端连接: 3)使用TCP协议传输屏幕图像: 4)使用标准库zlib进行数据压缩: 5)使用OCR提取屏幕截图中的文字. 具体 ...

  4. python describe函数_Python基础知识点梳理2,推荐收藏

    接着昨天的基础知识点继续梳理,昨天的 Python基础知识梳理1 8.函数 1.定义函数: 使用关键字def来告诉python你要定义一个函数 接着指出函数名:如下面函数名是-greet_user ( ...

  5. python fields函数_Python函数详解

    # ------------------------------------一等函数------------------------------------ # 龟叔: 虽然我把函数定为一等对象,但是 ...

  6. python hasattr函数_python学习-type(),isinstance(),dir(),getattr(),setattr(),hasattr()

    isinstance() 与 type() 区别: type() 不会认为子类是一种父类类型,不考虑继承关系. isinstance() 会认为子类是一种父类类型,考虑继承关系. 如果要判断两个类型是 ...

  7. python not函数_python 函数

    1 为什么使用函数 在没有接触函数时,有时候需要将一个功能多次写,如果需要修改其中一个变量,则需要把所有实现该功能的代码一处一处改.不利于代码维护,代码量大了,组织结构也会很不清晰. 所以总结不使用函 ...

  8. python include函数_python 库函数

    python的内建函数和库函数的区别是什么? [区别]:标准库函数都需要import xxx才能取得.内建函数都在__builtins__里面,在global里直接就能用. [补充]:1.python ...

  9. python islower函数_python字符串是否是小写-python 字符串小写-python islower函数-python islower函数未定义-嗨客网...

    Python字符串是否是小写教程 在开发过程中,有时候我们需要判断一个 Python islower()函数详解 语法 str.islower() -> bool 参数 参数 描述 str 表示 ...

最新文章

  1. “双一流”本科生可得13.2万补贴!这座城市发布重磅人才新政
  2. 淘宝内部分享:怎么跳出MySQL的10个大坑
  3. 《构建高可用Linux服务器》卓越网和互动网上架了
  4. 关于Angular里给Component protected方法写单元测试的技巧
  5. leetcode881. 救生艇(贪心算法加双指针)
  6. 免插件为WordPress文章中标签添加内链
  7. vuex commit 传参数,传递多个参数
  8. SQL server数据异地备份到OSS
  9. 雷神开机logo更改_黑武士再度来袭 雷神第三代911黑武士游戏台式机评测
  10. Unity开发 罗技方向盘 G29 白话版
  11. 计算机上u盘打不开,u盘打不开怎么办,插在电脑上有显示,但是打不开?
  12. Kernel中bluetooth相关的config选项
  13. 查询oracle job命令,oracle命令之job详解
  14. 三维空间的三角剖分( 3D Delaunay Triangulated graph)第一部分:从二维空间的三角剖分做起
  15. canvas学习绘制渐变色
  16. 解决VMware虚拟机中没有vmnet0的情况
  17. 脉冲触发器(JK触发器)
  18. c++程序设计练习2.1
  19. 中国可降解塑料行业深度分析及未来发展趋势展望2021年版
  20. kinetics-skeleton格式行为数据提取方法

热门文章

  1. 不用计算实现 图片懒加载
  2. SpringBatch处理适配器ItemProcessorAdapter详解
  3. vue全局组件与局部组件
  4. ubuntu21.04安装微信3.2.1(deepin-wine方式)
  5. helm3添加harbor仓库:带鉴权--username --password
  6. k8s组件说明:api server
  7. Scala元组数据的遍历
  8. MySQL查询过程及Scheme设计与数据类型优化
  9. Java对象的创建过程
  10. 强化学习总结(3-4)——无模型的价值函数的预测,蒙特卡洛和TD时序差分方法