Вопрос или проблема
Мы хотим сканировать отсканированные документы (PDF/изображения) и извлекать значимую информацию в виде пар ключ-значение или в любом другом формате. Например, когда поставщик отправляет нам счет-фактуру в виде отсканированного PDF, наше решение должно извлекать и искать значимые заголовки и детали на уровне строк.
Мы пробовали решения с открытым исходным кодом и коммерческие решения, такие как ABBYY, Amazon, Tesseract и Google OCR, но точность не соответствует ожиданиям, а выходные данные представляют собой просто текст в случае решений с открытым исходным кодом.
Пожалуйста, предложите лучшие решения с открытым исходным кодом или коммерческие решения (OCR), которые лучше всего подходят для вышеуказанных требований.
Вы можете использовать LEADTOOLS Invoice Recognition SDK, создание основной формы позволит вам определить конкретные части счета, которые вам нужны, и получить результаты отсканированного изображения в виде пар ключ-значение. Как примечание, это платный SDK, и я работаю на этого поставщика. Ниже приведена ссылка с примером проекта о том, как это может быть реализовано на Java.
https://www.leadtools.com/support/forum/posts/t12833-HOW-TO–Use-AutoForms-in-Java
// Настройка
codecs = new RasterCodecs();
ocrEngine = OcrEngineManager.createEngine(OcrEngineType.LEAD);
ocrEngine.startup(codecs, null, null, null);
repository = new DiskMasterFormsRepository(codecs,
"C:\\Users\\Public\\Documents\\LEADTOOLS Images\\Forms\\MasterForm Sets\\Invoice");
autoEngine = new AutoFormsEngine(repository, ocrEngine, null);
// Подготовка изображения формы с некоторой предобработкой (по желанию)
unknownForm = codecs.load(unknownFormFilepath);
//prepareForm(unknownForm);
// Попытка сопоставить unknownForm с одной из мастер-форм в репозитории
AutoFormsRunResult runResult = autoEngine.run(unknownForm, null, null, null);
if (runResult != null) {
// Вывод информации о форме при успехе
printOutValues(runResult);
}
На самом деле вам нужна извлечение данных, а не только OCR (хотя это и использует OCR). Некоторые облачные варианты включают AWS Textract и Azure Cognitive Services. Вам нужно распознавание форм, а не просто OCR. AWS Textract и Azure Forms Recognizer обладают функционалом такого типа.
Мой совет — Global Search от Square 9. https://www.square-9.com/products/enterprise-content-management/
Он предлагает бесконечные варианты сканирования, позволяет классифицировать документы на основе информации OCR, позволяет выделять области страниц для извлечения информации из полей форм на общих форматированных документах, может сканировать и считывать штрих-коды и позволяет создавать сложные рабочие процессы, такие как разделение и отправка части документа в один архив, а части в другой Archive и т.д. В сущности, сканируйте, читайте, принимайте решения, а затем сохраняйте так, как вам нужно. OnPrem, и клиент не требует установки (основан на браузере).
Это, пожалуй, самое надежное решение, с которым я работал за свою карьеру.
Ответ или решение
Для решения задачи извлечения информации из отсканированных документов, таких как счета от поставщиков в формате PDF или изображениях, важно использовать технологии, которые не просто выполняют OCR (оптическое распознавание символов), но и способны систематизировать и структурировать полученные данные.
Вот несколько подходящих решений, как коммерческих, так и открытых:
-
LEADTOOLS Invoice Recognition SDK: Это мощное средство, которое не только распознает текст, но и извлекает данные в формате "ключ-значение". Создание мастер-форм поможет точно определить, какие элементы нуждаются в извлечении. Данный инструмент является платным, но предлагает широкий функционал для работы с документами, включая предварительную обработку изображений и интеграцию с Java.
Пример кода для использования SDK:
// Настройка codecs = new RasterCodecs(); ocrEngine = OcrEngineManager.createEngine(OcrEngineType.LEAD); ocrEngine.startup(codecs, null, null, null); repository = new DiskMasterFormsRepository(codecs, "C:\\Users\\Public\\Documents\\LEADTOOLS Images\\Forms\\MasterForm Sets\\Invoice"); autoEngine = new AutoFormsEngine(repository, ocrEngine, null); // Подготовка изображения формы (опционально) unknownForm = codecs.load(unknownFormFilepath); // prepareForm(unknownForm); // Попытка соответствия неизвестной форме одной из мастер-форм AutoFormsRunResult runResult = autoEngine.run(unknownForm, null, null, null); if (runResult != null) { // Вывод информации о форме при успехе printOutValues(runResult); }
-
AWS Textract: Это облачное решение от Amazon предоставляет возможность извлечения данных из документов гораздо более тонко и эффективно. Оно поддерживает более широкий диапазон форматов и может обрабатывать сложные структуры документов, такие как таблицы и формы. Textract автоматически определяет и извлекает текст вместе с соответствующими данными, создавая структурированные JSON-выходные данные.
-
Azure Cognitive Services – Forms Recognizer: Это решение от Microsoft позволяет автоматически извлекать данные из форм и документов. Оно использует машинное обучение для идентификации значимых данных в любых типах документов, а также может адаптироваться к новым форматам с помощью пользовательского обучения.
-
Square 9 GlobalSearch: Эта система управления контентом предлагает мощные возможности сканирования и извлечения данных. Она позволяет настроить зоны на страницах для извлечения информации, поддерживает считывание штрих-кодов и позволяет создавать сложные рабочие процессы для организации и хранения документов. Такой подход может упростить процесс обработки и классификации больших объемов данных.
-
Tesseract с настроенной предобработкой: Хотя Tesseract чаще всего предоставляет только текстовый вывод, его можно комбинировать с другими инструментами для предварительной обработки изображений. Вы можете использовать библиотеки, такие как OpenCV, для повышения качества изображений перед передачей в Tesseract, что может улучшить точность результатов.
Каждое из этих решений имеет свои плюсы и минусы, и выбор будет зависеть от специфических требований вашего бизнеса, необходимой точности, объема документов и бюджета. Рекомендуется провести тестирование нескольких решений, чтобы оценить их эффективность именно для ваших документов.