English

Распознание QR кодов на потоковом видео

Заказчик

Группа компаний «ТЕХНОНИКОЛЬ»

Корпорация Технониколь – ведущий международный производитель надежных и эффективных строительных материалов и систем.

Задача

Заказчик поставил перед нами следующую задачу: реализовать приложение распознавания QR кодов в потоковом видео. Основные ограничение – жесткий лимит на обработку одного кадра - не более 20 миллисекунд и точность распознавания в X %. Ещё один условием, но не таким жестким, была работа на Linux системе, что является для нас вполне обыденной задачей.

В качестве вводных данных, нам было предоставлено несколько видео фрагментов, на которых можно было производить тестирование нашего приложения, однако из-за NDA мы не можем показать здесь данные кадры. Частично, что мы можем сказать про данные – они представляют собой черно-белое видео частотой 50 кадров в секунду, где QR код движется в направлении справа налево.

Эксперименты и реализация

Для работы с видео мы сразу взяли OpenCV и в качестве первого варианта решили проверить реализацию пустого цикла обработки на Python. После первого запуска мы поняли, что реализация данной идеи не принесет требуемого результата, и мы потратим слишком много времени на оптимизацию кода. Стоит отметить, что на обработку в среднем тратилось порядка 300 миллисекунд, и это при отсутствующем коде обработки!

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

Реализацию программы мы разбили на три этапа: базовая реализация, этап оптимизация кода и финальная версия.

На этапе базовой реализации мы написали почти аналогичный код программы на Python, но при этом добавили распознавание QR кода на базе всё того же OpenCV. В среднем кадр обрабатывался за 15 миллисекунд, но были большие выбросы до 81 миллисекунды, что не вписывалось в заданные рамки задачи.

Основные претензии были к коду распознавания QR кодов. Применяя различные подходы, мы сталкивались с тем, что, Класс QRCodeDetector, из библиотеки OpenCV, не очень хорошо справлялся с распознаванием и не очень стабильно себя вёл по времени вычисления.

Здесь мы плавно переходим к этапу оптимизации кода. Мы решили отказаться от QRCodeDetector и использовать стороннюю библиотеку quirc. Решение оказалось верным, и мы сразу получили хороший прирост в скорости обработки – в среднем на кадр требовалось от 10 до 11 миллисекунд, да и точность распознавания стала гораздо выше.

Даже не смотря на то, что мы по сути добились желаемого заказчиком результата, и основная часть задачи была выполнена, мы решили пойти немного дальше и стали повышать точность распознавания еще больше. Самый простой метод с помощью которого мы ещё немного увеличили точность распознавания QR кодов – использование адаптивной бинаризации с помощью метрики mean.

Финальная версия приложения претерпела ещё несколько изменений. Среди самых значимых можно выделить – поддержку распознавания EAN кодов и адаптацию приложения для работы в виде linux демона.

Заключение

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

Обладая большим опытом в реализации нестандартных и сложных проектов, Команда МСТ готова разработать даже самые требовательные программные решения для оптимизации процессов на предприятии.

Отзыв клиента

В июле 2019 года компания ООО «Аэро-Трейд» искала подрядчика для выполнения работ по внедрению системы безналичной оплаты товаров самолетах авиакомпании «AZUR air». После тщательного изучения рынка, мы решили обратиться для реализации данного проекта в компанию ООО «МСТ Компани». Основной задачей было обеспечить каждый борт авиакомпании «AZUR air» терминалом, который сможет принимать платежи не только на земле, но и во время полёта.

В течении всего времени нашего сотрудничества, специалисты ООО «МСТ Компани» продемонстрировали отличные профессиональные навыки при подготовке проекта, и разработке документации. В результате мы получили гибкое и надёжное решение, которое удовлетворяет нашим требованиям.

По итогам работы с компанией ООО «МСТ Компани» хочется отметить соблюдение принципов делового партнерства, а также четкое соблюдение сроков работ и выполнение взятых на себя обязательств. ООО «Аэро-Трейд» выражает благодарность специалистам компании за проделанную работу в рамках внедрения системы безналичной оплаты на самолетах авиакомпании «AZUR air». И рекомендует компанию ООО «МСТ Компани» как надёжного партнёра в области платёжных решений.