loadDex 加载插件和TomatoOCR实例演示

122

主题

190

回帖

1085

积分

管理员

积分
1085

说明:可以使用安卓studio 开发出apk,jar,或者dex使用此方法加载模块,


1.png 2.png
注意:插件直接放到插件文件夹中然后上传到手机
英文方法: loadDex(plugin),加载插件到系统

参数:
plugin:插件名称例如导入的插件为 p1.dex,则参数名就填写 loadPlugin(‘p1.dex’)

案例:

//导入dex模块
rhino.loadDex('p1.dex')

//导入apk模块
rhino.loadDex('demo.apk')

importClass 导入插件中的类

方法说明:通过这个方法可以导入插件里编写好的类
英文方法:importClass(class);
中文方法:导入类(类地址,类别名);
参数:
class:类地址 例如 com.autoapp.pluginsdemo.demo

案例:

//导入插件文件
rhino.loadDex('demo.apk')
//如果需要引用多个apk 需要加上类导入
rhino.loadClass("com.autoapp.pluginsdemo.demo")
//引用类
importClass(com.autoapp.pluginsdemo.demo);
var demo1=new demo();
printl(demo1.hello());

使用方法:
1.下载
链接: https://www.123pan.com/s/NiUnjv-V8sg3.html
提取码: qhbz

2.使用以下代码识别OCR

//加载插件

try{
     rhino.loadDex('TomatoOCR.apk')
     sleep.second(1);
     //导入类
     rhino.loadClass("com.tomato.ocr.aw.OCRApi")
     importClass(com.tomato.ocr.aw.OCRApi);
}catch(e){
     rhino.clearDex();
     rhino.loadDex('TomatoOCR.apk')
     sleep.second(1);
     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["words"]
        var location = result_list["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封装 ==================================*/

举报 回复