简介:本文面向需要让自动化脚本“看懂”屏幕文字的开发者,系统讲解文字识别的完整技术流程。从字库原理、截图与二值化处理,到点阵提取与识别调用,逐步拆解关键环节,并给出可复用的实现思路与调试建议,帮助读者构建稳定可靠的屏幕文字识别能力。
在自动化脚本开发中,图像查找与颜色匹配是最常用的两种定位手段。它们实现简单、执行高效,适用于按钮位置固定、界面元素颜色特征明显的场景。然而,当目标信息以动态文本的形式呈现时,这两种方法就会遇到根本性的局限。
举几个典型场景:
这些需求的共同点是:目标不是“某个图案出现了没有”,而是“屏幕上写的是什么”。图像查找只能回答“在不在”,颜色匹配只能回答“是不是这个颜色”,二者都无法输出文本内容本身。
文字识别(OCR,Optical Character Recognition)正是为解决这类问题而设计的。它通过预先建立的字符样本库,将屏幕上的像素图案映射为可读的文本字符串,从而让脚本具备“阅读”界面的能力。
字库可以理解为一本“字典”,它记录了每个字符对应的像素点阵特征。识别过程本质上是一次模式匹配:脚本从屏幕指定区域采集像素,与字库中的样本逐一比对,找到匹配度最高的字符并输出。
因此,字库的质量直接决定了识别准确率。一个良好的字库应当满足:
需要注意的是,字库是针对特定字体和渲染环境建立的。如果界面字体发生变化(例如游戏更新换了 UI 字体),原有的字库可能失效,需要重新制作。这一点在长期维护的脚本中必须纳入考虑。
实现文字识别通常需要借助具备 OCR 能力的插件或组件。这类组件一般提供以下核心功能:
在安装与注册环节,不同工具的具体步骤差异较大,建议参考对应组件的官方文档完成初始化。本文重点讲解从零制作字库并完成一次识别的完整流程。
打开具备字库编辑功能的工具,新建一个字库文件,命名时建议使用有意义的名称(例如以目标场景命名),便于后续管理。
字库制作的第一步是采集字符样本。操作方式通常为:
此时工具的预览窗口会显示刚刚截取的图像。截图范围的控制非常关键:范围过大,会引入大量背景干扰;范围过小,可能截断字符。建议初次截图后根据预览效果反复调整。
二值化是将彩色图像转换为黑白图像的过程,目的是让字符轮廓更加清晰。具体操作:
如果二值化后字符模糊、断裂或与背景混在一起,说明取色不准确或截图范围包含过多干扰,需要重新截图。
二值化效果确认无误后,即可提取点阵。通常提供两种模式:
对于数字识别这类需求,提取多个通常更高效,因为它能一次性把一行数字拆成独立的字符样本。
字库初步建立后,应当用实际界面进行验证:在目标位置输入已知内容(例如输入 123),观察识别结果是否为 123。如果出现误识别或漏识别,常见原因包括:
在实际脚本中,文字识别通常封装为如下逻辑(示意性伪代码):
function recognizeText(x1, y1, x2, y2, dictPath)// 1. 在指定区域内查找文字// 2. 加载字库文件// 3. 返回识别结果字符串result = OCR(x1, y1, x2, y2, dictPath)return resultend function// 调用示例text = recognizeText(100, 200, 300, 240, "test.txt")if text == "123" then// 执行对应操作end if
关键点在于:
文字识别让自动化脚本从“看得见”升级为“读得懂”,其核心在于字库的制作质量与识别流程的稳定封装。整个流程可以概括为:
截图 → 二值化取色 → 提取点阵 → 生成字库 → 调用识别 → 验证补全
掌握这一流程后,无论是交易金额校验、价格扫描还是状态文本提取,都可以通过统一的识别框架来实现。后续可根据具体场景,进一步优化字库样本和识别参数,在准确率与执行效率之间取得平衡。