Классическая схема фальсификации на бумажных экзаменах выглядит так: ученик начинает работу сам, а часть за него дописывает сосед, нанятый человек или преподаватель. Проверяющий оценивает содержание, но не анализирует почерк. Задача, которую решала команда разработчиков, — автоматически выявлять такие случаи в потоке сканов государственной аттестации, не имея заранее никакого образца почерка конкретного ученика.

Предыдущая версия системы работала на сиамской CNN (TensorFlow, Python 3.6) и знала только одну категорию объектов — рукописный текст. Всё остальное: формулы с символами ∫ и σ, нарисованные графики, схемы — уходило в «подозрительное». По предметам вроде физики или математики оператор получал отмеченным почти весь бланк, что делало систему практически бесполезной. Переход на Python 3.10 и замена Keras на PyTorch стали частью задачи модернизации.

ПараметрПредыдущая версияНовая версия
Язык / фреймворкPython 3.6, TensorFlow + KerasPython 3.10, PyTorch
Детекция рукописных областейКонтурный анализ Canny + boundingboxYOLO + SAHI
Обработка нетекстовых объектовОтсутствует (всё нетекстовое — подозрительное)Отдельная YOLO-модель для формул, графиков, схем
Инфраструктура инференсаМонолитМикросервис: RabbitMQ, S3, NVIDIA Triton
Точность на тестовой выборкеНе указана89% на 4000+ бланках

Переработанная система построена как микросервис: запросы через RabbitMQ, хранение изображений в S3, инференс через NVIDIA Triton Inference Server. Пайплайн состоит из пяти этапов. Сначала — адаптивная бинаризация: сканы приходят с неравномерной подсветкой и пятнами, единый глобальный порог давал нестабильную маску. Затем — детекция рукописных областей через YOLO. Здесь возникает техническая проблема: бланки имеют разрешение 4000×5000 пикселей и выше, тогда как YOLO ожидает вход 640×640. Прямое масштабирование уничтожает мелкие рукописные слова — они сжимаются до нескольких пикселей. Решение — библиотека SAHI (Slicing Aided Hyper Inference): изображение нарезается на перекрывающиеся фрагменты, каждый прогоняется через детектор отдельно, результаты объединяются через NMS.

Система не требует эталонного образца почерка: референсом служат первые строки бланка.

Отдельная YOLO-модель, обученная на разметке заказчика, детектирует нетекстовые объекты — формулы, графики, схемы — и исключает их из дальнейшего анализа. Это устранило главную проблему предыдущей версии с массовыми ложными срабатываниями.

Скоринг почерка работает итеративно. Каждая рукописная область приводится к размеру 224×224 пикселя. Сиамская сеть сравнивает референсный фрагмент (по умолчанию — с первой страницы бланка) со всеми остальными, формируя вектор сходства от 0 до 1. Применяется гауссова модуляция по позиции: соседние строки получают буст сходства, поскольку с высокой вероятностью написаны одним человеком. Аномальные фрагменты ищет LocalOutlierFactor из sklearn. Цикл повторяется до трёх раз с новыми референсами. Итоговая вероятность фальсификации считается как перцентиль скоров фрагментов, отнесённых к «чужим», — один плохо распознанный участок не определяет финальную оценку.

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

На тестовой выборке из более чем 4000 бланков система корректно классифицировала 89% случаев. Цифра агрегированная: включает и чистые случаи без фальсификации, и подтверждённые. На сложных сканах, бланках с большим количеством формул и работах с сильной вариативностью почерка точность ниже. OCR для посимвольного сравнения показывал нестабильность на символах высотой 10–12 пикселей.

Практический результат: по предметам с преимущественно рукописным текстом — русский язык, история, обществознание — система снимает с операторов ручной просмотр типовых бланков и выдаёт только координаты подозрительных областей. По предметам с формулами ложных срабатываний на нетекстовых областях больше нет, но полной автоматизации не достигнуто. Деградация почерка к концу двухчасового экзамена и рукописные вставки внутри печатных формул по-прежнему требуют участия человека.