跳到主要内容

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

声明

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

参数

  • 左, 上, 右, 下
    整数型,用于表示屏幕上的区域, 传入 0, 0, 0, 0 代表全屏

  • 引擎选项
    可选参数,表型,用于选择识别语言及识别引擎

    参数结构
    {
    -- 如果将 engine 字段设为 "apple",则使用 iOS 13 以上苹果自带的 Vision.framework 进行识别
    -- 你可以使用 image.vision_supported_recognition_languages() 函数获取 Vision.framework 支持的 OCR 模型列表
    -- 如果将 engine 字段设为 "paddle",则使用 Paddle-Lite 引擎识别。可使用 lang 指定模型,例如 lang = "ppocr_ch" 则使用模型 /var/mobile/Media/1ferver/models/ppocr_ch
    -- Paddle-Lite 引擎支持 *.nb 格式的 Slim 模型
    engine = "apple" | "paddle" | "tesseract",
    lang = "zh-Hans",
    }
    各版本 iOS 内置的 Vision.framework 支持的 OCR 模型列表
    { -- iOS 13
    [1] = "en-US",
    }

    { -- iOS 14~15
    [1] = "en-US",
    [2] = "fr-FR",
    [3] = "it-IT",
    [4] = "de-DE",
    [5] = "es-ES",
    [6] = "pt-BR",
    [7] = "zh-Hans",
    [8] = "zh-Hant",
    }

    { -- iOS 16
    [ 1] = "en-US",
    [ 2] = "fr-FR",
    [ 3] = "it-IT",
    [ 4] = "de-DE",
    [ 5] = "es-ES",
    [ 6] = "pt-BR",
    [ 7] = "zh-Hans",
    [ 8] = "zh-Hant",
    [ 9] = "yue-Hans",
    [10] = "yue-Hant",
    [11] = "ko-KR",
    [12] = "ja-JP",
    [13] = "ru-RU",
    [14] = "uk-UA",
    }
  • 二值化选项
    实数型,二值化阈值,可参考 图片自动二值化
    表型,自定义二值化色偏,参考 图片手动二值化
    文本型,自定义二值化色偏,参考 图片手动二值化

返回值

  • 识别结果
    文本型,识别返回的文字

  • 结果详情
    表型

    OCR 识别的结果详情结构
    {
    {
    ["y"] = number_value,
    ["x"] = number_value,
    ["w"] = number_value,
    ["h"] = number_value,
    ["confidence"] = number_value(0.0000 ~ 1.0000),
    ["text"] = string_value,
    },
    ...
    }

说明

为保证向前兼容,不指定识别引擎时,默认使用过时的 tesseract 引擎进行文字识别
软件版本在 1.3.8 以上方支持 Apple 和 PaddleLite 识别引擎

示例

-- 1.3.8 以上示例
txt, info = screen.ocr_text(187, 882, 298, 914, "en-US") -- iOS 13 以上可使用苹果内置的 en-US 模型识别英文数字
sys.toast("识别结果:"..txt:atrim())

txt, info = screen.ocr_text(187, 882, 298, 914, "zh-Hans") -- iOS 14 以上可使用苹果内置的 zh-Hans 模型识别简体中文
sys.toast("识别结果:"..txt:atrim())

txt, info = screen.ocr_text(187, 882, 298, 914, {
engine = "apple", -- 使用 Apple 引擎
lang = "zh-Hans" -- 使用简体中文识别模型
}, "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 版,版本不对或者字库文件损坏会导致 XXTouch 脚本服务崩溃
XXTouch 已内置 eng 识别库 [A-Za-z0-9] 能识别常规英文和数字
如果需要做简体中文或是其它语言文字识别
需要手动导入相关的字库文件到设备的 /var/mobile/Media/1ferver/tessdata/ 目录
这里提供 简体中文字库(需要解压缩)

旧版遗留示例(不推荐)

-- 示例 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())