惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

GbyAI
GbyAI
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
P
Proofpoint News Feed
L
Lohrmann on Cybersecurity
S
Secure Thoughts
Attack and Defense Labs
Attack and Defense Labs
人人都是产品经理
人人都是产品经理
Stack Overflow Blog
Stack Overflow Blog
W
WeLiveSecurity
O
OpenAI News
SecWiki News
SecWiki News
博客园 - Franky
NISL@THU
NISL@THU
Microsoft Azure Blog
Microsoft Azure Blog
T
Tor Project blog
Microsoft Security Blog
Microsoft Security Blog
aimingoo的专栏
aimingoo的专栏
Security Latest
Security Latest
H
Hacker News: Front Page
Google Online Security Blog
Google Online Security Blog
P
Privacy & Cybersecurity Law Blog
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
D
Darknet – Hacking Tools, Hacker News & Cyber Security
月光博客
月光博客
李成银的技术随笔
Spread Privacy
Spread Privacy
F
Full Disclosure
F
Fortinet All Blogs
T
The Exploit Database - CXSecurity.com
Vercel News
Vercel News
AWS News Blog
AWS News Blog
WordPress大学
WordPress大学
IntelliJ IDEA : IntelliJ IDEA – the Leading IDE for Professional Development in Java and Kotlin | The JetBrains Blog
IntelliJ IDEA : IntelliJ IDEA – the Leading IDE for Professional Development in Java and Kotlin | The JetBrains Blog
V
Visual Studio Blog
J
Java Code Geeks
博客园 - 三生石上(FineUI控件)
G
Google Developers Blog
云风的 BLOG
云风的 BLOG
博客园 - 司徒正美
Engineering at Meta
Engineering at Meta
Last Week in AI
Last Week in AI
P
Palo Alto Networks Blog
宝玉的分享
宝玉的分享
T
True Tiger Recordings
N
News and Events Feed by Topic
酷 壳 – CoolShell
酷 壳 – CoolShell
Cisco Talos Blog
Cisco Talos Blog
N
News | PayPal Newsroom
S
SegmentFault 最新的问题
Jina AI
Jina AI

Все публикации подряд на Хабре

Ошибка найма «рок‑звезды» — как один супер‑инженер разрушил команду за полгода Как хедхантер превращает поиск работы в бег за «морковками» Баги, которые нас воспитали: инженерные истории с Go Loto Зачем ОС нужен Root-of-Trust и как KasperskyOS работает с разными реализациями А что, если управлять торговой платформой голосом? За 48 часов собрали голосового ассистента и проверили Ваша трансформация обречена на провал. Восемь причин, почему Иду в топ ниши строительных калькуляторов. Три месяца спустя HPSC: процессоры NASA, которые сделают космические аппараты по-настоящему умными Архитектура монорепозитория для параллельного исполнения торговых стратегий Чтобы не выглядело как пет-проект»: как я в одиночку сделал премиальный интерфейс кино-сервиса (с кодом) Вам продают ИИ. Покупать нужно не его Матрица компетенций джедая: как снизить Bus Factor на проекте Production начинается там, где заканчивается вайбкодинг От фич и каскадов к генеративной модели: как мы переосмыслили рекомендации с помощью ARGUS Отвечай, как топовый специалист: как службе поддержки решать настоящие, а не озвученные проблемы клиентов Новые IT-специалисты эпохи AI: как зарубежные и российские компании относятся к vibe-coders, low-coders и zerocoders Локальная система проверки персонала: как мы автоматизировали скрининг соискателей без передачи ПДн наружу Разрабатывали решение для автоматизации, а получили универсальный продукт «Мультиплексор для Лабораторных измерений» Подготовка и сдача экзамена PMP в мае 2026 года Время закрывать доски. Ваш SaaS таск-трекер — это просто слой лака над базой данных Как мы проектировали multi-agent feedback для обучения рисованию Что такое Gemma 4: обзор новой LLM от Google CyBOK. Глава 3. Законы и регуляторные нормы. Часть 8 LLM-инференс на фотонах? Препарируем передовые технологии, представленные в апреле Агенты выходят на работу (часть 3) Нехватка CUDA-памяти при обучении с GRPO: как перестать гадать и начать считать Окей, Lamoda, что надеть на вечеринку? Как обучить LLM навыкам ИИ-стилиста ArchiMate 4: Отказ от слоёв и унификация метамодели Дальнейшая судьба SFP-Master Игровой ПК или PlayStation 5: что выгоднее в 2026 году Flipper One — нам нужна ваша помощь Как мы построили корпоративную LLM-платформу: архитектура, грабли и выводы Устранить нельзя оставить — разбираем ситуацию с уязвимостями в российской виртуализации Bitrix и Laravel: веб-хуки, ERP и все-все-все (часть 5) Поиск секрета популярности лучших репозиториев GitHub за всё время существования платформы Сэкономили на облаке под 1С: ДО — заложили бюджет на штраф. Разбираем 152-ФЗ при работе с 1С Компьютерное зрение: что получается, когда у вас не идеальная лаборатория, а дождь, снег и подвижный манипулятор Параметризация в JUnit 5 и Allure Report Мне 15, и я собираю AI-стартап для недвижки: как я победил GPU, баги PyTorch и очередь в визовый центр Стратегия «Голубого океана»: как системный аналитик влияет на продукт Проектируем с нуля калькулятор на FPGA. Часть 3: Практические численные методы От видимости сети до кибербезопасности: главный миф о сетевой телеметрии, который мешает раскрыть потенциал NetFlow Как интегрировать ТСД с любой конфигурацией «1С: Предприятия»? Человеческие головы, сандалии и лягушки: стегоконтейнеры за тысячи лет до первого компьютера GigaIDE Pro для разработки на Django Как добиться непостоянного момента? Книга: «Kubernetes. Полное руководство по развертыванию и управлению Kubernetes в облачных и локальных средах. 2-е изд.» Почему IT-специалисты остаются: что работает на удержание в 2026 году Соединение деталей 3D-печатных изделий… Простое ли дело? Yamaha RGX121Z RM — современный суперстрат с японским вайбом второй половины 1980-х Как я написал плагин для WooCommerce под Yandex YCP или как купить в 1 клик из Алисы Креативное программирование: визуализация звука Сложно читать IT литературу на кривом русском? Есть решение — книжный ревью (рефакторинг) История о том, как человечество наняло очень странного сотрудника Как мы в отделе документации создали LLM агента для автоматизированного перевода с английского на другие языки Почему e-ink до сих пор не убил LCD, хотя должен был Как оплачивать нейросети и остальное недоступное в РФ в 2026: 9 способов с ценами и рисками, где можно влететь Решение проблем в управлении: почему мидл-менеджеры справляются с кризисами эффективнее топов Сколько телефонов и планшетов продали партнёры: единое хранилище данных для бренда электроники Google Fellow, студент Нанкина и создатель TikTok: кто сделал Seedream и Seedance. Досье SpeShu.AI В прорывном эксперименте из первых в мире полностью искусственных яиц вылупились птенцы Разворачиваем облачный ТОиР на заводе за две недели Vivaldi 8.0 — Унифицированная свобода выбора Как мы с нуля реализовали двустороннее доверие «лес–лес» с Microsoft Active Directory Хакер спас мир и сел в тюрьму: Невероятная история Маркуса Хатчинса и червя WannaCry Построение корпоративной архитектуры в ИТ-проектах, используя методологию TOGAF Пайплайн не должен хранить секрет: безопасное хранение и доставка секретов для CI/CD с Deckhouse Code и Stronghold ОГЭ информатика. 16 задание на Python Asus, MSI и Gigabyte урезают производство материнских плат. Что происходит на рынке Claudex: как я подружил Claude Code с ChatGPT/Codex OAuth без OpenAI API key Как измерить скорость интернета? Почему выгорают не слабые, а ваши Версионирование таблиц репозитория метаданных Sigla Vision Графическая утилита PostgreSQL mini Profiler (в помощь экспертам по технологическим вопросам 1С и не только им) Шахматные программы IV. Термины и методы Почему Я.Директ не приводит премиальных клиентов и что с этим делать – продали элитных туров на 600 млн Реестр отечественного ПО: как бизнесу выбрать решение среди 30 000 записей и не ошибиться Глаза не видят, а код пишется: как я настраиваю и программирую 100+ модулей в умном доме Архитектура AI-сервисов: почему монолит убивает latency и GPU Процессы: чего до сих пор не хватало обычным BPM (Часть 2) Книжный салон — дополнительные книги от издательства «БХВ». Предзаказ Как продакту довести фичу до прода без PMBOK и PRINCE2 Оргмодель, процессы и агенты (Часть 1) Probe-сеть из 10 регионов: что я не учёл про AS-разнесённость Как автоматизировать повторную обработку сообщений из архива в DATAREON Platform Arguments to Config — простая и мощная библиотека для парсинга аргументов в CLI-приложении на C# Как я обучил GPT с нуля на русском языке — и что из этого получилось Миллион алых нод: о выборе баз данных для хранения больших объёмов Билеты, баги и БДСМ: хроники тревел-стартапа От vSphere к VCD: как мы построили хранилище образов и нативный CSI для Kubernetes Фолдинг белка на ноутбуке. De novo дизайн KRAS G12D (Switch II) ингибитора. Докинг, валидация в AlfaFold Server и PyMOL Тебя уволят, и ничего не сломается. Возможно, станет даже лучше ИИ от Anthropic вскрыл банки G20, Цукерберг уволил 8000 человек за один день, а мы это пропустили Один за всех: как я в одиночку тащу фуллстек-проект, который незаметно разросся до соцсети Реакционная лженаука. Как СССР осудил кибернетику — и чем это аукнулось для ИИ Лёгкий мониторинг Proxmox-кластера: Pulse вместо большого Zabbix-стека RAG для тех, кто разочаровался: почему retrieval ломается и как это починить Три уровня субъективной реальности: почему непонимание в командах заложено биологически Дирижёр вместо конвейера: как AI ломает классический pipeline разработки Dart 3.12 — что нового в Dart?
Детекция чужого почерка в экзаменационных бланках без эталонного образца
NeuroKirKoro · 2026-05-21 · via Все публикации подряд на Хабре

Детекция чужого почерка в экзаменационных бланках без эталонного образца

Уровень сложностиПростой

Время на прочтение5 мин

Охват и читатели15

Кейс

Один ученик писал экзаменационную работу, а кто-то чужой дописал часть за него. Как мы научили нейросеть распознавать это.

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

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

Цель: определить, написан ли весь бланк экзаменационной работы одним человеком. На входе - скан бланка, порой низкого качества. На выходе — координаты подозрительных фрагментов для ручной проверки. Все это в режиме потоковой обработки. Основной вызов: экзаменационный бланк — это смешанный документ. Рукописный текст соседствует с формулами, графиками, схемами, печатной подложкой бланка.

Что уже было

Предыдущая версия системы работала на CNN с сиамской архитектурой (TensorFlow + scikit-learn, Python 3.6).

Пайплайн:

  • бинаризация →

  • контурный анализ через Canny →

  • сегментация строк методом локальных максимумов →

  • выделение слов через boundingbox.

На выходе получали отмеченные абзацы для оператора. Алгоритм знал только одну категорию объектов — рукописный текст. Всё, что не распознавалось как текст, шло в подозрительное. Формула с символами ∫ и σ, нарисованный график, схемы — всё это вызывало ложное срабатывание. По ряду предметов почти весь бланк состоял из таких объектов, и оператор получал отмеченным весь документ целиком.

Дополнительно: кодовая база на Python 3.6 с Keras устарела, ряд зависимостей конфликтовал при обновлении окружения. Переход на Python 3.10 и замена Keras на PyTorch — часть задачи.

После модернизации

Система переработана как микросервис. Запросы принимаются через RabbitMQ, изображения хранятся в S3, инференс — через NVIDIA Triton Inference Server. Пайплайн обработки включает пять этапов.

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

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

  3. Детекция нетекстовых объектов: YOLO, обученная на разметке формул, графиков и схем. Разметка выполнялась на тестовом датасете бланков, предоставленном заказчиком. Этот детектор нужен только для того, чтобы исключить найденные области из подозрительных.

  4. Скоринг почерка. Каждая обнаруженная рукописная область приводится к 224×224 пикселям. Скоринговый алгоритм работает итеративно:

  • Выбирается референсный фрагмент (по умолчанию: с первой страницы бланка: предположение, что начало работы написано самим учеником с высокой вероятностью).

  • Сиамская сеть сравнивает референс со всеми остальными фрагментами, формируя вектор сходства 0–1.

  • Применяется гауссова модуляция по позиции: соседние строки получают буст сходства, потому что они скорее всего написаны тем же человеком.

  • Фрагменты делятся на похожие и непохожие по квантилям. LocalOutlierFactor из sklearn ищет аномальные — кандидаты на чужой почерк.

  • Цикл повторяется до трёх раз с новыми референсами из ещё не размеченных фрагментов.

На финальном этапе объединяются оценки двух скоринговых моделей с настраиваемыми весами. Итоговая вероятность списывания считается как перцентиль скоров фрагментов, отнесённых к “чужим”. Один плохо распознанный участок в таком расчёте не определяет итоговую оценку.

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

Ограничения

Посимвольная разметка. ТЗ требовало сравнения одних и тех же символов из разных источников — детекция и идентификация каждого рукописного символа в составе формул и текста. Разметка должна была включать координаты символа, его идентификатор и привязку к автору. На практике это потребовало отдельного цикла разметки датасета, где один и тот же символ в формуле и в рукописном тексте должен быть связан. Для редких символов (специфические математические обозначения, нестандартные схемы) датасет оказался недостаточным — детектор давал нестабильный результат.

Качество сканов. Бланки поступают в потоке, сканирование массовое, оттуда полосы, пятна, неравномерная яркость . Адаптивная бинаризация снимает часть проблем, но на особо плохих сканах строки все равно сливались или разбивались неправильно.

Внутриклассовая вариативность. Почерк одного человека деградирует по ходу экзамена. К концу двухчасового испытания он заметно отличается от первого листа. Гауссова модуляция по позиции частично компенсирует это, но на длинных работах скоринг иногда помечает конец работы как подозрительный из-за деградации почерка.

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

Метрики

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

OCR для посимвольного сравнения показывал нестабильность на мелких элементах: символы высотой 10–12 пикселей после бинаризации теряли различимые признаки.

Итог

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

Интересно обсудить подобные задачи, если работали с анализом почерка или верификацией авторства на документах. Как решали проблему вариативности почерка у одного автора?