目的

        AutoGo 是一个基于 Go 语言开发的 Android 自动化操作工具,旨在为用户提供一个高效、安全、灵活的 Android 自动化解决方案。与传统的自动化工具不同,AutoGo 的二进制执行文件能够在 Android 系统上直接运行,具备强大的跨应用操作能力,同时无需安装任何 APK。这使得它在复杂的自动化场景中,尤其是在需要与其他应用无缝交互时,具有独特的优势。本篇文章主要讲解下更优秀的AutoGo 的TomatoOCR纯本地离线文字识别插件如何使用和集成。

准备工作

1、在电脑上安装好GoLang编辑器和Go语言开发环境

        

2、下载TomatoOCR纯本地离线文字识别插件:点击下载

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

插件集成

1、下载对应的插件后,拷贝到项目的如下位置。

2、以下代码拷贝到main.go中,配置license后,右键AutoGo>同步资源,然后再右键AutoGo>运行项目。

// ********************************************************************************************
// ********欢迎使用TomatoOCR文字识别插件,https://www.52tomato.com官网可获取最新版本!!!************
// *

package main

import (
    "app/TomatoOCR"
    "encoding/json"
    "fmt"
)

var tmoOcr = TomatoOCR.New()

func main() {
    //注意:调试时务必先通过插件同步资源在运行否则缺失依赖会运行报错
    if tmoOcr == nil {
        fmt.Println("创建对象失败")
        return
    }
    license := "" // 设置license,见授权码获取

    flag := tmoOcr.SetLicense(license, "测试")
    fmt.Println(flag)

    ocrStart(0, 0, 300, 300)
}

func ocrStart(x1, y1, x2, y2 int) {
    tmoOcr.SetRecType("ch-3.0")
    // 注:ch、ch-2.0、ch-3.0版可切换使用,对部分场景可适当调整
    // "ch":普通中英文识别,1.0版模型
    // "ch-2.0":普通中英文识别,2.0版模型
    // "ch-3.0":普通中英文识别,3.0版模型
    // "number":数字识别
    // "cht":繁体,"japan":日语,"korean":韩语

    tmoOcr.SetDetBoxType("rect")     // 调整检测模型检测文本参数- 默认"rect": 由于手机上截图文本均为矩形文本,从该版本之后均改为rect,"quad":可准确检测倾斜文本
    tmoOcr.SetDetScaleRatio(1.0)  // 设置输入图片缩放大小的参数 - 默认为1.0。值范围0.1-10.0之间
    tmoOcr.SetDetUnclipRatio(1.9)    // 调整检测模型检测文本参数 - 默认1.9: 值范围1.6-2.5之间
    tmoOcr.SetRecScoreThreshold(0.3) // 识别得分过滤 - 默认0.1,值范围0.1-0.9之间
    tmoOcr.SetReturnType("json")
    // 返回类型 - 默认"json": 包含得分、坐标和文字;
    // "text":纯文字;
    // "num":纯数字;
    // 自定义输入想要返回的文本:".¥1234567890",仅只返回这些内容

    tmoOcr.SetBinaryThresh(0) // 二值化设定 0-255,非必须
    tmoOcr.SetRunMode("slow") // 默认“slow”;“fast”:小图识别上会加速,但准确率会稍低,推荐用默认值“slow”
    tmoOcr.SetFilterColor("", "black"); //  设置滤色值和背景色(black\white),滤色值默认是空的,详细使用见方法说明
      
    var Type = 3
    // type=2 : 只识别
    // type=3 : 检测 + 识别
    // 全屏或多行识别: type=3
    // 截取单行文字识别:type=2
    jsonStr := tmoOcr.Detect(x1, y1, x2, y2, Type)
    fmt.Println(jsonStr)
    if jsonStr != "" {
        // 解析数据
        // 如何返回的是json字符串
        // Type=3时
        //var rawItems []struct {
        //    Location [4][2]int `json:"location"` // 矩形坐标点
        //    Score    float64   `json:"score"`    // 检测置信度
        //    Words    string    `json:"words"`    // 检测到的文字
        //}
        //json.Unmarshal([]byte(jsonStr), &rawItems)
        //for _, raw := range rawItems {
        //    fmt.Println(raw.Words)
        //}

        // Type=2时
        //var rawItem struct {
        //    Location [4][2]int `json:"location"` // 矩形坐标点
        //    Score    float64   `json:"score"`    // 检测置信度
        //    Words    string    `json:"words"`    // 检测到的文字
        //}
        //json.Unmarshal([]byte(jsonStr), &rawItem)
        //fmt.Println(rawItem.Words)
    }

    pointStr := tmoOcr.FindTapPoint("文")
    fmt.Println(pointStr)
    if pointStr != "" {
        // 解析数据
        var point []int
        json.Unmarshal([]byte(pointStr), &point)
        fmt.Println(point[0]+x1, point[1]+y1)
    }

    pointsStr := tmoOcr.FindTapPoints("文")
    fmt.Println(pointsStr)
    if pointsStr != "" {
        // 解析数据
        var rawItems []struct {
            Point [2]int `json:"point"` // 中心坐标点
            Words string `json:"words"` // 检测到的文字
        }
        json.Unmarshal([]byte(pointsStr), &rawItems)
        for _, raw := range rawItems {
            fmt.Println(raw.Point, raw.Words)
        }
    }
}

3、其中的方法说明如下

方法名 说明
setLicense license获取
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
对图片进行二值化处理,非必须,正常情况下可以不用写
ocrFile

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

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

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

findTapPoint

找字,返回传入字的中心点坐标,方便进行点击,找不到字时,返回[-1,-1]

findTapPoints 找字,找出所有符合这个字的所有区域,返回的是个json
release 释放插件,只需要在停止脚本的时候调用

4、识别结果

以上就是所有的运行情况。

完毕

        相对来说,在AutoGO进行插件开发还是比较困难的,需要会原生安卓NDK开发,本地识别全屏会相对较慢,区域识别还是非常快,相比部署在服务器上,还可以减少了很多资源占用情况,更加方便便捷。

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐