Операции пространственного анализа

Пространственный анализ позволяет в режиме реального времени анализировать видеопотоки с камеры. Для каждой настроенной камеры операции пространственного анализа будут создавать поток вывода сообщений 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 Аналитики ИИ, чтобы узнать, как рассчитываются координаты на плоскости пола.

Пример вывода сведений о размещении зоны, визуализируемых в видеокадре: Zone placement info visualization

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

Настройки параметров узла трекера

Вы можете настроить вычисление скорости через настройки параметров узла трекера.

{
"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 являются координатами на плоскости этажей, предполагая, что этаж является уровнем. Источником является расположение камеры.

В centerGroundPointx — это компонент расстояния от камеры до человека вдоль линии, перпендикулярной плоскости изображения камеры. y — это компонент расстояния вдоль линии, параллельный плоскости изображения камеры.

Example center ground point

В данном примере параметр 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.

Использование выходных данных, сгенерированных контейнером

Может потребоваться интегрировать в приложение функцию обнаружения пространственных данных или события. Вот несколько идей для этого:

Развертывание операций пространственного анализа в масштабе (несколько камер)

Чтобы обеспечить максимальную производительность и использование графических процессоров, можно развернуть любые операции пространственного анализа на нескольких камерах с помощью экземпляров графа. Ниже приведен пример конфигурации для выполнения операции 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), что означает, что пакет не поддерживается.

Следующие шаги