文字识别
文字识别(OCR)任务通过持续截取监视框区域的画面,识别其中的文字内容,并在满足预设条件时触发提醒。
适用场景
- 监控屏幕上显示的数字、状态文字
- 检测某个关键词是否出现或消失
- 对数值进行大小比较、趋势判断
基础配置:目标文字 + 提醒时机
在任务配置对话框中填写目标文字,并选择提醒时机,两者配合使用。
字符串包含
当识别到的文字包含目标文字时触发提醒。
- 目标文字支持逗号分隔多个值,满足任意一个即触发
- 示例:目标文字填写
故障,报警,ERROR,识别到任意一个词时提醒
字符串不包含
当识别到的文字不包含目标文字中任何一个值时触发提醒。
- 适用于监控"正常"状态消失的场景
- 示例:目标文字填写
正常,运行中,这些词都消失时提醒
数值等于 / 数值不等于
将识别结果转换为数值后进行比较。
- 目标文字支持逗号分隔多个数值
- 示例:
数值等于,目标文字填0,100,识别到 0 或 100 时触发
数值介于
当识别到的数值落在指定区间内时触发。
- 区间格式:
[最小值,最大值]或[最小值-最大值] - 支持多个区间,用逗号分隔
- 示例:
[0,50],[90,100]表示数值在 0~50 或 90~100 之间时触发
数值上升趋势 / 数值下降趋势
连续采样多次,判断数值是否持续上升或下降。
- 需配合采样次数使用(默认 10 次)
- 只有连续 N 次采样的数值严格单调递增/递减时才触发
- 采样期间日志面板会显示当前进度,例如:
正在采样 (3/10)
文本变化时 / 文本不变化时
判断连续多次采样的文字内容是否发生变化。
- 文本变化时:每次相邻采样的文字都不同时触发(持续在变化)
- 文本不变化时:所有采样的文字完全相同时触发(长时间静止)
正则表达式配置
当内置的提醒时机无法满足需求时,可使用正则表达式进行更灵活的匹配。
- 填写正则表达式字段后,目标文字和提醒时机将被忽略
- 使用标准 Python 正则语法
# 匹配以"错误"开头的文字
^错误
# 匹配3位以上的数字
\d{3,}
# 匹配温度超过80度(如"85°C"、"92℃")
([89]\d|[1-9]\d{2,})[\s]*[°℃]
JS 自定义条件
JS 条件是最灵活的判断方式,适合复杂逻辑。填写后,其他所有条件配置均被忽略。
你需要定义一个名为 exec 的函数,接收两个参数:
arr:采样数组,arr[0]为最新一次识别结果(去除空格后的文字)cache:持久化缓存对象,可在多次执行间保存状态
返回值约定:
| 返回值 | 效果 |
|---|---|
false / null / undefined | 不触发提醒 |
true | 触发提醒 |
{x: 100, y: 200} | 触发提醒,并以该坐标作为后续动作的基准点 |
示例一:识别结果等于指定文字时触发
function exec(arr) {
return arr[0] === '故障';
}
示例二:数值超过阈值时触发
function exec(arr) {
var val = parseFloat(arr[0]);
return !isNaN(val) && val > 80;
}
示例三:利用 cache 实现"连续3次都是故障才触发"
function exec(arr, cache) {
if (arr[0] === '故障') {
cache.count = (cache.count || 0) + 1;
} else {
cache.count = 0;
}
return cache.count >= 3;
}
示例四:返回坐标,触发后动作以该坐标为基准
function exec(arr) {
if (arr[0] === '确认') {
return { x: 500, y: 300 };
}
return false;
}
忽略条件
忽略条件用于在特定屏幕状态下跳过本次检测,避免误报。
格式: x,y=#RRGGBB 或 x,y!=#RRGGBB
x,y:屏幕坐标(可用拾色器获取)=:该坐标颜色等于指定颜色时,跳过检测!=:该坐标颜色不等于指定颜色时,跳过检测
# 当坐标(200,300)的颜色是白色时,跳过检测(说明界面未加载完成)
200,300=#FFFFFF
# 当坐标(100,100)的颜色不是绿色时,跳过检测(说明系统未就绪)
100,100!=#00FF00
常见问题
OCR 识别不准确怎么办?
- 开启调试模式(系统配置中),查看
debug_screenshots文件夹中保存的截图,确认截图区域是否正确 - 调整监视框大小,确保只包含需要识别的文字区域,去除无关内容
- 检查屏幕缩放比例,高 DPI 屏幕可能导致坐标偏移