Компания
О комапнии
olga@epoch8.co
Контакты
Блог

Преобразование серверной системы распознавания маркировки на товаре в риал-тайм решение для мобильных устройств

В предыдущей статье мы рассказали о нашей системе распознавания маркировки на товарах, используемой торговыми и логистическими компаниями. Ее основное предназначение - контроль товарооборота и защита от контрафактной продукции.
Однако введение санкций столкнуло нас с рядом непредвиденных рисков в эксплуатации системы. Ограничение доступа к инфраструктуре и облачным сервисам Google поставило под угрозу её стабильную работу. Требовалось решение, которое снизило бы зависимость от западных сервисов.
Перед нами стояла цель: создать систему, способную обрабатывать видео с камеры мобильного устройства и распознавать маркировку на товарах в режиме реального времени (риал-тайм).
Перенос серверного решения на мобильные устройства требует оптимизации моделей машинного обучения, чтобы они могли работать эффективно даже на устройствах с ограниченными вычислительными ресурсами, не теряя при этом точности и производительности. Как обеспечить мгновенный отклик системы на мобильных устройствах, сохраняя высокое качество распознавания маркировки?
Ответом на этот вопрос стала технология MediaPipe, - фреймворк от Google для создания мультимодальных приложений. В этой статье мы расскажем о том, как с помощью MediaPipe оптимизировали нашу систему распознавания маркировки на товарах для работы на мобильных устройствах.

Инструменты и технологии:

  1. TensorFlow Lite (TFLite) — легковесная версия TensorFlow, предназначенная для оптимизации моделей для работы на мобильных устройствах.
  2. MediaPipe — многофункциональный фреймворк для создания мультимодальных систем обработки данных в реальном времени.
  3. OpenCV — библиотека с открытым исходным кодом, используемая для предварительной обработки изображений и подготовки данных.
  4. YOLOv5s — более легкая версия модели компьютерного зрения YOLOv5, применяемая нами для детекции маркировки на изображении.
  5. MobileNetV2 — модель для классификации, которую мы используем для определения типа маркировки.

Задачи при переходе на риал-тайм

Использование MediaPipe и TFLite в нашем проекте решило три ключевые задачи:
  • Снижение задержек. При работе в режиме риал-тайм данные поступают непрерывно, и для плавной работы необходимо обрабатывать кадры с минимальной задержкой между этапами. Важно было сократить задержки при обработке изображения, сохраняя при этом высокую точность детекции. С этой задачей справляется TFLite, который адаптирован для работы в условиях ограниченных вычислительных возможностей. TFLite использует функции аппаратного ускорения (NNAPI для Android, CoreML для iOS и поддержку GPU), которые ускоряют работу моделей.
  • Высокое качество распознавания. Основное предназначение MediaPipe — обработка видеопотоков в риал-тайм, используя модульные конвейеры, предпроцессинг (подготовка данных) и постпроцессинг (улучшение результатов). TFLite использует квантизацию для уменьшения размеров моделей и аппаратное ускорение, минимизируя потери точности.
  • Оптимизация для мобильных устройств. MediaPipe использует калькуляторы обработки мультимедийных данных, которые сводят к минимуму объем ресурсов, необходимых для выполнения вычислений. TFLite интегрирует модели машинного обучения непосредственно в мобильное приложение без необходимости использования сервера для обработки.

Переход с сервера в риал-тайм

Серверная версия системы была выстроена на двухстадийной архитектуре, включавшей детекцию и классификацию маркировки на изображениях. Мы использовали модели детекции YOLOv5 и классификатор EfficientNet B0. Однако для риал-тайм обработки на мобильных устройствах было необходимо перенести этот многостадийный пайплайн с сервера на устройство и сделать его более легковесным.
Поэтому для реализации мобильной версии системы мы внесли некоторые изменения:
  • YOLOv5 заменили на легкую версию YoloV5s.
  • EfficientNet B0 заменили на MobileNetV2.
Чтобы оптимизировать модели под вычислительные возможности мобильных устройств мы использовали TFLite. Он позволил сократить задержки при обработке изображения, сохраняя при этом высокую точность детекции.
Ключевую роль в проекте сыграл MediaPipe. MediaPipe используется для управления потоковой обработкой изображений и видео с камеры в реальном времени. С его помощью можно быстро строить и настраивать пайплайны для обработки данных. Происходит это за счет так называемых калькуляторов - модулей, которые можно подключать, настраивать и объединять в единую рабочую цепочку.
Основные компоненты MediaPipe:
  • Пакет. Основная единица потока данных называется «пакетом». Он состоит из числовой временной метки и общего указателя на неизменяемую полезную нагрузку.
  • Калькуляторы. Калькуляторы или узлы - это то, где происходит основная часть работы графа. Калькуляторы выполняют конкретные задачи, например, обрабатывают картинку, проводят классификацию или фильтруют данные. Это своего рода модули, выполняющие отдельные этапы в обработке данных. Они производят или потребляют пакеты.
  • Потоки. Соединение между двумя калькуляторами, которое несет последовательность пакетов с возрастающими временными метками.
  • Граф. Cтруктура, связывающая калькуляторы между собой, чтобы данные могли последовательно проходить через них. Граф может иметь любое количество входов и выходов, а также ответвление или слияние данных.
В MediaPipe калькуляторы предоставляют гибкость и модульность системы, облегчая разработку и масштабирование риал-тайм пайплайнов для различных задач. За счет этого он легко подключает различные модели и этапы обработки, включая TFLite. Калькуляторы вызывают модели машинного обучения на каждом кадре или изображении, обеспечивая последовательную и параллельную обработку данных в зависимости от настроек пайплайна.

Пайплайн обработки данных в реальном времени

1. Получение видеоизображения

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

2. Детекция маркировки

На этапе система проверяет каждый кадр, чтобы найти объекты, которые ей интересны. Данные поступают на вход калькулятора детекции. Мы используем модель для детекции объектов YOLOv5s, легковесую и быструю версию модели YOLOv5, которая идеально подходит для мобильных устройств. Модель YOLOv5s ищет объекты на изображении (в данном случае, двумерные коды или знаки маркировки) и создает ограничивающие рамки вокруг найденных объектов.
YOLOv5s выдаёт координаты ограничивающих рамок (bbox) объектов, их классы (class) и вероятность (score). Калькулятор обрабатывает эти данные и передает их дальше по графу для отображения или последующей обработки.
После детекции все объекты делятся на две категории:
  • Центральные: объекты, которые находятся в центре изображения и требуют более детальной обработки.
  • Боковые: объекты, расположенные по краям изображения. Они могут быть либо менее значимыми, либо требуют отдельного подхода.

3. Классификация объектов

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

4. Объединение детекций

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

5. Отображение результатов

Заключительный шаг – это визуализация результатов. На исходное изображение или видео наносятся результаты работы системы:
  • Вокруг каждого объекта формируется рамка границ.
  • Визуально размечаются результаты детекции и классификации.
Таким образом, пользователю предоставляется наглядная информация о том, какие маркировки были распознаны на изображении и их содержание.

Заключение

Мы перенесли серверное решение системы по распознаванию маркировки в риал-тайм, используя фреймворк MediaPipe. Это решение снизило задержки и сделало приложение легким в использовании, а также помогло снизить зависимость от серверных ресурсов. Как итог, мы имеем гибкий и масштабируемый инструмент для распознавания маркировки на товарах в различных условиях.
ИИ Компьютерное зрение