前因
简短版:帮妈妈改答题卡。
详细版:我快步走到书房,打开笔记本电脑,屏幕的蓝光映在脸上。对着空白的答题卡,我陷入了沉思,开始思考:如何自动批改空白卷?
过程
环境
本项目采用Python作为编程环境。
依赖库
cv2
(OpenCV): 用于图像处理numpy
: 数值计算pyautogui
: 屏幕截图和鼠标操作time
: 时间控制winsound
: 发出提示音keyboard
: 检测键盘输入json
: 读取配置文件
项目文件
main.py(主文件)
config.json
监控区域(SCREEN_REGION)
点击位置(CLICK_POSITION)
空白阈值(BLANK_THRESHOLD)
主程序(main.py)
主要函数
配置读取:从
config.json
文件中读取配置参数并转换为Python变量is_blank_screen
函数:
功能:判断指定屏幕区域是否为空白
处理流程:使用
pyautogui
截取指定区域将图像转换为OpenCV格式(BGR)
转换为灰度图并应用高斯模糊减少噪声
使用自适应阈值处理将图像二值化
计算非零像素比例并与阈值比较
monitor_screen
函数:
1、主监控循环
2、每隔CHECK_INTERVAL
秒检查一次屏幕区域
3、如果检测到空白:打印提示信息
发出2000Hz、持续500ms的提示音
在
CLICK_POSITION
位置模拟鼠标点击退出方式:
按下
Ctrl+Q
组合键或使用
Ctrl+C
中断程序
工作原理
程序持续监控屏幕上的一个特定区域(由
SCREEN_REGION
定义)通过图像处理技术分析该区域内容
当该区域的"空白程度"超过设定的阈值(
BLANK_THRESHOLD
)时:
判定为空白屏幕
在预设位置(CLICK_POSITION
)执行点击操作
同时发出声音提示检查间隔为0.2秒(可配置),确保及时响应(注:经本人测试,检查间隔为0.1或0.2s时反应最稳定,不会出现反应过快导致重复点击0分的后果)
由于某些原因,主程序暂无法公开。如有需要,请联系本人。
Email: [email protected]
配置文件(config.json)
{
"SCREEN_REGION": [x, y, width, height],
"BLANK_THRESHOLD": 0.99,
"CLICK_POSITION": [x, y],
"CHECK_INTERVAL": 0.2
}
参数说明
SCREEN_REGION: 定义了屏幕监控区域的坐标和大小,格式为
[x, y, width, height]
x
: 区域左上角的X坐标(x像素)y
: 区域左上角的Y坐标(y像素)width
: 区域宽度(width像素)height
: 区域高度(height像素)
BLANK_THRESHOLD: 空白阈值(0.99),用于判断屏幕区域是否为空白。值越高,对"空白"的判断越严格。
CLICK_POSITION: 当检测到空白时自动点击的位置坐标
[x, y]
x
: 点击位置的X坐标(x像素)y
: 点击位置的Y坐标(y像素)
CHECK_INTERVAL: 检查间隔时间(0.2秒),即程序每隔0.2秒检查一次屏幕区域。
注意事项
使用前需要根据实际屏幕分辨率调整区域坐标和点击位置
空白阈值可能需要根据具体应用场景调整
程序运行时需要保持监控区域可见
使用
Ctrl+Q
可以安全退出程序(经实测,Ctrl+C
无法退出运行,慎用)
评论