13 августа 2026
Как маскировать персональные данные на изображениях: наш эксперимент с OCR и NER
Всем привет! Меня зовут Андрей Иванов, я NLP-исследователь в R&D red_mad_robot. Мы разрабатываем систему Guardrails для защиты персональных данных (PII) и фильтрации небезопасного контента.
В этой статье расскажу, как мы решали задачу точечного маскирования PII на картинках без обучения специальных визуальных детекторов. Разберём связку оптического распознавания символов (OCR) с NER-моделью, покажем метрики на реальных данных, раскроем ограничения подхода и наши решения для их преодоления.
Фильтр документов
Это решало вопрос безопасности, но портило пользовательский опыт. К тому же PII встречаются не только в документах, но и, например, на скриншотах почты, в переписках или соцсетях, где блокировка всего изображения избыточна.
Чтобы пользователю не приходилось вручную редактировать фото, нам потребовалась точечная детекция чувствительных зон.
Обучать визуальные детекторы под каждый тип данных — долго и дорого. Основной массив PII (ФИО, адреса, телефоны, реквизиты) на фото представлен текстом, а для него у нас уже есть готовая NER-модель. И тут нам пришла идея: зачем изобретать велосипед, если можно скрестить её с OCR-движком?
Логика решения такая:
Результаты распознавания кириллицы моделью PaddlePaddle
Поэтому мы перешли к EasyOCR — лёгкой библиотеке, которая поддерживает русский язык из коробки. Для проверки гипотезы собрали и разметили датасет из 40 качественных изображений: скриншоты переписок, почты и банковских приложений. И запустили наш пайплайн. В результате на этом тесте у нас получилось:
Результаты распознавания текста моделью easyOCR на документе
Классические архитектуры CRAFT (для детекции) и CRNN (для распознавания) не справлялись: модель либо не детектировала текст, либо распознавала нечитаемый мусор.
Стало ясно, что нужна тяжёлая артиллерия.
Результаты распознавания текста моделью suryaOCR на документе
Для стресс-теста мы собрали 15 фотографий документов в сложных условиях: в руках, под углом, на зашумлённом фоне. Разница оказалась колоссальной: SuryaOCR уверенно находила и считывала текст там, где EasyOCR пасовал.
В результате на этом тесте:
Результат маскировки персональных данных на картинке с моделью suryaOCR
Мы получили пайплайн, который хорошо скрывает персональные данные. Но вскрылась новая проблема — картинки с текстом под углом.
_Результаты распознавания текста на документе под углом моделью suryaOCR _
Мы разделили SuryaOCR на две независимые модели: детектор полигонов и распознаватель текста. Это позволило нам применить инженерный трюк:
Слева — повернутый на 30 градусов блок текста и результат распознавания. Справа — горизонтальный текст и результат распознавания.
Здесь возникает нюанс: выровняв полигон горизонтально, мы не знаем, где у него верх, а где низ. Текст может оказаться перевёрнутым на 180°. Решение «в лоб» — перевернуть полигоны в обе стороны, прогнать через распознаватель оба варианта и выбрать тот, у которого вероятность выше. Это удваивает вычислительную нагрузку на этапе распознавания, но неплохо решает проблему с ориентацией фото.
Результат распознавания текста после поворота блоков к горизонтальному состоянию
После выравнивания текст распознается отлично. Алгоритм стабилен, хотя детектор из-за наклона изредка может пропускать блоки текста.
Гипотеза: связка оптического распознавания и NER
Раньше мы боролись с утечками через бинарную классификацию — просто определяли наличие документа на фото.
- Находим текст на картинке и определяем координаты полигонов.
- Распознаём текст внутри полигонов.
- Передаём текст в NER-модель.
- Если модель находит PII-сущности, маскируем соответствующий полигон.
Проверка легковесных OCR-движков
Сначала мы посмотрели на быстрые решения вроде PaddlePaddle и docTR. Их главный минус — плохая работа с кириллицей. Большинство русских слов они заменяют визуально похожими латинскими символами. Например, слово «Уважаемый» превращается в «ybaxaembi??».
- успешно замаскировать 90% персональных данных;
- ложно замаскировать 14% полигонов текста.

Переход на Vision Transformer
Мы заменили движок на SuryaOCR — модель на базе архитектуры Vision Transformer. Важное уточнение: SuryaOCR распространяется под лицензией GPL-3.0, что накладывает ограничения на её использование в коммерческих закрытых продуктах. Однако для нашего R&D-исследования и проверки гипотез в рамках экспериментов она подошла идеально. На идеальных изображениях она предсказуемо обошла EasyOCR (успешно замаскировали 96,2%), но её главным преимуществом стала устойчивая работа с реальными фотографиями.
- успешно замаскировали 90% персональных данных;
- ложно замаскировали 15% полигонов текста.

Решение проблемы повёрнутого текста
Что делать, если пользователь прислал перевёрнутую фотографию или фото под углом? SuryaOCR отлично детектирует полигоны повёрнутого текста, но этап распознавания на них ломается. Даже при небольших углах наклона модель выдаёт бессмысленный набор букв.
- Детектор находит полигон текста.
- По координатам точек вычисляем угол наклона относительно горизонтальной оси.
- Вырезаем полигон и программно поворачиваем его до горизонтального состояния.
- Отправляем выровненный фрагмент в распознаватель.


Выводы
Наш подход полностью подтвердил изначальную гипотезу: комбинацию OCR и PII-NER можно использовать для точечного маскирования чувствительных зон на фотографиях. Однако решение получилось громоздким. Итоговый результат мультипликативно зависит от качества сразу трёх тяжёлых моделей: детектор, распознаватель и NER. Сложная логика с поворотами и кропами добавляет системе лишние степени свободы, которые неизбежно ведут к ошибкам при масштабировании. Эксперименты помогли нам нащупать границы OCR-подхода. В итоге мы пришли к более элегантному и автономному решению для маскирования, о котором надеемся рассказать в ближайшем будущем.Оригинал статьи опубликован на Хабре