如何使用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 接口,并结合区域限定、重试机制等策略提升脚本鲁棒性。

相关推荐
AI人工智能+2 天前
智能文档抽取系统:结合OCR与大语言模型(LLM),高效处理非结构化文档
人工智能·计算机视觉·语言模型·自然语言处理·ocr·文档抽取
xuedeyumu3 天前
Paddle ocr基本识别
ocr·paddle
handsomestWei4 天前
百度飞桨PaddleOCR图片印章检测技术简介
人工智能·百度·ocr·paddlepaddle·红色印章
stereohomology5 天前
光荣梦想:大模型图片OCR中文识别对比 Qwen3.6plus强
ocr
ai_coder_ai5 天前
如何在自己的后台服务中通过open api集成自动化脚本的后台服务?
autojs·openapi·自动化脚本·冰狐智能辅助·easyclick
ai_coder_ai5 天前
如何在自动化脚本中使用云原生功能(FaaS和BaaS)?
云原生·autojs·自动化脚本·冰狐智能辅助·easyclick
测试开发技术5 天前
自动生成用例:基于OCR+ LLM的设计方案(附落地指南)
自动化测试·软件测试·自动化·llm·ocr·测试用例·用例自动生成
weixin_408099676 天前
OCR 在线识别 + API 接口实战:从网页验证到系统集成
图像处理·人工智能·后端·ocr·api·图片文字识别·文字识别
weixin_408099676 天前
身份证正反面合并+识别OCR接口调用
java·人工智能·后端·python·ocr·api·身份证ocr
AI人工智能+7 天前
施工许可证识别技术:深度融合计算机视觉(CV)与自然语言处理(NLP)
深度学习·计算机视觉·ocr·施工许可证识别