Вопрос или проблема
Я работаю над приложением, и мне нужен способ извлечения чисел из изображений, похожий на то, как банковские приложения извлекают номер кредитной карты из фотографии. У меня нет предпочтений по языку, но, вероятно, Python будет более полезен.
Вы можете рассмотреть возможность использования SDK LEADTOOLS для выполнения OCR на изображениях для текста и чисел. Вот небольшой фрагмент кода на C API, который вы, вероятно, могли бы подключить к приложению на Python. В качестве дисклеймера, это платный SDK, и я работаю на поставщика.
https://www.leadtools.com/help/sdk/v21/ocr/api/l-ocrpage-gettext.html
BITMAPHANDLE bitmap = { 0 };
L_OcrEngine ocrEngine = NULL;
L_OcrPage ocrPage = NULL;
// Создаем экземпляр движка
std::wcout << L"Создание экземпляра движка OCR...\n";
L_INT retCode = L_OcrEngineManager_CreateEngine(L_OcrEngineType_Advantage, &ocrEngine);
if(retCode != SUCCESS)
return retCode;
// Запускаем движок с параметрами по умолчанию
std::wcout << L"Запуск движка OCR...\n";
L_OcrEngine_Startup(ocrEngine, NULL, OCR_ADVANTAGE_RUNTIME_DIR);
// Загружаем изображение для обработки
std::wcout << L"Загрузка страницы для обработки...\n";
L_LoadBitmap(MAKE_IMAGE_PATH(L_TEXT("Ocr1.tif")), &bitmap, sizeof(BITMAPHANDLE), 0, ORDER_RGB, NULL, NULL);
// Создаем страницу OCR для обработки
L_OcrPage_FromBitmap(ocrEngine, &ocrPage, &bitmap, L_OcrBitmapSharingMode_AutoFree, NULL, NULL);
// Передаем право собственности
bitmap.Flags.Allocated = 0;
// Находим текст на изображении
std::wcout << L"Поиск текста на странице...\n";
L_OcrPage_AutoZone(ocrPage, NULL, NULL);
// Распознаем текст
std::wcout << L"Распознавание текста...\n";
L_OcrPage_Recognize(ocrPage, NULL, NULL);
// Проходим по зонам и выводим текст
L_UINT zoneCount = 0;
L_OcrPage_GetZoneCount(ocrPage, &zoneCount);
std::wcout << L"Количество зон: " << zoneCount << std::endl;
std::wcout << L"Показать распознанный текст:\n"
<< L"**********************************************\n";
for(L_UINT zoneIndex = 0; zoneIndex < zoneCount; zoneIndex++)
{
L_WCHAR* text = NULL;
L_UINT textLength = 0;
L_OcrPage_GetText(ocrPage, zoneIndex, &text, &textLength);
std::wcout << text << std::endl;
L_OcrMemory_Free(text);
}
std::wcout << L"**********************************************\n";
//ОЧИСТКА
std::wcout << L"Освобождение использованных ресурсов...";
L_OcrPage_Destroy(ocrPage);
L_OcrEngine_Destroy(ocrEngine);
Ответ или решение
Извлечение чисел из изображений: решения для разработки приложений
В современном мире извлечение информации из изображений становится все более актуальной задачей, особенно в таких сферах, как финансы и банковские услуги. Данная статья предоставит вам исчерпывающую информацию об API и инструментах, которые могут помочь извлекать числовые данные, например, номера кредитных карт, из изображений.
1. Введение в OCR
OCR (оптическое распознавание символов) – это технология, позволяющая преобразовывать различные типы документов, такие как изображения, сканы и фотографии, в редактируемый текст. Она может быть особенно полезна для извлечения чисел и текстов из счетов, кредитных карт и других финансовых документов.
2. LEADTOOLS SDK
Одним из наиболее мощных инструментов для OCR является LEADTOOLS SDK. Он предлагает широкий спектр функций для обработки изображений и распознавания текста, включая числа. Несмотря на то, что этот SDK является платным, его возможности оправдывают затраты, особенно если вы стремитесь к высокой точности и надежности обработки.
Пример использования LEADTOOLS SDK на C и интеграция с Python
Если вы предпочитаете Python, вы можете создать C-приложение, использующее LEADTOOLS, и вызывать его из Python с помощью ctypes
или cffi
. Пример кода для работы с библиотекой LEADTOOLS приведен ниже:
BITMAPHANDLE bitmap = { 0 };
L_OcrEngine ocrEngine = NULL;
L_OcrPage ocrPage = NULL;
// Создание экземпляра движка
L_INT retCode = L_OcrEngineManager_CreateEngine(L_OcrEngineType_Advantage, &ocrEngine);
if(retCode != SUCCESS)
return retCode;
// Запуск движка
L_OcrEngine_Startup(ocrEngine, NULL, OCR_ADVANTAGE_RUNTIME_DIR);
// Загрузка изображения
L_LoadBitmap(MAKE_IMAGE_PATH(L_TEXT("Ocr1.tif")), &bitmap, sizeof(BITMAPHANDLE), 0, ORDER_RGB, NULL, NULL);
// Обработка страницы
L_OcrPage_FromBitmap(ocrEngine, &ocrPage, &bitmap, L_OcrBitmapSharingMode_AutoFree, NULL, NULL);
// Поиск текста в изображении
L_OcrPage_AutoZone(ocrPage, NULL, NULL);
// Распознавание текста
L_OcrPage_Recognize(ocrPage, NULL, NULL);
// Вывод распознанного текста
L_UINT zoneCount = 0;
L_OcrPage_GetZoneCount(ocrPage, &zoneCount);
for(L_UINT zoneIndex = 0; zoneIndex < zoneCount; zoneIndex++) {
L_WCHAR* text = NULL;
L_UINT textLength = 0;
L_OcrPage_GetText(ocrPage, zoneIndex, &text, &textLength);
// Здесь добавьте логику для извлечения и обработки цифр
L_OcrMemory_Free(text);
}
Этот пример демонстрирует основные шаги по созданию движка, загрузке изображения и извлечению текста, который можно адаптировать под ваши нужды.
3. Альтернативные решения
Если LEADTOOLS не подходит из-за стоимости или других факторов, рассмотрите использование следующих альтернатив:
-
Tesseract OCR: Эта бесплатная библиотека с открытым исходным кодом поддерживает множество языков и может быть интегрирована с Python с помощью библиотеки
pytesseract
. Она обеспечивает хорошую точность распознавания текста. -
Google Vision API: С помощью облачного решения Google вы можете использовать мощные механизмы для распознавания текста. API прост в использовании, и вы можете извлекать числа и текст из изображений, отправляя их на сервер Google для обработки.
-
Microsoft Azure OCR: Платформа Azure также предлагает OCR-сервис, который может быть полезен для ваших нужд. Он имеет хорошие характеристики и поддерживает многопоточную обработку.
4. Заключение
Извлечение чисел из изображений – это сложная, но реализуемая задача благодаря современным технологиям OCR. Ваша выбор будет зависеть от ваших конкретных требований, включая бюджет, точность и удобство интеграции. Не забывайте тщательно тестировать выбранное решение на различных типах изображений, чтобы гарантировать высокую точность распознавания.
Использование предложенных инструментов поможет вам успешно справиться с задачей и создать надежное приложение для извлечения чисел из изображений.