|
Professor Seleznov
|
Один ученик писал экзаменационную работу, а кто-то чужой дописал часть за него. Как мы научили нейросеть распознавать это. Дано: государственная аттестация, бумажные бланки, никакого онлайн-контроля. Классический способ фальсификации: ученик начинает работу сам, потом часть дописывает кто-то другой: сосед, нанятый человек, преподаватель. Проверяющий смотрит на текст, но не оценивает почерк. Задача ИИ: поймать фальсификацию почерка без эталона: система не знает заранее, как пишет конкретный ученик. Единственное, от чего можно отталкиваться - начало бланка, мы предполагаем, что первые строки написал сам экзаменуемый. Цель: определить, написан ли весь бланк экзаменационной работы одним человеком. На входе - скан бланка, порой низкого качества. На выходе — координаты подозрительных фрагментов для ручной проверки. Все это в режиме потоковой обработки. Основной вызов: экзаменационный бланк — это смешанный документ. Рукописный текст соседствует с формулами, графиками, схемами, печатной подложкой бланка.
 Что уже было Предыдущая версия системы работала на CNN с сиамской архитектурой (TensorFlow + scikit-learn, Python 3.6). Пайплайн:
- бинаризация →
- контурный анализ через Canny →
- сегментация строк методом локальных максимумов →
- выделение слов через boundingbox.
На выходе получали отмеченные абзацы для оператора. Алгоритм знал только одну категорию объектов — рукописный текст. Всё, что не распознавалось как текст, шло в подозрительное. Формула с символами ∫ и σ, нарисованный график, схемы — всё это вызывало ложное срабатывание. По ряду предметов почти весь бланк состоял из таких объектов, и оператор получал отмеченным весь документ целиком. Дополнительно: кодовая база на Python 3.6 с Keras устарела, ряд зависимостей конфликтовал при обновлении окружения. Переход на Python 3.10 и замена Keras на PyTorch — часть задачи. После модернизации Система переработана как микросервис. Запросы принимаются через 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 ищет аномальные — кандидаты на чужой почерк.
- Цикл повторяется до трёх раз с новыми референсами из ещё не размеченных фрагментов.
На финальном этапе объединяются оценки двух скоринговых моделей с настраиваемыми весами. Итоговая вероятность списывания считается как перцентиль скоров фрагментов, отнесённых к “чужим”. Один плохо распознанный участок в таком расчёте не определяет итоговую оценку. Тепловые карты. Документ дополнительно проходил через скользящее окно. Для каждого участка считалась матрица сходства с референсными фрагментами. Участки делились на три типа: чистый рукописный текст, текст с формулами и смешанные области. Для каждого типа задавались отдельные правила выбора референса. Финальный скоринг учитывал распределение оценок сходства, кластеры похожих фрагментов и соотношение участков с высоким и низким сходством. Ограничения Посимвольная разметка. ТЗ требовало сравнения одних и тех же символов из разных источников — детекция и идентификация каждого рукописного символа в составе формул и текста. Разметка должна была включать координаты символа, его идентификатор и привязку к автору. На практике это потребовало отдельного цикла разметки датасета, где один и тот же символ в формуле и в рукописном тексте должен быть связан. Для редких символов (специфические математические обозначения, нестандартные схемы) датасет оказался недостаточным — детектор давал нестабильный результат. Качество сканов. Бланки поступают в потоке, сканирование массовое, оттуда полосы, пятна, неравномерная яркость . Адаптивная бинаризация снимает часть проблем, но на особо плохих сканах строки все равно сливались или разбивались неправильно. Внутриклассовая вариативность. Почерк одного человека деградирует по ходу экзамена. К концу двухчасового испытания он заметно отличается от первого листа. Гауссова модуляция по позиции частично компенсирует это, но на длинных работах скоринг иногда помечает конец работы как подозрительный из-за деградации почерка. Формулы с рукописными вставками. Если ученик дописывал что-то в печатный бланк формулы от руки, YOLO для нетекстовых объектов детектировала всю область как формулу и исключала из анализа. Рукописный фрагмент внутри формулы не проверялся. Это ограничение осталось.
 Метрики По тестовой выборке более 4000 бланков — 89% корректно классифицированных случаев. Цифра агрегированная: она включает и чистые случаи (нет списывания), и подтверждённые. На сложных случаях, например, плохие сканы, бланки с большим количеством формул, работы с сильной вариативностью почерка точность получилась ниже. OCR для посимвольного сравнения показывал нестабильность на мелких элементах: символы высотой 10–12 пикселей после бинаризации теряли различимые признаки. Итог ИИ-модуль снимает с операторов ручной просмотр типовых бланков по предметам с чистым рукописным текстом: русский язык, история, обществознание. По этим предметам система выдаёт координаты подозрительных областей, оператор проверяет только их. По предметам с формулами и схемами ситуация стала лучше по сравнению с предыдущей версией: ложных срабатываний на нетекстовых областях нет. Но полного автоматического решения там нет, и сложные сканы, нестандартные сечения в схемах, смешанный контент с плотными рукописными вставками в формулы — это по-прежнему требует ручной проверки и глаз человека. Интересно обсудить подобные задачи, если работали с анализом почерка или верификацией авторства на документах. Как решали проблему вариативности почерка у одного автора?-Источник
|