Узнайте, как команда Cognition улучшила службу «Текст в изображении» на торговых площадках Adevinta с помощью PaddleOCR

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

Что такое OCR?

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

Существует множество вариантов использования OCR:

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

Контекст

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

Применение глубокого обучения к изображениям — основной опыт нашей команды Cognition. Мы — специалисты по обработке и анализу данных и инженеры по машинному обучению (ML), которые вместе разрабатывают масштабные решения машинного обучения на основе изображений, помогая торговым площадкам Adevinta создавать более качественные продукты и опыт для своих клиентов. Миссия Adevinta состоит в том, чтобы связать покупателей и продавцов, позволяя людям находить работу, жилье, автомобили, потребительские товары и многое другое. Создавая доступный API ML с функциями, адаптированными к потребностям наших различных торговых площадок, торговые площадки Adevinta получают инструменты ML по разумной цене.

Извлечение текста из изображений позволяет нам обнаруживать нежелательный контент из рекламы (оскорбления, скрытые сообщения, расистский контент), лучше понимать содержание изображений и даже предлагать более эффективные поисковые запросы (например, используя название торговой марки товара, написанное на нем). Потребности наших пользователей можно отсортировать по следующим категориям: общий текст, URL-адрес, адрес электронной почты и номер телефона.

В Adevinta существующий сервис «Текст в изображении» обрабатывал более 100 миллионов запросов в месяц с сильно растущим спросом, но мы не были полностью удовлетворены качеством сервиса. Учитывая влияние и популярность сервиса «Текст в изображении», мы приняли решение обновить его до более свежего, более точного и (в идеале) более быстрого решения.

Здесь начинается история: путь Cognition к предоставлению текста в изображении 2.0.

Почему PaddleOCR? Сравнительный анализ лучшего решения для распознавания текста

Существующий сервис был основан на Быстром ориентированном обнаружении текста с помощью единой сети (Ян и др., 2018). Несмотря на то, что в 2018 году он был самым современным, алгоритм показал точность 0,4 по нашему внутреннему эталону из 200 изображений с маркетплейса. Тем не менее, точность не была единственным критерием выбора для Text in Image 2.0, поэтому мы составили список крайних случаев, когда нашим партнерским рынкам требуются высокопроизводительные алгоритмы.

После рассмотрения различных сред OCR с открытым исходным кодом (включая MMOCR, EASY OCR, PaddleOCR и HiveOCR) и различных комбинаций предложенных моделей в нашем внутреннем тесте и в пограничных случаях бесспорным победителем стал PaddleOCR со средним точность 0,8 и приемлемую производительность в наших пограничных случаях. Этот результат конкурирует с платным Google Cloud Vision OCR API по лучшей измеренной нами точности.

Чтобы построить наш независимый тест и проверить выбор PaddleOCR в масштабе, мы создали Генератор текста в изображении, который использует изображения с открытым исходным кодом из Unsplash и Pikwizard и добавляет поверх них случайно сгенерированный текст. Созданный инструмент обладает широкими возможностями настройки для имитации широкого спектра случаев, в которых сочетаются такие факторы, как тип шрифта, поворот, длина текста, тип фона, разрешение изображения и т. д. Использование смоделированного эталонного теста из 20 тыс. изображений с распределением случаев, соответствующих бизнес-потребностям. , мы получили коэффициент улучшения х1,4.

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

Работа с PaddleOCR

Чтобы оценить потенциал улучшения и устранения этих ошибок, помимо определения стратегии обслуживания, нам пришлось глубоко погрузиться в структуру PaddleOCR.

PaddleOCR основан на PaddlePaddle. У нашей команды не было предыдущего опыта в этом, и он менее популярен в нашем сообществе, чем другие фреймворки, такие как Tensorflow, Keras или Pytorch.

С технической точки зрения PaddleOCR состоит из трех различных моделей:

  • Обнаружение, для обнаружения ограничивающей рамки, где возможный текст
  • Классификация, при необходимости поворот текста на 180°
  • Распознавание, перевод обнаруженного кадра изображения в необработанный текст

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

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

Мы считаем, что с нашей версией кода проще работать, учитывая вариант использования извлечения текста из изображений, и работаем над тем, чтобы сделать код доступным с открытым исходным кодом. Различные этапы, а также части предварительной и последующей обработки четко разделены, поэтому их можно вызывать независимо, что должно упростить добавление дополнительных расширений сообщества. Это также упрощает ввод в эксплуатацию, поскольку упрощенный модульный код хорошо сочетается со структурой inference.py для обслуживания конечных точек SageMaker. Предлагаемая нами версия кода не изменяет прогнозы (по сравнению с версией 2.6) для изображений.

Служба "Текст в изображении"

С помощью рефакторинга кода мы сделали модель доступной в виде API. Чтобы помочь нашим клиентам в переходе, мы сохранили тот же контракт API, который использовался в предыдущей услуге.

Обслуживать PaddleOCR можно несколькими способами. Прямой подход заключается в вызове собственного Python API (предоставляемого пакетом PaddleOCR) из хорошо известного фреймворка. Мы выбрали Multi Model Server, Flask и FastAPI для проведения теста. Все предлагаемые нами решения обслуживаются AWS SageMaker Endpoint, создавая собственный контейнер (BYOC) из того же базового образа Docker.

MultiModel Server использует собственный JAVA ModelServer, а для Flask и FastAPI мы используем nginx+gunicorn (в сочетании с uvicorn workers для ASGI FastAPI). Интерфейс для наших клиентов обслуживается шлюзом API, который выходит за рамки этой статьи.

Для тестирования производительности мы воссоздали ряд запросов с контролируемым количеством текста и изображениями разных размеров, имитируя ожидаемое распределение от наших клиентов. Мы использовали Саранча в качестве тестовой среды и стимулировали сильные всплески времени ожидания в качестве стресс-теста.

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

В настоящее время мы обрабатываем 330 миллионов запросов в месяц, и, по нашим оценкам, в следующем году больше торговых площадок Adevinta будут использовать службу «Текст в изображении», что приведет к росту на 400%.

Новый API привел к уменьшению задержки в 7,5 раз по сравнению с решением на основе FOTS, а также к снижению затрат на обслуживание на 7%. Кроме того, поскольку новый API в 12 раз дешевле типичного внешнего решения, такого как GCP OCR, мы получили положительные отзывы от наших пользователей как о скорости, так и о точности текста в изображении 2.0.

Выводы

Как команда специалистов по компьютерному зрению, работающая в международной компании, ежедневно обслуживающей миллионы людей, мы стремились улучшить наш OCR API для извлечения текста из рубричных объявлений. После тестирования многочисленных фреймворков мы создали симулятор изображения, чтобы найти алгоритм, соответствующий потребностям наших пользователей. Выбранный фреймворк PaddleOCR прошел внутреннюю проверку и обновление. (На этом пути были проблемы, и вы можете прочитать о них больше в Статья 2: Глубокое погружение в вывод PaddleOCR). Теперь мы рады сообщить, что предоставляем более точный, быстрый и дешевый API с использованием платформы PaddleOCR.