如何使用ocr来实现自动化脚本?

在自动化脚本领域,控件识别是实现稳定脚本的关键。然而,并非所有应用都提供标准无障碍控件信息(如 textid 等),尤其是一些游戏、老旧应用或自定义渲染界面,往往无法通过常规方式定位元素。此时,OCR(光学字符识别)技术便成为不可或缺的替代方案。

OCR支持本地 Tesseract 引擎、云端 OCR 服务以及基于深度学习的 YOLO 模型,开发者可根据实际需求灵活选择。本文将详细介绍如何在使用 纯 JS API 实现基于 OCR 的自动化脚本,并附带完整可运行的 Demo 示例。

一、OCR 功能概述

冰狐提供了以下 OCR 相关接口:

  • ocr(text, options):基础文字识别,返回识别结果数组。
  • tessOcr(text, options):使用本地 Tesseract 引擎进行识别。
  • onlineOcr(text, options):调用云端 OCR 服务,精度更高但需联网。
  • ocrFindView(keyword, options):直接通过 OCR 查找包含关键词的"虚拟控件"。
  • ocrClick(keyword, options):识别并点击包含关键词的位置。
  • ocrSwitchPage / ocrBack2Page:结合 OCR 实现页面跳转判断。

⚠️ 注意:所有 OCR 操作均依赖截图权限。首次使用需调用 requestScreenShot() 获取权限。

二、准备工作

在编写 OCR 脚本前,请确保完成以下步骤:

  1. 开启无障碍服务(部分 OCR 操作需配合界面刷新);
  2. 授予截屏权限
  3. 确保目标文字清晰、对比度高,避免模糊或艺术字体影响识别率。

可通过以下代码初始化环境:

javascript 复制代码
function prepareEnvironment() {
    // 请求截屏权限
    if (!requestScreenShot()) {
        console.error("用户未授予截屏权限");
        return false;
    }
    
    // 检查无障碍是否开启
    if (!isAccessibilityEnabled()) {
        openAccessibilitySetting();
        console.warn("请手动开启无障碍服务");
        sleep(5000); // 等待用户操作
    }
    
    return true;
}

三、OCR 基础用法示例

场景:自动登录某 App(无标准控件)

假设某 App 的登录按钮显示为图片文字"立即登录",且无 textid 属性。我们可通过 OCR 识别并点击。

✅ 完整 Demo 源码
javascript 复制代码
/**
 * 使用 OCR 实现自动登录
 * 仅使用冰狐平台 JS API
 */
function main() {
    // 1. 初始化环境
    if (!prepareEnvironment()) {
        toast("初始化失败,请检查权限");
        return -1;
    }

    // 2. 启动目标 App(假设包名为 com.example.app)
    var pkg = "com.example.app";
    var ret = launchApp(pkg, "txt*:启动页", { maxStep: 30, afterWait: 2000 });
    if (ret !== 1) {
        console.error("启动 App 失败");
        return -2;
    }

    console.log("App 启动成功,等待主界面");

    // 3. 循环查找"立即登录"按钮(最多尝试10次)
    var attempts = 0;
    while (attempts < 10) {
        sleep(1000);
        
        // 使用 ocrClick 直接点击识别到的文字
        var clicked = ocrClick("立即登录", {
            similarity: 0.8,      // 文字相似度阈值
            region: [0.2, 0.6, 0.8, 0.9], // 限定在屏幕下半区域搜索(x1,y1,x2,y2,归一化坐标)
            timeout: 3000,
            afterWait: 500
        });

        if (clicked) {
            console.log("成功点击【立即登录】");
            break;
        } else {
            console.log(`第 ${++attempts} 次未找到"立即登录"`);
            
            // 可尝试滑动页面
            if (attempts % 3 === 0) {
                scroll("down", { distance: 0.3, duration: 300 });
            }
        }
    }

    if (attempts >= 10) {
        toast("未找到登录按钮");
        return -3;
    }

    // 4. 输入账号密码(假设输入框可通过 OCR 定位)
    sleep(1500);
    
    // 点击"手机号"输入框(通过 OCR 定位)
    ocrClick("手机号", { similarity: 0.75, afterWait: 300 });
    sleep(500);
    inputText("13800138000"); // 使用输入法输入

    sleep(500);
    ocrClick("密码", { similarity: 0.75, afterWait: 300 });
    sleep(500);
    inputText("MySecurePass123!");

    // 5. 再次点击登录
    sleep(1000);
    ocrClick("登录", { similarity: 0.8, afterWait: 1000 });

    console.log("登录流程执行完毕");
    toast("自动化登录完成!");
    return 0;
}

// 辅助函数:环境准备
function prepareEnvironment() {
    if (!requestScreenShot()) {
        return false;
    }
    if (!isAccessibilityEnabled()) {
        openAccessibilitySetting();
        sleep(5000);
    }
    return true;
}

四、高级技巧:结合 ocrFindView 精准操作

ocrClick 虽然便捷,但在复杂场景下可能不够灵活。我们可以先用 ocrFindView 获取位置信息,再执行自定义逻辑。

javascript 复制代码
// 示例:识别多个相同文字,点击第二个
function clickSecondOccurrence(keyword) {
    var views = ocrFindView(keyword, {
        similarity: 0.85,
        maxCount: 5
    });

    if (views && views.length >= 2) {
        var second = views[1]; // 数组索引从0开始
        click(second.x, second.y); // 手动点击坐标
        console.log(`点击第2个"${keyword}",位置: (${second.x}, ${second.y})`);
        return true;
    }
    return false;
}

五、提升 OCR 识别准确率的建议

  1. 限定识别区域 :通过 region 参数缩小搜索范围,减少干扰。
  2. 调整相似度similarity 默认 0.8,可适当降低(如 0.7)以容忍字体差异。
  3. 预处理截图:虽冰狐未开放图像处理 API,但可通过多次截图+重试提高成功率。
  4. 优先使用 onlineOcr:对关键步骤(如验证码)可调用云端服务提升精度(需网络)。
javascript 复制代码
// 使用云端 OCR 识别验证码
function recognizeCaptcha() {
    var result = onlineOcr("", {
        region: [0.3, 0.5, 0.7, 0.6],
        timeout: 5000
    });
    
    if (result && result.length > 0) {
        return result[0].text; // 返回识别出的文字
    }
    return "";
}

六、注意事项与常见问题

  • 性能开销:OCR 比控件查找慢,避免高频调用。
  • 文字方向:默认识别水平文字,倾斜文本可能识别失败。
  • 多语言支持:Tesseract 需提前加载对应语言包。

七、总结

通过使用OCR 即使面对无标准控件的应用,我们也能实现可靠的自动化操作。开发者应根据实际场景选择合适的 OCR 接口,并结合区域限定、重试机制等策略提升脚本鲁棒性。

相关推荐
开开心心就好20 小时前
无弹窗不更新的PC本地播放工具
运维·科技·macos·docker·计算机外设·ocr·powerpoint
MageGojo1 天前
OCR 火车票识别 API 服务介绍与使用考量
ocr·接口·api·数据提取·火车票识别
星光一影1 天前
一个开源 OCR 引擎,支持 100+ 语言,能识别表格、公式、印章,而且完全免费
开源·ocr
开开心心就好1 天前
支持多显示器的Windows高效分屏工具
运维·python·科技·游戏·计算机外设·ocr·powerpoint
YXWik61 天前
图片 OCR 文字提取 (Python + AI 模型(ModelScope))
人工智能·python·ocr
AI人工智能+2 天前
一种基于深度学习的端到端户口本识别技术,通过多阶段神经网络架构实现高精度信息提取
人工智能·深度学习·计算机视觉·自然语言处理·ocr
linyanRPA2 天前
影刀RPA店群自动化架构实战:Python协同配置模板引擎与店铺批量管理
办公自动化·效率工具·浏览器自动化·自动化脚本·电商运营·影刀rpa·电商自动化
linyanRPA2 天前
影刀RPA店群自动化运维实战:Python协同异常聚类与根因定位系统设计
浏览器自动化·ai助手·自动化脚本·电商运营·电商自动化·店群自动化·提效神器
Mr -老鬼2 天前
EasyClick iOS自动化7.1.0新版本详解
ios·自动化·easyclick
linyanRPA3 天前
影刀RPA店群自动化系统:任务生命周期钩子与浏览器资源优雅回收架构
办公自动化·浏览器自动化·ai助手·自动化脚本·rpa自动化·拼多多运营工具·提效神器