- Регистрация
- 12.04.17
- Сообщения
- 19.095
- Реакции
- 107
- Репутация
- 0
You must be registered for see links
WebRTC упростил (в большинстве своем) получение и отправку видеопотоков в реальном времени. А значит, можно немного поразвлекаться с ними при помощи машинного обучения. В прошлом месяце я показал, как запустить компьютерное зрение (Computer Vision – CV)
You must be registered for see links
. Как я уже упоминал, локально – это, конечно, хорошо, но иногда требуется более высокая производительность, и для этого нам понадобится удаленный сервер. В данном посте я расскажу о том, как запускать серверные модели OpenCV с аппаратным ускорением на чипсетах Intel с помощью Open WebRTC Toolkit (OWT) с открытым исходным кодом.Я хотел поиграться с сервером OWT с тех пор, как Intel продемонстрировали функции компьютерного зрения на
You must be registered for see links
, и теперь мне посчастливилось поработать с их командой разработчиков для изучения возможностей сервера. Ниже я расскажу о том, как установить OWT локально для быстрого тестирования, а также продемонстрирую некоторые модели.Open WebRTC Toolkit (OWT)
Корпорация Intel выпустила свой пакет Intel Collaboration Suite для WebRTC где-то в 2014 году. Этот пакет состоял из серверных и клиентских SDK, предназначенных для использования аппаратного обеспечения Intel. Компания продолжила расширять данный набор ПО, добавляя новые функции и улучшая его возможности. Позднее, в 2018 году, Intel открыла исходный код всего проекта под брендом Open WebRTC Toolkit (OWT). Они по-прежнему предлагают использовать Collaborate Suite для WebRTC, по их словам, единственное отличие заключается в комплектации дополнительным Intel QA (что не так уж редко встречается в проектах с открытым исходным кодом, поддерживаемых коммерческими компаниями). В этом посте мы сосредоточимся на опенсорсном OWT.
Вы можете перейти на главную страницу OWT по ссылке:
You must be registered for see links
Что делает медиасервер
OWT-медиасервер может выступать в качестве сервера многоточечной конференции (Multipoint control unit – MCU), где медиафайлы декодируются, обрабатываются и перекодируются перед отправкой обратно клиентам в дополнение к более типичному методу
You must be registered for see links
(SFU). OWT от Intel рассматривается как медиа-процессор реального времени с возможностями для следующего применения:- Многоточечные конференции –
You must be registered for see linksоказались преобладающей архитектурой для WebRTC конференций, но MCU все еще необходимы в сценариях, где обработка клиентской стороны ограничена (например, на IoT устройстве), или в сочетании с одним из нижеприведенных пунктов.
- Транскодирование – MCU помогают при транскодировании между различными кодеками, особенно при обработке видеокодеков с высокой интенсивностью.
- Прямая трансляция – передача видеосигнала от не-WebRTC клиентов, использующих потоковые протоколы, такие как RTSP, RTMP, HLS, MPEG-DASH.
- Запись – хранение потоков на диске в необходимых форматах.
- SIP-gateway – преобразования WebRTC потоков и сигналов в форматы, которые могут использоваться более традиционными VoIP-сетями.
- Аналитика – запуск машинного обучения на медиа (компьютерное зрение).
Сервер создан на node.js с MongoDB для базы данных и RabbitMQ в качестве посредника сообщений. Функции, перечисленные в списке выше, а также не включенные в список реализованы в виде различных Агентов, подключаемых к архитектуре OWT.
Кроме того, OWT имеет клиентский SDK для взаимодействия с медиасервером. Он также может быть использован в режиме P2P.
Ускорение
Архитектура была разработана для использования аппаратного обеспечения Intel. Сюда относятся большинство современных процессоров Intel и еще более ускоренные процессоры со встроенной графикой,
You must be registered for see links
(FPGAs) и специализированные процессоры машинного зрения Intel (Vision Processing Unit – VPU). (Вот
You must be registered for see links
проект, который я создал, применяя один из их чипов Movidius с Google Vision Kit).
Аналитика и компьютерное зрение (CV)
Любой, кто серьезно работал с компьютерным зрением, сталкивался с
You must be registered for see links
. OpenCV изначально был проектом Intel и до сих пор остается таковым. У Intel есть набор инструментов, который они называют OpenVINO (Open Visual Inference and Neural Network Optimization) для оптимизации моделей глубокого обучения на своем оборудовании. Он является частью
You must be registered for see links
. OpenCV включает десятки предварительно обученных моделей, начиная от базового распознавания текста и заканчивая приложениями для самостоятельного вождения автомобиля.OWT Analytics Agent – это модуль для получения предсказаний в реальном времени на моделях OpenVINO. Analystics Agent может отправлять выходные метаданные в облако, или вы сами можете направлять их обратно на медиасервер, чтобы делать, например, аннотации для видео в реальном времени (я покажу это немного позже). Широко известная библиотека
You must be registered for see links
используется для управления мультимедийным пайплайном.Архитектура
Приведенная выше диаграмма взята из
You must be registered for see links
. Она выглядит сложной, но здесь нужно лишь запомнить, что Analytics Agent действует как еще один участник конференции, который может подписаться на видеоканал в этой конференции. После того, как он получит видеопоток, вы сможете направлять обработку потока на различные этапы с помощью пайплайна GStreamer. В большинстве случаев вы захотите выполнить получение предсказаний и классификацию, прежде чем возвращать видеопоток обратно в MCU, но вы также можете отправить поток и/или данные вывода куда-то еще.Установка с помощью докера
Установка займет немного времени, так как вам нужно будет установить OWT сервер и Analytics Agent. К счастью, у них есть
You must be registered for see links
для упрощения установки. Если хотите, можете запустить OWT + Analytics Agent как 4 отдельных контейнера для распределенных сред. Я решил оставить все свои локально в одном контейнере, чтобы упростить оценку.На самом деле Intel изначально дала мне образ gst-owt-all:run для работы, так как на момент написания моей статьи они занимались обновлением документации по установке Analytics Agent. Новый набор гораздо более понятен. Я все же рекомендую сначала ознакомиться со стандартной установкой OWT, чтобы понять компоненты и опции.
Кроме того, нужно много компилить с помощью gcc. Убедитесь, что у вас последняя версия, запуская следующую команду:
brew install gcc
Изначально у меня ничего не компилилось, но после запуска этой команды все заработало.
В конечном итоге я начал билдить все самостоятельно. Чтобы создать единственный OWT-сервер с Analytics, запустите следующую команду:
git clone
You must be registered for see links
cd owt-server
git branch gst-analytics
cd /owt-server/docker/gst
curl -o l_openvino_toolkit_p_2019.3.334.tgz
You must be registered for see links
You must be registered for see links
docker build --target owt-run-all -t gst-owt-all:run \
--build-arg http_proxy=${HTTP_PROXY} \
--build-arg https_proxy=${HTTPS_PROXY} \
.
После настройки основного сервера OWT и сервиса Analytics, надо будет скачать необходимые модели из OpenCV Open Model Zoo и
You must be registered for see links
для их использования. Для прилагаемых примеров всё это включает в себя простой запуск команды сборщика в bash и копирование некоторых файлов.Проверка работоспособности в macOS
Настройка портов докера
Опция docker --net=host не работает в macOS, поэтому для локального запуска вам нужно обязательно открыть соответствующие порты:
| Port | Service |
|---|---|
8080 | Сигнальный порт Web-сокета для WebRTC |
3004 | Веб-сервер для загрузки демонстрационной страницы |
30000-30050 | UDP-порты для WebRTC |
Запуск докера
Я установил свой контейнер так:
docker run -p 8080:8080 -p 3004:3004 -p 30000-30050:30000-30050/udp --name owtwebrtchacks --privileged -tid gst-owt-all:run bash
Редактирование настроек OWT по умолчанию для локального запуска на MacOS
Здесь же необходимо отредактировать файл webrtc_agent/agent.toml для распознавания этих портов.
docker start owtwebrtchacks
docker exec -it owtwebrtchacks bash
vi /home/owt/webrtc_agent/agent.toml
А затем заменить 0acf7c0560d8 именем контейнера или id. И изменить следующее:
Далее вам нужно сообщить веб-порталу, чтобы браузер показывал «localhost» вместо внутреннего IP-моста докера (172.17.0.2):
vi /home/owt/portal/portal.toml
Опять же, на других платформах вы сможете использовать конфигурацию по умолчанию, если вы запустите свой контейнер с параметром --net=host.
Запустить сервер
Теперь вы можете запустить сервер:
./home/start.sh
У вас могут появляться такие ошибки:
2020-03-31T01:47:20.814+0000 E QUERY [thread1] Error: couldn't connect to server 127.0.0.1:27017, connection attempt failed :
connect@src/mongo/shell/mongo.js:251:13
@(connect):1:21
exception: connect failed
Это нормально, пока сервер соединяется. Вы поймете, что все работает, если увидите что-то вроде:
starting app, stdout -> /home/owt/logs/app.stdout
0 rooms in this service.
Created room: 5e82a13b402df00313685e3a
sampleRoom Id: 5e82a13b402df00313685e3a
Тест в браузере
Откройте
You must be registered for see links
:3004/ в браузере на локальной машине. Потребуется разрешить сертификат, так как у браузера будут с ним проблемы.
И кроме этого, вам нужно разрешить сервер websocket на localhost:8080. Вы можете сделать это, перейдя по ссылке «
You must be registered for see links
». В качестве альтернативы вы также можете установить #allow-insecure-localhost в chrome://flags чтобы избежать проблем с флагами в Chrome.
Как только вы это сделаете, вернитесь на
You must be registered for see links
:3004/, и примите разрешение камеры. Тут же выберите свой идентификатор канала видео в раскрывающемся списке «video from» и нажмите «startAnalytics».
Наконец, перейдите к выпадающему списку «subsribe video», выберите длинную строку pipeline + video ID и нажмите subscribe:
На изображении, полученном с сервера, вы должны увидеть, что лицо распознается.
Добавление моделей OpenCV
Analytics Agent содержит архитектуру
You must be registered for see links
. GVA включает в себя разнообразные модули, которые позволяют использовать различные схемы получения предсказаний, такие как детектирование, классификация и идентификация, а также модули ввода и вывода для отправки видео пользователям (в данном случае обратно в OWT), обеспечивая наложение изображений или потоковую передачу данных по mqtt.Pipelining
На практике данные пайплайны реализуются путем изменения некоторого кода C ++. Например, если мы рассмотрим /home/owt/analytics_agent/plugins/samples/cpu_pipeline/mypipeline.cc, то увидим различные элементы пайплайнов:
source = gst_element_factory_make("appsrc", "appsource");
h264parse = gst_element_factory_make("h264parse","parse");
decodebin = gst_element_factory_make("avdec_h264","decode");
postproc = gst_element_factory_make("videoconvert","postproc");
detect = gst_element_factory_make("gvadetect","detect");
classify = gst_element_factory_make("gvaclassify","classify");
watermark = gst_element_factory_make("gvawatermark","rate");
converter = gst_element_factory_make("videoconvert","convert");
encoder = gst_element_factory_make("x264enc","encoder");
outsink = gst_element_factory_make("appsink","appsink");x
И эти пайплайны расположены в некой последовательности:
gst_bin_add_many(GST_BIN (pipeline), source,decodebin,watermark,postproc,h264parse,detect,classify,converter, encoder,outsink, NULL);
Если вы хотите изменить любой из их элементов, вам нужно будет перекомпилить пайплайн, используя:
./home/owt/analytics_agent/plugins/samples/build_samples.sh
Затем просто скопируйте скомпилированные библиотеки поверх текущей, используемой в /home/owt/analytics_agent/lib/.
Получение других моделей
Существует огромный набор моделей, размещенных под
You must be registered for see links
. В дополнение ко всем популярным
You must be registered for see links
, таким как mobilenet, resnet, squeezenet, vgg и многие другие, Intel также поддерживает набор, который включает в себя широкий спектр моделей, полезных для обнаружения объектов, для автономных транспортных средств и для обработки человеческих действий:action-recognition | head-pose-estimation | person-detection-action-recognition-teacher | semantic-segmentation |
age-gender-recognition | human-pose-estimation | person-detection-asl | single-image-super-resolution |
asl-recognition | image-retrieval | person-detection-raisinghand-recognition | text-detection |
driver-action-recognition | instance-segmentation-security | person-detection | text-image-super-resolution |
emotions-recognition | landmarks-regression | person-reidentification | text-recognition |
face-detection | license-plate-recognition-barrier | person-vehicle-bike-detection-crossroad | text-spotting |
face-reidentification | pedestrian-and-vehicle-detector | product-detection | vehicle-attributes-recognition-barrier |
facial-landmarks-35 | pedestrian-detection | resnet18-xnor-binary-onnx | vehicle-detection |
gaze-estimation | person-attributes-recognition-crossroad | resnet50-binary | vehicle-detection-binary |
handwritten-score-recognition | person-detection-action-recognition | road-segmentation | vehicle-license-plate-detection-barrier |
У Intel есть больше информации об этом
You must be registered for see links
.Модели, добавленные в OWT Analytics Agent
Для их добавления необходимо клонировать репозиторий, а затем получить соответствующие модели с помощью инструмента
You must be registered for see links
. После этого вам необходимо убедиться, что ваш пайплайн содержит соответствующие элементы (классификация, обнаружение, идентификация) и настроить файл /home/owt/analytics_agent/plugin.cfg, применяя соответствующие параметры.Тестирование плагина
Я попробовал несколько моделей распознавания лиц и эмоций.
Опорные точки лица
Так как я уже
You must be registered for see links
, то решил проверить модель
You must be registered for see links
. Эта модель обнаруживает 35 опорных точек лица.
Чтобы использовать их в своем приложении для мониторинга касания лица, я мог бы добавить потоковую передачу MQTT в пайплайн, используя
You must be registered for see links
для захвата и обработки опорных точек. Например, я мог бы посмотреть, не затемнены ли точки вокруг глаз, носа и рта, или даже совместить это с
You must be registered for see links
.Распознавание эмоций
Это еще одна прикольная штука.
You must be registered for see links
использует сверточную сеть для распознавания нейтрального, счастливого, грустного, удивленного и яростного выражения.
Похоже, мое выражение лица воспринимается не как нейтральное, а как грустное – возможно, такое долгое пребывание в изоляции начинает доставать меня
Оптимизация ускорения
Чтобы воспользоваться возможностями аппаратного ускорения OWT, обязательно установите соответствующее устройство в /home/owt/analytics_agent/plugin.cfg – то есть напишите:
device = "MULTI:HDDL,GPU,CPU"
К сожалению, у меня не хватило времени, чтобы протестировать это, но в дополнение к CPU и GPU-ускорению вы также можете воспользоваться преимуществами различных аппаратных средств процессора машинного зрения (VPU). Это специализированные чипы для эффективной работы нейронных сетей. Я купил
You must be registered for see links
пару лет назад для запуска более совершенных моделей CV на Raspberry Pi 3. Конечно, вы всегда можете найти компромисс между вычислительной мощностью и частотой смены кадров/разрешением.
Рекомендации
У OpenCV долгая история с огромным сообществом разработчиков, он занимал 4-е место среди всех проектов с открытым исходным кодом Machine Learning на момент проведения моего
You must be registered for see links
. Аналогичным образом, gstreamer — это еще один проект, который существует уже вечность. Intel OWT Analytics Agent идеально подходит для того, чтобы помочь этим сообществам добавить в свои проекты потоковый анализ в реальном времени через WebRTC. Они должны иметь возможность брать существующие модели GST и запускать их в потоковом режиме реального времени с помощью OWT.Если вы только начинаете экспериментировать с компьютерным зрением и хотите запускать модели на сервере OWT, то я рекомендую начать с более базовых туториалов OpenCV. Затем вы сможете дойти до
You must be registered for see links
. Они потребуют массу усилий, если вы только начинаете работать с OpenCV, но позже вам не составит труда изменение Analytics Agent для их запуска. Вы сможете оптимизировать стек для работы с вашей целевой платформой и использовать различные варианты аппаратного ускорения Intel для повышения производительности.



