Операции пространственного анализа
Внимание
30 марта 2025 г. пространственный анализ визуального распознавания Azure будет прекращен. Перейдите в индексатор видео Azure AI или другое решение с открытым кодом до указанной даты. Мы рекомендуем вам сделать этот переход быстрее, чтобы получить более широкие преимущества Индексатора видео Azure. Помимо знакомых функций, которые вы используете, вы можете быстро сравнить пространственный анализ визуального распознавания ИИ Azure и Индексатор видео Azure.
Функция | Пространственный анализ визуального распознавания искусственного интеллекта Azure | Индексатор видео ИИ Azure |
---|---|---|
Поддержка пограничных вычислений | Да | Да |
Обнаружение объектов | Только обнаружение людей и автомобилей | Обнаруживает 1000+ объектов |
Обработка звука и речи | Не поддерживается | Поддерживается (включает транскрибирование речи, перевод и сводку) Поддерживается >(включает транскрибирование речи и анализ тональности) |
Обнаружение событий и отслеживание | Поддерживается (отслеживание людей и транспортных средств, обнаружение событий) | Пока не поддерживается в Edge. Частично поддерживается в облаке. |
Поддержка Azure Arc | Не поддерживается | Встроенная поддержка |
Приоритетная область | Визуальный анализ с помощью специализированного отслеживания | Комплексный анализ аудио- и визуального содержимого |
С 30 марта 2025 г. вы можете продолжать использовать пространственный анализ визуального распознавания ИИ Azure или перейти в Индексатор видео Azure AI до указанной даты. После 30 марта 2025 г. контейнер пространственного анализа больше не будет поддерживаться и перестанет обрабатывать новые потоки.
Пространственный анализ позволяет в режиме реального времени анализировать видеопотоки с камеры. Для каждой настроенной камеры операции пространственного анализа будут создавать поток вывода сообщений JSON, отправленных в ваш экземпляр Центра Интернета вещей Azure.
Контейнер пространственного анализа реализует следующие операции. Эти операции можно настроить в манифесте развертывания контейнера.
Идентификатор-операции | Description |
---|---|
cognitiveservices.vision.spatialanalysis-personcount |
Подсчитывает количество людей в указанной зоне в поле зрения камеры. Зона должна полностью покрыта одной камерой, чтобы функция PersonCount записала точные данные. Создает начальное событие personCountEvent, а затем событие personCountEvent происходит при изменении счета. |
cognitiveservices.vision.spatialanalysis-personcrossingline |
Отслеживает, когда человек пересекает определенную линию в поле зрения камеры. Создает событие personLineEvent, когда человек пересекает линию, и предоставляет сведения о направлении. |
cognitiveservices.vision.spatialanalysis-personcrossingpolygon |
Выдает событие personZoneEnterExitEvent, когда человек входит в установленную зону или выходит из нее, и предоставляет информацию о направлении с указанием стороны зоны, которая была пересечена. Создает personZoneDwellTimeEvent, когда человек выходит из зоны и предоставляет сведения о направлении, а также число миллисекунд, проведенных человеком в зоне. |
cognitiveservices.vision.spatialanalysis-persondistance |
Отслеживает, когда люди нарушают правило минимальной дистанции. Периодически создает personDistanceEvent с расположением каждого нарушения дистанции. |
cognitiveservices.vision.spatialanalysis |
Универсальная операция, которую можно использовать для выполнения всех сценариев, упомянутых выше. Этот параметр полезнее, если нужно запустить несколько сценариев на одной камере или более эффективно использовать системные ресурсы (например, графический процессор). |
Все перечисленные выше операции также доступны в версии .debug
службы (например, cognitiveservices.vision.spatialanalysis-personcount.debug
). Отладка позволяет визуализировать видеокадры по мере их обработки. Необходимо запустить xhost +
на главном компьютере, чтобы обеспечить визуализацию кадров и событий видео.
Внимание
Модели искусственного интеллекта ИИ Azure ИИ определяют и находят присутствие человека в видеоматериалах и выводя ограничивающий прямоугольник вокруг человеческого тела. Модели ИИ не выполняют обнаружение лиц, личности или демографических данных.
параметры операции;
Следующие параметры необходимы для каждой из операций пространственного анализа.
параметры операции; | Description |
---|---|
Operation ID |
Идентификатор операции из таблицы выше. |
enabled |
Логическое значение: true или false |
VIDEO_URL |
URL-адрес RTSP для устройства камеры (пример: rtsp://username:password@url ). Пространственный анализ поддерживает поток в кодировке H.264 либо через протоколы RTSP, HTTP, либо MP4. Video_URL можно указать в виде скрытого строкового значения base64 с помощью шифрования AES, а если URL-адрес видео замаскирован, то KEY_ENV и IV_ENV должны быть предоставлены как переменные среды. Пример служебной программы для создания ключей и шифрования можно найти здесь. |
VIDEO_SOURCE_ID |
Понятное имя для устройства камеры или видеопотока. Он будет возвращен выходными данными события JSON. |
VIDEO_IS_LIVE |
True для устройств камеры; значение false для записанных видео. |
VIDEO_DECODE_GPU_INDEX |
Графический процессор для декодирования кадра видео. Значение по умолчанию — 0. Должно совпадать с именем gpu_index в другой конфигурации узла, например DETECTOR_NODE_CONFIG и CAMERACALIBRATOR_NODE_CONFIG . |
INPUT_VIDEO_WIDTH |
Ширина кадра входного видео или потока (например, 1920). Это необязательное поле. Если оно указано, кадр будет масштабироваться по этому измерению с сохранением пропорций. |
DETECTOR_NODE_CONFIG |
JSON, указывающий GPU для запуска узла детектора. Он должен иметь следующий формат: "{ \"gpu_index\": 0 }", . |
TRACKER_NODE_CONFIG |
JSON, указывающий, следует ли вычислять скорость в узле трекера или нет. Он должен иметь следующий формат: "{ \"enable_speed\": true }", . |
CAMERA_CONFIG |
JSON с указанием параметров откалиброванной камеры для нескольких камер. Если используемый навык требует калибровки и у вас уже есть параметры камеры, вы можете использовать эту конфигурацию, чтобы предоставить их напрямую. Конфигурация должна быть в следующем формате: "{ \"cameras\": [{\"source_id\": \"endcomputer.0.persondistancegraph.detector+end_computer1\", \"camera_height\": 13.105561256408691, \"camera_focal_length\": 297.60003662109375, \"camera_tiltup_angle\": 0.9738943576812744}] }" , source_id используется для идентификации каждой камеры. Требуемый формат можно получить из source_info опубликованного нами мероприятия. Это вступит в силу только при использовании do_calibration=false в DETECTOR_NODE_CONFIG . |
CAMERACALIBRATOR_NODE_CONFIG |
Код JSON, указывающий графический процессор, на котором выполняется узел калибратора камеры, и следует ли использовать калибровку. Он должен иметь следующий формат: "{ \"gpu_index\": 0, \"do_calibration\": true, \"enable_orientation\": true}", . |
CALIBRATION_CONFIG |
Код JSON, указывающий параметры для управления калибровкой камеры. Он должен иметь следующий формат: "{\"enable_recalibration\": true, \"quality_check_frequency_seconds\": 86400}", . |
SPACEANALYTICS_CONFIG |
Конфигурация JSON для зоны и строки, как описано ниже. |
ENABLE_FACE_MASK_CLASSIFIER |
True чтобы включить обнаружение в видеопотоке людей, с масками на лице, False чтобы отключить. По умолчанию эта функция отключена. Для обнаружения маски требуется, чтобы параметр ввода ширины видео был 1920 "INPUT_VIDEO_WIDTH": 1920 . Атрибут маски не будет возвращен, если обнаружено, что люди не обращены лицом к камере или находятся слишком далеко от нее. Дополнительные сведения см. в разделе Размещение камеры. |
STATIONARY_TARGET_REMOVER_CONFIG |
Код JSON, указывающий параметры для удаления стационарного целевого объекта, что добавляет возможность изучения и пропуска ложноположительного определения целевых объектов, которые долгое время пребывают в стационарном положении, таких как манекены или люди на фотографиях. Требуемый формат конфигурации: "{\"enable\": true, \"bbox_dist_threshold-in_pixels\": 5, \"buffer_length_in_seconds\": 3600, \"filter_ratio\": 0.2 }" . |
Настройки параметров узла детекторов
Ниже приведен пример параметров DETECTOR_NODE_CONFIG
для всех операций пространственного анализа.
{
"gpu_index": 0,
"enable_breakpad": false
}
Имя. | Тип | Описание: |
---|---|---|
gpu_index |
строка | Индекс GPU, в котором будет выполняться эта операция. |
enable_breakpad |
bool | Указывает, хотите ли вы включить панель прерывания, которая используется для создания аварийного дампа для отладки. По умолчанию это false . Если задано значение true , необходимо также добавить "CapAdd": ["SYS_PTRACE"] в HostConfig часть контейнера createOptions . По умолчанию аварийный дамп загружается в AppCenter- приложение RealTimePersonTracking. Если вы хотите, чтобы аварийные дампы загрузились в собственное приложение AppCenter, можно переопределить переменную среды RTPT_APPCENTER_APP_SECRET с помощью секрета вашего приложения. |
Настройки параметров узла калибровки камеры
Ниже приведен пример параметров CAMERACALIBRATOR_NODE_CONFIG
для всех операций пространственного анализа.
{
"gpu_index": 0,
"do_calibration": true,
"enable_breakpad": false,
"enable_orientation": true
}
Имя. | Тип | Описание: |
---|---|---|
do_calibration |
строка | Указывает, что калибровка включена. do_calibration для правильной работы cognitiveservices.vision.spatialanalysis-persondistance должен иметь значение true. Для do_calibration по умолчанию установлено значение True . |
enable_breakpad |
bool | Указывает, хотите ли вы включить панель прерывания, которая используется для создания аварийного дампа для отладки. По умолчанию это false . Если задано значение true , необходимо также добавить "CapAdd": ["SYS_PTRACE"] в HostConfig часть контейнера createOptions . По умолчанию аварийный дамп загружается в AppCenter- приложение RealTimePersonTracking. Если вы хотите, чтобы аварийные дампы загрузились в собственное приложение AppCenter, можно переопределить переменную среды RTPT_APPCENTER_APP_SECRET с помощью секрета вашего приложения. |
enable_orientation |
bool | Указывает, хотите ли вы вычислить ориентацию обнаруженных людей или нет. Для enable_orientation по умолчанию установлено значение True . |
Конфигурация калибровки
Здесь приведен пример параметров CALIBRATION_CONFIG
для всех операций пространственного анализа.
{
"enable_recalibration": true,
"calibration_quality_check_frequency_seconds": 86400,
"calibration_quality_check_sample_collect_frequency_seconds": 300,
"calibration_quality_check_one_round_sample_collect_num": 10,
"calibration_quality_check_queue_max_size": 1000,
"calibration_event_frequency_seconds": -1
}
Имя. | Тип | Описание |
---|---|---|
enable_recalibration |
bool | Указывает, включена ли автоматическая перекалибровка. По умолчанию — true . |
calibration_quality_check_frequency_seconds |
INT | Минимальное число секунд между проверками качества, чтобы определить, требуется ли перекалибровка. Значение по умолчанию — 86400 24 часа. Используется, только если enable_recalibration=True . |
calibration_quality_check_sample_collect_frequency_seconds |
INT | Минимальное число секунд между сбором новых образцов данных для перекалибровки и проверки качества. По умолчанию используется значение 300 (5 минут). Используется, только если enable_recalibration=True . |
calibration_quality_check_one_round_sample_collect_num |
INT | Минимальное количество новых выборок данных для сбора по циклу выборки коллекции. По умолчанию — 10 . Используется, только если enable_recalibration=True . |
calibration_quality_check_queue_max_size |
INT | Максимальное число выборок данных для хранения при калибровке модели камеры. По умолчанию — 1000 . Используется, только если enable_recalibration=True . |
calibration_event_frequency_seconds |
INT | Частота вывода (секунды) событий калибровки камеры. Значение -1 указывает, что события калибровки камеры не следует отправлять, если сведения о ее калибровке были изменены. По умолчанию — -1 . |
Выходные данные калибровки камеры
Ниже приведен пример выходных данных калибровки камеры, если они включены. Многоточие указывает, что в списке есть больше объектов того же типа.
{
"type": "cameraCalibrationEvent",
"sourceInfo": {
"id": "camera1",
"timestamp": "2021-04-20T21:15:59.100Z",
"width": 512,
"height": 288,
"frameId": 531,
"cameraCalibrationInfo": {
"status": "Calibrated",
"cameraHeight": 13.294151306152344,
"focalLength": 372.0000305175781,
"tiltupAngle": 0.9581864476203918,
"lastCalibratedTime": "2021-04-20T21:15:59.058"
}
},
"zonePlacementInfo": {
"optimalZoneRegion": {
"type": "POLYGON",
"points": [
{
"x": 0.8403755868544601,
"y": 0.5515320334261838
},
{
"x": 0.15805946791862285,
"y": 0.5487465181058496
}
],
"name": "optimal_zone_region"
},
"fairZoneRegion": {
"type": "POLYGON",
"points": [
{
"x": 0.7871674491392802,
"y": 0.7437325905292479
},
{
"x": 0.22065727699530516,
"y": 0.7325905292479109
}
],
"name": "fair_zone_region"
},
"uniformlySpacedPersonBoundingBoxes": [
{
"type": "RECTANGLE",
"points": [
{
"x": 0.0297339593114241,
"y": 0.0807799442896936
},
{
"x": 0.10015649452269171,
"y": 0.2757660167130919
}
]
}
],
"personBoundingBoxGroundPoints": [
{
"x": -22.944068908691406,
"y": 31.487680435180664
}
]
}
}
Дополнительные сведения о source_info
см. в разделе Выходные данные операций пространственного анализа.
Имя поля ZonePlacementInfo | Тип | Описание |
---|---|---|
optimalZonePolygon |
объект | Многоугольник в изображении камеры, в который для получения оптимальных результатов можно поместить линии или зоны. Каждая пара значений представляет x, y для вершин многоугольника. Многоугольник представляет области, в которых проводятся или учитываются люди, а точки многоугольников основаны на нормализованных координатах (0–1), где левый верхний угол — (0,0, 0,0), а правый нижний угол — (1,0, 1,0). |
fairZonePolygon |
объект | Многоугольник в изображении камеры, в который для получения хороших, однако, возможно, неоптимальных результатов можно поместить линии или зоны. См. элемент optimalZonePolygon выше, чтобы получить подробные сведения о содержимом. |
uniformlySpacedPersonBoundingBoxes |
список | Список прямоугольников ,ограничивающих людей, в изображении камеры, равномерно распределенных в реальном пространстве. Значения основаны на нормализованных координатах (0–1). |
personBoundingBoxGroundPoints |
список | Список координат на плоскости пола относительно камеры. Каждая координата соответствует правому нижнему краю ограничивающего прямоугольника в uniformlySpacedPersonBoundingBoxes с тем же индексом. Ознакомьтесь с полями centerGroundPointX/centerGroundPointY в разделе Формат JSON для cognitiveservices.vision.spatialanalysis-persondistance Аналитики ИИ, чтобы узнать, как рассчитываются координаты на плоскости пола. |
Пример вывода сведений о размещении зоны, визуализируемых в видеокадре:
Сведения о размещении в зонах содержат рекомендации для ваших конфигураций. Однако для получения оптимальных результатов рекомендуется соблюдать рекомендации раздела Конфигурация камеры.
Настройки параметров узла трекера
Вы можете настроить вычисление скорости через настройки параметров узла трекера.
{
"enable_speed": true,
"remove_stationary_objects": true,
"stationary_objects_dist_threshold_in_pixels": 5,
"stationary_objects_buffer_length_in_seconds": 3600,
"stationary_objects_filter_ratio": 0.2
}
Имя. | Тип | Описание |
---|---|---|
enable_speed |
bool | Указывает, хотите ли вы вычислить скорость для обнаруженных людей или нет. Для enable_speed по умолчанию установлено значение True . Настоятельно рекомендуется, чтобы скорость и ориентация имели наилучшие расчетные значения. |
remove_stationary_objects |
bool | Указывает, нужно ли удалять стационарные объекты. Для remove_stationary_objects по умолчанию установлено значение true. |
stationary_objects_dist_threshold_in_pixels |
INT | Пороговое значение расстояния окружения, на основании которого принимается решение о том, могут ли два окна обнаружения рассматриваться как одно. Для stationary_objects_dist_threshold_in_pixels по умолчанию установлено значение 5. |
stationary_objects_buffer_length_in_seconds |
INT | Минимальное время в секундах, на которое система возвращается, чтобы определить, является ли целевой объект стационарным. Для stationary_objects_buffer_length_in_seconds по умолчанию установлено значение 3600. |
stationary_objects_filter_ratio |
с плавающей запятой | Если целевой объект многократно обнаруживается в одном и том же расположении (определяется в stationary_objects_dist_threshold_in_pixels ) дольше, чем задано значением stationary_objects_filter_ratio (0,2 означает 20 %) интервала времени stationary_objects_buffer_length_in_seconds , он будет рассматриваться как стационарный целевой объект. Для stationary_objects_filter_ratio по умолчанию установлено значение 0.2. |
Настройка и выходные данные пространственных операций анализа
Конфигурация зоны для personcount
Ниже приведен пример входного JSON-файла для параметра SPACEANALYTICS_CONFIG, который настраивает зону. Для этой операции можно настроить несколько зон.
{
"zones": [
{
"name": "lobbycamera",
"polygon": [[0.3,0.3], [0.3,0.9], [0.6,0.9], [0.6,0.3], [0.3,0.3]],
"events": [
{
"type": "count",
"config": {
"trigger": "event",
"focus": "footprint"
}
}
]
}
]
}
Имя. | Тип | Description |
---|---|---|
zones |
список | Список зон. |
name |
строка | Понятное имя для этой зоны. |
polygon |
список | Каждая пара значений представляет x, y для вершин многоугольника. Многоугольник представляет области, в которых выполняется трассировка или подсчет людей. Точки многоугольников основаны на нормализованных координатах (0–1), где левый верхний угол — (0,0, 0,0), а правый нижний угол — (1,0, 1,0). |
threshold |
с плавающей запятой | События передаются, если человек больше этого количества пикселей в зоне. Это необязательное поле и значение в соотношении (0–1). Например, значение 0,0253 будет 13 пикселей на видео с шириной изображения = 512 (0,0253 X 512 = ~13). |
type |
строка | Для cognitiveservices.vision.spatialanalysis-personcount это будет count . |
trigger |
строка | Тип триггера для отправки события. Поддерживаемые значения — event для отправки событий при периодическом изменении счета или interval для периодической отправки событий независимо от того, изменился ли счет. |
output_frequency |
INT | Скорость, с которой выходят события. Если output_frequency = X, каждое событие x — выход, например, output_frequency = 2 означает, что каждое другое событие является выходным. output_frequency Применяется к event и interval . |
focus |
строка | Положение точки в прямоугольнике, ограничивающем человека, используемое для вычисления событий. Значение фокуса может быть footprint (занимаемое лицом), bottom_center (нижний центр прямоугольника, ограничивающего человека) center (центр прямоугольника, ограничивающего человека). |
Конфигурация линии для personcrossingline
Ниже приведен пример входного JSON-файла для параметра SPACEANALYTICS_CONFIG
, который настраивает линию. Для этой операции можно настроить несколько пересекаемых линий.
{
"lines": [
{
"name": "doorcamera",
"line": {
"start": {
"x": 0,
"y": 0.5
},
"end": {
"x": 1,
"y": 0.5
}
},
"events": [
{
"type": "linecrossing",
"config": {
"trigger": "event",
"focus": "footprint"
}
}
]
}
]
}
Имя. | Тип | Description |
---|---|---|
lines |
список | Список линий. |
name |
строка | Понятное имя для этой линии. |
line |
список | Определение линии. Это направленная линия, позволяющая понять "вход" и "выход". |
start |
Пара "значение" | координаты x, y для начальной точки линии. Значения с плавающей запятой представляют собой расположение вершины относительно левого верхнего угла. Чтобы вычислить абсолютные значения x, y, необходимо умножить эти значения на размер кадра. |
end |
Пара "значение" | координаты x, y для конечной точки линии. Значения с плавающей запятой представляют собой расположение вершины относительно левого верхнего угла. Чтобы вычислить абсолютные значения x, y, необходимо умножить эти значения на размер кадра. |
threshold |
с плавающей запятой | События передаются, если человек больше этого количества пикселей в зоне. Это необязательное поле и значение в соотношении (0–1). Например, значение 0,0253 будет 13 пикселей на видео с шириной изображения = 512 (0,0253 X 512 = ~13). |
type |
строка | Для cognitiveservices.vision.spatialanalysis-personcrossingline это будет linecrossing . |
trigger |
строка | Тип триггера для отправки события. Поддерживаемые значения: "Event": срабатывают, когда кто-то пересекает линию. |
focus |
строка | Положение точки в прямоугольнике, ограничивающем человека, используемое для вычисления событий. Значение фокуса может быть footprint (занимаемое лицом), bottom_center (нижний центр прямоугольника, ограничивающего человека) center (центр прямоугольника, ограничивающего человека). Значение по умолчанию — footprint. |
Конфигурация зоны для personcrossingpolygon
Это пример входного JSON-файла для параметра SPACEANALYTICS_CONFIG
, который настраивает зону. Для этой операции можно настроить несколько зон.
{
"zones":[
{
"name": "queuecamera",
"polygon": [[0.3,0.3], [0.3,0.9], [0.6,0.9], [0.6,0.3], [0.3,0.3]],
"events":[{
"type": "zonecrossing",
"config":{
"trigger": "event",
"focus": "footprint"
}
}]
},
{
"name": "queuecamera1",
"polygon": [[0.3,0.3], [0.3,0.9], [0.6,0.9], [0.6,0.3], [0.3,0.3]],
"events":[{
"type": "zonedwelltime",
"config":{
"trigger": "event",
"focus": "footprint"
}
}]
}]
}
Имя. | Тип | Description |
---|---|---|
zones |
список | Список зон. |
name |
строка | Понятное имя для этой зоны. |
polygon |
список | Каждая пара значений представляет x, y для вершин многоугольника. Многоугольник представляет области, в которых выполняется трассировка или подсчет людей. Значения с плавающей запятой представляют собой расположение вершины относительно левого верхнего угла. Чтобы вычислить абсолютные значения x, y, необходимо умножить эти значения на размер кадра. |
target_side |
INT | Задает сторону зоны, определяемую параметром polygon , чтобы измерить, как долго люди смотрят на эту сторону, находясь в зоне. Значение 'dwellTimeForTargetSide' выведет это расчетное время. Каждая сторона — это пронумерованный край между двумя вершинами многоугольника, представляющими вашу зону. Например, край между первыми двумя вершинами многоугольника представляет первую сторону, 'сторона' = 1. Значение target_side находится между [0,N-1] , где N — это количество сторон polygon . Это необязательное поле. |
threshold |
с плавающей запятой | События передаются, если человек больше этого количества пикселей в зоне. Это необязательное поле и значение в соотношении (0–1). Например, значение 0,074 будет 38 пикселей на видео с шириной изображения = 512 (0,074 X 512 = ~38). |
type |
строка | Для cognitiveservices.vision.spatialanalysis-personcrossingpolygon это будет zonecrossing или zonedwelltime . |
trigger |
строка | Тип триггера для отправки события Поддерживаемые значения: "Event": срабатывают, когда человек входит в зону или выходит из зоны. |
focus |
строка | Положение точки в прямоугольнике, ограничивающем человека, используемое для вычисления событий. Значение фокуса может быть footprint (занимаемое лицом), bottom_center (нижний центр прямоугольника, ограничивающего человека) center (центр прямоугольника, ограничивающего человека). Значение по умолчанию — footprint. |
Конфигурация зоны для persondistance
Это пример входного JSON-файла для параметра SPACEANALYTICS_CONFIG
, который настраивает зону для cognitiveservices.vision.spatialanalysis-persondistance. Для этой операции можно настроить несколько зон.
{
"zones":[{
"name": "lobbycamera",
"polygon": [[0.3,0.3], [0.3,0.9], [0.6,0.9], [0.6,0.3], [0.3,0.3]],
"events":[{
"type": "persondistance",
"config":{
"trigger": "event",
"output_frequency":1,
"minimum_distance_threshold":6.0,
"maximum_distance_threshold":35.0,
"aggregation_method": "average",
"focus": "footprint"
}
}]
}]
}
Имя. | Тип | Description |
---|---|---|
zones |
список | Список зон. |
name |
строка | Понятное имя для этой зоны. |
polygon |
список | Каждая пара значений представляет x, y для вершин многоугольника. Многоугольник представляет области, в которых учитываются люди и измеряется расстояние между людьми. Значения с плавающей запятой представляют собой расположение вершины относительно левого верхнего угла. Чтобы вычислить абсолютные значения x, y, необходимо умножить эти значения на размер кадра. |
threshold |
с плавающей запятой | События передаются, если человек больше этого количества пикселей в зоне. Это необязательное поле и значение в соотношении (0–1). Например, значение 0,0253 будет 13 пикселей на видео с шириной изображения = 512 (0,0253 X 512 = ~13). |
type |
строка | Для cognitiveservices.vision.spatialanalysis-persondistance это будет persondistance . |
trigger |
строка | Тип триггера для отправки события. Поддерживаемые значения — event для отправки событий при периодическом изменении счета или interval для периодической отправки событий независимо от того, изменился ли счет. |
output_frequency |
INT | Скорость, с которой выходят события. Если output_frequency = X, каждое событие x — выход, например, output_frequency = 2 означает, что каждое другое событие является выходным. output_frequency Применяется к event и interval . |
minimum_distance_threshold |
с плавающей запятой | Расстояние в футах, которое активирует событие "TooClose", когда люди находятся на расстоянии меньше этого. |
maximum_distance_threshold |
с плавающей запятой | Расстояние в футах, которое активирует событие "TooFar", когда люди находятся на расстоянии больше этого. |
aggregation_method |
строка | Метод вычисления результата persondistance . Aggregation_method применимо как к mode , так и к average . |
focus |
строка | Положение точки в прямоугольнике, ограничивающем человека, используемое для вычисления событий. Значение фокуса может быть footprint (занимаемое лицом), bottom_center (нижний центр прямоугольника, ограничивающего человека) center (центр прямоугольника, ограничивающего человека). |
Конфигурация для пространственной анализии
Ниже приведен пример входного JSON-файла для параметра SPACEANALYTICS_CONFIG
, который настраивает зону для cognitiveservices.vision.spatialanalysis. Вы можете настроить несколько линий или зон для этой операции, и каждая строка или зона может иметь различные события.
{
"lines": [
{
"name": "doorcamera",
"line": {
"start": {
"x": 0,
"y": 0.5
},
"end": {
"x": 1,
"y": 0.5
}
},
"events": [
{
"type": "linecrossing",
"config": {
"trigger": "event",
"focus": "footprint"
}
}
]
}
],
"zones": [
{
"name": "lobbycamera",
"polygon": [[0.3, 0.3],[0.3, 0.9],[0.6, 0.9],[0.6, 0.3],[0.3, 0.3]],
"events": [
{
"type": "persondistance",
"config": {
"trigger": "event",
"output_frequency": 1,
"minimum_distance_threshold": 6.0,
"maximum_distance_threshold": 35.0,
"focus": "footprint"
}
},
{
"type": "count",
"config": {
"trigger": "event",
"output_frequency": 1,
"focus": "footprint"
}
},
{
"type": "zonecrossing",
"config": {
"focus": "footprint"
}
},
{
"type": "zonedwelltime",
"config": {
"focus": "footprint"
}
}
]
}
]
}
Конфигурация камеры
Дополнительные сведения о настройке зон и линий см. в разделе рекомендации по размещению камеры.
Выходные данные операций пространственного анализа
События каждой операции уходят в центр Интернета вещей Azure в формате JSON.
Формат JSON для Аналитика ИИ personcount
Пример JSON для события, выводимого этой операцией.
{
"events": [
{
"id": "b013c2059577418caa826844223bb50b",
"type": "personCountEvent",
"detectionIds": [
"bc796b0fc2534bc59f13138af3dd7027",
"60add228e5274158897c135905b5a019"
],
"properties": {
"personCount": 2
},
"zone": "lobbycamera",
"trigger": "event"
}
],
"sourceInfo": {
"id": "camera_id",
"timestamp": "2020-08-24T06:06:57.224Z",
"width": 608,
"height": 342,
"frameId": "1400",
"cameraCalibrationInfo": {
"status": "Calibrated",
"cameraHeight": 10.306597709655762,
"focalLength": 385.3199462890625,
"tiltupAngle": 1.0969393253326416
},
"imagePath": ""
},
"detections": [
{
"type": "person",
"id": "bc796b0fc2534bc59f13138af3dd7027",
"region": {
"type": "RECTANGLE",
"points": [
{
"x": 0.612683747944079,
"y": 0.25340268765276636
},
{
"x": 0.7185954043739721,
"y": 0.6425260577285499
}
]
},
"confidence": 0.9559211134910583,
"metadata": {
"centerGroundPointX": "2.6310102939605713",
"centerGroundPointY": "0.0",
"groundOrientationAngle": "1.3",
"footprintX": "0.7306610584259033",
"footprintY": "0.8814966493381893"
},
"attributes": [
{
"label": "face_mask",
"confidence": 0.99,
"task": ""
}
]
},
{
"type": "person",
"id": "60add228e5274158897c135905b5a019",
"region": {
"type": "RECTANGLE",
"points": [
{
"x": 0.22326200886776573,
"y": 0.17830915618361087
},
{
"x": 0.34922296122500773,
"y": 0.6297955429344847
}
]
},
"confidence": 0.9389744400978088,
"metadata": {
"centerGroundPointX": "2.6310102939605713",
"centerGroundPointY": "18.635927200317383",
"groundOrientationAngle": "1.3",
"footprintX": "0.7306610584259033",
"footprintY": "0.8814966493381893"
},
"attributes": [
{
"label": "face_mask",
"confidence": 0.99,
"task": ""
}
]
}
],
"schemaVersion": "2.0"
}
Имя поля события | Тип | Описание: |
---|---|---|
id |
строка | ИД события |
type |
строка | Тип события |
detectionsId |
array | Массив размера 1 уникального идентификатора обнаружения людей, вызвавшего это событие |
properties |
коллекция | Коллекция значений |
trackinId |
строка | Уникальный идентификатор обнаруженного человека |
zone |
строка | Поле Name (имя) многоугольника, представляющего зону, которую пересекли |
trigger |
строка | Тип триггера — "Event" или "Interval" в зависимости от значения trigger в SPACEANALYTICS_CONFIG |
Имя поля обнаружений | Тип | Описание: |
---|---|---|
id |
строка | Идентификатор обнаружения |
type |
строка | Тип обнаружения |
region |
коллекция | Коллекция значений |
type |
строка | Тип региона |
points |
коллекция | Верхняя левая и нижняя правая точка, если тип региона — прямоугольник |
confidence |
с плавающей запятой | Достоверность алгоритма |
attributes |
array | Массив атрибутов. Каждый атрибут состоит из метки, задачи и достоверности |
label |
строка | Значение атрибута (например, {label: face_mask} означает, что обнаруженное лицо носит маску) |
confidence (attribute) |
с плавающей запятой | Значение достоверности атрибута с диапазоном от 0 до 1 (например, {confidence: 0.9, label: face_nomask} означает, что обнаруженное лицо не носит маску) |
task |
строка | Задача классификации атрибута или класс |
Имя поля информации об источнике | Тип | Описание: |
---|---|---|
id |
строка | Camera ID (Идентификатор камеры) |
timestamp |
Дата | Дата в формате UTC при выдаче полезных данных JSON |
width |
INT | Ширина кадра видео |
height |
INT | Высота кадра видео |
frameId |
INT | Идентификатор кадра |
cameraCallibrationInfo |
коллекция | Коллекция значений |
status |
строка | Состояние калибровки в формате state[;progress description] . Состояние может быть Calibrating , Recalibrating (если включена повторная калибровка) или Calibrated . Часть описания хода выполнения допустима только в том случае, если она находится в состоянии Calibrating и Recalibrating , которая используется для отображения хода выполнения текущего процесса калибровки. |
cameraHeight |
с плавающей запятой | Высота камеры над землей в футах. Это выводится из автоматической калибровки. |
focalLength |
с плавающей запятой | Фокусная длина камеры в пикселях. Это выводится из автоматической калибровки. |
tiltUpAngle |
с плавающей запятой | Угол наклона камеры от вертикали. Это выводится из автоматической калибровки. |
Формат JSON для Аналитика ИИ personcrossingline
Пример JSON для обнаружений, выводимых этой операцией.
{
"events": [
{
"id": "3733eb36935e4d73800a9cf36185d5a2",
"type": "personLineEvent",
"detectionIds": [
"90d55bfc64c54bfd98226697ad8445ca"
],
"properties": {
"trackingId": "90d55bfc64c54bfd98226697ad8445ca",
"status": "CrossLeft"
},
"zone": "doorcamera"
}
],
"sourceInfo": {
"id": "camera_id",
"timestamp": "2020-08-24T06:06:53.261Z",
"width": 608,
"height": 342,
"frameId": "1340",
"imagePath": ""
},
"detections": [
{
"type": "person",
"id": "90d55bfc64c54bfd98226697ad8445ca",
"region": {
"type": "RECTANGLE",
"points": [
{
"x": 0.491627341822574,
"y": 0.2385801348769874
},
{
"x": 0.588894994635331,
"y": 0.6395559924387793
}
]
},
"confidence": 0.9005028605461121,
"metadata": {
"centerGroundPointX": "2.6310102939605713",
"centerGroundPointY": "18.635927200317383",
"groundOrientationAngle": "1.3",
"trackingId": "90d55bfc64c54bfd98226697ad8445ca",
"speed": "1.2",
"footprintX": "0.7306610584259033",
"footprintY": "0.8814966493381893"
},
"attributes": [
{
"label": "face_mask",
"confidence": 0.99,
"task": ""
}
]
}
],
"schemaVersion": "2.0"
}
Имя поля события | Тип | Описание: |
---|---|---|
id |
строка | ИД события |
type |
строка | Тип события |
detectionsId |
array | Массив размера 1 уникального идентификатора обнаружения людей, вызвавшего это событие |
properties |
коллекция | Коллекция значений |
trackinId |
строка | Уникальный идентификатор обнаруженного человека |
status |
строка | Направление пересечений строк: "CrossLeft" или "CrossRight". Направление основано на представлении, что вы стоите в "начале" лицом к "концу" линии. CrossRight — это пересечение слева направо. CrossLeft — это пересечение справа налево. |
orientationDirection |
строка | Направление ориентации обнаруженного человека после пересечения линии. Значением может быть "Влево", "Вправо" или "Прямо". Это значение выводится, если enable_orientation имеет значение True в CAMERACALIBRATOR_NODE_CONFIG |
zone |
строка | Поле "Name" строки, которая была пересечена |
Имя поля обнаружений | Тип | Описание: |
---|---|---|
id |
строка | Идентификатор обнаружения |
type |
строка | Тип обнаружения |
region |
коллекция | Коллекция значений |
type |
строка | Тип региона |
points |
коллекция | Верхняя левая и нижняя правая точка, если тип региона — прямоугольник |
groundOrientationAngle |
с плавающей запятой | Радианный угол по часовой стрелке ориентации человека на предполагаемой плоскости земли |
mappedImageOrientation |
с плавающей запятой | Спроецированный угол ориентации человека в пространстве 2D-изображения в радианах по часовой стрелке |
speed |
с плавающей запятой | Предполагаемая скорость обнаруженного человека. Единица: foot per second (ft/s) |
confidence |
с плавающей запятой | Достоверность алгоритма |
attributes |
array | Массив атрибутов. Каждый атрибут состоит из метки, задачи и достоверности |
label |
строка | Значение атрибута (например, {label: face_mask} означает, что обнаруженное лицо носит маску) |
confidence (attribute) |
с плавающей запятой | Значение достоверности атрибута с диапазоном от 0 до 1 (например, {confidence: 0.9, label: face_nomask} означает, что обнаруженное лицо не носит маску) |
task |
строка | Задача классификации атрибута или класс |
Имя поля информации об источнике | Тип | Описание: |
---|---|---|
id |
строка | Camera ID (Идентификатор камеры) |
timestamp |
Дата | Дата в формате UTC при выдаче полезных данных JSON |
width |
INT | Ширина кадра видео |
height |
INT | Высота кадра видео |
frameId |
INT | Идентификатор кадра |
Внимание
Модель искусственного интеллекта обнаруживает человека независимо от того, смотрит ли человек в камеру или в сторону. Модель искусственного интеллекта не выполняет распознавание лиц и не выдает никаких биометрических сведений.
Формат JSON для personcrossingpolygon Аналитика ИИ
Пример JSON для обнаружений, выводимых этой операцией с zonecrossing
типом SPACEANALYTICS_CONFIG.
{
"events": [
{
"id": "f095d6fe8cfb4ffaa8c934882fb257a5",
"type": "personZoneEnterExitEvent",
"detectionIds": [
"afcc2e2a32a6480288e24381f9c5d00e"
],
"properties": {
"trackingId": "afcc2e2a32a6480288e24381f9c5d00e",
"status": "Enter",
"side": "1"
},
"zone": "queuecamera"
}
],
"sourceInfo": {
"id": "camera_id",
"timestamp": "2020-08-24T06:15:09.680Z",
"width": 608,
"height": 342,
"frameId": "428",
"imagePath": ""
},
"detections": [
{
"type": "person",
"id": "afcc2e2a32a6480288e24381f9c5d00e",
"region": {
"type": "RECTANGLE",
"points": [
{
"x": 0.8135572734631991,
"y": 0.6653949670624315
},
{
"x": 0.9937645761590255,
"y": 0.9925406829655519
}
]
},
"confidence": 0.6267998814582825,
"metadata": {
"centerGroundPointX": "2.6310102939605713",
"centerGroundPointY": "18.635927200317383",
"groundOrientationAngle": "1.3",
"trackingId": "afcc2e2a32a6480288e24381f9c5d00e",
"speed": "1.2",
"footprintX": "0.7306610584259033",
"footprintY": "0.8814966493381893"
},
"attributes": [
{
"label": "face_mask",
"confidence": 0.99,
"task": ""
}
]
}
],
"schemaVersion": "2.0"
}
Пример JSON для обнаружений, выводимых этой операцией с zonedwelltime
типом SPACEANALYTICS_CONFIG.
{
"events": [
{
"id": "f095d6fe8cfb4ffaa8c934882fb257a5",
"type": "personZoneDwellTimeEvent",
"detectionIds": [
"afcc2e2a32a6480288e24381f9c5d00e"
],
"properties": {
"trackingId": "afcc2e2a32a6480288e24381f9c5d00e",
"status": "Exit",
"side": "1",
"dwellTime": 7132.0,
"dwellFrames": 20
},
"zone": "queuecamera"
}
],
"sourceInfo": {
"id": "camera_id",
"timestamp": "2020-08-24T06:15:09.680Z",
"width": 608,
"height": 342,
"frameId": "428",
"imagePath": ""
},
"detections": [
{
"type": "person",
"id": "afcc2e2a32a6480288e24381f9c5d00e",
"region": {
"type": "RECTANGLE",
"points": [
{
"x": 0.8135572734631991,
"y": 0.6653949670624315
},
{
"x": 0.9937645761590255,
"y": 0.9925406829655519
}
]
},
"confidence": 0.6267998814582825,
"metadata": {
"centerGroundPointX": "2.6310102939605713",
"centerGroundPointY": "18.635927200317383",
"groundOrientationAngle": "1.2",
"mappedImageOrientation": "0.3",
"speed": "1.2",
"trackingId": "afcc2e2a32a6480288e24381f9c5d00e",
"footprintX": "0.7306610584259033",
"footprintY": "0.8814966493381893"
}
}
],
"schemaVersion": "2.0"
}
Имя поля события | Тип | Описание: |
---|---|---|
id |
строка | ИД события |
type |
строка | Тип события. Значение может быть либо personZoneDwellTimeEvent, либо personZoneEnterExitEvent |
detectionsId |
array | Массив размера 1 уникального идентификатора обнаружения людей, вызвавшего это событие |
properties |
коллекция | Коллекция значений |
trackinId |
строка | Уникальный идентификатор обнаруженного человека |
status |
строка | Направление пересечения многоугольников: "Enter" или "Exit" |
side |
INT | Номер стороны многоугольника, который пересекается человеком. Каждая сторона — это пронумерованный край между двумя вершинами многоугольника, представляющими вашу зону. Ребро между двумя первыми вершинами многоугольника представляет первую сторону. "Сторона" пуста, если событие не связано с определенной стороной из-за перекрытия. Например, выход был выполнен, когда человек исчезает, но не встречается сразу за пределом зоны, или если человек появился в зоне, но не был замеченным пересекающим сторону. |
dwellTime |
с плавающей запятой | Количество миллисекунд, представляющих время, затраченное человеком в зоне. Это поле указывается, если тип события — personZoneDwellTimeEvent |
dwellFrames |
INT | Количество кадров, которые человек использовал в зоне. Это поле указывается, если тип события — personZoneDwellTimeEvent |
dwellTimeForTargetSide |
с плавающей запятой | Количество миллисекунд, которое представляет время, которое человек провел в зоне и смотрел на target_side . Это поле предоставляется, когда enable_orientation равно True в CAMERACALIBRATOR_NODE_CONFIG , а значение target_side установлено в SPACEANALYTICS_CONFIG |
avgSpeed |
с плавающей запятой | Средняя скорость человека в зоне. Единица: foot per second (ft/s) |
minSpeed |
с плавающей запятой | Минимальная скорость человека в зоне. Единица: foot per second (ft/s) |
zone |
строка | Поле Name (имя) многоугольника, представляющего зону, которую пересекли |
Имя поля обнаружений | Тип | Описание: |
---|---|---|
id |
строка | Идентификатор обнаружения |
type |
строка | Тип обнаружения |
region |
коллекция | Коллекция значений |
type |
строка | Тип региона |
points |
коллекция | Верхняя левая и нижняя правая точка, если тип региона — прямоугольник |
groundOrientationAngle |
с плавающей запятой | Радианный угол по часовой стрелке ориентации человека на предполагаемой плоскости земли |
mappedImageOrientation |
с плавающей запятой | Спроецированный угол ориентации человека в пространстве 2D-изображения в радианах по часовой стрелке |
speed |
с плавающей запятой | Предполагаемая скорость обнаруженного человека. Единица: foot per second (ft/s) |
confidence |
с плавающей запятой | Достоверность алгоритма |
attributes |
array | Массив атрибутов. Каждый атрибут состоит из метки, задачи и достоверности |
label |
строка | Значение атрибута (например, {label: face_mask} означает, что обнаруженное лицо носит маску) |
confidence (attribute) |
с плавающей запятой | Значение достоверности атрибута с диапазоном от 0 до 1 (например, {confidence: 0.9, label: face_nomask} означает, что обнаруженное лицо не носит маску) |
task |
строка | Задача классификации атрибута или класс |
Формат JSON для Аналитика ИИ persondistance
Пример JSON для обнаружений, выводимых этой операцией.
{
"events": [
{
"id": "9c15619926ef417aa93c1faf00717d36",
"type": "personDistanceEvent",
"detectionIds": [
"9037c65fa3b74070869ee5110fcd23ca",
"7ad7f43fd1a64971ae1a30dbeeffc38a"
],
"properties": {
"personCount": 5,
"averageDistance": 20.807043981552123,
"minimumDistanceThreshold": 6.0,
"maximumDistanceThreshold": "Infinity",
"eventName": "TooClose",
"distanceViolationPersonCount": 2
},
"zone": "lobbycamera",
"trigger": "event"
}
],
"sourceInfo": {
"id": "camera_id",
"timestamp": "2020-08-24T06:17:25.309Z",
"width": 608,
"height": 342,
"frameId": "1199",
"cameraCalibrationInfo": {
"status": "Calibrated",
"cameraHeight": 12.9940824508667,
"focalLength": 401.2800598144531,
"tiltupAngle": 1.057669997215271
},
"imagePath": ""
},
"detections": [
{
"type": "person",
"id": "9037c65fa3b74070869ee5110fcd23ca",
"region": {
"type": "RECTANGLE",
"points": [
{
"x": 0.39988183975219727,
"y": 0.2719132942065858
},
{
"x": 0.5051516984638414,
"y": 0.6488402517218339
}
]
},
"confidence": 0.948630690574646,
"metadata": {
"centerGroundPointX": "-1.4638760089874268",
"centerGroundPointY": "18.29732322692871",
"groundOrientationAngle": "1.3",
"footprintX": "0.7306610584259033",
"footprintY": "0.8814966493381893"
}
},
{
"type": "person",
"id": "7ad7f43fd1a64971ae1a30dbeeffc38a",
"region": {
"type": "RECTANGLE",
"points": [
{
"x": 0.5200299714740954,
"y": 0.2875368218672903
},
{
"x": 0.6457497446160567,
"y": 0.6183311060855263
}
]
},
"confidence": 0.8235412240028381,
"metadata": {
"centerGroundPointX": "2.6310102939605713",
"centerGroundPointY": "18.635927200317383",
"groundOrientationAngle": "1.3",
"footprintX": "0.7306610584259033",
"footprintY": "0.8814966493381893"
}
}
],
"schemaVersion": "2.0"
}
Имя поля события | Тип | Описание: |
---|---|---|
id |
строка | ИД события |
type |
строка | Тип события |
detectionsId |
array | Массив размера 1 уникального идентификатора обнаружения людей, вызвавшего это событие |
properties |
коллекция | Коллекция значений |
personCount |
INT | Число людей, обнаруженных при выдаче события |
averageDistance |
с плавающей запятой | Среднее расстояние между всеми обнаруженными людьми в футах |
minimumDistanceThreshold |
с плавающей запятой | Расстояние в футах, которое активирует событие "TooClose", когда люди находятся на расстоянии меньше этого. |
maximumDistanceThreshold |
с плавающей запятой | Расстояние в футах, которое активирует событие "TooFar", когда люди находятся на расстоянии больше этого. |
eventName |
строка | Имя события будет TooClose при нарушении minimumDistanceThreshold , TooFar когда нарушается maximumDistanceThreshold , или unknown , если автоматическая калибровка не завершена |
distanceViolationPersonCount |
INT | Число людей, обнаруженных нарушающими minimumDistanceThreshold или maximumDistanceThreshold |
zone |
строка | Поле Name (имя) многоугольника, представляющего зону, отслеживаемую для дистанцирования между людьми |
trigger |
строка | Тип триггера — "Event" или "Interval" в зависимости от значения trigger в SPACEANALYTICS_CONFIG |
Имя поля обнаружений | Тип | Описание: |
---|---|---|
id |
строка | Идентификатор обнаружения |
type |
строка | Тип обнаружения |
region |
коллекция | Коллекция значений |
type |
строка | Тип региона |
points |
коллекция | Верхняя левая и нижняя правая точка, если тип региона — прямоугольник |
confidence |
с плавающей запятой | Достоверность алгоритма |
centerGroundPointX/centerGroundPointY |
2 плавающих значения | x , y — значения с координатами определяемого положения человека на земле в футах. x и y являются координатами на плоскости этажей, предполагая, что этаж является уровнем. Источником является расположение камеры. |
В centerGroundPoint
x
— это компонент расстояния от камеры до человека вдоль линии, перпендикулярной плоскости изображения камеры. y
— это компонент расстояния вдоль линии, параллельный плоскости изображения камеры.
В данном примере параметр centerGroundPoint
находится в состоянии {centerGroundPointX: 4, centerGroundPointY: 5}
. Это означает, что есть человек, находящийся перед камерой на расстоянии 4 метров и на 5 метров вправо, при условии что вы глядите на комнату сверху вниз.
Имя поля информации об источнике | Тип | Описание: |
---|---|---|
id |
строка | Camera ID (Идентификатор камеры) |
timestamp |
Дата | Дата в формате UTC при выдаче полезных данных JSON |
width |
INT | Ширина кадра видео |
height |
INT | Высота кадра видео |
frameId |
INT | Идентификатор кадра |
cameraCallibrationInfo |
коллекция | Коллекция значений |
status |
строка | Состояние калибровки в формате state[;progress description] . Состояние может быть Calibrating , Recalibrating (если включена повторная калибровка) или Calibrated . Часть описания хода выполнения допустима только в том случае, если она находится в состоянии Calibrating и Recalibrating , которая используется для отображения хода выполнения текущего процесса калибровки. |
cameraHeight |
с плавающей запятой | Высота камеры над землей в футах. Это выводится из автоматической калибровки. |
focalLength |
с плавающей запятой | Фокусная длина камеры в пикселях. Это выводится из автоматической калибровки. |
tiltUpAngle |
с плавающей запятой | Угол наклона камеры от вертикали. Это выводится из автоматической калибровки. |
Формат JSON для пространственных Аналитика ИИ
Выходные данные этой операции зависят от настроенного events
, например если событие zonecrossing
для этой операции настроено, то выходные данные будут такими же, как cognitiveservices.vision.spatialanalysis-personcrossingpolygon
.
Использование выходных данных, сгенерированных контейнером
Может потребоваться интегрировать в приложение функцию обнаружения пространственных данных или события. Вот несколько идей для этого:
- Используйте пакет SDK Центров событий Azure для выбранного языка программирования, чтобы подключиться к конечной точке Центра Интернета вещей Azure и получить события. Дополнительные сведения см. в разделе Чтение сообщений, пересылаемых с устройства в облако из встроенной конечной точки.
- Настройте маршрутизацию сообщений в центре Интернета вещей Azure, чтобы отправить события в другие конечные точки или сохранить события в хранилище данных. Дополнительные сведения см. в статье Использование маршрутизации сообщений Центра Интернета вещей.
- Настройте задание Azure Stream Analytics для обработки событий в режиме реального времени по мере их поступления и создания визуализаций.
Развертывание операций пространственного анализа в масштабе (несколько камер)
Чтобы обеспечить максимальную производительность и использование графических процессоров, можно развернуть любые операции пространственного анализа на нескольких камерах с помощью экземпляров графа. Ниже приведен пример конфигурации для выполнения операции cognitiveservices.vision.spatialanalysis-personcrossingline
на 15 камерах.
"properties.desired": {
"globalSettings": {
"PlatformTelemetryEnabled": false,
"CustomerTelemetryEnabled": true
},
"graphs": {
"personzonelinecrossing": {
"operationId": "cognitiveservices.vision.spatialanalysis-personcrossingline",
"version": 1,
"enabled": true,
"sharedNodes": {
"shared_detector0": {
"node": "PersonCrossingLineGraph.detector",
"parameters": {
"DETECTOR_NODE_CONFIG": "{ \"gpu_index\": 0, \"batch_size\": 7, \"do_calibration\": true}",
}
},
"shared_calibrator0": {
"node": "PersonCrossingLineGraph/cameracalibrator",
"parameters": {
"CAMERACALIBRATOR_NODE_CONFIG": "{ \"gpu_index\": 0, \"do_calibration\": true, \"enable_zone_placement\": true}",
"CALIBRATION_CONFIG": "{\"enable_recalibration\": true, \"quality_check_frequency_seconds\": 86400}",
}
},
"parameters": {
"VIDEO_DECODE_GPU_INDEX": 0,
"VIDEO_IS_LIVE": true
},
"instances": {
"1": {
"sharedNodeMap": {
"PersonCrossingLineGraph/detector": "shared_detector0",
"PersonCrossingLineGraph/cameracalibrator": "shared_calibrator0",
},
"parameters": {
"VIDEO_URL": "<Replace RTSP URL for camera 1>",
"VIDEO_SOURCE_ID": "camera 1",
"SPACEANALYTICS_CONFIG": "{\"zones\":[{\"name\":\"queue\",\"polygon\":[[0,0],[1,0],[0,1],[1,1],[0,0]]}]}"
}
},
"2": {
"sharedNodeMap": {
"PersonCrossingLineGraph/detector": "shared_detector0",
"PersonCrossingLineGraph/cameracalibrator": "shared_calibrator0",
},
"parameters": {
"VIDEO_URL": "<Replace RTSP URL for camera 2>",
"VIDEO_SOURCE_ID": "camera 2",
"SPACEANALYTICS_CONFIG": "<Replace the zone config value, same format as above>"
}
},
"3": {
"sharedNodeMap": {
"PersonCrossingLineGraph/detector": "shared_detector0",
"PersonCrossingLineGraph/cameracalibrator": "shared_calibrator0",
},
"parameters": {
"VIDEO_URL": "<Replace RTSP URL for camera 3>",
"VIDEO_SOURCE_ID": "camera 3",
"SPACEANALYTICS_CONFIG": "<Replace the zone config value, same format as above>"
}
},
"4": {
"sharedNodeMap": {
"PersonCrossingLineGraph/detector": "shared_detector0",
"PersonCrossingLineGraph/cameracalibrator": "shared_calibrator0",
},
"parameters": {
"VIDEO_URL": "<Replace RTSP URL for camera 4>",
"VIDEO_SOURCE_ID": "camera 4",
"SPACEANALYTICS_CONFIG": "<Replace the zone config value, same format as above>"
}
},
"5": {
"sharedNodeMap": {
"PersonCrossingLineGraph/detector": "shared_detector0",
"PersonCrossingLineGraph/cameracalibrator": "shared_calibrator0",
},
"parameters": {
"VIDEO_URL": "<Replace RTSP URL for camera 5>",
"VIDEO_SOURCE_ID": "camera 5",
"SPACEANALYTICS_CONFIG": "<Replace the zone config value, same format as above>"
}
},
"6": {
"sharedNodeMap": {
"PersonCrossingLineGraph/detector": "shared_detector0",
"PersonCrossingLineGraph/cameracalibrator": "shared_calibrator0",
},
"parameters": {
"VIDEO_URL": "<Replace RTSP URL for camera 6>",
"VIDEO_SOURCE_ID": "camera 6",
"SPACEANALYTICS_CONFIG": "<Replace the zone config value, same format as above>"
}
},
"7": {
"sharedNodeMap": {
"PersonCrossingLineGraph/detector": "shared_detector0",
"PersonCrossingLineGraph/cameracalibrator": "shared_calibrator0",
},
"parameters": {
"VIDEO_URL": "<Replace RTSP URL for camera 7>",
"VIDEO_SOURCE_ID": "camera 7",
"SPACEANALYTICS_CONFIG": "<Replace the zone config value, same format as above>"
}
},
"8": {
"sharedNodeMap": {
"PersonCrossingLineGraph/detector": "shared_detector0",
"PersonCrossingLineGraph/cameracalibrator": "shared_calibrator0",
},
"parameters": {
"VIDEO_URL": "<Replace RTSP URL for camera 8>",
"VIDEO_SOURCE_ID": "camera 8",
"SPACEANALYTICS_CONFIG": "<Replace the zone config value, same format as above>"
}
},
"9": {
"sharedNodeMap": {
"PersonCrossingLineGraph/detector": "shared_detector0",
"PersonCrossingLineGraph/cameracalibrator": "shared_calibrator0",
},
"parameters": {
"VIDEO_URL": "<Replace RTSP URL for camera 9>",
"VIDEO_SOURCE_ID": "camera 9",
"SPACEANALYTICS_CONFIG": "<Replace the zone config value, same format as above>"
}
},
"10": {
"sharedNodeMap": {
"PersonCrossingLineGraph/detector": "shared_detector0",
"PersonCrossingLineGraph/cameracalibrator": "shared_calibrator0",
},
"parameters": {
"VIDEO_URL": "<Replace RTSP URL for camera 10>",
"VIDEO_SOURCE_ID": "camera 10",
"SPACEANALYTICS_CONFIG": "<Replace the zone config value, same format as above>"
}
},
"11": {
"sharedNodeMap": {
"PersonCrossingLineGraph/detector": "shared_detector0",
"PersonCrossingLineGraph/cameracalibrator": "shared_calibrator0",
},
"parameters": {
"VIDEO_URL": "<Replace RTSP URL for camera 11>",
"VIDEO_SOURCE_ID": "camera 11",
"SPACEANALYTICS_CONFIG": "<Replace the zone config value, same format as above>"
}
},
"12": {
"sharedNodeMap": {
"PersonCrossingLineGraph/detector": "shared_detector0",
"PersonCrossingLineGraph/cameracalibrator": "shared_calibrator0",
},
"parameters": {
"VIDEO_URL": "<Replace RTSP URL for camera 12>",
"VIDEO_SOURCE_ID": "camera 12",
"SPACEANALYTICS_CONFIG": "<Replace the zone config value, same format as above>"
}
},
"13": {
"sharedNodeMap": {
"PersonCrossingLineGraph/detector": "shared_detector0",
"PersonCrossingLineGraph/cameracalibrator": "shared_calibrator0",
},
"parameters": {
"VIDEO_URL": "<Replace RTSP URL for camera 13>",
"VIDEO_SOURCE_ID": "camera 13",
"SPACEANALYTICS_CONFIG": "<Replace the zone config value, same format as above>"
}
},
"14": {
"sharedNodeMap": {
"PersonCrossingLineGraph/detector": "shared_detector0",
"PersonCrossingLineGraph/cameracalibrator": "shared_calibrator0",
},
"parameters": {
"VIDEO_URL": "<Replace RTSP URL for camera 14>",
"VIDEO_SOURCE_ID": "camera 14",
"SPACEANALYTICS_CONFIG": "<Replace the zone config value, same format as above>"
}
},
"15": {
"sharedNodeMap": {
"PersonCrossingLineGraph/detector": "shared_detector0",
"PersonCrossingLineGraph/cameracalibrator": "shared_calibrator0",
},
"parameters": {
"VIDEO_URL": "<Replace RTSP URL for camera 15>",
"VIDEO_SOURCE_ID": "camera 15",
"SPACEANALYTICS_CONFIG": "<Replace the zone config value, same format as above>"
}
}
}
},
}
}
Имя. | Тип | Описание |
---|---|---|
batch_size |
INT | Если все камеры имеют одинаковое разрешение, задайте для параметра batch_size количество камер, которые будут использоваться в этой операции; в противном случае установите значение batch_size на 1 или оставьте значение по умолчанию (1), что означает, что пакет не поддерживается. |