Как стать автором
Обновить
57.48
Arcadia
Заказная разработка, IT-консалтинг

OCR-конвейер для обработки документов

Время на прочтение11 мин
Количество просмотров14K
Сегодня я расскажу о том, как создавалась система для переноса текста из бумажных документов в электронную форму. Мы рассмотрим два основных этапа: выделение областей с текстом на сканах документов и распознавание символов в них. Кроме того, я поделюсь сложностями, с которыми пришлось столкнуться, способами их решения, а также вариантами развития системы.



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


Про OCR и цели


Оптическое распознавание символов (OCR) — перевод изображений машинописного, рукописного или печатного текста в электронные текстовые данные. Обработка данных при помощи OCR может применяться для самых различных задач:

  • извлечение данных и размещение в электронной базе банковских, бухгалтерских, юридических документов;
  • сканирование печатных документов с последующей возможностью редактирования;
  • перенос исторических документов и книг в архивы;
  • распределение печатного материала по темам;
  • индексирование и поиск отсканированного печатного материала.


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

Мы выяснили, что использование готовых продуктов для решения нашей задачи приводило бы к большим затратам и низкой производительности, вызванной ограничениями объемов обрабатываемых документов. Поэтому мы решили разработать собственную систему OCR по принципу конвейера (OCR-pipeline), в которой последовательно выполняются следующие операции:

  • загрузка скана документа;
  • извлечение слов и строк из скана;
  • распознавание символов в словах и строках;
  • формирование электронного документа.


Извлечение слов и строк


Перед распознаванием символов из изображения документа целесообразно извлечь части, которые ограничивают слова или строки текста. Способов извлечения много. Существует два основных подхода — нейросетевой и с использованием компьютерного зрения. Остановимся на них подробнее.

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

Кроме того, нейронные сети resnet имеют сложную архитектуру и применительно к данной задаче их сложнее обучить, так как они больше предназначены для классификации изображений и обнаружения небольшого количества блоков текста. Их использование значительно замедлило бы разработку конвейера и в некоторых случаях снизило бы производительность. Поэтому мы решили остановиться на методах детекции строк посредством компьютерного зрения, в частности, на методе Максимальных Стабильных Экстремальных Регионов (MSER) [1].


Примеры MSER-детекции строк в документах

В ходе MSER-детекции текст в бинаризованном изображении скана предварительно «размазывается» в пятна. На основе субпиксельных вычислений полученные пятна ограничиваются связными областями и обрамляются в прямоугольные рамки. Таким образом, происходит сжатие исходных данных — из скана с документом извлекаются изображения, ограничивающие слова и строки. Стоит отметить, что данный метод не зависит от цвета извлекаемого текста. Важно лишь только то, чтобы он был достаточно контрастен по отношению к фону.

OCR AI


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

Генерация данных для обучения


Нейронные сети глубокого обучения, как правило, требуют больших объемов обучающих выборок для качественного распознавания. Ручная разметка и сбор обучающих данных занимают много времени и требуют больших трудозатрат, поэтому все чаще используются готовые датасеты или искусственно генерируются уже размеченные данные. При формировании обучающих выборок для устойчивости системы OCR к искажениям важно использовать как наборы строк хорошего качества, так и строки с различными эффектами и искажениями, обусловленные особенностями сканирования или плохим качеством печати в документах.



В качестве обучающей выборки мы использовали датасет University of Washington (UW3), состоящий из более чем 80K строк из сканированных страниц с современным деловым и научным английским языком. Однако набор геометрических и фотометрических искажений, а также количество используемых шрифтов в строках оказались недостаточными. Поэтому мы решили дополнить обучающую выборку искусственно сгенерированными строками при помощи разработанного автоматического генератора строк текста разного шрифта, цвета, фона, интерлиньяжа и т. п. Использовались 10 наиболее популярных шрифтов, встречающихся в документах: Times New Roman, Helvetica, Baskerville, Computer Modern, Arial и другие.

Дополнительной универсальности относительно шрифтов удалось достичь благодаря использованию информации из Font Map, в которой взаимное расположение шрифтов определяет их сходство — чем ближе два шрифта друг к другу, тем более они похожи. Для дообучения сети было дополнительно отобрано 10 шрифтов на карте, наиболее удаленных от тех, на которых модель уже обучена.


Карта шрифтов Font Map fontmap.ideo.com

Архитектура сети CNN


Входные данные для обучения и распознавания сети — это части изображений сканов со строками или словами, извлеченные на этапе MSER-детекции. Выходные данные — это упорядоченные наборы символов, формирующие текст в электронном формате.

Для распознавания символов в картинках эффективно используются сверточные нейронные сети CNN [2], формирующие представления частей изображений подобно зрительной системе человека.

Сверточная нейронная сеть обычно представляет собой чередование сверточных и пулинговых слоев, объединенных в сверточные блоки (сonvolutional blocks) и полносвязных слоев на выходе (fully connected layers). В сверточном слое веса объединяются в так называемые карты признаков (feature maps). Каждый из нейронов карты признаков связан с частью нейронов предыдущего слоя.



Сети CNN базируются на математических операциях свертки (convolutions) и последующих сокращениях размерности (pooling) с применением пороговых функций, исключающих отрицательные значения весов. Карты признаков после всех преобразований в сверточных блоках конкатенируются в единый вектор (concatenation) на вход полносвязной сети. Рассмотрим операции свертки и сокращения размерности подробнее.

Вычисления в сверточной сети


В сверточном слое входное исходное изображение или карта предыдущего сверточного блока (input data) подвергаются операции свертки (сonvolution) при помощи матрицы небольшого размера (ядра свертки, сonvolution kernel), которую двигают по матрице, описывающей входные данные (input data). Выходными данными (output data) является матрица, состоящая из значений суммы попарных произведений соответствующей части входных данных с ядром свертки. На рисунке показан пример сверточного слоя с ядром свертки размера 3X3.



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

  1. Применение функции активации нейронов. Наиболее используемой функцией активации в сверточных нейронных сетях является ReLU, которая заменяет отрицательные значения в матрице нулями. В последнее время доказали свою эффективность ее разновидности — Noisy ReLU, которая заменяет отрицательные значения нулями с добавлением небольшого случайного слагаемого к положительным значениям, и Leaky ReLU, которая заменяет отрицательные значения не нулями, а случайными числами.
  2. Уменьшение размерности. Полученная после активации матрица разделяется на ячейки, в которых происходит агрегирование значений. Это можно сделать разными способами, но зачастую применяется метод выбора максимального элемента (max-pooling).




На рисунке показан пример слоя пулинга с сокращением размерности в два раза с применением ReLU и max-pooling. Выходные значения передаются на вход следующего сверточного блока или вытягиваются в вектор для полносвязного слоя, если сверточных блоков больше нет.

Архитектура сети для OCR


В нашем случае одних сверточных блоков недостаточно, поскольку обрабатываются большие объемы данных и необходим учет последовательности символов в строках. Поэтому мы использовали гибридную архитектуру, состоящую из

  • сверточных блоков CNN, извлекающих представления из изображений;
  • блоков долгой кратковременной памяти LSTM [3], каждый из которых состоит из комплекса пороговых функций, позволяющих запоминать представления как на длинные, так и на короткие промежутки времени, а также предотвращать преждевременное «забывание» представлений при обучении;
  • классификатора CTC [4], способствующего сохранению последовательности выводимых символов.



Вычислительные эксперименты


В ходе обучения мы провели серию экспериментов относительно наборов строк в обучающих выборках. Выделим основные из них: на основе только сгенерированных строк (10 наиболее популярных шрифтов + 10 шрифтов из Font Map), на основе сгенерированных строк с тремя наиболее используемыми в документах шрифтами (Times New Roman, Helvetica, Computer Modern) со строками из датасета UW3 и на основе сгенерированных строк (10 + 10 шрифтов) со строками из датасета UW3.



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

Обучение нейросети происходило по принципу «раннего останова»: через определенное количество итераций выполнялось распознавание случайно выбранного подмножества строк из обучающей (валидационной) выборки. Если в течение нескольких таких проверок максимальное значение точности не изменялось, то итерационный процесс обучения прекращался и сохранялись веса нейронной сети для распознавания строк из документов. Время обучения рассчитывалось от начала итерационного процесса до останова. Использовались графические ускорители GPU Nvidia семейства Tesla (K8 и V100).

Рассматривались документы с разрешением сканирования от 96dpi на английском языке, в том числе с присутствием цветного текста. Построенная архитектура позволила достичь точности распознавания символов до 95-99%.

Таким образом, в качестве выходных данных мы получаем символы, объединенные в слова или строки, формирующие электронные документы.

Конвейер


Значительное ускорение обработки документов было достигнуто благодаря организации нашей системы распознавания по принципу конвейера с минимизацией простоев, а также за счет распараллеливания вычислений в CPU и GPU и рационального использования памяти. Система развертывалась с помощью Docker и Kubernetes.


Организация системы OCR AI распознавания по принципу конвейера.
Длина прямоугольных блоков, описывающих процедуру обработки, схематично соответствует интервалу времени. Время выполнения каждой из процедур может различаться в зависимости от количества символов в документе.
Load Scan i — загрузка скана i-го документа,
Strokes Detection i — извлечение строк из i-го документа при помощи MSER,
Load Strokes i — OpenCV-предобработка и нормализация извлеченных строк i-го документа и загрузка на вход сети,
AI Recognition i — распознавание символов в строках i-го документа на основе построенной глубокой сети.


Для повышения качества MSER-детекции мы дополнительно применяли математические методы цифровой обработки изображений, которые в том числе исключали нежелательные шумы, естественно возникающие при сканировании бумажных документов. Обработка изображений и MSER-детекция слов и строк реализовывалась на языке Python с использованием библиотеки компьютерного зрения OpenCV.

Для повышения качества обучения, защиты от переобучения и последующего распознавания в нейронной сети AI мы применяли адаптивное обновление весов сети [5], dropout-прореживание [6] и батч-нормализацию [7]. Реализация нейронной сети глубокого обучения также была написана на Python c использованием фреймворка TensorFlow. Вычисления на GPU от Nvidia поддерживались благодаря внедрению технологий CUDA и cuDNN.

Дополнительного прироста производительности предполагается достичь при помощи технологии TensorRT [8], заточенной под оптимальное использование весов сети при вычислениях в GPU, производимых Nvidia (например, таких, как Tesla или k8). При этом веса обученных моделей преобразуются в более сжатый формат с плавающей точкой. Это позволяет более чем в 40 раз повысить скорость вычислений в GPU по сравнению с CPU без видимых потерь точности распознавания.

Что дальше?


Выделим несколько направлений развития нашей системы.

  1. Сканирование может производиться разными способами и под разным углом. Следовательно, систему можно дополнить блоком предобработки скана с детектором границ и углов документа, а также с интеллектуальной фильтрацией для улучшения качества скана.
  2. Мы анализировали данные на английском языке. Следовательно, система распознавания может дополняться аналогичными моделями для поддержки нескольких языков.
  3. Данный конвейер можно применять и для обработки рукописного текста. Стоит отметить, что в этом случае для генерации обучающих выборок целесообразно применять нейронные сети GAN [9], позволяющие генерировать весьма реалистичные данные.
  4. Большие объемы текстовых данных часто требуют постобработки с использованием natural language processing. Например, машинный перевод или разделение документов по тематикам с применением латентного размещения Дирихле (LDA) [10].


Дополнительно


[1]
wiki: en.wikipedia.org/wiki/Maximally_stable_extremal_regions
paper: J. Matas, O. Chum, M. Urban, and T. Pajdla. «Robust wide baseline stereo from maximally stable extremal regions.» Proc. of British Machine Vision Conference, pages 384-396, 2002. cmp.felk.cvut.cz/~matas/papers/matas-bmvc02.pdf

[2]
wiki: en.wikipedia.org/wiki/Convolutional_neural_network
paper: LeCun, Yann; Léon Bottou; Yoshua Bengio; Patrick Haffner (1998). «Gradient-based learning applied to document recognition» (PDF). Proceedings of the IEEE. 86 (11): 2278–2324 yann.lecun.com/exdb/publis/pdf/lecun-01a.pdf

[3]
wiki: en.wikipedia.org/wiki/Long_short-term_memory
paper: Sepp Hochreiter; Jürgen Schmidhuber (1997). «Long short-term memory». Neural Computation. 9 (8): 1735–1780. www.bioinf.jku.at/publications/older/2604.pdf

[4]
wiki: en.wikipedia.org/wiki/Connectionist_temporal_classification
paper: Graves, Alex; Fernández, Santiago; Gomez, Faustino (2006). «Connectionist temporal classification: Labelling unsegmented sequence data with recurrent neural networks». In Proceedings of the International Conference on Machine Learning, ICML 2006: 369–376. www.cs.toronto.edu/~graves/icml_2006.pdf

[5]
wiki: en.wikipedia.org/wiki/Stochastic_gradient_descent
paper: Diederik, Kingma; Ba, Jimmy (2014). «Adam: A method for stochastic optimization». arxiv.org/pdf/1412.6980.pdf

[6]
wiki: en.wikipedia.org/wiki/Dropout_(neural_networks)
paper:  Nitish Srivastava, Geoffrey Hinton, Alex Krizhevsky, Ilya Sutskever and Ruslan Salakhutdinov. «Dropout: A Simple Way to Prevent Neural Networks from Overfitting». Jmlr.org. Retrieved July 26, 2015. jmlr.org/papers/volume15/srivastava14a/srivastava14a.pdf

[7]
wiki: en.wikipedia.org/wiki/Batch_normalization
paper: Ioffe, Sergey; Szegedy, Christian (2015). «Batch Normalization: Accelerating Deep Network Training by Reducing Internal Covariate Shift» arxiv.org/pdf/1502.03167.pdf

[8]
site: developer.nvidia.com/tensorrt

[9]
wiki: en.wikipedia.org/wiki/Generative_adversarial_network
paper: Goodfellow, Ian; Pouget-Abadie, Jean; Mirza, Mehdi; Xu, Bing; Warde-Farley, David; Ozair, Sherjil; Courville, Aaron; Bengio, Yoshua (2014). Generative Adversarial Networks (PDF). Proceedings of the International Conference on Neural Information Processing Systems (NIPS 2014). pp. 2672–2680. papers.nips.cc/paper/5423-generative-adversarial-nets.pdf

[10]
wiki: en.wikipedia.org/wiki/Latent_Dirichlet_allocation
paper: Blei, David M.; Ng, Andrew Y.; Jordan, Michael I (January 2003). Lafferty, John (ed.). «Latent Dirichlet Allocation». Journal of Machine Learning Research. 3 (4–5): pp. 993–1022. www.jmlr.org/papers/volume3/blei03a/blei03a.pdf
Теги:
Хабы:
+5
Комментарии3

Публикации

Информация

Сайт
arcadia.spb.ru
Дата регистрации
Дата основания
Численность
201–500 человек
Местоположение
Россия
Представитель
Дмитрий Адов