Часто задаваемые вопросы по Видеоанализатору

В этой статье приводятся ответы на часто задаваемые вопросы о Видеоанализаторе Azure.

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

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

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

Примечание

System.Runtime.DateTime и System.Runtime.PreciseDateTime нельзя использовать как часть имени видеоресурса Видеоанализатора Azure в узле приемника видеоданных. Эти переменные можно использовать в узле прием файлов для именования файла.

В чем заключается политика конфиденциальности Видеоанализатора?

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

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

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

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

Я использую виртуальную машину в качестве моделируемого пограничного устройства. Можно ли изменить размер конфигурации виртуальной машины после развертывания?

Да, можно масштабировать виртуальную машину до нужного размера после развертывания на нем таких модулей, как Видеоанализатор. Возможно, потребуется перезапустить среду выполнения IoT Edge на виртуальной машине. Для виртуальной машины Linux используйте команду sudo systemctl restart iotedge. Если запущены динамические конвейеры, они должны возобновить работу после завершения перезагрузки. В выходных данных конвейера будут отображаться прерывания (например, события вывода, запись видео) во время перезапуска.

Как добавить образцы видеофайлов в модуль симулятора камеры RTSP на устройстве IoT Edge?

Если вы использовали краткое руководство или учебник по установке симулятора камеры, добавьте новый видеофайл:

Примеры файлов мультимедиа, доступные для тестирования, можно найти в наборах данных мультимедиа.

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

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

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

Можно ли отправлять мультимедиа в Видеоанализатор по протоколам, отличным от RTSP?

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

Можно ли сбросить или обновить URL-адрес источника RTSP в динамическом конвейере?

Да, если динамический конвейер находится в неактивном состоянии.

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

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

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

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

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

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

  • Один контейнер (модуль avaextension):

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

    @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://avaextension:44000/score/face_detection
    Второй динамический конвейер: URL-адрес сервера вывода — http://avaextension:44000/score/vehicle_detection

    Примечание

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

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

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

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

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

    Первый динамический конвейер: URL-адрес сервера вывода — http://avaextension1:44000/score
    Второй динамический конвейер: URL-адрес сервера вывода — http://avaextension2:44001/score

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

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

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

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

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

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

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

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

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

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

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

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

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

Первый динамический конвейер: http://avaextension:44000/score?id=1
Второй динамический конвейер: http://avaextension:44000/score?id=2

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

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

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

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

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

  • Если две камеры отправляют видео на обработку (в два отдельных динамических конвейера), значит, создается два сеанса.
  • Если одна камера передает данные в динамический конвейер с двумя узлами расширения gRPC, также создается два сеанса.

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

Примечание

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

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

Примечание

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

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

Видеоанализатор не ограничивает это число.

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

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

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

Вы можете записать результаты вывода вместе с мультимедиа в видеоресурс. Вы можете воспроизвести видео с наложением данных вывода с помощью мини-приложения.

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

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

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

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

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

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

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

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

Примечание

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

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

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

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

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

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

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

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

Есть ли какие-нибудь средства, облегчающие мониторинг пограничного модуля Видеоанализатора?

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

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

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

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

Как выставляются счета за использование Видеоанализатора?

Сведения о выставлении счетов см. на странице Цены на Видеоанализатор.