! 螢幕區域文字識別 (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.nb、cls_opt.nb、rec_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.toast、string.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())