屏幕特定区域像素变化追踪并触发声音告警技术需求咨询
屏幕特定区域像素变化检测+声音告警方案(新手友好)
准备工作:安装依赖库
打开命令提示符,运行以下命令安装所需工具:
pip install pyautogui pillow playsound
pyautogui:负责屏幕截图和获取鼠标位置pillow:处理图片像素对比playsound:播放告警声音(Windows用户也可以用系统自带的winsound替代,无需额外安装)
完整代码实现
复制以下代码到记事本,保存为monitor.py:
import pyautogui import time from PIL import Image # 若playsound报错,替换成下面的winsound(Windows专属) # import winsound # 获取要监控的区域坐标(新手友好的可视化选择) def get_monitor_area(): print("把鼠标移到监控区域左上角,按回车确认") input() x1, y1 = pyautogui.position() print("把鼠标移到监控区域右下角,按回车确认") input() x2, y2 = pyautogui.position() return (x1, y1, x2 - x1, y2 - y1) # 返回(x起点, y起点, 宽度, 高度) # 对比两张截图的像素差异 def is_area_changed(prev_img, current_img): # 转灰度图减少计算量,降低误判 prev_gray = prev_img.convert('L') current_gray = current_img.convert('L') width, height = prev_gray.size # 计算所有像素的亮度差总和 diff_total = 0 for x in range(width): for y in range(height): diff_total += abs(prev_gray.getpixel((x,y)) - current_gray.getpixel((x,y))) # 阈值可根据区域大小调整:区域越大阈值越高,避免误触发 threshold = 1500 return diff_total > threshold if __name__ == "__main__": monitor_area = get_monitor_area() print(f"开始监控区域:{monitor_area}") # 初始化基准截图 prev_screenshot = pyautogui.screenshot(region=monitor_area) # 循环检测 while True: time.sleep(2) # 每2秒检查一次,可按需调整间隔 current_screenshot = pyautogui.screenshot(region=monitor_area) if is_area_changed(prev_screenshot, current_screenshot): print("检测到区域变化!") # 方案1:用自定义声音文件(需提前准备wav格式文件) playsound("alert.wav") # 方案2:用系统蜂鸣声(Windows专属,无需额外文件) # winsound.Beep(1200, 600) # 1200赫兹,响600毫秒 prev_screenshot = current_screenshot # 更新基准图,避免重复告警
新手操作步骤
- 安装Python:如果没装,去官网下载3.8+版本,安装时务必勾选「Add Python to PATH」
- 准备告警声音:
- 用方案1的话,找个wav格式的提示音(比如在线生成简单蜂鸣声),和
monitor.py放在同一文件夹 - 嫌麻烦直接用方案2的系统蜂鸣声,注释掉playsound那行,解开winsound的代码即可
- 用方案1的话,找个wav格式的提示音(比如在线生成简单蜂鸣声),和
- 运行程序:双击
monitor.py,按照提示用鼠标框选Zoom等待区的区域,之后程序会自动后台监控
实用调整建议
- 若频繁误触发:调大代码里的
threshold值(比如区域是100x100像素,阈值设到2000) - 若漏触发:调小
threshold值,或者缩短time.sleep()的间隔(比如改成1秒) - 必须保持Zoom窗口的监控区域可见,最小化窗口会导致截图失败
内容的提问来源于stack exchange,提问作者Illia Mamchur
相关产品推荐
相关产品推荐

