目的

        TrollAutoScript 是一款在iPhone手机上 可以模拟手指触摸 按键操作的一款自动化测试软件。采用 lua 5.4.6 作为脚本开发语言 同时在lua 的基础上 添加了多个扩展函数,(找图 找色 模拟触摸 模拟按键操作 yolo目标检测 屏幕绘制 等等)。本篇文章主要讲解下TrollAutoScript 的iOS版TomatoOCR纯本地离线文字识别插件如何使用和集成。

准备工作

  1. 下载TrollAutoScript的.tipa文件

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

        

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

插件集成

插件放置

用360压缩等压缩工具打开.tipa文件,将下载的TomatoOCR.so插件,拖入到项lib目录中:

注意:不要解压tipa文件,只需要用压缩文件打开

调用方式

将模型opt文件添加到资源目录中。其中cht.opt、japan.opt和korean.opt为多语言模型,不需要可以不加。

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

local tomatoOCR = require("TomatoOCR")

function ocr_start(x1, y1, x2, y2, zi)
    local 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":韩语
    tomatoOCR.setRecType(rec_type)

    tomatoOCR.setDetBoxType("rect")  -- 调整检测模型检测文本参数- 默认"rect": 由于手机上截图文本均为矩形文本,从该版本之后均改为rect,"quad":可准确检测倾斜文本
    tomatoOCR.setDetUnclipRatio(1.9)  -- 调整检测模型检测文本参数 - 默认1.9: 值范围1.6-2.5之间
    tomatoOCR.setRecScoreThreshold(0.1)  -- 识别得分过滤 - 默认0.1,值范围0.1-0.9之间
    tomatoOCR.setReturnType("json")
    -- 返回类型 - 默认"json": 包含得分、坐标和文字;
    -- "text":纯文字;
    -- "num":纯数字;
    -- 自定义输入想要返回的文本:".¥1234567890",仅只返回这些内容
    
    tomatoOCR.setBinaryThresh(0) -- 二值化设定,非必须
    tomatoOCR.setFilterColor("", "black");  -- 设置滤色值和背景色(black\white),滤色值默认是空的,详细使用见方法说明
      

    local type = 3;
    -- type 可传可不传
    -- type=0 : 只检测
    -- type=1 : 方向分类 + 识别
    -- type=2 : 只识别
    -- type=3 : 检测 + 识别

    -- 只检测文字位置:type=0
    -- 全屏识别: type=3或者不传type
    -- 截取单行文字识别:type=1或者type=2
    local img = "/var/mobile/Media/1.png"
    screen.image(x1, y1, x2, y2):saveToPngFile(img)
    local res = tomatoOCR.ocrFile(img, type)
    print("结果:"..res)

    -- 找字返回坐标,返回的是“百度”的中心点坐标,没有找到字返回“”空字符串
    local point = tomatoOCR.findTapPoint(zi)
    print(point)

    -- 找字返回坐标,返回所有的“百度”的中心点坐标,没有找到字返回“”空字符串
    local points = tomatoOCR.findTapPoints(zi)
    print(points)
end


function main()
    local path = "/var/mobile/Media/svip/"

    -- 初始化-ios
    tomatoOCR.init(path.."/res/")

    local license = "" -- 从群文件txt中获取
    local flag = tomatoOCR.setLicense(license, "牛逼")
    print(flag)

    ocr_start(0, 0, 300, 300, "百度")
end
main()

其中的方法说明如下

方法名说明
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

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

运行结果

完毕

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

更多推荐