在移动端自动化开发、界面测试、流程巡检等场景中,传统依托 UI 控件树的自动化方案常常遇到瓶颈。不少应用、游戏会对 UI 树进行加密或隐藏,导致常规控件定位方式失效,此时OCR 文字识别就成为突破限制的核心技术。自动化脚本整合了多版本 OCR 能力,无需复杂环境部署、不用设备 Root,就能实现 “识别文字 - 定位元素 - 模拟操作 - 流程跳转” 全链路自动化。本文将结合实际开发经验,从环境准备、核心接口解析、场景落地、优化技巧等维度,详解如何借助该平台的 OCR 能力编写稳定、高效的自动化脚本。
一、前期准备:基础环境与权限配置
在编写 OCR 自动化脚本前,首要工作是完成设备权限开通与基础环境校验,这也是保障 OCR 功能正常运行的前提,任何 OCR 相关接口调用前,都必须完成这一步骤。
(一)设备与软件准备
冰狐智能辅助平台适配主流安卓设备,系统版本建议在 Android 7.0 及以上。在设备中安装冰狐客户端后,登录账号并进入脚本编辑模块。平台采用轻量化 JS 作为脚本开发语言,语法贴合标准 JavaScript,无论是专业开发者还是入门使用者,都能快速上手,同时支持在线编辑、实时调试、远程设备管理,无需搭配电脑端开发环境,大幅降低了移动端自动化的入门门槛。
(二)核心权限申请
OCR 的本质是对屏幕画面进行图像解析,因此截屏权限是所有 OCR 接口的基础权限,首次运行包含 OCR 逻辑的脚本时,系统会主动弹出权限申请窗口,必须手动允许。在代码层面,平台提供专属函数requestScreenShot()主动触发截屏与权限校验,该函数必须在所有 OCR 函数之前执行,若遗漏会直接导致识别功能报错。
如果需要在多线程中使用 OCR 接口,还需要额外配置线程栈大小,官方建议将栈大小设置为 12388608,避免因内存不足造成识别中断、脚本闪退等问题。此外,若后续使用模拟点击、页面跳转等操作,可根据使用场景选择无障碍、蓝牙 HID、USB、Root、ADB 等操作模式,不同模式需提前开启对应权限,其中无障碍模式为默认模式,兼容性最强。
二、核心 OCR 接口分类与基础用法
冰狐平台将 OCR 能力拆分为基础识别、专项识别、联动操作三大类接口,覆盖纯文字提取、数字英文识别、文字定位、模拟点击、页面跳转、返回主页等全场景。所有接口均以数组或 JSON 对象形式返回结果,包含识别文本与对应屏幕坐标,坐标统一采用[left, top, width, height]格式,为后续精准操作提供数据支撑。
(一)通用文字识别接口:ocr ()
ocr()是平台最核心的离线 OCR 接口,主打高准确率汉字识别,也是日常自动化脚本中使用频率最高的接口。该接口支持全屏识别、局部区域识别、增强识别、在线服务端识别四种模式,可根据场景灵活搭配参数。
- 基础语法与默认规则接口可选传入一个
options对象作为参数,默认参数为{region:[0, 0, 1, 1], bitmap: null, online:null, awesome:{threshold: 0.1, count: 3}}。其中region是区域控制核心参数,取值规则分为两种:数值在 0~1 之间代表屏幕比例,例如[0, 0, 0.5, 1]表示识别屏幕左半区域;数值大于 1 则代表像素坐标,例如[100, 100, 200, 130]代表以屏幕 (100,100) 为起点,宽 200 像素、高 130 像素的矩形区域。bitmap参数用于传入自定义位图,为null时默认使用截屏图片。
基础全屏识别示例代码:
function main() { // 申请截屏权限,执行屏幕截屏 requestScreenShot(); // 调用OCR全屏识别所有文字 var ret = ocr(); // 打印识别结果,结果为包含文本和坐标的数组 console.log('全屏识别结果:' + ret); }- 局部区域识别当我们仅需要识别屏幕某一固定区域的文字(如顶部导航栏、底部功能按钮)时,指定
region参数可以减少图像计算量,提升识别速度。例如仅识别屏幕左上角像素区域的文字:
function main() { requestScreenShot(); // 识别像素坐标 [100,100] 开始,宽200、高130的区域 var ret = ocr({region:[100, 100, 200, 130]}); console.log('局部区域识别结果:' + ret); }- 增强识别模式(awesome)面对字体模糊、背景复杂、字体变形等易识别出错的场景,可开启
awesome增强模式,将汉字识别成功率提升至 99.999%。该模式包含两个关键参数:threshold取值范围 0.5~0.9,数值越高识别精度越高;count取值范围 2~6,代表重复识别次数。常规场景推荐配置{threshold: 0.9, count: 3}:
function main() { requestScreenShot(); // 开启增强识别,优化汉字识别准确率 var ret = ocr({awesome:{threshold: 0.9, count: 3}}); console.log('增强识别结果:' + ret); }- 在线服务端 OCR手机端硬件算力有限,面对超大分辨率屏幕、复杂图文混排页面时,离线识别效率会下降。平台支持对接自建服务端 OCR,通过
online参数传入服务接口地址、鉴权密钥,将图片转为 Base64 格式上传至服务器识别,识别结果回传给脚本。这种模式识别能力更强,适合大批量、高难度识别场景:
function main() { requestScreenShot(); // 对接自建服务端OCR接口 var ret = ocr({online:{url:'http://xxx.xxx.xxx.xxx/api', key:'自定义密钥'}}); console.log('服务端OCR识别结果:' + ret); }- 增量学习优化若开启增强模式后,仍存在个别生僻字、自定义字体识别错误,平台提供增量学习能力。将正确文本录入 OCR 文本库,点击训练模型,下载训练后的模型并打包至冰狐客户端,即可永久解决特定文字识别问题,适配各类定制化界面。
(二)专项识别接口:tessOcr ()
tessOcr()是针对性优化的轻量化接口,仅支持数字、英文字母识别,无法识别中文,优势是运行速度更快、资源占用更低,专门用于识别验证码、键盘数字、日期、编号等纯数字 / 英文内容。其参数规则与ocr()基本一致,同样支持region局部区域识别和自定义位图传入。
针对数字键盘识别的示例代码:
function main() { requestScreenShot(); // 识别屏幕上半区域的数字与英文 var ret = tessOcr({region:[0, 0, 1, 0.5]}); console.log('数字英文识别结果:' + ret); }官方补充说明,对于日期、有序编号等规律数字,可搭配 JS 逻辑编写自动纠错规则,进一步将识别准确率提升至 99.999%。
(三)OCR 联动操作接口:实现识别 + 自动化交互
单纯的文字识别仅能完成数据采集,而自动化脚本的核心是 “识别后执行操作”。冰狐基于 OCR 封装了一系列联动接口,实现文字查找、模拟点击、页面切换、返回主页等操作,完美适配 UI 树被隐藏的游戏、小众应用场景。
- ocrFindView ():文本元素查找该接口先通过 OCR 识别屏幕文字,再根据匹配规则查找目标文本,返回包含
tag、text、region的 JSON 对象,未找到目标则返回空对象。它支持多种模糊匹配规则:txt:精确匹配、txt^:前缀匹配、txt$:后缀匹配、txt*:包含匹配,多个目标文本可用|分隔。常用于脚本前置判断,检测目标页面、按钮是否加载完成。
示例代码(查找 “数据分析” 或以 “首页” 开头的文本):
function main() { requestScreenShot(); // 匹配规则:精确查找“数据分析” 或 查找以“首页”开头的文本 var ret = ocrFindView('txt:数据分析|txt^:首页'); console.log('元素查找结果:' + ret); }接口还支持配置搜索间隔、重试次数、超时时间等参数,适配页面加载缓慢的场景。
- ocrClick ():识别并点击文本这是自动化脚本中最常用的操作接口,整合了 “OCR 识别 + 坐标点击” 两大能力,找到目标文本后自动点击对应位置,返回布尔值(true 为点击成功,false 为失败)。其
options参数中的clickMode可选择 5 种点击模式,适配不同风控场景。
基础点击示例:
function main() { requestScreenShot(); // 识别并点击包含“数据分析”或“首页”的文本按钮 var ret = ocrClick('数据分析|首页'); console.log('点击是否成功:' + ret); }- ocrSwitchPage ():OCR 页面切换用于实现跨页面跳转,逻辑为 “点击指定文本按钮 → 校验目标页面标志性文本”,双重判断确保页面跳转成功,返回布尔值。适用于多层级菜单、功能页面切换场景。
示例(点击 “查看” 按钮,校验是否进入包含 “数据分析” 或 “首页” 的页面):
function main() { requestScreenShot(); // 第一个参数:待点击文本;第二个参数:目标页面校验文本 var ret = ocrSwitchPage('查看', '数据分析|首页'); console.log('页面跳转是否成功:' + ret); }- ocrBack2Page ():OCR 返回指定页面当页面层级较深时,该接口可自动模拟返回操作,持续检测目标页面标志性文本,直到回到指定页面。支持自定义返回坐标、中间页面校验、返回按键模式等参数,适配复杂页面回退场景。
示例(自动返回包含 “首页” 的主页面):
function main() { requestScreenShot(); var ret = ocrBack2Page('首页'); console.log('返回主页是否成功:' + ret); }三、综合实战:完整自动化脚本案例
结合上述接口,我们搭建一个模拟应用内菜单浏览的完整自动化流程:识别顶部导航栏 → 点击 “功能中心” → 校验跳转页面 → 浏览后返回首页,覆盖权限申请、局部识别、元素查找、点击操作、页面校验全流程。
完整代码示例
function main() { // 1. 初始化:申请截屏权限 requestScreenShot(); sleep(1000); // 等待页面加载,单位毫秒 // 2. 局部识别顶部导航栏文字(比例区域:全屏宽度,顶部20%高度) var navText = ocr({region:[0, 0, 1, 0.2], awesome:{threshold:0.9, count:3}}); console.log('导航栏识别内容:', navText); // 3. 查找目标按钮“功能中心”,最多重试3次,间隔500ms var findBtn = ocrFindView('txt:功能中心', {duration:500, maxStep:3}); if (findBtn) { console.log('成功找到功能中心按钮,准备点击'); // 4. 点击目标按钮 var clickRes = ocrClick('txt:功能中心'); if (clickRes) { sleep(1500); // 等待页面跳转加载 // 5. 校验是否进入目标页面 var pageCheck = ocrSwitchPage('', 'txt:工具列表|txt:应用设置'); if (pageCheck) { console.log('页面跳转成功,开始浏览'); sleep(2000); // 6. 浏览完成,返回首页 var backHome = ocrBack2Page('txt:首页'); if (backHome) { console.log('已成功返回首页,流程结束'); } } } } else { console.log('未找到目标按钮,流程终止'); } }代码解析
- 流程开篇使用
requestScreenShot()和sleep(),保障截屏完成与页面加载稳定,避免因页面未加载完成导致识别失败; - 针对顶部导航栏设置比例区域识别,并开启增强模式,提升导航文字识别精度;
- 搭配
ocrFindView()增加重试机制,应对网络卡顿、页面延迟加载等异常场景; - 通过
ocrClick()执行点击操作,ocrSwitchPage()校验跳转结果,形成闭环判断; - 最后调用
ocrBack2Page()完成页面回退,实现完整的自动化浏览流程。
四、脚本优化与避坑技巧
结合实际开发中遇到的问题,总结几点优化方向和注意事项,提升脚本的稳定性、运行效率和兼容性。
(一)性能优化
- 缩小识别区域:非必要不使用全屏识别,根据目标元素位置设置
region参数,减少图像运算范围,大幅提升识别速度; - 区分接口使用场景:纯数字、英文场景优先使用
tessOcr(),汉字场景使用ocr(),各司其职降低资源消耗; - 合理配置重试与延时:根据设备性能和应用加载速度,调整
duration、maxStep、sleep等参数,延时过短易识别失败,过长则浪费运行时间。
(二)准确率优化
- 复杂界面开启增强模式:背景花哨、字体偏淡、分辨率较高的页面,务必开启
awesome增强识别; - 使用增量学习修复特例:对于反复识别错误的固定文字,通过平台增量学习训练专属模型,从根源解决识别问题;
- 优先模糊匹配:页面文字存在小幅变动时,使用
txt*:包含匹配、txt^:前缀匹配,比精确匹配容错率更高。
(三)常见问题规避
- 权限遗漏:所有 OCR 接口调用前必须执行
requestScreenShot(),首次使用务必允许截屏权限,这是最基础也最容易出错的点; - 线程栈配置:多线程场景下,按照官方要求设置线程栈大小,防止脚本崩溃;
- 操作模式适配:部分应用会限制无障碍服务,可切换蓝牙 HID、USB 等点击模式,规避风控限制;
- 坐标规则区分:牢记
region参数 “比例值 0~1、像素值大于 1” 的规则,避免区域定位偏移。
(四)服务端 OCR 落地建议
面对大规模设备集群、高难度识别场景,建议部署私有化服务端 OCR。服务端接口需接收POST请求,请求体为x-www-form-urlencoded格式,包含 Base64 编码后的图片、鉴权密钥等字段。私有化部署后,可利用服务器高性能算力,统一提升所有设备的识别效率与准确率。
五、总结
在移动端自动化领域,当传统 UI 控件树方案失效时,OCR 技术成为打通自动化流程的关键。自动化脚本平台将复杂的 OCR 算法封装为简洁易用的 JS 接口,从基础的文字提取,到识别、查找、点击、页面跳转等联动操作,形成了一套完整的解决方案。在实际开发中,只需结合业务场景合理选择接口、配置参数、优化识别规则,就能编写出稳定可靠的自动化脚本。同时,平台提供的增强识别、增量学习、服务端部署等进阶能力,也能应对各类复杂界面与严苛的使用环境,让 OCR 自动化落地更加灵活。对于入门开发者而言,建议从基础的ocr()、ocrClick()接口开始练习,逐步掌握区域识别、匹配规则、异常重试等技巧,再尝试搭建复杂的多流程自动化脚本,循序渐进地挖掘平台 OCR 能力的全部价值。