Игорь Градов
Игорь Градов
7 мин
ai

Нейросети обучение на синтетике: 600 картинок хватило, чтобы находить подписи на сканах

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

Нейросети обучение на синтетике: 600 картинок хватило, чтобы находить подписи на сканах
Почему это важно

Подпись на скане не содержит текстового слоя, поэтому классические правила обезличивания её не видят, а готовые детекторы портят соседние элементы страницы чаще, чем находят нужное.

Задача звучит просто: убрать фамилии, телефоны, адреса и подписи из документов перед передачей наружу. Фамилии решаются за неделю: словарь, регулярные выражения, NER (модель распознавания именованных сущностей на библиотеке Natasha). Подписи же не текст, и ни один из текстовых методов их не берёт. Весь процесс идёт на одной машине с одной видеокартой, без облака. Ниже собраны конкретные замеры, тупики и решение, к которому привело нейросети обучение на синтетических данных.

Текстовый слой против скана: откуда растёт проблема?

Документ бывает двух видов. Текстовая страница хранит символы: слово можно вытащить и удалить программно. Скан хранит картинку: слово распознаёт Тессеракт (Tesseract, открытый OCR-движок для распознавания текста с изображений), а «удалить» означает закрасить область чёрным прямоугольником.

Поиск персональных данных ведётся четырьмя способами одновременно: словарь, регулярные выражения, NER на Natasha и гейт чернил (фильтр по насыщенному цвету пикселей). Всё это работает по тексту. Подпись текстом не является, поэтому ни один из четырёх способов её не видит.

Гейт чернил ломается на чёрной ручке

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

До гейта автор пробовал эвристику «тёмное пятно, которое OCR не прочитал, закрашиваем». Однажды она стёрла весь левый столбец таблицы: он был набран мелко, Тессеракт его не разобрал. Отсюда железное правило: закрашивать только то, что опознано конкретным детектором.

Три готовых детектора: один выжил, два ушли

Для отрицательного контроля автор использовал 32 документа, 1254 страницы, из которых 721 скан. Логика простая: находки на титульных листах и листах согласования полезны, находки посреди сплошного текста означают испорченную страницу.

  • YOLOS портил каждую седьмую страницу и работал в десять раз медленнее. Он обводил чертежи роторов и стрелки блок-схем. Выключен.
  • Детектор печатей на документе без единой печати нашёл четыре с уверенностью от 0,82 до 0,98. Поднять порог до 0,9 означает отсечь настоящие печати, а три ложные останутся. Выключен.
  • Оставшийся детектор давал уверенность от 0,52 до 0,71, что по обычным меркам мало, но рабочий порог автор выставил на 0,05. Почему так низко, объясняется ниже.

Два бага с поворотом, которые крадут недели

Первый баг: атрибут /Rotate у PDF-страницы. Библиотека отдаёт картинку уже повёрнутой, а координаты закраски рассчитаны для неповёрнутой. Прямоугольник ложится не на фамилию, а рядом: фамилия остаётся открытой, а закрашен соседний абзац. Лечится одной матрицей обратного поворота, но по результату догадаться о причине практически невозможно.

Второй баг: страницу положили в сканер боком. Атрибута /Rotate нет, текст идёт снизу вверх. OSD-модуль Тессеракта определяет ориентацию верно, но прочитать не может ничего: от одного до восьми мусорных слов вроде Gy,, и PoP. Форма заполнена от руки, а рукопись Тессеракт не читает в принципе.

Своя модель: нейросети обучение на синтетике

Настоящих страниц с подписями мало. Решение: вырезать росчерк один раз и вклеивать на чистые страницы в разных местах, масштабах и поворотах. Разметка при этом известна точно.

  • 600 синтетических картинок плюс 40 настоящих страниц для обучения
  • 12 настоящих страниц отложены на проверку
  • 4 класса (рукопись, эмблема, печать, подпись)
  • База YOLO11s, видеокарта GTX 1660 Ti

Первый заход провалился не из-за объёма выборки. Детектор чернил, которым делался черновик разметки, слепляет соприкасающиеся подписи в одну рамку на всю колонку. Модель училась на аккуратных росчерках, а проверялась на слипшихся пятнах.

Две ошибки в замерах, которые стоили вечера

Отбор весов по mAP (средняя точность детекции) выбирает не те веса. mAP одинаково штрафует пропуск и лишнюю рамку, а цена ошибок здесь разная: пропущенная подпись означает утечку за периметр, лишняя закраска означает просто больше чёрного на странице. Именно поэтому порог стоит на 0,05.

Сумма площадей рамок обманывает. Рамки накладываются друг на друга, и по сумме выходило, что модель закрашивает 179% листа. По объединению (union) реальная площадь составила 26%.

Vision-модель: полезна для проверки, опасна для поиска

Один документ обрабатывался дольше рабочего дня: в файле 221 вшитая картинка, в соседнем 555. Роль vision-модели (мультимодальная нейросеть, которая «видит» изображения) была переосмыслена. Раньше она искала данные в исходнике, то есть делала ту же работу, что и правила, только медленнее и с галлюцинациями (когда ИИ уверенно выдумывает несуществующее). Теперь документ обезличивается без неё, а модели показывают уже готовый файл с вопросом: «что ты здесь ещё читаешь?»

Самый частый вопрос автору: «Пусть модель просто скажет, где закрашивать». Проблема в координатах. Grounding (привязка ответа к области картинки) у моделей есть, DeepSeek-OCR действительно отдаёт рамки, но это рамки блоков: шесть штук на страницу, медиана 374 на 40 пикселей. Чтобы закрасить фамилию внутри строки, нужна рамка слова, а их сотни. Закрасить абзац вместо фамилии означает не обезличивание, а порчу документа.

Чистка картинки: порядок операций решает всё

Используются только OpenCV (библиотека компьютерного зрения), без нейросетей: выпрямление перекоса, выравнивание освещения, шумоподавление, масштаб в два раза, нерезкая маска. Автор прогнал полную решётку комбинаций.

Масштабирование само по себе вредит: 47 единиц качества против 63 у базовой картинки, потому что шум растёт вместе с разрешением. Смысл появляется только в правильном порядке: сначала выровнять свет и убрать шум, потом увеличивать.

Что делать с этим прямо сейчас?

  • Автору Дзена, который работает с документами. Если вы обрабатываете сканы с персональными данными, не начинайте с vision-модели или универсального детектора. Начните с правил и словарей для текста, а для графических элементов обучите узкую YOLO-модель на синтетических данных: 600 картинок хватило для рабочего результата.
  • Маркетологу и предпринимателю в РФ. Закрытый контур без интернета означает, что вся обработка идёт локально. Из доступных в РФ инструментов для OCR подойдёт тот же Тессеракт, для NER по русскому тексту хорошо работает Natasha. Облачные API (YandexGPT, GigaChat) здесь не помогут: данные нельзя отправлять наружу.
  • Техническому специалисту. Выставляйте порог детекции исходя из цены ошибки, а не из привычных 0,5. Если пропуск опаснее ложного срабатывания, порог 0,05 оправдан. И считайте площадь по объединению рамок, а не по сумме.
Что ввели и что получили

Автор взял 32 документа (1254 страницы, 721 скан) и прогнал через пайплайн. Фамилии рядом с подписями закрыли правила со словарём, подписи закрыл обученный YOLO-детектор. Уверенность детектора на рабочих примерах составила от 0,52 до 0,71 при пороге 0,05. На выходе получился документ, где персональные данные заменены чёрными прямоугольниками, а таблицы, схемы и основной текст остались читаемыми.

Частые ошибки

Эвристика «закрась всё, что OCR не прочитал» стирает мелкий текст таблиц. Масштабирование скана до чистки шума ухудшает распознавание. Отбор весов модели по mAP игнорирует разницу в цене пропуска и ложной закраски. Готовый детектор печатей может находить несуществующие печати с уверенностью 0,98, и порогом это не лечится. А автоматическая опись «где больше всего росчерков» может поставить на первое место страницу с графиками, потому что эвристика считает кривые линии росчерками.

Совет редакции dzen.guru

Я вижу в этом разборе главный урок для любого проекта с нейросетями в закрытом контуре: не бросайтесь сразу в обучение модели. Сначала закройте всё, что можно закрыть правилами и словарями, потом соберите отрицательный контроль на реальных документах, и только после этого тренируйте детектор на том, что правила не берут. По моим наблюдениям, соблазн «пусть нейросеть разберётся сама» стоит недель впустую. Честная оговорка: всё описанное тестировалось на конкретном корпусе документов, и на других сканах (особенно с цветными подложками или факсимильными подписями) результаты могут отличаться.

Попробуйте генератор промптов dzen.guru

Составляйте точные промпты для работы с документами, изображениями и текстом, чтобы нейросеть делала именно то, что нужно.

Попробовать бесплатно
Поделиться:TelegramVK
Игорь Градов
Игорь Градов

Основатель dzen.guru. Эксперт по монетизации и продвижению на Дзен. Автор курса «Старт на Дзен 2026».

Комментарии

Читайте также

Нейросети Qwen и Grok провалили советские загадки: одна угадывает, другая дорисовывает
ai

Нейросети Qwen и Grok провалили советские загадки: одна угадывает, другая дорисовывает

Советские загадки с картинками кажутся детской забавой, но именно на них хорошо видно, как мультимодальные нейросети Qwen и Grok справляются с визуальной…

5 мин
DeepSeek R1 обучили за $6 млн и обрушили рынок на триллион: как дефицит чипов стал преимуществом
ai

DeepSeek R1 обучили за $6 млн и обрушили рынок на триллион: как дефицит чипов стал преимуществом

Двадцатого января 2025 года небольшая китайская компания DeepSeek выложила рассуждающую модель DeepSeek R1 под открытой лицензией MIT и за неделю обрушила…

6 мин
Ansible и нейросети: генерация плейбуков от промпта до прода за 30 минут
ai

Ansible и нейросети: генерация плейбуков от промпта до прода за 30 минут

Нейросети в 2026 году берут на себя рутинную часть написания Ansible-плейбуков, от генерации шаблонов ролей до отладки падающих задач, и инженеру остаётся…

6 мин