使用ocr实现自动化脚本

在移动端自动化开发、界面测试、流程巡检等场景中,传统依托 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 接口,主打高准确率汉字识别,也是日常自动化脚本中使用频率最高的接口。该接口支持全屏识别、局部区域识别、增强识别、在线服务端识别四种模式,可根据场景灵活搭配参数。

  1. 基础语法与默认规则 接口可选传入一个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时默认使用截屏图片。

基础全屏识别示例代码:

javascript 复制代码
function main() {
    // 申请截屏权限,执行屏幕截屏
    requestScreenShot();
    // 调用OCR全屏识别所有文字
    var ret = ocr();
    // 打印识别结果,结果为包含文本和坐标的数组
    console.log('全屏识别结果:' + ret);
}
  1. 局部区域识别 当我们仅需要识别屏幕某一固定区域的文字(如顶部导航栏、底部功能按钮)时,指定region参数可以减少图像计算量,提升识别速度。例如仅识别屏幕左上角像素区域的文字:
javascript 复制代码
function main() {
    requestScreenShot();
    // 识别像素坐标 [100,100] 开始,宽200、高130的区域
    var ret = ocr({region:[100, 100, 200, 130]});
    console.log('局部区域识别结果:' + ret);
}
  1. 增强识别模式(awesome) 面对字体模糊、背景复杂、字体变形等易识别出错的场景,可开启awesome增强模式,将汉字识别成功率提升至 99.999%。该模式包含两个关键参数:threshold取值范围 0.5~0.9,数值越高识别精度越高;count取值范围 2~6,代表重复识别次数。常规场景推荐配置{threshold: 0.9, count: 3}
javascript 复制代码
function main() {
    requestScreenShot();
    // 开启增强识别,优化汉字识别准确率
    var ret = ocr({awesome:{threshold: 0.9, count: 3}});
    console.log('增强识别结果:' + ret);
}
  1. 在线服务端 OCR 手机端硬件算力有限,面对超大分辨率屏幕、复杂图文混排页面时,离线识别效率会下降。平台支持对接自建服务端 OCR,通过online参数传入服务接口地址、鉴权密钥,将图片转为 Base64 格式上传至服务器识别,识别结果回传给脚本。这种模式识别能力更强,适合大批量、高难度识别场景:
javascript 复制代码
function main() {
    requestScreenShot();
    // 对接自建服务端OCR接口
    var ret = ocr({online:{url:'http://xxx.xxx.xxx.xxx/api', key:'自定义密钥'}});
    console.log('服务端OCR识别结果:' + ret);
}
  1. 增量学习优化 若开启增强模式后,仍存在个别生僻字、自定义字体识别错误,平台提供增量学习能力。将正确文本录入 OCR 文本库,点击训练模型,下载训练后的模型并打包至冰狐客户端,即可永久解决特定文字识别问题,适配各类定制化界面。

(二)专项识别接口:tessOcr ()

tessOcr()是针对性优化的轻量化接口,仅支持数字、英文字母识别,无法识别中文 ,优势是运行速度更快、资源占用更低,专门用于识别验证码、键盘数字、日期、编号等纯数字 / 英文内容。其参数规则与ocr()基本一致,同样支持region局部区域识别和自定义位图传入。

针对数字键盘识别的示例代码:

javascript 复制代码
function main() {
    requestScreenShot();
    // 识别屏幕上半区域的数字与英文
    var ret = tessOcr({region:[0, 0, 1, 0.5]});
    console.log('数字英文识别结果:' + ret);
}

官方补充说明,对于日期、有序编号等规律数字,可搭配 JS 逻辑编写自动纠错规则,进一步将识别准确率提升至 99.999%。

(三)OCR 联动操作接口:实现识别 + 自动化交互

单纯的文字识别仅能完成数据采集,而自动化脚本的核心是 "识别后执行操作"。冰狐基于 OCR 封装了一系列联动接口,实现文字查找、模拟点击、页面切换、返回主页等操作,完美适配 UI 树被隐藏的游戏、小众应用场景。

  1. ocrFindView ():文本元素查找 该接口先通过 OCR 识别屏幕文字,再根据匹配规则查找目标文本,返回包含tagtextregion的 JSON 对象,未找到目标则返回空对象。它支持多种模糊匹配规则:txt:精确匹配、txt^:前缀匹配、txt$:后缀匹配、txt*:包含匹配,多个目标文本可用|分隔。常用于脚本前置判断,检测目标页面、按钮是否加载完成。

示例代码(查找 "数据分析" 或以 "首页" 开头的文本):

javascript 复制代码
function main() {
    requestScreenShot();
    // 匹配规则:精确查找"数据分析" 或 查找以"首页"开头的文本
    var ret = ocrFindView('txt:数据分析|txt^:首页');
    console.log('元素查找结果:' + ret);
}

接口还支持配置搜索间隔、重试次数、超时时间等参数,适配页面加载缓慢的场景。

  1. ocrClick ():识别并点击文本 这是自动化脚本中最常用的操作接口,整合了 "OCR 识别 + 坐标点击" 两大能力,找到目标文本后自动点击对应位置,返回布尔值(true 为点击成功,false 为失败)。其options参数中的clickMode可选择 5 种点击模式,适配不同风控场景。

基础点击示例:

javascript 复制代码
function main() {
    requestScreenShot();
    // 识别并点击包含"数据分析"或"首页"的文本按钮
    var ret = ocrClick('数据分析|首页');
    console.log('点击是否成功:' + ret);
}
  1. ocrSwitchPage ():OCR 页面切换用于实现跨页面跳转,逻辑为 "点击指定文本按钮 → 校验目标页面标志性文本",双重判断确保页面跳转成功,返回布尔值。适用于多层级菜单、功能页面切换场景。

示例(点击 "查看" 按钮,校验是否进入包含 "数据分析" 或 "首页" 的页面):

javascript 复制代码
function main() {
    requestScreenShot();
    // 第一个参数:待点击文本;第二个参数:目标页面校验文本
    var ret = ocrSwitchPage('查看', '数据分析|首页');
    console.log('页面跳转是否成功:' + ret);
}
  1. ocrBack2Page ():OCR 返回指定页面当页面层级较深时,该接口可自动模拟返回操作,持续检测目标页面标志性文本,直到回到指定页面。支持自定义返回坐标、中间页面校验、返回按键模式等参数,适配复杂页面回退场景。

示例(自动返回包含 "首页" 的主页面):

javascript 复制代码
function main() {
    requestScreenShot();
    var ret = ocrBack2Page('首页');
    console.log('返回主页是否成功:' + ret);
}

三、综合实战:完整自动化脚本案例

结合上述接口,我们搭建一个模拟应用内菜单浏览的完整自动化流程:识别顶部导航栏 → 点击 "功能中心" → 校验跳转页面 → 浏览后返回首页,覆盖权限申请、局部识别、元素查找、点击操作、页面校验全流程。

完整代码示例

javascript 复制代码
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('未找到目标按钮,流程终止');
    }
}

代码解析

  1. 流程开篇使用requestScreenShot()sleep(),保障截屏完成与页面加载稳定,避免因页面未加载完成导致识别失败;
  2. 针对顶部导航栏设置比例区域识别,并开启增强模式,提升导航文字识别精度;
  3. 搭配ocrFindView()增加重试机制,应对网络卡顿、页面延迟加载等异常场景;
  4. 通过ocrClick()执行点击操作,ocrSwitchPage()校验跳转结果,形成闭环判断;
  5. 最后调用ocrBack2Page()完成页面回退,实现完整的自动化浏览流程。

四、脚本优化与避坑技巧

结合实际开发中遇到的问题,总结几点优化方向和注意事项,提升脚本的稳定性、运行效率和兼容性。

(一)性能优化

  1. 缩小识别区域 :非必要不使用全屏识别,根据目标元素位置设置region参数,减少图像运算范围,大幅提升识别速度;
  2. 区分接口使用场景 :纯数字、英文场景优先使用tessOcr(),汉字场景使用ocr(),各司其职降低资源消耗;
  3. 合理配置重试与延时 :根据设备性能和应用加载速度,调整durationmaxStepsleep等参数,延时过短易识别失败,过长则浪费运行时间。

(二)准确率优化

  1. 复杂界面开启增强模式 :背景花哨、字体偏淡、分辨率较高的页面,务必开启awesome增强识别;
  2. 使用增量学习修复特例:对于反复识别错误的固定文字,通过平台增量学习训练专属模型,从根源解决识别问题;
  3. 优先模糊匹配 :页面文字存在小幅变动时,使用txt*:包含匹配、txt^:前缀匹配,比精确匹配容错率更高。

(三)常见问题规避

  1. 权限遗漏 :所有 OCR 接口调用前必须执行requestScreenShot(),首次使用务必允许截屏权限,这是最基础也最容易出错的点;
  2. 线程栈配置:多线程场景下,按照官方要求设置线程栈大小,防止脚本崩溃;
  3. 操作模式适配:部分应用会限制无障碍服务,可切换蓝牙 HID、USB 等点击模式,规避风控限制;
  4. 坐标规则区分 :牢记region参数 "比例值 0~1、像素值大于 1" 的规则,避免区域定位偏移。

(四)服务端 OCR 落地建议

面对大规模设备集群、高难度识别场景,建议部署私有化服务端 OCR。服务端接口需接收POST请求,请求体为x-www-form-urlencoded格式,包含 Base64 编码后的图片、鉴权密钥等字段。私有化部署后,可利用服务器高性能算力,统一提升所有设备的识别效率与准确率。

五、总结

在移动端自动化领域,当传统 UI 控件树方案失效时,OCR 技术成为打通自动化流程的关键。自动化脚本平台将复杂的 OCR 算法封装为简洁易用的 JS 接口,从基础的文字提取,到识别、查找、点击、页面跳转等联动操作,形成了一套完整的解决方案。在实际开发中,只需结合业务场景合理选择接口、配置参数、优化识别规则,就能编写出稳定可靠的自动化脚本。同时,平台提供的增强识别、增量学习、服务端部署等进阶能力,也能应对各类复杂界面与严苛的使用环境,让 OCR 自动化落地更加灵活。对于入门开发者而言,建议从基础的ocr()ocrClick()接口开始练习,逐步掌握区域识别、匹配规则、异常重试等技巧,再尝试搭建复杂的多流程自动化脚本,循序渐进地挖掘平台 OCR 能力的全部价值。

相关推荐
AOwhisky9 小时前
Python 学习笔记(第十四期)——运维自动化(下·中篇):远程文件传输——paramiko进阶篇
运维·python·学习·云原生·自动化·文件传输·paramiko
imc.1110 小时前
linux基础IO
linux·运维·服务器
躺不平的理查德10 小时前
让Ubuntu 的第二块网卡 ens37 永久固定为 192.168.30.111
运维·服务器
bitbrowser11 小时前
Facebook 验证反复回到原页面,应该从哪里排查
运维·服务器·facebook
Land032911 小时前
AI网页元素变化无法自动修复?自带元素自愈的自动化解决方案
运维·人工智能·ai·自动化·rpa
fengyehongWorld11 小时前
Jenkins 安装与简单配置
运维·jenkins
云智慧AIOps社区11 小时前
2026 国产化 ITSM 替代指南:横向测评 ServiceNow、轻帆云、Jira等五款主流IT服务管理平台
运维·人工智能·运维开发·it服务管理·itsm平台
Urbano11 小时前
针织卫衣全流程生产工序科普:自动化替代、产能优化与设备选型实战方案
运维·自动化
ai_coder_ai12 小时前
在自动化脚本中如何实现播音?
人工智能·自动化·语音识别
AC赳赳老秦12 小时前
招投标公开数据自动化采集实战:基于 OpenClaw 的定时抓取与业务关键词精准推送
运维·服务器·数据库·自动化·测试用例·deepseek·openclaw