目的
AIWork是一款安卓手机自动化集成度很高的自动化测试开发引擎,采用免root技术,自研IDE代码编辑器,自研图色引擎2.0,自研agent adb代理模式,自研hid硬件自动化,脚本代码采用js脚本代码,提供了众多的工具,方便自动生成js代码,做到可繁可简。本篇文章主要讲解下更优秀的AIWork平台TomatoOCR纯本地离线文字识别插件如何使用和集成。
准备工作
1、搭建AIWork的ide开发环境:
2、下载TomatoOCR纯本地离线文字识别插件:点击下载插件
- 目前插件支持中英文、繁体字、日语、韩语识别;
- 支持小图、区域图和单行文字识别,准确率高达99%;
- 支持多种返回格式,json\文本\数字\自定义;
- 支持增强版二值化;
- 支持多线程;
- 支持找字返回坐标并点击;
- 超高的稳定性,速度快;
- 不联网、不联网、不联网;
插件集成
1、打开ide开发工具,新建项目,在插件目录下添加文字识别插件
下载插件后,先改名为TomatoOCR.apk
2、拷贝js中的代码
// ********************************************************************************************
// ********欢迎使用TomatoOCR文字识别插件,加入群【469843332】可获取最新版本!!!************
// ********************************************************************************************
rhino.loadDex('TomatoOCR.apk') //加载插件
importClass(com.tomato.ocr.aw.OCRApi); //导入类
var tmo_ocr= new OCRApi();
tmo_ocr.setContext(context);
let license = "";
let flag = tmo_ocr.setLicense(license); // 设置license,见授权码获取
printl(flag)
// ----------------------注:以上代码全局只需写一次-------------------------------
function ocr_start(tmsize, zi){
// 以下方法详细介绍,见文档:方法介绍
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)
var wdh = screen.getScreenWidth()
var hgt = screen.getScreenHeight()
var x1 = Math.round(tmsize[0] * wdh)
var y1 = Math.round(tmsize[1] * hgt)
// 例子
var img = screen.screenShotFull()
var corp_img = img.cutImagePercent(tmsize[0], tmsize[1], tmsize[2], tmsize[3])
var type = 3;
var result = tmo_ocr.ocrBase64(corp_img.toBase64(), type);
corp_img.recycle()
img.recycle()
printl(result);
if (result != "") {
// var json_result = JSON.parse(result) // setReturnType为“json”时,返回的是json字符串,需要使用JSON.parse进行解析
// 自行解析
// ...
// return JSON.parse(result)
}
// 找字返回坐标,没有找到字返回“”空字符串,返回的是“百度”的中心点坐标
if (zi != "") {
var point = tmo_ocr.findTapPoint(zi)
if (point != "") {
var json_point = JSON.parse(point)
var center_x = json_point[0] + x1
var center_y = json_point[1] + y1
return [center_x, center_y]
}
}
// 找字返回坐标,没有找到字返回“”空字符串,找到了返回所有相匹配的
// var points = tmo_ocr.findTapPoints("百度")
// if (points != "") {
// var tmp = JSON.parse(points)
// for(var i = 0; i< tmp.length; i++) {
// var data = tmp[i]
// var words = data.words
// var point = data.point
// var center_x = point[0] + x1
// var center_y = point[1] + y1
// }
// }
return ""
}
var tmsize = [0.1,0.1,0.9,0.5]
ocr_start(tmsize, "百度")
3、其中的方法说明如下
方法名 | 说明 |
setLicense | 设置授权 |
setRecType | 设置识别语言,默认ch-3.0: ch、ch-2.0、ch-3.0版可切换使用,对部分场景可适当调整 |
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 | 找字,找出所有相匹配的字,找不到字时,返回“”空字符串 |
end | 释放插件,只需要在停止脚本的时候调用 |
4、识别结果
以上就是所有的运行情况。
完毕
相对来说,在cheese进行插件开发还是比较困难的,需要会原生安卓开发,本地识别全屏会相对较慢,区域识别还是非常快,相比部署在服务器上,还可以减少了很多资源占用情况,更加方便便捷。