跳至主要內容

! 螢幕區域文字識別 (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,
    },
    ...
    }

說明

目前函式座標值參數及回傳值均受 screen.init 函式初始化的座標系影響
為保證向前兼容,不指定識別引擎時,預設使用過時的 tesseract 引擎進行文字識別
軟體版本在 1.3.8 以上方支援 Apple 和 PaddleLite 識別引擎
PaddleLite 簡體中文普通版模型(需要解壓縮)
PaddleLite 簡體中文完全版模型(需要解壓縮)
PaddleLite 繁體中文識別模型(需要解壓縮)
PaddleLite 英文數字識別模型(需要解壓縮)
PaddleLite 日文識別模型(需要解壓縮)
PaddleLite 韓文識別模型(需要解壓縮)
也可從 PaddleOCR 模型清單 下載對應模型轉換成 det_opt.nbcls_opt.nbrec_opt.nb, 然後找到對應的 dict.txt 配套使用

範例

-- 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

舊版遺留(不推薦)

內置的 tesseract 已經不再推薦使用,只是為了保證對舊腳本的兼容性,它在目前版本的 XXTouch 中依然是預設 OCR 引擎
內置預設 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())