python延时函数_Python实现屏幕自动截图
生活随笔
收集整理的這篇文章主要介紹了
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实现屏幕自动截图的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 360借条手动还款在哪里
- 下一篇: 添加vlan后无法上网_KTV多SSID