Как мы делали проект по распознанию документов РФ

Моя цель - предложение широкого ассортимента товаров и услуг на постоянно высоком качестве обслуживания по самым выгодным ценам.

0. Введение.

И так начну с того, что пошел я на стажировку в Университет Искусственного Интеллекта, и выбрал проект по распознанию документов РФ (паспорт, СНИЛС, ИНН).

1. Сбор датасета.

Начали мы со сбора датасета документов. Для этого использовали парсер по выдаче результатов из запроса Яндекса.

Выдача Яндекса
Выдача Яндекса

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

В итоге у нас получилась база из 250 фотографий.

2. Автоматическое выравнивание изображений.

Для автоматического поворота была обучена сеть YOLOv5 на 2 класса. далее вычисляется угол поворота картинки по 2 точкам (классы детекции) и поворачиваем картинку на определённый угол.

3. Детекция полей.

Для детекции полей мы решили использовать YOLOv5 с ручной разметкой полей паспортов на 13 классов, ИНН на 2 класса, и 4 класса для СНИЛС.

Подробнее о разметке можно почитать тут

4. Обрезка областей для распознания.

При обрезании области по координатам из детекции возникла проблема, что YOLO не всегда корректно определяет границы областей, поэтому пришлось увеличивать размер областей на 7% в ширину и на 3% в высоту, далее формируется словарь из областей и передается на распознание в OCR

5. Распознание документов.

Для распознание текста тестировали разные OCR, но наибольшую точность из коробки получилась у EasyOCR порядка 80%, после дообучения EasyOCR точность стала 95%.

Про дообучение EasyOCR можно прочитать тут.

Возникла проблема по распознанию номера ИНН

С номером ИНН OCR не справляется, поэтому решили делать детекцию отдельной цифры YOLOv5 с 10 классами (каждый класс это отдельная цифра). такой подход помог в распознание номера ИНН.

6. Создание класса для "системы распознавания данных".

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

Алгоритм работы класса:

  1. Загрузка фотографии

  2. Перевод фотографии в оттенки серого и автоматический поворот фотографии и обрезания фона

  3. Детекция полей для распознания (YOLOv5)

  4. Вырезания и сортировка, сверху вниз, областей для распознания текста

  5. Передача областей на распознание EasyOCR (для номера ИНН в YOLOv5)

  6. Постобработка текста после распознания

  7. Формирование словаря с данными документа

  8. Вывод словаря с флагом 0 или 1

Флаг = 1, паспорт не обнаружен, или хотя бы 1 поле не распознано

Флаг = 0, все поля паспорта распознаны

7. Пример вывода.

result = ({'date_of_birth':'Дата рождения',
      'date_of_issue':'Дата выдачи',
      'first_name':'Имя',
      'gender':'Пол',
      'issued_by_whom':'Кем выдан',
      'patronymic':'Отчество',
      'place_of_birth':'Место рождения',
      'series_and_number':'Серия и номер',
      'surname':'Фамилия',
      'unit_code':'Код подразделения'},
      0)
result = ({'fio': 'ИВАНОВ ИВАН ИВАНОВИЧ', 
            'inn': '482608013231'},
             0)
result = ({'fio': 'ИВАНОВ ИВАН ИВАНОВИЧ', 
            'number_strah': '187-220-276 69'},
             0)

Источник: https://habr.com/ru/post/699166/


Интересные статьи

Интересные статьи

Рассказываем о том, как автоматизировать процессы онбординга и развёртывания инфраструктуры в iOS проекте с помощью Ansible.
Для начала, рассмотрим два забавных DIY-трюка с использованием смартфона. Для них не требуется почти никаких дополнительных компонентов, а те, что есть, стоят недорого. Всё работает, голограмма парит ...
Есть ли способ оптимизировать рабочий процесс проекта Data Science всего в несколько строк кода? Да. Это Prefect. Делимся кратким руководством по работе с этим инструментом, пока у нас начинается флаг...
Как собрать в прямом эфире 17 000 зрителей? Значит, рецепт такой. Берем 15 актуальных IT-направлений, зовем зарубежных спикеров, дарим подарки за активность в чате, и вуа-ля — крупней...
Автор материала, перевод которого мы сегодня публикуем, говорит, что одна из проблем, с которыми приходится сталкиваться программистам, заключается в том, что у них их код работает, а у кого-то д...