跳到主要内容

! 屏幕区域文字识别 (screen.ocr_text)

声明​

识别结果, 结果详情 = screen.ocr_text(左, 上, 右, 下 [, 引擎选项, 二值化选项 ])

参数​

  • 左, 上, 右, 下 整数型,用于表示屏幕上的区域, 传入 0, 0, 0, 0 代表全屏
  • 引擎选项 可选参数,表型,用于选择识别语言及识别引擎
参数结构
{
-- Android 版使用 Paddle-Lite 引擎识别。可使用 lang 指定模型
-- 例如 lang = "ppocr_ch" 则使用模型 /sdcard/nbtouch/models/ppocr_ch
-- Paddle-Lite 引擎支持 *.nb 格式的 Slim 模型
engine = "paddle" | "tesseract",
lang = "ppocr_ch",
}
Android 支持的 OCR 引擎和模型

Android 平台推荐使用 Paddle-Lite 引擎,支持以下模型:

ppocr_ch       -- 简体中文(推荐)
ppocr_cht -- 繁体中文
ppocr_en -- 英文数字
ppocr_jp -- 日文
ppocr_kr -- 韩文

也可使用 tesseract 引擎,支持 eng(英文)、chi_sim(简体中文)等语言包。

返回值​

  • 识别结果 文本型,识别返回的文字
  • 结果详情 表型
OCR 识别的结果详情结构
{
{
["y"] = number_value,
["x"] = number_value,
["w"] = number_value,
["h"] = number_value,
["confidence"] = number_value(0.0000 ~ 1.0000),
["text"] = string_value,
},
...
}

说明​

当前函数坐标值参数及返回值均受 screen.init 函数初始化的坐标系影响

为保证向前兼容,不指定识别引擎时,默认使用过时的 tesseract 引擎进行文字识别

推荐使用 PaddleLite 识别引擎以获得更好的识别效果

PaddleLite 简体中文普通版模型(需要解压缩)

PaddleLite 简体中文完全版模型(需要解压缩)

PaddleLite 繁体中文识别模型(需要解压缩)

PaddleLite 英文数字识别模型(需要解压缩)

PaddleLite 日文识别模型(需要解压缩)

PaddleLite 韩文识别模型(需要解压缩)

模型文件需放置到 /sdcard/nbtouch/models/ 目录下

也可从 PaddleOCR 模型列表 下载对应模型转换成 det_opt.nbcls_opt.nbrec_opt.nb, 然后找到对应的 dict.txt 配套使用

示例​

-- Android 示例
txt, info = screen.ocr_text(187, 882, 298, 914, {
engine = "paddle", -- 使用 PaddleLite OCR 引擎
lang = "ppocr_en", -- 使用英文数字模型
})
sys.toast("识别结果:"..txt:atrim())

txt, info = screen.ocr_text(187, 882, 298, 914, {
engine = "paddle", -- 使用 PaddleLite OCR 引擎
lang = "ppocr_ch", -- 使用简体中文模型(推荐)
})
sys.toast("识别结果:"..txt:atrim())

txt, info = screen.ocr_text(187, 882, 298, 914, {
engine = "paddle", -- 使用 PaddleLite OCR 引擎
lang = "ppocr_ch", -- 使用简体中文模型
}, "9D5D39-0F1F26,D3D3D2-2C2C2D") -- 使用色偏二值化
sys.toast("识别结果:"..txt:atrim())

txt, info = screen.ocr_text(0, 0, 0, 0, {
engine = "paddle", -- 使用 PaddleLite OCR 引擎
lang = "ppocr_ch", -- 使用 ppocr_ch 模型
}) -- 全屏识别
sys.toast("识别结果:"..txt:atrim())

:上述代码中使用了非本章函数 sys.toaststring.atrim

旧版遗留(不推荐)​

内置默认 OCR 引擎为 tesseract 3.02 版,版本不对或者字库文件损坏会导致 NBTouch 脚本服务崩溃

NBTouch 已内置 eng 识别库 [A-Za-z0-9] 能识别常规英文和数字

如果需要做简体中文或是其它语言文字识别

需要手动导入相关的字库文件到设备的 /sdcard/nbtouch/tessdata/ 目录

注意:Android 平台不支持 Apple Vision 引擎,请使用 paddle 或 tesseract 引擎

这里提供 简体中文字库(需要解压缩)

旧版遗留示例(不推荐)​

-- 示例 1:
local txt = screen.ocr_text(187, 882, 298, 914) -- 默认配置是使用 tesseract 引擎英文数字模式识别文字
sys.toast("识别结果:"..txt:atrim())
--
-- 示例 2:
local txt = screen.ocr_text(465, 241, 505, 269, "eng", "9D5D39-0F1F26,D3D3D2-2C2C2D") -- 使用色偏二值化识别
sys.toast("识别结果:"..txt:atrim())
--
-- 示例 3:
local txt = screen.ocr_text(465, 241, 505, 269, "eng", { {0x9D5D39, 0x0F1F26}, {0xD3D3D2, 0x2C2C2D} }) -- 使用色偏二值化识别,同上
sys.toast("识别结果:"..txt:atrim())
--
-- 示例 4:
local txt = screen.ocr_text(187, 882, 298, 914, {
lang = "chi_sim", -- 使用 tesseract 引擎简体中文库识别(注意,简体中文库不是内置的)
white_list = "你我他", -- 白名单设为 "你我他"
})
sys.toast("识别结果:"..txt:atrim())
--
-- 示例 5:
local txt = screen.ocr_text(187, 882, 298, 914, {
lang = "eng",
white_list = "1234567890", -- 自定义使用白名单限制仅识别为数字
}, "9D5D39-0F1F26,D3D3D2-2C2C2D") -- 使用色偏二值化识别
sys.toast("识别结果:"..txt:atrim())