OCR 与颜色检测

← 返回所有分类

OCR 文字识别

OCR 识别和 OCR 比对有什么区别?通用
  • OCR 识别 — 把屏幕上的文字"读出来",结果存入变量供后续使用。适合:读取金币数量、获取聊天内容、记录分数。
  • OCR 比对 — 读取文字后自动和"期望文本"对比,返回"一致/不一致"。适合:判断按钮文字是不是"确定"、检测是否出现了"错误"提示。

简单说:OCR 识别 = "告诉我上面写了什么";OCR 比对 = "上面写的是不是 XXX"。

OCR 比对节点也支持"比对成功后点击",和图像查找的点击逻辑类似。

OCR 识别不准确怎么办?通用

OCR 准确率受多种因素影响,按优先级排查:

  1. 缩小识别区域 — 区域越大,干扰文字越多。只框选需要识别的那一行/那几个字。
  2. 确保文字清晰 — 目标文字不能被遮挡、半透明、或有复杂背景花纹干扰。
  3. 文字不能太小 — 字号太小(如 8px)识别率会明显下降。
  4. 选择正确的语言 — 中文内容选中文,英文选英文。混合内容选中英文混合。
  5. 避免艺术字体 — 手写体、装饰体、严重变形的字体识别率很低。

Windows 版使用系统内置的 Windows OCR 引擎,无需额外安装。如果系统语言包缺失,需要在 Windows 设置 → 时间和语言 → 语言 中添加对应语言。

OCR 的"期望文本"是什么意思?通用

"期望文本"只在 OCR 比对节点中使用。它的意思是"你期望屏幕上显示的文字是什么"。

引擎识别出屏幕文字后,会和期望文本做比较:

  • 一致(或足够相似)→ 节点判定为成功
  • 不一致 → 节点判定为失败

举例:期望文本填"确定",屏幕上按钮写的也是"确定" → 成功,可以继续执行点击操作。

如果留空,则不做比对,只要识别到任何文字就算成功。

Windows 版 OCR 需要额外安装什么吗?Windows

不需要。MacroAI Windows 版使用系统内置的 Windows OCR 引擎(Windows.Media.Ocr),Windows 10/11 自带,零安装。

但如果你需要识别中文,确保系统已安装中文语言包:

  1. 打开 Windows 设置 → 时间和语言 → 语言
  2. 确认"中文(简体)"在语言列表中
  3. 如果没有,点击"添加语言"安装

英文是默认自带的,一般不需要额外操作。

OCR 支持哪些语言?如何切换?通用

支持的语言取决于系统已安装的语言包。最常用的是中文简体英文,此外还支持中文繁体、日文、韩文等(取决于系统语言包)。

在 OCR 节点配置中,有"语言"下拉框可以选择识别语言。

注意:语言选错会导致识别率大幅下降。比如用英文模式识别中文,结果会是乱码或空。

如果下拉框中没有你需要的语言,需要先在操作系统中安装对应的语言包。

颜色检测

颜色检测的三种模式分别适合什么场景?通用
  • 取色(point) — 获取屏幕上某一个点的颜色值。
    场景:检查固定位置的状态(技能图标是否亮了、按钮是否变灰了)。
    输入:一个坐标。输出:该点的 RGB/HSV/Hex 颜色值。
  • 主色(dominant) — 分析一个区域内占比最大的颜色。
    场景:判断弹窗背景色、检测页面主题色、识别文字颜色(第二主色)。
    输入:一个区域。输出:该区域的主色(可返回前 N 个主色)。
  • 搜索(search) — 在区域内找到匹配目标颜色的位置。
    场景:在小地图上找红点、在画面中找绿色NPC标记。
    输入:区域 + 目标颜色 + 容差。输出:匹配位置的坐标。
"容差"是什么意思?设多大合适?通用

容差(tolerance)控制颜色匹配的宽松程度。因为屏幕上的颜色可能因为光照、抗锯齿、半透明叠加等原因和你预期的不完全一致。

  • 容差 = 0:必须完全一致(几乎不可能,因为抗锯齿会让边缘像素颜色偏移)
  • 容差 = 20~30:允许轻微偏差(推荐起始值)
  • 容差 = 50~80:比较宽松,颜色差异明显也能匹配上
  • 容差 > 100:太宽松,可能匹配到不相关的颜色

建议:从 30 开始试,如果匹配不到就逐步加大,如果出现误匹配就缩小。

我想判断某个位置是不是红色,应该用哪种模式?通用

取色模式(point)+ 条件判断:

  1. 添加颜色检测节点,模式选"取色"
  2. 设置坐标为你要检测的那个点
  3. 结果存入变量(如 color
  4. 添加条件判断节点,使用 color_is 函数判断:
    color_is(color, "red", 30) — 判断是否红色,容差 30

也可以用 RGB 值精确判断:color_is(color, {r=200, g=30, b=30}, 40)

如果你不是要判断"一个点",而是要"在一大片区域里找红色在哪",那应该用搜索模式

颜色检测返回的 hex/name/rgb 分别是什么?通用

颜色检测返回多种格式的颜色描述,方便不同场景使用:

  • rgb(如 r=200, g=30, b=30)— 红绿蓝三通道值,0~255。最基础的颜色表示。
  • hex(如 "#C81E1E")— 十六进制颜色码,网页设计常用格式。
  • name(如 "red")— 最接近的颜色名称(红/绿/蓝/黄/白/黑等),方便快速判断。
  • hsv(如 h=0, s=85, v=78)— 色相/饱和度/明度,适合做颜色范围判断。
  • brightness(如 0.35)— 亮度值 0~1,判断明暗。

大多数情况下用 color_is() 函数判断即可,不需要自己解析这些值。