Перейти к основному содержимому

! Распознавание текста в области экрана (screen.ocr_text)

Объявление

результат_распознавания, подробности_результата = screen.ocr_text(левый, верхний, правый, нижний [, параметры_движка, параметры_бинаризации ])

Параметры

  • Левый край, верхний край, правый край, нижний край
    Целые числа, задающие область экрана; передача 0, 0, 0, 0 обозначает весь экран.

  • Параметры движка
    Необязательный параметр-таблица для выбора языка распознавания и движка.

    Структура параметров
    {
    -- Если для поля engine задано значение "apple", используется встроенный в iOS 13 и более поздние версии Vision.framework
    -- Список поддерживаемых Vision.framework OCR-моделей можно получить функцией image.vision_supported_recognition_languages()
    -- Если для поля engine задано значение "paddle", используется движок Paddle-Lite. Модель можно указать через lang
    -- Например, lang = "ppocr_ch" использует модель /var/mobile/Media/1ferver/models/ppocr_ch
    -- Движок Paddle-Lite поддерживает Slim-модели в формате *.nb
    engine = "apple" | "paddle" | "tesseract",
    lang = "zh-Hans",
    }
    Список OCR-моделей, поддерживаемых встроенным в разные версии iOS Vision.framework
    { -- 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.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", -- Использование OCR-движка PaddleLite
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())