- BrainTools - https://www.braintools.ru -

Как маскировать персональные данные на изображениях: наш эксперимент с OCR и NER

Как маскировать персональные данные на изображениях: наш эксперимент с OCR и NER - 1

Всем привет! Меня зовут Андрей Иванов, я NLP-исследователь в R&D red_mad_robot. Мы разрабатываем систему Guardrails для защиты персональных данных (PII) и фильтрации небезопасного контента.

В этой статье расскажу, как мы решали задачу точечного маскирования PII на картинках без обучения [1] специальных визуальных детекторов. Разберём связку оптического распознавания символов (OCR) с NER-моделью, покажем метрики на реальных данных, раскроем ограничения подхода и наши решения для их преодоления.

Гипотеза: связка оптического распознавания и NER

Раньше мы боролись с утечками через бинарную классификацию — просто определяли наличие документа на фото.

Фильтр документов

Фильтр документов

Это решало вопрос безопасности, но портило пользовательский опыт [2]. К тому же PII встречаются не только в документах, но и, например, на скриншотах почты, в переписках или соцсетях, где блокировка всего изображения избыточна.

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

Обучать визуальные детекторы под каждый тип данных — долго и дорого. Основной массив PII (ФИО, адреса, телефоны, реквизиты) на фото представлен текстом, а для него у нас уже есть готовая NER-модель. И тут нам пришла идея: зачем изобретать велосипед, если можно скрестить её с OCR-движком?

Логика [3] решения такая:

  1. Находим текст на картинке и определяем координаты полигонов.

  2. Распознаём текст внутри полигонов.

  3. Передаём текст в NER-модель.

  4. Если модель находит PII-сущности, маскируем соответствующий полигон.

Мы начали тестировать OCR-движки.

Проверка легковесных OCR-движков

Сначала мы посмотрели на быстрые решения вроде PaddlePaddle [4] и docTR [5]. Их главный минус — плохая работа с кириллицей. Большинство русских слов они заменяют визуально похожими латинскими символами. Например, слово «Уважаемый» превращается в «ybaxaembi??».

Результаты распознавания кириллицы моделью PaddlePaddle

Результаты распознавания кириллицы моделью PaddlePaddle

Поэтому мы перешли к EasyOCR [6] — лёгкой библиотеке, которая поддерживает русский язык из коробки. Для проверки гипотезы собрали и разметили датасет из 40 качественных изображений: скриншоты переписок, почты и банковских приложений. И запустили наш пайплайн. В результате на этом тесте у нас получилось:

  • успешно замаскировать 90% персональных данных;

  • ложно замаскировать 14% полигонов текста.

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

Результаты распознавания текста моделью easyOCR на документе

Результаты распознавания текста моделью easyOCR на документе

Классические архитектуры CRAFT [7] (для детекции) и CRNN [8] (для распознавания) не справлялись: модель либо не детектировала текст, либо распознавала нечитаемый мусор.

Стало ясно, что нужна тяжёлая артиллерия.

Переход на Vision Transformer

Мы заменили движок на SuryaOCR [9] — модель на базе архитектуры Vision Transformer.

Важное уточнение: SuryaOCR распространяется под лицензией GPL-3.0, что накладывает ограничения на её использование в коммерческих закрытых продуктах. Однако для нашего R&D-исследования и проверки гипотез в рамках экспериментов она подошла идеально.

На идеальных изображениях она предсказуемо обошла EasyOCR (успешно замаскировали 96,2%), но её главным преимуществом стала устойчивая работа с реальными фотографиями.

Результаты распознавания текста моделью suryaOCR  на документе

Результаты распознавания текста моделью suryaOCR  на документе

Для стресс-теста мы собрали 15 фотографий документов в сложных условиях: в руках, под углом, на зашумлённом фоне. Разница оказалась колоссальной: SuryaOCR уверенно находила и считывала текст там, где EasyOCR пасовал.

В результате на этом тесте:

  • успешно замаскировали 90% персональных данных;

  • ложно замаскировали 15% полигонов текста.

Результат маскировки персональных данных на картинке с моделью suryaOCR

Результат маскировки персональных данных на картинке с моделью suryaOCR

Мы получили пайплайн, который хорошо скрывает персональные данные. Но вскрылась новая проблема — картинки с текстом под углом.

Решение проблемы повёрнутого текста

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

Результаты распознавания текста на документе под углом моделью suryaOCR 

Результаты распознавания текста на документе под углом моделью suryaOCR 

Мы разделили SuryaOCR на две независимые модели: детектор полигонов и распознаватель текста. Это позволило нам применить инженерный трюк:

  1. Детектор находит полигон текста.

  2. По координатам точек вычисляем угол наклона относительно горизонтальной оси.

  3. Вырезаем полигон и программно поворачиваем его до горизонтального состояния.

  4. Отправляем выровненный фрагмент в распознаватель.

Слева — повернутый на 30 градусов блок текста и результат распознавания. Справа — горизонтальный текст и результат распознавания.

Слева — повернутый на 30 градусов блок текста и результат распознавания. Справа — горизонтальный текст и результат распознавания.

Здесь возникает нюанс: выровняв полигон горизонтально, мы не знаем, где у него верх, а где низ. Текст может оказаться перевёрнутым на 180°. Решение «в лоб» — перевернуть полигоны в обе стороны, прогнать через распознаватель оба варианта и выбрать тот, у которого вероятность выше. Это удваивает вычислительную нагрузку на этапе распознавания, но неплохо решает проблему с ориентацией фото.

Результат распознавания текста после поворота блоков к горизонтальному состоянию

Результат распознавания текста после поворота блоков к горизонтальному состоянию

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

Выводы

Наш подход полностью подтвердил изначальную гипотезу: комбинацию OCR и PII-NER можно использовать для точечного маскирования чувствительных зон на фотографиях.

Однако решение получилось громоздким. Итоговый результат мультипликативно зависит от качества сразу трёх тяжёлых моделей: детектор, распознаватель и NER. Сложная логика с поворотами и кропами добавляет системе лишние степени свободы, которые неизбежно ведут к ошибкам при масштабировании.

Эксперименты помогли нам нащупать границы OCR-подхода. В итоге мы пришли к более элегантному и автономному решению для маскирования, о котором надеемся рассказать в ближайшем будущем.


Над материалом работали

Текст — Андрей Иванов

Редактура — Игорь Решетников

Иллюстрации — Саша Буяк


Это блог red_mad_robot. Мы запускаем цифровые бизнесы и помогаем компаниям внедрять AI. Здесь команда разработки делится опытом на реальных кейсах, а аналитики разбирают, куда движется индустрия. Мы бы подписались.

Наш Telegram-канал — t.me/redmadnews [10] — анонсы, события и всё, что происходит вокруг.

И отдельный канал практики R&D — t.me/rmr_rnd [11] — исследования, эксперименты и разработки.

Автор: andrivasg

Источник [12]


Сайт-источник BrainTools: https://www.braintools.ru

Путь до страницы источника: https://www.braintools.ru/article/27281

URLs in this post:

[1] обучения: http://www.braintools.ru/article/5125

[2] опыт: http://www.braintools.ru/article/6952

[3] Логика: http://www.braintools.ru/article/7640

[4] PaddlePaddle: https://github.com/PaddlePaddle/Paddle

[5] docTR: https://github.com/mindee/doctr

[6] EasyOCR: https://github.com/JaidedAI/EasyOCR

[7] CRAFT: https://github.com/clovaai/CRAFT-pytorch

[8] CRNN: https://github.com/GitYCC/crnn-pytorch

[9] SuryaOCR: https://github.com/datalab-to/surya

[10] t.me/redmadnews: https://t.me/redmadnews

[11] t.me/rmr_rnd: https://t.me/rmr_rnd

[12] Источник: https://habr.com/ru/companies/redmadrobot/articles/1011450/?utm_source=habrahabr&utm_medium=rss&utm_campaign=1011450

www.BrainTools.ru

Rambler's Top100