Распознавание номеров ЖД вагонов в Viinex 2.0

Мы интегрировали в Viinex 2.0 движок распознавания номеров грузовых железнодорожных вагонов и цистерн, который ранее поставлялся в составе Viinex Foundation 1.4.

Для нас эта интерграция стала иллюстрацией того, что Viinex 2.0 сам по себе является достаточно удобной платформой для разработки приложений, связанных с видеоаналитикой. И вот почему: для интеграции нам практически не пришлось вносить изменений в код Viinex 2.0. Вместо этого, мы написали отдельное приложение на С++, которое интегрирует алгоритм распознавания номеров, и взаимодействует с Viinex 2.0 как "внешний процесс" -- механизм, описанный в нашей документации в разделе 2.1.18. Поэтому это оказалось очень простой интеграцией: взаимодействие с Viinex сводится к обмену JSON командами через stdin/stdout. Получение декодированного видео из Viinex 2.0 в этом процессе происходит с использованием так называемого "локального транспорта", -- это комбинация из shared memory и named pipes, которая позволяет передавать декодированное видео из одного процесса в другой без копирования кадров. Реализацию этого механизма мы несколько месяцев назад выложили на GitHub под MIT лицензией.

Вторым решением в этом проекте стало то, что логика работы алгоритма распознавания, а именно -- управление распознаванием через API либо включение/выключение распознавания по сигналу от оптического датчика; управление записью видео в архив; накопление результатов для выдачи результатов по запросу; даже генерация итоговых событий о результатах распознавания, которые отправляются в WebSocket, -- все это реализовано в небольшом скрипте, который исполняется внутри Viinex 2.0. Для всего оказалось достаточно уже имеющейся функциональности, -- в первую очередь, механизма встроенных скриптов, который описан в главе 4 документации.

Наконец, мы реализовали простой web-ориентированный пользовательский интерфейс для получения результатов распознавания в реальном времени (через WebSocket), синхронно с отображением видео с камер, по которым идет распознавание, -- с использованием WebRTC. В этом же интерфейсе предусмотрено получение недавней истории регистрации грузового ЖД транспорта, -- там можно увидеть списки из последних прошедших составов и вагонов, получить результаты распознавания по ним, а также просмотреть и экспортировать записанное видео и отдельные кадры, для чего используются стандартные средства видеоархива в Viinex 2.0. Следует отметить, что backend-ом в данном приложении выступал управляющий скрипт из предыдущего абзаца. Было забавно отметить, насколько упростилась разработка этого приложения от использования современного стека инструментов. Еще одно важное преимущество такого решения: управляющий скрипт поставляется в виде открытого исходного кода, поэтому при необходимости его можно кастомизировать под конкретную задачу, -- например, такую как описано здесь.

Функциональность распознавания номеров грузовых ЖД вагонов и цистерн доступна в русскоязычных сборках Viinex 2.0 начиная с 2.0.0.324. Мы также написали краткое русскоязычное руководство по данному решению, которое доступно по ссылке https://www.viinex.com/wp-content/uploads/2019/09/Viinex20RailwayGuide.pdf. Оно не заменяет полное руководство по Viinex 2.0, но описывает процесс настройки и интеграцию с системой распознавания номеров ЖД вагонов.

Комментариев еще нет.

Leave a Reply

Вы должны войти Авторизованы чтобы оставить комментарий.