+7 (383) 390-00-86
Главная
Проекты
Локальный сервис сравнения сканированных документов

Локальный сервис сравнения сканированных документов

Сравнение текстовых и сканированных документов с подсветкой правок

Проблема

Крупный производитель металлоконструкций, у которого можно сделать заказ деталей из металла, регулярно сталкивался с необходимостью сравнения различных версий документов, включая отсканированные копии. Существующие онлайн-сервисы не удовлетворяли требованиям безопасности, так как не гарантировали конфиденциальность обрабатываемых данных.
Кроме того, подобные сервисы зачастую не работают с отсканированными документами, поскольку такой документ представляет собой картинку, а существующие решения умеют сравнивать только текстовые документы. В феврале 2025 года заказчик обратился к нам с запросом на разработку сервиса, который бы локально мог сравнивать как текстовые, так и отсканированные документы.

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

Задачи

  • Реализовать точное распознавание текста на отсканированных документах.
  • Автоматизировать сравнение текстовых версий документов.
  • Визуализировать отличия между версиями в понятном и удобном формате.
  • Обеспечить полностью локальную обработку для сохранности конфиденциальных данных.

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

1
Разработка пилота и подбор алгоритма сравнения
На первом этапе мы разделили задачи на два независимых блока: распознавание текста и его сравнение. К работе мы подошли итеративно: сначала подобрали подходящий алгоритм сравнения двух текстовых файлов, согласовали с заказчиком формат вывода результатов сравнения и развернули сервис локально на серверах нашей компании, предоставив заказчику доступ к нему через Telegram-бота. Это позволило быстро начать использовать прототип решения, не тратя время на интеграцию в системы заказчика. Бот мы разместили на своей стороне, предоставив доступ сотрудникам клиента. Такой подход упростил запуск пилота: заказчику не пришлось подключать разработчиков, а мы могли быстро получать фидбэк и вносить улучшения.
В дальнейшем, когда функциональность была протестирована, мы сделали API, код которого затем разработчики заказчика развернули на своих устройствах. Распознавание применяется только к сканам — извлеченный из изображения текст затем передается для сравнения. Если оба документа изначально текстовые, этап распознавания пропускается.

Вызов заключался в разработке универсального алгоритма сравнения, который бы одинаково корректно работал и с текстами, извлеченными из сканов документов, и с исходными текстовыми файлами. Из-за разницы в структуре и формате этих данных особенно важно было обеспечить корректное сопоставление фрагментов, а также реализовать наглядную визуализацию отличий. Мы адаптировали механизм сравнения, который справляется с этой задачей: он ищет отличия в последовательности символов и позволяет отобразить их в интерфейсе в удобной форме.
2
Подбор системы
Работу над блоком распознавания текста мы начали с выбора подходящей OCR-системы (системы оптического распознавания символов, которая преобразует изображения с текстом в машиночитаемый текстовый формат). Ключевым критерием было качество распознавания, а также возможность локального развертывания (без подключения к внешним сервисам). Мы протестировали 5 актуальных open-source решений и остановились на двух лучших по качеству.

Один из финалистов требовал использования GPU (графического процессора), второй — CPU (центрального процессора). Здесь важно понять, чем они принципиально отличаются:
  • GPU способен выполнять тысячи однотипных операций параллельно. Это делает его крайне эффективным для задач, связанных с нейросетями, таких как OCR. Распознавание текста на GPU проходит значительно быстрее;
  • CPU, в свою очередь, работает последовательно, но гораздо дешевле в эксплуатации и проще в интеграции. Он подходит для тех случаев, где высокая скорость не критична или нужно держать проект в рамках ограниченного бюджета.

На практике разница выглядела так:
  • GPU-решение обрабатывало документ немного быстрее и точнее, но требовало аренды дорогих серверов (от 30 000 ₽/мес);
  • CPU-решение обходилось примерно в 4 500 ₽/мес и не требовало видеокарт.

Хотя GPU-решение показало чуть лучшие результаты, прирост качества был не критичным. Зато использование CPU позволило значительно снизить стоимость инфраструктуры, упростить развертывание, избежать дополнительных зависимостей и требований к серверной части.
3
Тестирование и внедрение
Мы провели тестирование на искусственно созданных сканах с типовыми дефектами (смещения, тени, шум), приближенными к реальным кейсам заказчика. В результате выбрали OCR-решение на CPU — как оптимальное по соотношению качества, стоимости и стабильности работы.

Последним шагом мы адаптировали алгоритм вывода результатов сравнения поверх сканов. После успешного тестирования через Telegram-бота совместно с заказчиком мы приступили к разработке API и переносу сервиса на их серверы.

Результаты

  • Точность OCR-системы достигла 93,2% даже на зашумлённых и искажённых сканах — результат был подтверждён на тестовом датасете.
  • Скорость обработки — около 6 секунд на страницу. Решение стабильно работает даже на современных офисных компьютерах без потери производительности.
  • Решение полностью локальное: все данные обрабатываются внутри периметра компании, без передачи информации третьим лицам — важный момент для соблюдения требований по конфиденциальности.
  • Поддерживается работа с различными форматами документов: PDF, DOC, DOCX, RTF.
  • Система автоматически рассчитывает процент схожести между двумя версиями документа, позволяя быстро оценить масштаб изменений.
  • Весь процесс полностью автоматизирован: от распознавания сканов до анализа и сравнения текста.
  • Найденные различия отображаются с помощью цветовой маркировки, что делает анализ быстрым и наглядным, даже при больших объемах текста.

Разработка локального сервиса сравнения сканированных документов с визуализациеи различии.png

Команда проекта

  • Разработчик компьютерного зрения (computer vision engineer).
  • Аналитик.

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