Оптическое распознавание

Извлекаем текст из изображений

Для извлечения текста из изображений, используется метод, называемый оптическим распознаванием символов (OCR). Для обработки изображения в среде Diggernaut, диггеру необходимо сперва загрузить изображение, получить из него base64 запись в регистре и затем применить на него команду ocr.

Командой используются следующие параметры:

Параметр Описание
resize Опциональный параметр, который может содержать положительное целочисленное значение, показывывающее процент изменения в размере изображения от оригинального. Этот параметр используется для улучшения качества распознавания, если оригинальный размер распознается плохо.
do Набор команд, выполняемых в OCR контексте.

Команда использует значение регистра как закодированное в base64 изображение. После использования команды диггер переходит в OCR контекст, в котором вы можете использовать команду text для переноса распознанного текста в регистр.

Рассмотрим пример, когда на странице присутствует изображение в уже готовом base64 виде:

          <img src="data:image/png;base64,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">
          

В данном примере закодировано изображение:

Сценарий диггера в этом случае будет выглядеть следующим образом:

          # НАЙДЕМ ИЗОБРАЖЕНИЕ
- find:
    path: img
    do:
    # РАСПАРСИМ АТРИБУТ `src`
    - parse:
        attr: src
        filter: data\:image\/png\;base64\,(.+)

    # В РЕГИСТРЕ ТЕПЕРЬ МЫ ИМЕЕМ ИЗОБРАЖЕНИЕ ЗАКОДИРОВАННОЕ КАК base64
    # ПЕРЕХОДИМ В КОНТЕКСТ OCR
    - ocr:
        do:
        # ПЕРЕНОСИМ РАСПОЗНАННЫЙ ТЕКСТ В РЕГИСТР
        - text
        # В РЕГИСТРЕ ТЕПЕРЬ ЗНАЧЕНИЕ: Hello world
            

Теперь рассмотрим пример, когда изображение представлено в виде ссылки на графический файл:

          ---
config:
    debug: 2
    agent: Firefox
do:
# ПЕРЕЙДЕМ НЕПОСРЕДСТВЕННО НА САМО ИЗОБРАЖЕНИЕ
- walk:
    to: https://www.diggernaut.com/sandbox/captcha_3.jpg
    do:
    # ДИГГЕР САМ ПЕРЕВЕДЕТ ИЗОБРАЖЕНИЕ В XML ФОРМАТ
    # ГДЕ В ТЕГЕ `imgbase64` БУДЕТ НАХОДИТСЯ ЗАКОДИРОВАННОЕ В base64 ИЗОБРАЖЕНИЕ
    - find:
        path: imgbase64
        do:
        - parse
        - ocr:
            resize: 40
            do:
            - text
            - variable_set: imgtext
            # НА ВЫХОДЕ БУДЕТ ЗНАЧЕНИЕ: W68HP
          

Далее мы рассмотрим ряд вспомогательных команд, которые могут быть полезны в различных ситуациях.