Распознаем документы с помощью FPN и Tesseract
Глава 1 О проблеме
Глава 2 О том, как устроена архитектура решения
Глава 3 О граблях, технологиях и озарениях
Глава 4: Завершающая
Готов ответить на ваши вопросы
37.07M

Распознаем документы с помощью FPN и Tesseract

1. Распознаем документы с помощью FPN и Tesseract

Панченко Иван
Telegram: @piaxar
Mail: [email protected]
1

2.

Who are you, again?
2015-2019
Бакалавриат Data Science
2018-now
Разработчик машинного обучения
2

3. Глава 1 О проблеме

3

4.

Описание проблемы
Пользователь
Электронная подпись
Шаг 1
Шаг 2
Шаг 3
4

5.

Описание проблемы
Заполнить данные в форму
Пользователь
Электронная подпись
Шаг 1
Шаг 2
Шаг 3
5

6.

Описание проблемы
Распечатать и подписать заявление
Пользователь
Электронная подпись
Шаг 1
Шаг 2
Шаг 3
6

7.

Описание проблемы
Отправить на проверку
и дождаться одобрения
Пользователь
Электронная подпись
Шаг 1
Шаг 2
Шаг 3
7

8.

Описание проблемы
Пользователь
Электронная подпись
Шаг 1
Шаг 2
Шаг 3
8

9.

Описание проблемы
Шаг 1
Шаг 3
Шаг 2
9

10.

Описание проблемы
Шаг 1
Шаг 3
Шаг 2
10

11.

Описание проблемы
Шаг 1
Шаг 3
Шаг 2
11

12.

Описание проблемы
Шаг 1
Шаг 3
Шаг 2
12

13.

Интересные цифры
Время оператора
на 1 заявление:
2 МИН.
13

14.

Интересные цифры
Время оператора
на 1 заявление:
2 МИН.
Время ожидания
очереди к оператору:
2-4 ЧАСА
x кол-во ошибок
14

15.

Решение
Распознаем скан/фото и предупреждаем об ошибках:
• не совпадает дата
• не совпадает номер телефона
• не совпадают реквизиты паспорта
• нет подписи
• …
15

16. Глава 2 О том, как устроена архитектура решения

16

17.

Цели
Быстро для создания
Контролируемо
Поменьше велосипедов
17

18.

Заявление
18

19.

Заявление
QR код
Дата
Таблица
Паспортные данные
Блок подписей
+ печать
Телефон
19

20.

End2End
1 giant
model
20

21.

End2End – way too heavy
1. Долго и сложно создавать
2. Очень сложно контролировать
1 giant
model
21

22.

OCR + rules
OCR
rules
22

23.

OCR + rules – way too unstable
1. Низкое качество
2. Сложные и нестабильные правила
OCR
rules
23

24.

QR код
Дата
Таблица
Паспортные данные
Блок подписей
+ печать
Телефон
24

25.

QR код
Дата
Таблица
Паспортные данные
Блок подписей
+ печать
Телефон
25

26.

Дата
Таблица
Паспортные данные
Блок подписей
+ печать
Телефон
26

27.

Pipeline
Дата
Телефон
Другие данные
ФИО, серия, номер
Text recognition
Segmentation
Есть печать
Есть подпись субъекта
Есть расшифровка
Multilabel classification
27

28.

Pipeline
Дата
Телефон
Другие данные
ФИО, серия, номер
Text recognition
Orientation
Segmentation
Есть печать
Есть подпись субъекта
Есть расшифровка
Multilabel classification
28

29.

Pipeline
Дата
Телефон
Другие данные
ФИО, серия, номер
Text recognition
Orientation
Segmentation
Box
extraction
Есть печать
Есть подпись субъекта
Есть расшифровка
Multilabel classification
29

30.

Технологии
Дата
Телефон
+ Другие
эвристики
данные
для
поворотов
для сегментации
Orientation
Segmentation
Box
extraction
ФИО, серия, номер
Text recognition
Есть печать
Есть подпись субъекта
Есть расшифровка
Multilabel classification
30

31. Глава 3 О граблях, технологиях и озарениях

31

32.

Предобработка картинки
Сегментация
Распознавание текста
Дата
Телефон
Другие данные
ФИО, серия, номер
Text recognition
Orientation
Segmentation
Box
extraction
Есть печать
Есть подпись субъекта
Есть расшифровка
Multilabel classification
32

33.

Предобработка картинки
Сегментация
Распознавание текста
Как сделать поворот картинок?
33

34.

Предобработка картинки
Сегментация
Распознавание текста
Как максимально глупо (но очень быстро)
сделать поворот картинки?
34

35.

Предобработка картинки
Сегментация
Распознавание текста
Как максимально глупо (но очень быстро)
сделать поворот картинки?
сделать обучающую разметку на глаз
начать с модели (MobileNet), вместо алгоритма
обучать как классификацию на 360 классов
Loss: categorical_crossentropy
35

36.

Предобработка картинки
Сегментация
Распознавание текста
Как максимально глупо (но очень быстро)
сделать поворот картинки?
сделать обучающую разметку на глаз
начать с модели, вместо алгоритма
обучать как классификацию на 360 классов
Loss: categorical_crossentropy
Loss (2 градуса разницы) = Loss (45 градусов разницы)
36

37.

Предобработка картинки
Сегментация
Распознавание текста
Было
Предсказание
Как максимально глупо поворачивать
картинку?
Метрика: среднее отклонение угла
37

38.

Предобработка картинки
Сегментация
Распознавание текста
Вывод:
Иногда самое тупое решение может оказаться неплохим baseline-ом.
P.S. В конечном итоге мы используем Fast Fourier transform (FFT)
38

39.

Предобработка картинки
Сегментация
Распознавание текста
Дата
Телефон
Другие данные
ФИО, серия, номер
Text recognition
Orientation
Segmentation
Box
extraction
Есть печать
Есть подпись субъекта
Есть расшифровка
Multilabel classification
39

40.

Предобработка картинки
Сегментация
Распознавание текста
FPN – Feature Pyramid Network
https://arxiv.org/abs/1612.03144
40

41.

Предобработка картинки
Сегментация
Распознавание текста
FPN:
ну очень быстрый обзор
https://medium.com/@jonathan_hui/understanding-feature-pyramid-networks-for-object-detection-fpn-45b227b9106c
41

42.

Предобработка картинки
Сегментация
Распознавание текста
FPN:
ну очень быстрый обзор
https://medium.com/@jonathan_hui/understanding-feature-pyramid-networks-for-object-detection-fpn-45b227b9106c
42

43.

Предобработка картинки
Сегментация
Распознавание текста
Bottom-up:
понижаем разрешение,
увеличиваем семантический
смысл картинки
https://medium.com/@jonathan_hui/understanding-feature-pyramid-networks-for-object-detection-fpn-45b227b9106c
43

44.

Предобработка картинки
Сегментация
Распознавание текста
Top-down:
восстанавливаем
разрешение картинки
https://medium.com/@jonathan_hui/understanding-feature-pyramid-networks-for-object-detection-fpn-45b227b9106c
44

45.

Предобработка картинки
Сегментация
Распознавание текста
1x1 свертки:
повторяют смысл skipconnections в ResNet
https://medium.com/@jonathan_hui/understanding-feature-pyramid-networks-for-object-detection-fpn-45b227b9106c
45

46.

Предобработка картинки
Сегментация
Распознавание текста
Предсказания каждого
слоя скейлятся к нужному
размеру и соединяются в
финальное предсказание.
https://medium.com/@jonathan_hui/understanding-feature-pyramid-networks-for-object-detection-fpn-45b227b9106c
46

47.

Предобработка картинки
Сегментация
Распознавание текста
More on segmentation model
Модель сегментации:
• FPN
• Backbone – ResNet,
предтренированный на Imagenet
https://github.com/qubvel/segmentation_models
47

48.

Предобработка картинки
Сегментация
Распознавание текста
More on segmentation model
Модель сегментации
• FPN
• Backbone – ResNet,
предтренированный на Imagenet
Input shape: (512, 512, 3)
https://github.com/qubvel/segmentation_models
Output shape:
(512, 512, 7)
6 classes + 1 background
48

49.

Предобработка картинки
Сегментация
Распознавание текста
More on segmentation model
Модель сегментации
• FPN
• Backbone – ResNet,
предтренированный на Imagenet
Input shape: (512, 512, 3)
https://github.com/qubvel/segmentation_models
Optimizer: Adam
Loss: bce_jaccard_loss
Metric: IOU-score
Output shape:
(512, 512, 7)
6 classes + 1 background
49

50.

Предобработка картинки
Сегментация
Распознавание текста
Spinoff
IoU metric
bce_jaccard_loss
Balanced cross entropy +
Jaccard loss
50

51.

Предобработка картинки
Сегментация
Распознавание текста
More on segmentation model
Модель сегментации
• FPN
• Backbone – ResNet,
предтренированный на Imagenet
Input shape: (512, 512, 3)
Augmentations
https://github.com
/albumentations-team/albumentations
Output shape:
(512, 512, 7)
https://github.com/qubvel/segmentation_models
Optimizer: Adam
Loss: bce_jaccard_loss
Metric: IOU-score
6 classes + 1 background
60 epochs
BS: 24
51

52.

Предобработка картинки
Сегментация
Распознавание текста
Вывод
Value: 0.9847
52

53.

Предобработка картинки
Сегментация
Распознавание текста
Дата
Телефон
Другие данные
ФИО, серия, номер
Text recognition
Orientation
Segmentation
Box
extraction
Есть печать
Есть подпись субъекта
Есть расшифровка
Multilabel classification
53

54.

Предобработка картинки
Сегментация
Распознавание текста
Дано:
54

55.

Предобработка картинки
Сегментация
Распознавание текста
Мы распознаем текст с помощью
Open Source OCR Engine
OCR – Optical Character Recognition
https://github.com/tesseract-ocr/
55

56.

Предобработка картинки
Сегментация
Распознавание текста
Tesseract – очень хорош
56

57.

Предобработка картинки
Сегментация
Распознавание текста
Tesseract – очень хорош, но капризен
Detected: <+ 9 322->
57

58.

Предобработка картинки
Сегментация
Распознавание текста
Tesseract – очень хорош, но капризен
Detected: + 9 322-
Detected: +7 (937) 322-00-70,
86% -> 96% accuracy
58

59.

Предобработка картинки
Сегментация
Распознавание текста
Магия для Tesseract’а
59

60.

Предобработка картинки
Сегментация
Распознавание текста
Магия для Tesseract’а
Padding
Scaling
60

61.

Предобработка картинки
Сегментация
Распознавание текста
Что ещё полезно знать о Tesseract
• Используйте Tesseract V4, у которого под капотом LSTM
• Смотрите за версиями языковых пакетов, разница в точности распознавания ~ 5%
• Tesseract best – медленнее в 1,5 раза, но + 1,5% точности
61

62.

Предобработка картинки
Сегментация
Распознавание текста
Вывод:
Tesseract – на удивление простое в использовании и качественное решение.
Зная о тонкостях работы с ним и используя некоторые трюки, можно
получить стабильное решение для production-а.
62

63. Глава 4: Завершающая

63

64.

Итоги
Accuracy so far:
• даты: 98%
• телефоны: 96%
• паспортные данные: 86%
Summary:
• FPN – очень сильная архитектура для подобных задач
• Tesseract – используем аккуратно и радуемся
• иногда странные вещи тоже могут работать
64

65. Готов ответить на ваши вопросы

65
English     Русский Правила