目的

        Autojs是简单、快捷、全面的一站式自动化脚本解决方案仅需极少时间、极低成本即可快速实现各种自动化脚本功能。本篇文章主要讲解下autojs、autoxjs等变种版的TomatoOCR纯本地离线文字识别插件如何使用和集成。

准备工作

  1. 在设备上安装好Autojs开发工具

     2、下载对应的TomatoOCR插件:下载插件

        

  • 目前插件支持中英文、繁体字、日语、韩语识别;
  • 支持小图、区域图和单行文字识别,准确率高达99%;
  • 支持多种返回格式,json\文本\数字\自定义;
  • 支持二值化;
  • 支持找字返回坐标并点击;
  • 超高的稳定性,速度快;
  • 支持多线程
  • 支持滤色

插件集成

分安装版和免安装版,两种方式都可以,只是加载代码不一样

安装版

插件放置

下载对应的插件后,直接在设备上安装。

由于autojs的目前版本比较混乱,这里提供多种架构的插件,真机上下任意版本都没问题,模拟器上需要自行尝试。 如:华仔AutoJs工具箱在雷电模拟器上就只需下载【arm64-v8a、armeabi-v7a】架构的就可以,其他版本的Autojs就自行尝试。

注:插件包需要安装,只再手机设置-应用中才可以看到

调用方式

以下代码拷贝到js中,配置license后,点击运行

let OCR = $plugins.load('com.tomato.ocr');
let tmo_ocr = new OCR();

let license = "";
let flag = tmo_ocr.setLicense(license); // 设置license,见授权码获取
console.log(flag)
// ----------------------注:以上代码全局只需写一次-------------------------------

function ocr_start(x1, y1, x2, y2){
    // 以下方法详细介绍,见文档:方法介绍
    tmo_ocr.setRecType("ch-3.0")
    // 注:ch、ch-2.0、ch-3.0版可切换使用,对部分场景可适当调整
    // "ch":普通中英文识别,1.0版模型
    // "ch-2.0":普通中英文识别,2.0版模型
    // "ch-3.0":普通中英文识别,3.0版模型
    // "cht":繁体,"japan":日语,"korean":韩语
    
    tmo_ocr.setDetBoxType("rect")
    // 调整检测模型检测文本参数- 默认"rect": 由于手机上截图文本均为矩形文本,从该版本之后均改为rect,"quad":可准确检测倾斜文本
    
    tmo_ocr.setDetUnclipRatio(1.9) // 文字识别错误,可尝试将这个值调大点
    // 调整检测模型检测文本参数 - 默认1.9: 值范围1.6-2.5之间
    
    tmo_ocr.setRecScoreThreshold(0.3)
    // 识别得分过滤 - 默认0.1,值范围0.1-0.9之间
    
    tmo_ocr.setReturnType("json")
    // 返回类型 - 默认"json": 包含得分、坐标和文字;
    // "text":纯文字;
    // "num":纯数字;
    // 自定义输入想要返回的文本:".¥1234567890",仅只返回这些内容
    
    tmo_ocr.setBinaryThresh(0)
    // 二值化设定,非必须
    
    tmo_ocr.setRunMode("slow")
    // 默认“slow”;“fast”:小图识别上会加速,但准确率会降低,推荐用默认值“slow”
    
    //tmo_ocr.setFilterColor("", "black"); //  设置滤色值和背景色(black\white),滤色值默认是空的,详细使用见方法说明
      

    // 例子
    if(!requestScreenCapture()){
        $events.broadcast.emit('console','error','无法截取!')
        exit()
    }
    let img = captureScreen()
    let bitmap = img.bitmap;
    let type = 3
    // type=-1 : 检测 + 方向分类 + 识别
    // type=0 : 只检测
    // type=1 : 方向分类 + 识别
    // type=2 : 只识别
    // type=3 : 检测 + 识别
    // 只检测文字位置:type=0
    // 全屏识别: type=3或者不传type
    // 截取单行文字识别:type=1或者type=2
    let result = tmo_ocr.ocrBitmap(bitmap, type);
    console.log("结果: " + result);
    if (result != "") { // setReturnType为“json”时,返回的是json对象,可以直接解析
        // 自行解析
    }

    // 找字返回坐标,没有找到字返回“”空字符串,返回的是“百度”的中心点坐标
    var point = tmo_ocr.findTapPoint("百度")
    if (point != "") {
        var center_x = point[0] + x1
        var center_y = point[1] + y1
    }
    
    var points = tmo_ocr.findTapPoints("百度")
    if (points != "") {
        for(var i = 0; i< points.length; i++) {
            var data = points[i]
            var words = data.words
            var point = data.point
            var center_x = point[0] + x1
            var center_y = point[1] + y1
        }
    }
}

ocr_start(100, 100, 500, 500)

免安装版

插件放置

下载免安装版的插件后,放到项目的根目录中,如下图:

调用方式

以下代码拷贝到js中,配置license后,点击运行

runtime.loadDex("./TomatoOCR/TomatoOCR.dex")

importClass('com.tomato.ocr.aj.OCRApi');
let tmo_ocr = new OCRApi(context, files.cwd());

let license = "";
let flag = tmo_ocr.setLicense(license); // 设置license,见授权码获取
console.log(flag)
// ----------------------注:以上代码全局只需写一次-------------------------------

$events.on('exit', () => {
    tmo_ocr.release();
});

function ocr_start(x1, y1, x2, y2){
    // 以下方法详细介绍,见文档:方法介绍
    tmo_ocr.setRecType("ch-3.0")
    tmo_ocr.setDetBoxType("rect")
    tmo_ocr.setDetUnclipRatio(1.9) 
    tmo_ocr.setRecScoreThreshold(0.3) 
    tmo_ocr.setReturnType("json")
    tmo_ocr.setBinaryThresh(0)

    // 例子
    if(!requestScreenCapture()){
        $events.broadcast.emit('console','error','无法截取!')
        exit()
    }
    let img = captureScreen()
    let bitmap = img.bitmap;
    let type = 3
    let result = tmo_ocr.ocrBitmap(bitmap, type);
    console.log("结果: " + result);
    if (result != "") { // setReturnType为“json”时,返回的是json对象,可以直接解析
        // 自行解析
    }

    // 找字返回坐标,没有找到字返回“”空字符串,返回的是“百度”的中心点坐标
    var point = tmo_ocr.findTapPoint("百度")
    if (point != "") {
        var center_x = point[0] + x1
        var center_y = point[1] + y1
    }
    
    var points = tmo_ocr.findTapPoints("百度")
    if (points != "") {
        for(var i = 0; i< points.length; i++) {
            var data = points[i]
            var words = data.words
            var point = data.point
            var center_x = point[0] + x1
            var center_y = point[1] + y1
        }
    }
}

ocr_start(100, 100, 500, 500)

其中的方法说明

方法名 说明
setLicense 设置授权
setRecType

设置识别语言,默认ch-3.0:

ch、ch-2.0、ch-3.0版可切换使用,对部分场景可适当调整
"ch":普通中英文识别,1.0版模型
"ch-2.0":普通中英文识别,2.0版模型
 "ch-3.0":普通中英文识别,3.0版模型
 "cht":繁体,"japan":日语,"korean":韩语

setDetBoxType

调整检测模型检测文本参数-,默认"rect":

由于手机上截图文本均为矩形文本,从该版本之后均改为rect,"quad":可准确检测倾斜文本

setDetUnclipRatio
调整检测模型检测文本参数,默认1.9:
值范围1.6-2.5之间,如果文字的检测框太小,可调整改参数,一般往大调整
setRecScoreThreshold
设置识别得分过滤,默认0.1:
值范围0.1-0.9之间
setReturnType
设置返回类型,默认"json",包含得分、坐标和文字;
"text":纯文字;
"num":纯数字;
自定义输入想要返回的文本:".¥1234567890",仅只返回这些内容
setBinaryThresh
默认值0,对图片进行二值化处理,非必须,正常情况下可以不用写
ocrFile/ocrBase64

两个参数,图片路径和类型,一般类型传3:

type=-1 : 检测 + 方向分类 + 识别
type=0 : 只检测
type=1 : 方向分类 + 识别
type=2 : 只识别(单行识别)
type=3 : 检测 + 识别
只检测文字位置:type=0
全屏识别: type=3或者不传type
截取单行文字识别:type=1或者type=2

如果识别为不到时,返回的数据为“”字符串

findTapPoint

找字,返回传入字的中心点坐标,方便进行点击,找不到字时,返回“”空字符串

findTapPoints

找字,找出所有相匹配的字,找不到字时,返回“”空字符串

运行结果

完毕

        相对来说,在autojs插件开发还是比较困难的,官方提供的功能太少,原生插件集成无法采用直连的方式,但相比部署在服务器上,还是减少了很多资源占用情况,更加方便便捷。

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐