НОВОСТИ [Перевод] Компьютерное зрение на WebRTC-сервере с аппаратным ускорением от Intel OWT

Bonnie
Оффлайн
Регистрация
12.04.17
Сообщения
19.095
Реакции
107
Репутация
0


WebRTC упростил (в большинстве своем) получение и отправку видеопотоков в реальном времени. А значит, можно немного поразвлекаться с ними при помощи машинного обучения. В прошлом месяце я показал, как запустить компьютерное зрение (Computer Vision – CV) . Как я уже упоминал, локально – это, конечно, хорошо, но иногда требуется более высокая производительность, и для этого нам понадобится удаленный сервер. В данном посте я расскажу о том, как запускать серверные модели OpenCV с аппаратным ускорением на чипсетах Intel с помощью Open WebRTC Toolkit (OWT) с открытым исходным кодом.
Я хотел поиграться с сервером OWT с тех пор, как Intel продемонстрировали функции компьютерного зрения на , и теперь мне посчастливилось поработать с их командой разработчиков для изучения возможностей сервера. Ниже я расскажу о том, как установить 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.
0eypzkg4suqoygg_xf0sustxsfm.png


Вы можете перейти на главную страницу OWT по ссылке:

Что делает медиасервер


OWT-медиасервер может выступать в качестве сервера многоточечной конференции (Multipoint control unit – MCU), где медиафайлы декодируются, обрабатываются и перекодируются перед отправкой обратно клиентам в дополнение к более типичному методу (SFU). OWT от Intel рассматривается как медиа-процессор реального времени с возможностями для следующего применения:
  • Многоточечные конференции оказались преобладающей архитектурой для WebRTC конференций, но MCU все еще необходимы в сценариях, где обработка клиентской стороны ограничена (например, на IoT устройстве), или в сочетании с одним из нижеприведенных пунктов.
  • Транскодирование – MCU помогают при транскодировании между различными кодеками, особенно при обработке видеокодеков с высокой интенсивностью.
  • Прямая трансляция – передача видеосигнала от не-WebRTC клиентов, использующих потоковые протоколы, такие как RTSP, RTMP, HLS, MPEG-DASH.
  • Запись – хранение потоков на диске в необходимых форматах.
  • SIP-gateway – преобразования WebRTC потоков и сигналов в форматы, которые могут использоваться более традиционными VoIP-сетями.
  • Аналитика – запуск машинного обучения на медиа (компьютерное зрение).

Сервер создан на node.js с MongoDB для базы данных и RabbitMQ в качестве посредника сообщений. Функции, перечисленные в списке выше, а также не включенные в список реализованы в виде различных Агентов, подключаемых к архитектуре OWT.
Кроме того, OWT имеет клиентский SDK для взаимодействия с медиасервером. Он также может быть использован в режиме P2P.

Ускорение


Архитектура была разработана для использования аппаратного обеспечения Intel. Сюда относятся большинство современных процессоров Intel и еще более ускоренные процессоры со встроенной графикой, (FPGAs) и специализированные процессоры машинного зрения Intel (Vision Processing Unit – VPU). (Вот проект, который я создал, применяя один из их чипов Movidius с Google Vision Kit).
zzngfhpuqfi_7kwmkztftwrcwsq.png


Аналитика и компьютерное зрение (CV)


Любой, кто серьезно работал с компьютерным зрением, сталкивался с . OpenCV изначально был проектом Intel и до сих пор остается таковым. У Intel есть набор инструментов, который они называют OpenVINO (Open Visual Inference and Neural Network Optimization) для оптимизации моделей глубокого обучения на своем оборудовании. Он является частью . OpenCV включает десятки предварительно обученных моделей, начиная от базового распознавания текста и заканчивая приложениями для самостоятельного вождения автомобиля.
OWT Analytics Agent – это модуль для получения предсказаний в реальном времени на моделях OpenVINO. Analystics Agent может отправлять выходные метаданные в облако, или вы сами можете направлять их обратно на медиасервер, чтобы делать, например, аннотации для видео в реальном времени (я покажу это немного позже). Широко известная библиотека используется для управления мультимедийным пайплайном.

Архитектура


2jywb2ihtjq5dv4ck9h05qqzjog.jpeg


Приведенная выше диаграмма взята из . Она выглядит сложной, но здесь нужно лишь запомнить, что Analytics Agent действует как еще один участник конференции, который может подписаться на видеоканал в этой конференции. После того, как он получит видеопоток, вы сможете направлять обработку потока на различные этапы с помощью пайплайна GStreamer. В большинстве случаев вы захотите выполнить получение предсказаний и классификацию, прежде чем возвращать видеопоток обратно в MCU, но вы также можете отправить поток и/или данные вывода куда-то еще.

Установка с помощью докера


Установка займет немного времени, так как вам нужно будет установить OWT сервер и Analytics Agent. К счастью, у них есть для упрощения установки. Если хотите, можете запустить OWT + Analytics Agent как 4 отдельных контейнера для распределенных сред. Я решил оставить все свои локально в одном контейнере, чтобы упростить оценку.
На самом деле Intel изначально дала мне образ gst-owt-all:run для работы, так как на момент написания моей статьи они занимались обновлением документации по установке Analytics Agent. Новый набор гораздо более понятен. Я все же рекомендую сначала ознакомиться со стандартной установкой OWT, чтобы понять компоненты и опции.
Кроме того, нужно много компилить с помощью gcc. Убедитесь, что у вас последняя версия, запуская следующую команду:
brew install gcc
Изначально у меня ничего не компилилось, но после запуска этой команды все заработало.
В конечном итоге я начал билдить все самостоятельно. Чтобы создать единственный OWT-сервер с Analytics, запустите следующую команду:

git clone

cd owt-server
git branch gst-analytics
cd /owt-server/docker/gst
curl -o l_openvino_toolkit_p_2019.3.334.tgz

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 и для их использования. Для прилагаемых примеров всё это включает в себя простой запуск команды сборщика в bash и копирование некоторых файлов.

Проверка работоспособности в macOS


Настройка портов докера


Опция docker --net=host не работает в macOS, поэтому для локального запуска вам нужно обязательно открыть соответствующие порты:
PortService

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. И изменить следующее:
qdn6nnrxidpop7m5zhdbx75ebi0.png


Далее вам нужно сообщить веб-порталу, чтобы браузер показывал «localhost» вместо внутреннего IP-моста докера (172.17.0.2):

vi /home/owt/portal/portal.toml

ixjqlyml39p2oujrnbl0txf25qq.png


Опять же, на других платформах вы сможете использовать конфигурацию по умолчанию, если вы запустите свой контейнер с параметром --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


Тест в браузере


Откройте :3004/ в браузере на локальной машине. Потребуется разрешить сертификат, так как у браузера будут с ним проблемы.
oe4roahxjkisfhxj4h7ugjtfhts.png


И кроме этого, вам нужно разрешить сервер websocket на localhost:8080. Вы можете сделать это, перейдя по ссылке « ». В качестве альтернативы вы также можете установить #allow-insecure-localhost в chrome://flags чтобы избежать проблем с флагами в Chrome.
cjvyrk4gcyds4f712iiej7sb_n8.png


Как только вы это сделаете, вернитесь на :3004/, и примите разрешение камеры. Тут же выберите свой идентификатор канала видео в раскрывающемся списке «video from» и нажмите «startAnalytics».
pvlb3l3e853bo0upee2gea44ln0.png


Наконец, перейдите к выпадающему списку «subsribe video», выберите длинную строку pipeline + video ID и нажмите subscribe:
fysaonxg1btumjzisuyixvsg_xm.png


На изображении, полученном с сервера, вы должны увидеть, что лицо распознается.
pcr_xehmfawc0du0o7pqsnqo4qm.png


Добавление моделей OpenCV


Analytics Agent содержит архитектуру . 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/.

Получение других моделей


Существует огромный набор моделей, размещенных под . В дополнение ко всем популярным , таким как 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 есть больше информации об этом .

Модели, добавленные в OWT Analytics Agent


Для их добавления необходимо клонировать репозиторий, а затем получить соответствующие модели с помощью инструмента . После этого вам необходимо убедиться, что ваш пайплайн содержит соответствующие элементы (классификация, обнаружение, идентификация) и настроить файл /home/owt/analytics_agent/plugin.cfg, применяя соответствующие параметры.

Тестирование плагина


Я попробовал несколько моделей распознавания лиц и эмоций.

Опорные точки лица


Так как я уже , то решил проверить модель . Эта модель обнаруживает 35 опорных точек лица.
elklsiar5t-oowpbrjzjvsejhra.gif


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

Распознавание эмоций


Это еще одна прикольная штука. использует сверточную сеть для распознавания нейтрального, счастливого, грустного, удивленного и яростного выражения.
blku1_a54hzp6sttdswp1q1two4.gif


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

Оптимизация ускорения


Чтобы воспользоваться возможностями аппаратного ускорения OWT, обязательно установите соответствующее устройство в /home/owt/analytics_agent/plugin.cfg – то есть напишите:

device = "MULTI:HDDL,GPU,CPU"

К сожалению, у меня не хватило времени, чтобы протестировать это, но в дополнение к CPU и GPU-ускорению вы также можете воспользоваться преимуществами различных аппаратных средств процессора машинного зрения (VPU). Это специализированные чипы для эффективной работы нейронных сетей. Я купил пару лет назад для запуска более совершенных моделей CV на Raspberry Pi 3.
Конечно, вы всегда можете найти компромисс между вычислительной мощностью и частотой смены кадров/разрешением.

Рекомендации


У OpenCV долгая история с огромным сообществом разработчиков, он занимал 4-е место среди всех проектов с открытым исходным кодом Machine Learning на момент проведения моего . Аналогичным образом, gstreamer — это еще один проект, который существует уже вечность. Intel OWT Analytics Agent идеально подходит для того, чтобы помочь этим сообществам добавить в свои проекты потоковый анализ в реальном времени через WebRTC. Они должны иметь возможность брать существующие модели GST и запускать их в потоковом режиме реального времени с помощью OWT.

Если вы только начинаете экспериментировать с компьютерным зрением и хотите запускать модели на сервере OWT, то я рекомендую начать с более базовых туториалов OpenCV. Затем вы сможете дойти до . Они потребуют массу усилий, если вы только начинаете работать с OpenCV, но позже вам не составит труда изменение Analytics Agent для их запуска. Вы сможете оптимизировать стек для работы с вашей целевой платформой и использовать различные варианты аппаратного ускорения Intel для повышения производительности.
 
Сверху Снизу