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

相关推荐
虚幻如影3 小时前
Tesseract-OCR 引擎安装
python·ocr
ai_coder_ai1 天前
在自动化脚本中如何在自定义ui中使用webview来无限扩展ui?
ui·autojs·自动化脚本·冰狐智能辅助·easyclick
一顿能吃五大海碗啊啊啊1 天前
OCR大模型如何解决多页文档的问题
ocr·ocr大模型·ocr长文档·ocr大模型面试
专家大圣1 天前
告别付费 OCR!PaddleOCR-VL + cpolar,打造专属便携识别工具✨
网络·ocr·内网穿透·cpolar
AI人工智能+1 天前
网约车运输证识别技术:深度融合计算机视觉与自然语言处理技术,实现对运输证全字段的高精度定位、识别与结构化提取
深度学习·计算机视觉·ocr·网约车运输证识别
Pyeako1 天前
基于Qt和PaddleOCR的工业视觉识别报警系统开发
人工智能·python·深度学习·数码相机·opencv·ocr·pyqt5
guslegend2 天前
DeepSeek-OCR-2快速入门
ocr
hsling松子2 天前
基于 PaddleOCR-VL 与 PaddleFormers 的多模态文档解析微调项目
人工智能·计算机视觉·语言模型·自然语言处理·ocr
旗讯数字2 天前
智破纸质壁垒 赋能医药合规——旗讯数字医药注册批件纸质文档智能识别与结构化提取对接解决方案
数据结构·ocr·合规审查