Часть I. Если вы занимаетесь обнаружением текста, вы должны знать эти инструменты

Part I  - 5 open-source tools you can use to train your own data and  deploy it for your next OCR project!
Part II - From labelling to serving your OCR model! (Coming soon)

Есть ряд случаев, когда нам нужно обнаружить текст на изображении.

  1. Чтобы оцифровать свои операции, банкам необходимо хранить все документы в облачной базе данных. Для этого документы необходимо отсканировать и преобразовать в машиночитаемый формат.
  2. В сфере недвижимости покупатели жилья и агенты обычно заполняют свои формы соглашений в бумажной форме. Чтобы сохранить формы в облаке, вам понадобится программное обеспечение OCR, которое преобразует текст в машиночитаемые файлы.
  3. Среди стартапов Edtech есть такие, которые сильно полагаются на OCR. Например, Photomath, стартап, который разбивает задачи на простые шаги, чтобы помочь людям понять математику. Приложение предлагает пользователям удобство сканирования вопросов, которые у них есть на бумаге, и перевода их в машиночитаемый формат посредством сканирования.

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

EasyOCR



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

Для запуска кода можно использовать следующий скрипт:

# installation
pip install easyocr
# import
import easyocr
# inference
reader = easyocr.Reader(['en'])
result = reader.readtext(img_path)

Вот быстрый тест, чтобы увидеть, насколько точна эта программа OCR. Изображение ниже взято с pexels.com, и инструмент OCR обнаружит текст на картинке. В идеальной модели он должен иметь возможность выводить «СДЕЛАЙТЕ ЭТОТ ДЕНЬ ВЕЛИКИМ!».

Вот результат:

Вы видите, что результат не идеален. Он неправильно истолковал символ «G» и ошибочно идентифицировал «H» как маленькую букву «h».

ВеслоOCR



PaddleOCR — это продукт с открытым исходным кодом, разработанный командой Baidu в Китае. Я использую этот программный инструмент уже довольно давно, и я действительно поражен тем, как много команда сделала, чтобы сделать этот бесплатный продукт таким же мощным, как любое коммерческое программное обеспечение OCR на рынке. Модели, используемые в рамках, были обучены с использованием современных методов (SOTA) (таких как дистилляция знаний CML и стратегия расширения данных CopyPaste) и с множеством печатных и рукописных изображений. Это делает его одним из самых мощных программ OCR с открытым исходным кодом. Вот несколько вещей, которые вы можете сделать с открытым исходным кодом:

  1. Вы можете использовать их существующие модели для своих приложений. Они также предоставляют чрезвычайно легкую и в то же время мощную модель под названием PP-OCRv2, поэтому вам не нужно беспокоиться о проблеме с большим объемом памяти.
  2. Они поддерживают несколько языков, таких как китайский, английский, корейский, японский, немецкий и т. д.
  3. У них есть несколько инструментов, которые помогут вам в маркировке данных. Например, они предоставляют PPOCLabel для быстрой маркировки текста на изображении. Поскольку данные важны для обучения модели OCR, у них также есть инструмент под названием Style-text, с помощью которого вы можете быстро синтезировать изображение, чтобы у вас было больше изображений для обучения вашей модели, что делает ее надежной для использования в производственной среде.
  4. Вы можете точно настроить модель в своем наборе данных с помощью предоставленного скрипта.

Вот как вы можете его использовать:

# installation
pip install paddleocr paddlepaddle
# import
from paddleocr import PaddleOCR
# inference
ocr = PaddleOCR(use_angle_cls=True, lang='en')
result = ocr.ocr(img_path, cls=True)

Давайте используем то же изображение выше, чтобы изучить производительность модели:

Удивительно видеть такой точный результат от модели, которая ранее обучалась на аналогичном изображении.

ТРОКР





Первоначально TrOCR был предложен в TrOCR: распознавание оптических символов на основе преобразователя с предварительно обученными моделями Минхао Ли, Тенгчао Лв, Лей Цуй и др. Он разработан на основе кодировщика изображения Transformer и авторегрессионного текстового декодера (аналогично GPT). -2). Код был включен в известную библиотеку Huggingface, поэтому мы можем использовать обученную модель прямо из библиотеки.

# installation
pip install transformers
# import
from transformers import TrOCRProcessor, VisionEncoderDecoderModel
from PIL import Image
# inference
model_version = "microsoft/trocr-base-printed"
processor = TrOCRProcessor.from_pretrained(model_version)
model = VisionEncoderDecoderModel.from_pretrained(model_version)

image = Image.open(img_path).convert("RGB")

pixel_values = processor(image, return_tensors="pt").pixel_values
generated_ids = model.generate(pixel_values)
generated_text = processor.batch_decode(generated_ids, skip_special_tokens=True)[0]

В отличие от двух других, модели выводят только окончательный вывод текста без указания местоположения текста. Модель предназначена для распознавания текста, поэтому не стоит ожидать, что она обнаружит текст на изображении. Вывод, который вы получите после запуска вышеуказанного скрипта, будет «MASKAY». Как и ожидалось, результат плохой, потому что в конвейере нет модели обнаружения текста.

ММОКР



MMOCR — еще один инструмент OCR с открытым исходным кодом, разработанный в рамках известного проекта OpenMMLab. Проект разработан командой Китайского университета Гонконга и является одним из ведущих проектов в области компьютерного зрения.

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

После того, как мы установили инструмент (да, он не так удобен, как первые два инструмента), мы можем использовать его для обнаружения нашего образца образа и тестирования его производительности. Мы получаем результат, аналогичный PaddleOCR, за исключением того, что восклицательный знак не появляется в конце «GREAT». В целом, этот инструмент предоставляет почти все в одном конвейере, поэтому он довольно мощный в использовании.

Тессеракт-OCR





Людям, которые раньше занимались распознаванием текста, эта библиотека должна быть хорошо знакома. Вот немного истории о Tesseract-OCR:

Первоначально Tesseract был разработан в Hewlett-Packard Laboratories Bristol и в Hewlett-Packard Co, Грили, Колорадо, в период с 1985 по 1994 год, с некоторыми дополнительными изменениями, внесенными в 1996 году для переноса на Windows, и некоторыми изменениями C++ в 1998 году. В 2005 году Tesseract был открыт. источник HP. С 2006 по ноябрь 2018 года разрабатывался Google. — из https://github.com/tesseract-ocr/tesseract

Python-Pytesseract — это оболочка для механизма Tesseract-OCR. Использовать его очень просто. Поскольку модель не обновлялась с 26 декабря 2019 г. и использует очень простую модель на основе LSTM, результат может быть не таким желательным, как остальная часть подхода. Несмотря на это, модель можно обучить на новых данных, чтобы вы могли адаптировать ее под свои нужды.

Чтобы протестировать инструмент, я использовал то же изображение выше. Несмотря на предварительную обработку изображения с помощью OpenCV, я получил пустой результат. Кажется, что инструмент плохо работает с текстом на сценах. Производительность должна быть выше для обычных документов с относительно чистым фоном.

Краткое содержание

Вот сравнение различных инструментов OCR с открытым исходным кодом:

Этот рейтинг основан исключительно на моем собственном опыте работы с инструментами с открытым исходным кодом. Каждый из них имеет свои преимущества. Наш проект требует, чтобы мы выбрали правильный инструмент на основе набора конкретных требований.

Вот блокнот Colab, если вы хотите попробовать!

Что дальше?

На инструменты с открытым исходным кодом нельзя полностью полагаться при развертывании для реального обслуживания. Особенно для некоторых приложений требуется точность более 99%. Для этого мы можем собирать данные о нашем бизнесе и маркировать их перед обучением инструменту с открытым исходным кодом. Следующим моим шагом будет показать вам, как Label Studio может оптимизировать весь процесс. Я расскажу обо всем, от маркировки до обслуживания моделей!

Если вы еще не читали мою статью о Label Studio, прочтите ее здесь:



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

об авторе

Воен Йон — специалист по данным из Сингапура. Его опыт включает в себя разработку передовых продуктов искусственного интеллекта для нескольких транснациональных корпораций.

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

Он любит дружить! Не стесняйтесь общаться с ним в LinkedIn и Medium.