R50 4fd6d9d9de7b34638f63f16582928bb5
Дизайн, Python, IT , Арт

Извлечение информации о таблицах из изображения на C++ с OpenCV

Добавлено 31 янв 2024 в 22:05
Извлечение информации о таблицах из изображения на C++ с OpenCV
Нужна программа на C++, использующая OpenCV. На вход поcтупают изображения, которые могут содержать таблицы. Если таблица имеется, необходимо извлечь номер таблицы и название таблицы. Другие данные извлекать НЕ нужно.

Прикрепил фото, на нём отметил, какие данные нужно извлекать, другие не нужно. В изображениях такого выделения не будет, нужно определять программе самой.
#include <opencv2/opencv.hpp>
#include <tesseract/baseapi.h>
#include <leptonica/allheaders.h>
#include <iostream>
#include <regex>

using namespace cv;

int main(int argc, char** argv) {
// Загрузка изображения с помощью OpenCV
Mat image = imread("your_image.jpg");

// Инициализация Tesseract OCR
tesseract::TessBaseAPI* api = new tesseract::TessBaseAPI();
if (api->Init(NULL, "eng")) {
fprintf(stderr, "Не удалось инициализировать Tesseract\n");
exit(1);
}

// Установка параметров распознавания текста
api->SetPageSegMode(tesseract::PSM_AUTO);

// Преобразование изображения в формат, подходящий для Tesseract
api->SetImage(image.data, image.cols, image.rows, 3, image.step);

// Распознавание текста с помощью Tesseract
char* outText = api->GetUTF8Text();
printf("Распознанный текст:\n%s", outText);

// Обработка распознанного текста для извлечения номера и названия таблицы
std::string recognizedText(outText);

// Поиск номера таблицы
std::regex tableNumberRegex("\\bTable\\s*(\\d+)\\b");
std::smatch tableNumberMatch;
std::string tableNumber;
if (std::regex_search(recognizedText, tableNumberMatch, tableNumberRegex)) {
tableNumber = tableNumberMatch[1];
std::cout << "Номер таблицы: " << tableNumber << std::endl;
} else {
std::cout << "Номер таблицы не найден" << std::endl;
}

// Поиск названия таблицы
std::regex tableNameRegex("((?:[A-Z][a-z]+\\s*)+)");
std::smatch tableNameMatch;
std::string tableName;
if (std::regex_search(recognizedText, tableNameMatch, tableNameRegex)) {
tableName = tableNameMatch[1];
std::cout << "Название таблицы: " << tableName << std::endl;
} else {
std::cout << "Название таблицы не найдено" << std::endl;
}

// Освобождение ресурсов
api->End();
delete [] outText;
delete api;

return 0;
}

88c3673df9