メインコンテンツまでスキップ

! 画面領域の文字認識 (screen.ocr_text)

宣言

認識結果, 結果の詳細 = screen.ocr_text(,,,[, エンジンオプション, 二値化オプション ])

パラメータ

  • 左、上、右、下
    整数。画面上の領域を表します。0, 0, 0, 0 を渡すと画面全体が対象になります

  • エンジンオプション
    省略可能なテーブル。認識言語と認識エンジンを選択します

    パラメータの構造
    {
    -- engine フィールドを "apple" に設定すると、iOS 13 以降に搭載された Apple の 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 エンジンを使用して文字を認識します
Apple および PaddleLite 認識エンジンを使用するには、ソフトウェアバージョン 1.3.8 以降が必要です
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 以降では Apple の内蔵 en-US モデルを使用して英数字を認識できます
sys.toast("识别结果:"..txt:atrim())

txt, info = screen.ocr_text(187, 882, 298, 914, "zh-Hans") -- iOS 14 以降では Apple の内蔵 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())