Выполнение OCR с использованием C++

Технология OCR (оптическое распознавание символов) позволяет читать и преобразовывать текст на изображениях или отсканированных документах в машиночитаемую форму. OCR имеет различные варианты использования, включая считывание кодов из ваучеров, редактируемость текста, магазины самообслуживания, преобразование печатных документов в цифровые форматы и т. д. На рынке доступны различные инструменты и библиотеки OCR, однако надежность результатов OCR является ключевым фактором. В этой статье я покажу вам, как создать собственное приложение OCR и программно преобразовать изображения в текст с помощью C++.

Библиотека C++ OCR для преобразования изображения в текст

Aspose предлагает мощную библиотеку C++ OCR, которая использует глубокое обучение, чтобы предоставить вам более надежные и близкие к точным результаты OCR. Вы можете скачать файлы библиотеки, а также пример проекта с GitHub.

Преобразование страницы изображения в текст с помощью C++

Давайте сначала проверим сценарий, в котором изображение содержит многострочный текст. Это может быть тот случай, когда у вас есть отсканированная книга, каждая страница книги содержит несколько строк текста. Ниже приведены шаги для преобразования изображения в текст в этом случае.

  • Задайте путь к изображению в строковой переменной.
  • Подготовьте буфер для хранения результатов OCR.
  • Выполните распознавание символов с помощью функции aspose::ocr::page(const char \imagepath, wchart\buffer, sizet buffersize).
  • Распечатайте результаты или сохраните их в файл.

В следующем примере кода показано, как выполнить распознавание символов и преобразовать изображение в текст с помощью C++.

std::string image_path = "sample.png";

// Подготовить буфер для результата (в символах len_byte = len * sizeof(wchar_t))
const size_t len = 4096;
wchar_t buffer[len] = { 0 };

// Выполнить распознавание текста
size_t size = aspose::ocr::page(image_path.c_str(), buffer, len);

//Распечатать результат
std::wcout << buffer << L"\n"; 

Выполните OCR для изображения с одной строкой, используя C++

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

  • Используйте строковую переменную, чтобы задать путь к изображению.
  • Создайте буфер для хранения результатов OCR.
  • Выполните распознавание символов с помощью функции aspose::ocr::line(const char \imagepath, wchart\buffer, sizet buffersize).
  • Сохраните или распечатайте результаты OCR.

В следующем примере кода показано, как выполнять распознавание символов для изображения с одной строкой текста с помощью C++.

std::string image_path = "sample_line.jpg";

// Подготовить буфер для результата (в символах len_byte = len * sizeof(wchar_t))
const size_t len = 4096;
wchar_t buffer[len] = { 0 };

// Выполнить распознавание текста
size_t size = aspose::ocr::line(image_path.c_str(), buffer, len);

//Распечатать результат
std::wcout << buffer << L"\n";

Преобразование определенной области изображения в текст на C++

Вы также можете настроить API, чтобы ограничить область изображения, в которой вы хотите выполнить распознавание символов. В этом случае вы можете создать прямоугольник на изображении для доступа к нужной области. Ниже приведены шаги для извлечения текста из определенной области изображения.

  • Задайте путь к изображению в строковой переменной.
  • Подготовьте буфер для хранения результатов OCR.
  • Выполните OCR, используя функцию aspose::ocr::pagerect(const char \imagepath, wchart\buffer, sizet buffersize, int x, int y, int w, int h).
  • Распечатайте результаты OCR.

В следующем примере кода показано, как преобразовать определенную область изображения в текст с помощью C++.

std::string image_path = "sample_line.jpg";

// Подготовить буфер для результата (в символах len_byte = len * sizeof(wchar_t))
const size_t len = 4096;
wchar_t buffer[len] = { 0 };

int x = 138, y = 352, w = 2033, h = 537;

// Выполните OCR или выбранную область
size_t size = aspose::ocr::page_rect(image_path.c_str(), buffer, len, x, y, w, h);

//Распечатать результат
std::wcout << buffer << L"\n";

Вывод

В этой статье вы узнали, как использовать библиотеку OCR Aspose для преобразования изображений в текст на C++. Мы увидели, как выполнять распознавание изображений с одной или несколькими строками текста, а также читать текст из определенной области изображения. Вы можете узнать больше об Aspose.OCR для C++, используя документацию.

Смотрите также