Библиотеки Qt/C++ и Тesseract OCR в проекте на macOS.

Библиотека Tesseract 4.* OCR (Optical Character Recognition) на основе нейронной сети LSTM (Long short-term memory) позволяет распознавать и извлекать текст из графических изображений. Возможность извлекать текст из изображения, находящегося в clipboard (буфере обмена), или из изображения, загруженного в документ, может быть полезной в текстовом редакторе.
Статья содержит описание и исходный код многооконного текстового редактора с включенной в него библиотекой Tesseract. Программа выполняет основные операции редактирования, а также распознает и извлекает текст из изображений. Например, можно сделать скриншот фрагмента страницы, открытой в Kindle книги, поместив его в clipboard. Редактор выведет на экран графическое содержимое сlipboard и извлеченный из него текст. Распознанный текст может быть скопирован и помещен в любое окно редактора.
Какое количество окон может быть открыто в редакторе? Любое разумное. Часть окон можно использовать для набора и редактирования текста, часть для работы с Tesseract. Со скольких языков идет распознавание? В программе реализованы первые 12. Вы можете задействовать все предлагаемые Tesseract - это около 100.
В проекте не применяется модель детектора текста типа EAST (Efficient and Accurate Scene Text) позволяющая обнаруживать и извлекать текст из смешанных изображений, например, текст на фотографии витрины магазина. В текстовом редакторе такая возможность требуется редко.
В проекте использованы следующие инструменты:
  • библиотеки Qt 5.15/C++ и Tessseract 4.1.1;
  • компилятор С++ Clang 64 bit (Apple);
  • утилиты QMake или CMake;
  • среда разработки Qt Creator;
  • предварительно обученные данные для нейронной сети LSTM.
  • Работа выполнена в операционной системе macOS Catalina 10.15.7.
    1. Текстовый редактор.
    Редактор создан на основе MDI (Multiple Document Interface) проекта, входящего в состав Qt 5.*. Однако в MDI проекте слишком мало возможностей. Поэтому засучим рукава и допишем новые функции:
  • возможность выбора типа (имени) и размера шрифта;
  • возможность выбора цвета шрифта;
  • выравнивания текста (left, center, right, Justefied);
  • возможность установки bold и italic;
  • операции copy/cut/paste для изображений;
  • сохранение документов в форматах html, pdf, odt;
  • возможность загрузки в документ изображений из файлов форматов png, bmp, jpg, gif;
  • возможность изменения размеров загруженного изображения (mouseDoubleClickEvent на изображении).
  • Это перечень некоторых новых функций приложения. В них пока нет ничего, что касается распознавания теста. Вид редактора с двумя открытыми окнами показан на рисунке 1. Левое окно содержит HTML текст произвольной Web страницы. Правое окно — это screen описываемого здесь проекта, открытого в Qt Creator.
    Рис. 1.

    2. Извлечение и отображение текста.
    Текст в редакторе может быть извлечен из графического файла, загруженного в документ с диска или из clipboard. Рассмотрим оба этих случая.
    Чтобы загрузить файл и извелечь из него текст, выберите в меню редактора пункт «Tesseract -> Open image» или нажмите на кнопку на панели инструментов с подсказкой «Open image». Приложение откроет диалог для выбора графического файла. После выбора файла программа создаст новое окно (объест класса Tesseractwindow), разделенное на две части splitter. Левая часть окна будет содержать выбранное графическое изображение, правая - извлеченный из него текст. Это все, никаких дополнительных действий не требуется. Текст может быть скопирован и перенесен в любое окно редактирования. Пример работы программы показан на рисунке 2.
    Рис. 2.
    Примечание.
    Один из методов использования Tesseract OCR, примененный в этом проекте, описан в книге «Qt 5 and OpenCV 4 Computer Vision Projects» автора Zhuo Qingliang. Рекомендую эту книгу.
    Второй способ извлечения текста подразумевает наличие в Clipboard изображения, содержащего текст. Запустите любое стороннее приложение, выводящее на эран текст, сделайте скриншот экрана. В macOS для этого следует нажать три клавиши: (Command + Shift + 5). Затем мышью определите размер прямоугольника, ограничивающего изображение, и нажмите кнопку "Снимок". Изображение будет помещено в буфер обмена. Чтобы извлечь текст из изображения, выберите в редакторе пункт меню «Tesseract -> Clipboard image» или нажмите на кнопку на панели инструментов с подсказкой «Clipboard image». Программа сформирует новое окно, разделенное splitter на две части. В левой половине окна будет находиться изображение из Clipboard, в правой - извлеченный из него текст.
    Перед запуском любого из описанных способов извлечения текста следует выбрать язык. Сделать это можно при помощи СomboBox с меткой «Language» на панели инструментов. По умолчанию установлен английский язык.
    Проект можно загрузить
    Евгений Вересов.
    20.10.2020 года.