TomatoOCR
使用方法:
1.下载
链接: https://www.123pan.com/s/NiUnjv-V8sg3.html (opens new window)
提取码: qhbz
2.使用以下代码识别OCR
//加载插件
rhino.loadDex('ocr.apk')
//导入类
rhino.loadClass("com.tomato.ocr.aw.OCRApi")
importClass(com.tomato.ocr.aw.OCRApi);
//初始化
var ocr= new OCRApi();
ocr.setContext(context);
//截图和识别
var img=screen.screenShot(screen.getScreenWidth()/2,screen.getScreenHeight()/2,100)
printl(img)
var res=ocr.ocrBase64(img.toBase64(),-1);
printl(res)
以下是网友提供的封装案例
var TM = {};
/*================================== ocr类 ==================================*/
//加载插件
//rhino.loadDex('TomatoOCR.apk',"armeabi-v7a")
rhino.loadDex('TomatoOCR.apk')
//导入类
try {
//多插件调用必须导入类
rhino.loadClass('com.tomato.ocr.aw.OCRApi');
importClass(com.tomato.ocr.aw.OCRApi)
} catch (error) {
FZ.printll(error)
}
var ocr = new OCRApi();
let rec_type = "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":韩语
ocr.setContext(context, rec_type);
// 试用版license从群中获取或者网盘中获取
let license = "自己找作者获取"
let flag = ocr.setLicense(license);
//printl(flag)
// flag= -1: 无效license
// flag= 0 : 过期license
// flag= 1 或 到期日期 : 试用license或正式license
ocr.setDetBoxType("rect") // 调整检测模型检测文本参数- 默认"rect": 由于手机上截图文本均为矩形文本,从该版本之后均改为rect,"quad":可准确检测倾斜文本
ocr.setDetUnclipRatio(1.9) // 调整检测模型检测文本参数 - 默认1.9: 值范围1.6-2.5之间
ocr.setRecScoreThreshold(0.3) // 识别得分过滤 - 默认0.1,值范围0.1-0.9之间
ocr.setReturnType("json")
// 返回类型 - 默认"json": 包含得分、坐标和文字;
//"text":纯文字;
//"num":纯数字;
//自定义输入想要返回的文本:".¥1234567890",仅只返回这些内容
var type = 3;
// type 可传可不传
// type=0 : 只检测
// type=1 : 方向分类 + 识别
// type=2 : 只识别
// type=3 : 检测 + 识别
// 只检测文字位置:type=0
// 全屏识别: type=3或者不传type
// 截取单行文字识别:type=1或者type=2
/*================================== ocr类 ==================================*/
/*================================== ocr封装 ==================================*/
// tmstr="" 识别的文字
// tmsize=[] 识别百分比区域
// tmclick=true/false 是否点击
// tmcoor1, tmcoor2 偏移坐标范围
// tmslee 点击后休息时间
TM.tmocr识别 = function (tmstr, tmsize, tmclick, tmcoor1, tmcoor2, tmslee) {
//四舍五入取整,百分比坐标转真实坐标
var tma = Math.round(tmsize[0] * wdh)
var tmb = Math.round(tmsize[1] * hgt)
//var tmc = Math.round(tmsize[2] * wdh)
//var tmd = Math.round(tmsize[3] * hgt)
//printl(tmsize[0])
//printl(tma)
var img0 = screen.screenShotFull()
sleep.millisecond(10)
//百分比裁剪
var img = img0.cutImagePercent(tmsize[0], tmsize[1], tmsize[2], tmsize[3])
sleep.millisecond(10)
//var img = screen.screenShot(screen.getScreenWidth() / 2, screen.getScreenHeight() / 2, 100)
var result3 = ocr.ocrBase64(img.toBase64(), type);
//printl(result3)
try {
if (result3 != "") {
var result3 = JSON.parse(result3)
var point = this.findStrCenter(result3, tmstr)//识别
//printl(point[0], point[1])
if (point[0] >= 0) {
FZ.printll(tmstr)
var tme = point[0] + tma
var tmf = point[1] + tmb
printl(tme, tmf)
if (tmclick == true) {
hid.click(tme + rand.randNumber(tmcoor1, tmcoor2), tmf + rand.randNumber(tmcoor1, tmcoor2))
sleep.millisecond(tmslee)
}
img0.recycle()
img.recycle()
return true
} else {
img0.recycle()
img.recycle()
return false
}
}
} catch (err) {
printl(err)
}
}
//区域找字返回坐标
TM.tmocr识别坐标 = function (tmstr, tmsize) {
//四舍五入取整,百分比坐标转真实坐标
var tma = Math.round(tmsize[0] * wdh)
var tmb = Math.round(tmsize[1] * hgt)
var img0 = screen.screenShotFull()
sleep.millisecond(10)
//百分比裁剪
var img = img0.cutImagePercent(tmsize[0], tmsize[1], tmsize[2], tmsize[3])
sleep.millisecond(10)
//var img = screen.screenShot(screen.getScreenWidth() / 2, screen.getScreenHeight() / 2, 100)
var result3 = ocr.ocrBase64(img.toBase64(), type);
//printl(result3)
try {
if (result3 != "") {
var result3 = JSON.parse(result3)
var point = this.findStrCenter(result3, tmstr)//识别
//printl(point[0], point[1])
if (point[0] >= 0) {
FZ.printll(tmstr)
var tme = point[0] + tma
var tmf = point[1] + tmb
printl(tme, tmf)
var poin = [tme, tmf]
img0.recycle()
img.recycle()
return poin
} else {
img0.recycle()
img.recycle()
return false
}
}
} catch (err) {
printl(err)
}
}
TM.findStrCenter = function (result_list, data) {
all_result = []
for (let i = 0; i < result_list.length; i++) {
var words = result_list[i]["words"]
var location = result_list[i]["location"]
var pos = words.indexOf(data);
if (pos >= 0) {
let w_len = words.length
let d_len = data.length
let x1 = location[0][0]
let y1 = location[0][1]
let x2 = location[2][0]
let y2 = location[2][1]
let x = Math.floor((x2 - x1) / w_len * (d_len + 2 * pos) / 2 + x1)
let y = Math.floor((y2 - y1) / 2 + y1)
return [x, y]
}
}
return [-1, -1]
}
//内存释放
//ocr.end()
/*================================== ocr封装 ==================================*/
上次更新: 2024/11/05, 13:43:57