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)

Комментарии (7)


  1. sergbe
    14.11.2022 11:31
    +5

    !! Заглавное фото с копиями паспортов жестко нарушает закон о персональных данных. Например, паспорт в нижнем правом углу имеет читаемый номер и имя владельца.


    1. Adler_lug
      14.11.2022 11:41
      -2

      Даже если это скриншот с открытого источника?


      1. sergbe
        14.11.2022 11:52

        Значит это открытый источник, нарушающий закон. Как это освобождает автора от соблюдения закона ?


      1. dimanosov007 Автор
        14.11.2022 12:09

        Тут к сожалению так и есть.

        Общедоступные — те, на доступ к которым дано согласие субъекта персональных данных, а не те, которые можно найти в общем доступе в интернете.


    1. dimanosov007 Автор
      14.11.2022 12:01
      +1

      Учел Ваш комментарий, и изменил фото. Спасибо


  1. TsarS
    14.11.2022 11:35

    Скажите, а нет уже инструментов онлайн, с помощью которого просто визуально размечаешь на фотографии какие-нибудь объекты (ну скажем тот же самый текст на фото), куда-нибудь вбиваешь текст (который написан на этой области ), ну, допустим, тысяча штук и тебе готовая нейросеть?


    1. eltardowut
      14.11.2022 12:07

      Есть, конечно. Вот, например: https://labelstud.io/