Rychagov S. AI Кейсы
Распознавание текста (OCR)

Распознавание текста (OCR)

Извлечение текста из изображений и сканов.

Где применяется

В своей практике я разработал комплексные системы оптического распознавания текста (OCR) для извлечения информации из изображений и сканированных документов. Система работает с различными типами контента: фото документов, отсканированные архивы, рукописный текст, таблицы и даже подписи. На выходе получается чистый структурированный текст в формате Markdown, готовый к дальнейшему анализу и обработке, что позволяет автоматизировать работу с огромными объёмами визуального контента.

Кому пригодится

Это решение я рекомендую компаниям с большими архивами бумажных документов, которые нужно оцифровать и сделать доступными для поиска. Юридическим фирмам и нотариусам для работы с историческими документами, контрактами и справками. Банкам и финансовым учреждениям для обработки документов, приложений, квитанций и других бумажных материалов. Государственным учреждениям для цифровизации архивов. Логистическим компаниям для автоматического распознавания номеров накладных и информации со счётов-фактур. Издательствам и библиотекам для оцифровки исторических текстов. Исследовательским организациям для обработки научных документов и публикаций.

Технологии

Многослойный подход с различными AI моделями

Я не ограничиваюсь одной моделью OCR — система использует комбинацию различных моделей для оптимального результата. DeepSeek OCR используется как основной движок для точного распознавания текста. PaddleOCR применяется для верификации и обработки сложных случаев. EasyOCR используется для многоязычного текста. Для специализированных задач (рукописный текст, исторические документы) я применяю специализированные модели.

Система выбирает наиболее подходящую модель в зависимости от типа контента: если обнаружен рукописный текст, система переключается на модель рукописного распознавания; если текст в необычном ориентире или перспективе, используется модель с корректором перспективы. На практике: комбинированный подход даёт точность 95-98% даже на сложном контенте.

Предварительная обработка и подготовка изображений

Перед подачей на OCR изображение проходит серию оптимизаций: денойзинг (удаление шума) с использованием OpenCV и advanced фильтров, улучшение контрастности и яркости (adaptive histogram equalization), исправление перекоса (deskewing) страницы через анализ ориентации текста, коррекция перспективы для фото документов, снятых под углом.

Эти предварительные обработки критичны: на плохо отсканированном или сфотографированном документе точность может быть 60-70%, а после обработки возрастает до 90-95%. Я использую параллельные обработки на GPU для ускорения.

Распознавание таблиц и структурирование данных

Система обнаруживает таблицы на изображении и извлекает их содержимое в структурированном виде. Модели computer vision определяют строки и колонки таблицы, система извлекает текст из каждой ячейки, и результат форматируется в Markdown таблицу или JSON. Это критично для документов со сложной структурой (счёта, ведомости, прайс-листы).

На практике: счёт с таблицей товаров извлекается как: "| Товар | Количество | Цена | Сумма |" с полной структурой, готовой к парсингу и анализу.

Обнаружение и обработка подписей

Система автоматически обнаруживает области с подписями и другими графическими элементами. Модели classification отличают подпись от обычного текста. Для каждой обнаруженной подписи система: сохраняет координаты на странице, может выполнить верификацию подписи (сравнить с эталоном), определяет область и извлекает контекст (фамилия, должность рядом с подписью). Это особенно важно для документов, требующих верификации подлинности.

Распознавание рукописного текста

Для документов с рукописным текстом я использую специализированные модели handwriting recognition. Эти модели обучены на различных почерках и стилях письма. Система может работать как с печатным, так и с рукописным текстом, автоматически определяя тип контента и выбирая соответствующую модель. На практике: качество распознавания рукописи 85-92% в зависимости от разборчивости почерка.

Форматирование вывода в Markdown

Вся извлечённая информация структурируется и выводится в формате Markdown — это позволяет легко читать результаты, версионировать их в Git, преобразовывать в HTML или PDF, и дальше обрабатывать программно. Система сохраняет иерархию документа: заголовки, подзаголовки, параграфы, списки, таблицы — всё форматируется правильными Markdown тегами.

Многоязычная поддержка

Система поддерживает распознавание текста на 100+ языках, включая русский, английский, китайский, арабский и другие. Система автоматически определяет язык на странице (может быть несколько языков) и выбирает соответствующие модели. Для смешанного контента (например, русский и английский на одной странице) система корректно обрабатывает оба языка.

GPU CUDA ускорение

Все OCR модели работают на NVIDIA GPU с использованием CUDA для максимальной производительности. На CPU обработка одного документа может занять минуты, а на GPU — секунды. На практике: обработка 100-страничного документа на RTX 3070 занимает 20-30 секунд, что позволяет обрабатывать огромные объёмы архивов в разумные сроки.

Я используем оптимизированные версии моделей (quantized, pruned), которые работают быстрее без значительного снижения точности. Система может параллельно обрабатывать несколько изображений, заполняя всю пропускную способность GPU.

Постобработка и коррекция

После OCR текст проходит постобработку: контекстная коррекция (исправление очевидных ошибок на основе контекста), нормализация (правильное написание чисел, дат, денежных сумм), исправление пунктуации. Я использую словари предметной области для исправления специализированной лексики (юридические термины, медицинские понятия и т.д.).

На практике: системе даёте фото документа с качеством 80%, а она выводит текст с точностью 95%+.

Поддержка различных форматов входа

Система работает с любыми визуальными форматами: изображения (JPG, PNG, TIFF, BMP), PDF (цифровые и отсканированные), многостраничные TIFF архивы, даже видео (извлекает кадры и распознаёт текст в каждом кадре). Система автоматически преобразует входной формат в изображение, обрабатывает и выводит результат.

Сохранение оригинального макета и позиций

Я применяю layout-aware OCR — система сохраняет информацию о позиции текста на странице (координаты, размер шрифта). Это позволяет впоследствии визуально отобразить документ с выделением найденных элементов, или создать интерактивный документ, где текст привязан к оригинальному изображению.

Batch обработка и масштабирование

Система поддерживает batch обработку больших объёмов документов. Пользователь может загрузить папку с 1000+ изображениями, и система их все обработает в фоновом режиме через очереди (Celery/RQ). Результаты сохраняются по мере готовности, и пользователь может начать работу с ними ещё до завершения всей обработки.

Архитектура масштабируется: можно добавить дополнительные worker процессы для обработки, распределить нагрузку на несколько GPU машин, использовать облачные ресурсы для peak нагрузок.

Оценка уверенности и контроль качества

Для каждого распознанного элемента система возвращает confidence score (уверенность от 0 до 1). Низкая уверенность означает, что OCR неуверена в результате — это может быть из-за плохого качества изображения или сложного шрифта. Система автоматически помечает области с низкой уверенностью, что позволяет оператору проверить их вручную. На практике: это простой способ гарантировать качество при работе с критичными документами.

Интеграция и API

Система предоставляет REST API, которая позволяет интегрировать OCR в другие приложения. Пользователь может отправить изображение через API, и получить структурированный JSON или Markdown с распознанным текстом. Я также создал веб-интерфейс (Vue.js + FastAPI) для удобного использования без написания кода.

Архитектура: Python + FastAPI backend, различные OCR библиотеки (DeepSeek, PaddleOCR, EasyOCR), NVIDIA GPU с CUDA, базы данных (PostgreSQL для истории, S3 для хранения документов).

Примеры использования

Система может: отсканировать чек и извлечь товары и сумму, обработать фото паспорта и извлечь ФИО и дату рождения, распознать рукописную заметку, преобразовать историческую книгу в цифровой формат с поддержкой полнотекстового поиска, обработать множество счётов и выгрузить данные в Excel для анализа.

Важные организационные моменты

Первое — выбор качества и скорости. Более высокая точность требует больше вычислительных ресурсов и времени. Я всегда уточняю требования: нужна ли 99% точность (для юридических документов) или 90% приемлема (для архивизации). На основе этого я выбираю модель и параметры обработки.

Второе — обработка различных типов контента. Система должна справляться с документами разного качества: от свежих сканов в 600 DPI до исторических документов с пятнами и повреждениями. Предварительная обработка критична, но не все проблемы можно решить автоматически. Для очень плохого качества нужно либо переснять/переотсканировать, либо привлечь ручную коррекцию.

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

Четвёртое — конфиденциальность. Если документы содержат чувствительные данные (персональные номера, финансовую информацию), система должна их защищать. Я рекомендую: использовать локальную обработку (не отправлять в облако), шифровать данные в базе, ограничивать доступ к результатам.

Пятое — постоянное улучшение. После начального развёртывания система должна совершенствоваться. Я собираю метрики о качестве OCR, собираю случаи ошибок и на их основе fine-тюню модели. На практике: через несколько месяцев работы точность часто возрастает на 5-10% благодаря адаптации к специфике вашего контента.

Шестое — документирование результатов. Когда OCR выдаёт результат, важно сохранить историю: какая модель использовалась, когда обработка произошла, кто проверил результат. Это помогает при анализе ошибок и при нужде пересчитать результаты с новой моделью.