Авторизация
Сброс пароля
Локальный сервис сравнения сканированных документов: разработка сервиса для сравнения текстовых и сканированных документов с подсветкой правок
Заказчик: NDA

Заказчик регулярно сталкивался с необходимостью сравнения различных версий документов, включая отсканированные копии. Существующие онлайн-сервисы не удовлетворяли требованиям безопасности, так как не гарантировали конфиденциальность обрабатываемых данных.
1. Вводная задача от заказчика, проблематика, цели
Крупный производитель металлоконструкций, у которого можно сделать заказ деталей из металла, регулярно сталкивался с необходимостью сравнения различных версий документов, включая отсканированные копии. Существующие онлайн-сервисы не удовлетворяли требованиям безопасности, так как не гарантировали конфиденциальность обрабатываемых данных.
Кроме того, подобные сервисы зачастую не работают с отсканированными документами, поскольку такой документ представляет собой картинку, а существующие решения умеют сравнивать только текстовые документы. В феврале 2025 года заказчик обратился к нам с запросом на разработку сервиса, который бы локально мог сравнивать как текстовые, так и отсканированные документы.
Задачи:
- Реализовать точное распознавание текста на отсканированных документах.
- Автоматизировать сравнение текстовых версий документов.
- Визуализировать отличия между версиями в понятном и удобном формате.
- Обеспечить полностью локальную обработку для сохранности конфиденциальных данных.
2. Описание реализации кейса и творческого пути по поиску оптимального решения
Разработка пилота и подбор алгоритма сравнения
На первом этапе мы разделили задачи на два независимых блока: распознавание текста и его сравнение. К работе мы подошли итеративно: сначала подобрали подходящий алгоритм сравнения двух текстовых файлов, согласовали с заказчиком формат вывода результатов сравнения и развернули сервис локально на серверах нашей компании, предоставив заказчику доступ к нему через Telegram-бота. Это позволило быстро начать использовать прототип решения, не тратя время на интеграцию в системы заказчика. Бот мы разместили на своей стороне, предоставив доступ сотрудникам клиента. Такой подход упростил запуск пилота: заказчику не пришлось подключать разработчиков, а мы могли быстро получать фидбэк и вносить улучшения.
В дальнейшем, когда функциональность была протестирована, мы сделали API, код которого затем разработчики заказчика развернули на своих устройствах. Распознавание применяется только к сканам — извлеченный из изображения текст затем передается для сравнения. Если оба документа изначально текстовые, этап распознавания пропускается.
Вызов заключался в разработке универсального алгоритма сравнения, который бы одинаково корректно работал и с текстами, извлеченными из сканов документов, и с исходными текстовыми файлами. Из-за разницы в структуре и формате этих данных особенно важно было обеспечить корректное сопоставление фрагментов, а также реализовать наглядную визуализацию отличий. Мы адаптировали механизм сравнения, который справляется с этой задачей: он ищет отличия в последовательности символов и позволяет отобразить их в интерфейсе в удобной форме.
Подбор системы
Работу над блоком распознавания текста мы начали с выбора подходящей OCR-системы (системы оптического распознавания символов, которая преобразует изображения с текстом в машиночитаемый текстовый формат). Ключевым критерием было качество распознавания, а также возможность локального развертывания (без подключения к внешним сервисам). Мы протестировали 5 актуальных open-source решений и остановились на двух лучших по качеству.
Один из финалистов требовал использования GPU (графического процессора), второй — CPU (центрального процессора). Здесь важно понять, чем они принципиально отличаются:
- GPU способен выполнять тысячи однотипных операций параллельно. Это делает его крайне эффективным для задач, связанных с нейросетями, таких как OCR. Распознавание текста на GPU проходит значительно быстрее;
- CPU, в свою очередь, работает последовательно, но гораздо дешевле в эксплуатации и проще в интеграции. Он подходит для тех случаев, где высокая скорость не критична или нужно держать проект в рамках ограниченного бюджета.
На практике разница выглядела так:
- GPU-решение обрабатывало документ немного быстрее и точнее, но требовало аренды дорогих серверов (от 30 000 ₽/мес);
- CPU-решение обходилось примерно в 4 500 ₽/мес и не требовало видеокарт.
Хотя GPU-решение показало чуть лучшие результаты, прирост качества был не критичным. Зато использование CPU позволило значительно снизить стоимость инфраструктуры, упростить развертывание, избежать дополнительных зависимостей и требований к серверной части.
Тестирование и внедрение
Мы провели тестирование на искусственно созданных сканах с типовыми дефектами (смещения, тени, шум), приближенными к реальным кейсам заказчика. В результате выбрали OCR-решение на CPU — как оптимальное по соотношению качества, стоимости и стабильности работы.
Последним шагом мы адаптировали алгоритм вывода результатов сравнения поверх сканов. После успешного тестирования через Telegram-бота совместно с заказчиком мы приступили к разработке API и переносу сервиса на их серверы.
3. Результаты сотрудничества
- Точность OCR-системы достигла 93,2% даже на зашумлённых и искажённых сканах — результат был подтверждён на тестовом датасете.
- Скорость обработки — около 6 секунд на страницу. Решение стабильно работает даже на современных офисных компьютерах без потери производительности.
- Решение полностью локальное: все данные обрабатываются внутри периметра компании, без передачи информации третьим лицам — важный момент для соблюдения требований по конфиденциальности.
- Поддерживается работа с различными форматами документов: PDF, DOC, DOCX, RTF.
- Система автоматически рассчитывает процент схожести между двумя версиями документа, позволяя быстро оценить масштаб изменений.
- Весь процесс полностью автоматизирован: от распознавания сканов до анализа и сравнения текста.
- Найденные различия отображаются с помощью цветовой маркировки, что делает анализ быстрым и наглядным, даже при больших объемах текста.
4. Заключение
На сегодняшний день продолжаем работу над проектами для клиента.


