Аналитика видеотрансляций Azure в IoT Edge: вопросы и ответы

Примечание

Последнюю версию службы узнайте в статье Видеоанализатор Azure.

В этой статье приводятся ответы на часто задаваемые вопросы об Аналитике видеотрансляций в Azure IoT Edge.

Общие сведения

Какие системные переменные можно использовать в определении топологии графа?

Переменная Описание
System.DateTime Представляет момент времени в формате UTC, обычно выраженный как дата и время суток в следующем формате:
ггггММддTЧЧммссZ
System.PreciseDateTime Представляет экземпляр даты и времени в формате UTC согласно ISO8601 с указанием миллисекунд в следующем формате:
ггггММддTЧЧммсс.fffZ
System.GraphTopologyName Представляет топологию графа мультимедиа и содержит схему графа.
System.GraphInstanceName Представляет экземпляр графа мультимедиа, содержит значения параметров и ссылается на топологию.

Настройка и развертывание

Можно ли развернуть пограничный модуль мультимедиа на устройстве с Windows 10?

Да. Дополнительные сведения см. в статье Контейнеры Linux в Windows 10.

Запись с IP-камеры и параметры RTSP

Нужно ли использовать специальный пакет SDK на устройстве для отправки видеопотока?

Нет, Аналитика видеотрансляций в IoT Edge поддерживает запись мультимедиа с помощью протокола RTSP для потоковой передачи видео, который поддерживается большинством IP-камер.

Можно ли передавать мультимедиа в Аналитику видеотрансляций в IoT Edge с помощью протокола RTMP или Smooth Streaming (например, трансляция в Службах мультимедиа)?

Нет, Аналитика видеотрансляций поддерживает только протокол RTSP для записи видео с IP-камер. Подойдет любая камера, поддерживающая потоковую передачу RTSP через TCP/HTTP.

Можно ли сбросить или обновить URL-адрес источника RTSP в экземпляре графа?

Да, если экземпляр графа находится в неактивном состоянии.

Имеются ли симуляторы RTSP для использования во время тестирования и разработки?

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

Поддерживается ли обнаружение IP-камер на пограничном устройстве с помощью ONVIF?

Нет, мы не поддерживаем обнаружение пограничных устройств с помощью ONVIF.

Потоковая передача и воспроизведение

Можно ли воспроизвести ресурсы, записанные в Службы мультимедиа Azure на границе, используя такие технологии потоковой передачи, как HLS или DASH?

Да. Вы можете выполнять потоковую передачу записанных ресурсов так же, как любых других ресурсов в Службах мультимедиа Azure. Чтобы выполнить потоковую передачу содержимого, необходимо создать и запустить конечную точку потоковой передачи. При использовании стандартного процесса создания указателя потоковой передачи вы получите доступ к манифесту Apple HTTP Live Streaming (HLS) или Dynamic Adaptive Streaming over HTTP (DASH, также называется MPEG-DASH) для потоковой передачи на любую поддерживаемую платформу проигрывателя. Дополнительные сведения о создании и публикации манифестов HLS или DASH см. в разделе Динамическая упаковка.

Можно ли использовать стандартные функции защиты содержимого и DRM для Служб мультимедиа в архивированном ресурсе?

Да. Все стандартные функции защиты содержимого динамическим шифрованием и управления цифровыми правами (DRM) доступны для использования в ресурсах, записанных в графе мультимедиа.

Какие проигрыватели можно использовать для просмотра содержимого из записанных ресурсов?

Можно использовать любые стандартные проигрыватели, поддерживающие совместимые версии HLS 3 или 4. Кроме того, можно использовать проигрыватели, поддерживающие воспроизведение по стандарту MPEG-DASH.

Рекомендуемые проигрыватели для тестирования:

Каковы ограничения на потоковую передачу ресурса графа мультимедиа?

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

Вы можете доставлять содержимое с помощью Apple HLS или MPEG-DASH.

Проектирование модели ИИ

У меня есть несколько моделей ИИ в контейнере Docker. Как использовать их с Аналитикой видеотрансляций?

Решение зависит от протокола связи, который используется сервером вывода для обмена данными с Аналитикой видеотрансляций. В следующих разделах описывается, как работает каждый протокол.

Использование протокола HTTP:

  • Один контейнер (одно lvaExtension):

    На сервере вывода можно использовать один порт, но разные конечные точки для различных моделей ИИ. Например, для примера на Python можно использовать разные route для каждой модели, как показано ниже.

    @app.route('/score/face_detection', methods=['POST']) 
    … 
    Your code specific to face detection model… 
    
    @app.route('/score/vehicle_detection', methods=['POST']) 
    … 
    Your code specific to vehicle detection model 
    … 
    

    Затем в развертывании Аналитики видеотрансляций при создании экземпляра графов задайте URL-адрес сервера вывода для каждого экземпляра, как показано ниже.

    Первый экземпляр: URL-адрес сервера вывода = http://lvaExtension:44000/score/face_detection
    Второй экземпляр: URL-адрес сервера вывода = http://lvaExtension:44000/score/vehicle_detection

    Примечание

    Кроме того, вы можете предоставлять модели ИИ через разные порты и вызывать их при создании экземпляров графов.

  • Несколько контейнеров:

    Каждый контейнер развертывается со своим именем. Ранее в наборе документации по Аналитике видеотрансляций мы показали, как развернуть расширение с именем lvaExtension. Теперь можно разработать два разных контейнера с одним и тем же интерфейсом HTTP, то есть у них будет одна и та же конечная точка /score. Разверните эти два контейнера с разными именами и убедитесь в том, что они ожидают передачи данных на разных портах.

    Например, один контейнер с именем lvaExtension1 ожидает передачи данных через порт 44000, а второй с именем lvaExtension2 — через порт 44001.

    В топологии Аналитики видеотрансляций необходимо создать два экземпляра графа с разными URL-адресами вывода, как показано ниже.

    Первый экземпляр: URL-адрес сервера вывода = http://lvaExtension1:44001/score
    Второй экземпляр: URL-адрес сервера вывода = http://lvaExtension2:44001/score

Использование протокола gRPC:

  • Если используется модуль Аналитики видеотрансляций версии 1.0, то при использовании протокола общего назначения удаленного вызова процедур (gRPC) сервер gRPC должен предоставлять различные модели ИИ через разные порты. В этом примере кода один порт, 44000, предоставляет доступ ко всем моделям yolo. В теории сервер gRPC yolo можно переписать, чтобы предоставлять некоторые модели через порт 44000, а другие — через порт 45000.

  • При использовании модуля Аналитики видеотрансляций 2.0 в узел расширения gRPC добавляется новое свойство. Это свойство, extensionConfiguration, является необязательной строкой, которую можно использовать в рамках контракта gRPC. При наличии нескольких моделей ИИ на одном сервере вывода не нужно предоставлять узел для каждой из них. Вместо этого вы, как поставщик расширений, можете определить для экземпляра графа способ выбора моделей ИИ с помощью свойства extensionConfiguration. Во время выполнения Аналитика видеотрансляций передаст эту строку серверу вывода, который может использовать ее для вызова требуемой модели ИИ.

Я создаю сервер gRPC на основе модели ИИ и хочу, чтобы он мог использоваться несколькими камерами или экземплярами графа. Как этого добиться?

Во-первых, сделайте так, чтобы сервер мог обрабатывать одновременно несколько запросов или работать в параллельных потоках.

Например, в следующем примере gRPC для Аналитики видеотрансляций задано число параллельных каналов по умолчанию:

server = grpc.server(futures.ThreadPoolExecutor(max_workers=3)) 

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

Предыдущая реализация сервера gRPC используется в примерах для Python. Разработчик может реализовать собственный сервер или использовать предыдущую реализацию по умолчанию, чтобы увеличить число рабочих процессов до числа камер, используемых для видеоканалов.

Чтобы настроить и использовать несколько камер, можно создать несколько экземпляров топологии графов, которые указывают на один и тот же или разные серверы вывода (например, сервер, упомянутый в предыдущем абзаце).

Мне нужно получить несколько кадров из восходящего потока, прежде чем принять решение о выводе. Как этого добиться?

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

Использование протокола HTTP:

Для сохранения состояния каждый вызывающий объект, или экземпляр топологии графа, вызывает сервер с использованием параметра HTTP-запроса, уникального для этого объекта. Например, вот URL-адреса сервера вывода для каждого экземпляра:

Экземпляр первой топологии = http://lvaExtension:44000/score?id=1
Экземпляр второй топологии = http://lvaExtension:44000/score?id=2

На стороне сервера маршрут оценки знает вызывающий объект. Если ID = 1, он может хранить состояние отдельно для этого вызывающего объекта или экземпляра топологии графа. Затем он может сохранить полученные видеокадры в буфере. Например, можно использовать массив или словарь с ключом DateTime и кадром в качестве значения. В этом случае можно определить сервер для обработки (вывода) после получения x кадров.

Использование протокола gRPC:

При использовании расширения gRPC каждый сеанс предназначен для одного канала камеры, поэтому нет необходимости указывать идентификатор. С помощью свойства extensionConfiguration можно сохранять видеокадры в буфере и определять сервер для обработки (вывода) после получения x кадров.

Во всех ли потоках ProcessMediaStreams в определенном контейнере выполняется одна и та же модель ИИ?

Нет. Сеанс определяется началом или завершением вызовов от конечного пользователя в экземпляре графа. Возможно также отключение или переподключение камеры. Цель состоит в том, чтобы сеанс длился, пока с камеры передается видео в потоковом режиме.

  • Две камеры, отправляющие видео для обработки, создают два сеанса.
  • Если одна камера передает данные в граф с двумя узлами расширения gRPC, также создается два сеанса.

Каждый сеанс представляет собой полнодуплексное соединение между Аналитикой видеотрансляций и сервером gRPC, и у каждого сеанса может быть своя модель или конвейер.

Примечание

В случае отключения или повторного подключения камеры, когда камера отключена в течение периода, превышающего допустимые пределы, Аналитика видеотрансляций открывает новый сеанс связи с сервером gRPC. От сервера не требуется отслеживать состояние между сеансами.

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

Примечание

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

Сколько потоков ProcessMediaStreams может выполняться одновременно?

Аналитика видеотрансляций не ограничивает это число.

Как определить, должен ли сервер вывода использовать ЦП, GPU или другой аппаратный ускоритель?

Решение зависит от сложности разрабатываемой модели ИИ и от того, как вы хотите использовать ЦП и аппаратные ускорители. При разработке модели ИИ можно указать, какие ресурсы она должна использовать и какие действия должна выполнять.

Как сохранять изображения с ограничивающими прямоугольниками после обработки?

Сейчас мы предоставляем координаты ограничивающего прямоугольника только в сообщениях вывода. Вы можете создать пользовательский поток MJPEG, который сможет на основе этих сообщений наложить ограничивающие прямоугольники на видеокадры.

Совместимость с gRPC

Как определить обязательные поля для дескриптора потока мультимедиа?

Любому полю, для которого не задано значение, присваивается значение по умолчанию, определяемое gRPC.

Аналитика видеотрансляций использует версию proto3 языка буфера протокола. Все данные буфера протокола, используемые контрактами Аналитики видеотрансляций, доступны в файлах буфера протокола.

Как проверить, используются ли последние файлы буфера протокола?

Последние файлы буфера протокола можно получить на сайте с файлами контракта. При обновлении файлов контракта они публикуются здесь же. Определенного плана обновления файлов протокола нет, поэтому версию можно определить по имени пакета, указываемому перед файлами. Должно быть:

microsoft.azure.media.live_video_analytics.extensibility.grpc.v1 

При каждом обновлении этих файлов увеличивается значение после буквы "v" в конце имени.

Примечание

Так как Аналитика видеотрансляций использует версию proto3 языка, поля являются необязательными, а версии обладают прямой и обратной совместимостью.

Какие функции gRPC можно использовать с Аналитикой видеотрансляций? Какие функции являются обязательными, а какие нет?

Вы можете использовать любые серверные функции gRPC при условии, что выполняется контракт буферов протокола (Protobuf).

Мониторинг и метрики

Можно ли отслеживать граф мультимедиа на периферии с помощью Сетки событий Azure?

Да. Вы можете получать метрики Prometheus и публиковать их в сетке событий.

Можно ли использовать Azure Monitor для просмотра состояния работоспособности, метрик и данных производительности графов мультимедиа в облаке или на периферии?

Да, такой подход поддерживается. Дополнительные сведения см. в статье Обзор метрик в Microsoft Azure.

Есть ли средства, облегчающие мониторинг модуля Служб мультимедиа в IoT Edge?

Visual Studio Code поддерживает расширение Azure IoT Tools, с помощью которого можно легко отслеживать конечные точки модуля LVAEdge. С помощью этого средства можно быстро начать наблюдение за событиями во встроенной конечной точке центра Интернета вещей и просматривать сообщения о выводе, направляемые с пограничного устройства в облако.

Кроме того, это расширение можно использовать для изменения параметров графа мультимедиа для двойника модуля LVAEdge.

Дополнительные сведения см. в статье Мониторинг и ведение журнала.

Выставление счетов и доступность

Как выставляются счета за использование Аналитики видеотрансляций в IoT Edge?

Сведения о выставлении счетов см. на странице цен на Службы мультимедиа.

Дальнейшие шаги

Краткое руководство. Начало работы с Аналитикой видеотрансляций в IoT Edge