Autox.js 中文文档 下载 App

Autox.js PaddleOCR v4 让脚本看懂屏幕上的文字

让脚本不仅能"点",还能"读"

上两组学了:

OCR 文字识别解决的是第三个问题:"上面写了什么"。屏幕上有一段话、一个数字、一个名字,脚本能不能读懂它的内容?

答案是能——Autox.js v7 内置了 PaddleOCR 引擎(v7.2.3 升级到 v4 版本),让手机端也能跑离线的 OCR。

PaddleOCR 是什么

PaddleOCR 是百度 PaddlePaddle 深度学习平台的文字识别工具,在移动端通过 Paddle Lite 推理引擎运行。Autox.js 把它内置进 App,脚本可以直接调用。

特性说明
模型版本PaddleOCR v4(v7.2.3 升级)
运行方式本地离线(不需要网络)
模型大小slim 模型约 10~20MB
支持语言中文(简体/繁体)、英文、数字为主

初始化 OCR 引擎

console.show();

// 方式一:用默认配置初始化
paddle.initOcr();

// 方式二:自定义配置
paddle.initOcr({
    modelPath: null,      // null = 使用内置模型
    labelPath: null,      // 标签文件路径
    cpuThreadNum: 4,      // CPU 线程数(默认 4)
    cpuPowerMode: 2       // 性能模式(0=低功耗, 1=均衡, 2=高性能)
});

console.log("OCR 引擎初始化完成");

v7.2.3 新增了 paddle.initOcrWithConfig() 方法,可以传入一个 OcrConfig 字典:

paddle.initOcrWithConfig({
    model_path: "/sdcard/脚本/ocr_models/v4/",
    cpu_threads: 4,
    use_gpu: false,      // 移动端一般不用 GPU
    lang: "ch"           // ch=中文, en=英文
});

基础识别

// 先截屏
let img = captureScreen();

// 识别整张图
let texts = paddle.ocr(img);

// texts 是一个数组,每个元素包含文本和位置
texts.forEach(t => {
    console.log("文字:" + t.text + " 位置:" + t.bounds);
});

// 释放图片
img.recycle();

带区域的识别

// 只识别屏幕上的某个区域(更快、更准)
let region = [0, device.height * 0.5, device.width, device.height * 0.4];
let texts = paddle.ocr(img, { region: region });

限定区域和图像识别里的 region 一样——只在你关心的那个区域做 OCR,速度快很多。

识别结果里有什么

let result = paddle.ocr(img);
// 每个 result 元素长这样:
{
    text: "立即领取",        // 识别出来的文字
    confidence: 0.98,       // 置信度 0~1
    bounds: [               // 文字在屏幕上的位置
        { x: 100, y: 500 },
        { x: 200, y: 500 },
        { x: 200, y: 550 },
        { x: 100, y: 550 }
    ]
}

实战:自动识别按钮文字并点击

console.show();

// 初始化 OCR
paddle.initOcr();
console.log("OCR 就绪");

// 要查找的目标文字列表
const TARGET_TEXTS = ["确定", "确认", "同意", "允许", "是", "OK", "Confirm"];

// 主循环
setInterval(() => {
    let img = captureScreen();
    let results = paddle.ocr(img);
    
    for (let r of results) {
        if (TARGET_TEXTS.includes(r.text)) {
            let center = getBoundsCenter(r.bounds);
            console.log("找到:" + r.text + " @ (" + center.x + "," + center.y + ")");
            click(center.x, center.y);
            sleep(1000);
            break;
        }
    }
    
    img.recycle();
}, 2000);

// 辅助:从 bounds 计算中心
function getBoundsCenter(bounds) {
    let totalX = bounds.reduce((s, p) => s + p.x, 0);
    let totalY = bounds.reduce((s, p) => s + p.y, 0);
    return { x: totalX / bounds.length, y: totalY / bounds.length };
}

释放模型资源

OCR 模型比较占内存,脚本结束或长时间不用时记得释放:

// 立即释放
paddle.release();

// 延迟释放(默认 3 分钟,v7.2.3 新增)
paddle.releaseDelayed(180000);

常见坑

问题原因解决
第一次识别很慢模型加载需要时间脚本开头初始化,不是每次识别都 init
识别准确率低图片模糊、文字太小、模型不对应先 zoom 放大图片、换对应语言模型
OCR 闪退内存不足释放后重新 init、用 releaseDelayed
v2 模型参数不生效v7.2.3 移除了旧版用 paddle.initOcr() 而非 v2 的 API

OCR vs 找图 vs 找色

方案优点缺点
找色最快、最轻只识别纯色,信息太少
找图最精准、结果确定要提前准备模板图
OCR能读文字、自适应大小最慢、准确率有波动

实战中通常组合使用:先用 OCR 读关键字、再用找图定位、最后用坐标点击。