空間分析操作

空間分析を使用すると、カメラ デバイスからのビデオ ストリームをリアルタイムで分析できます。 空間分析の操作によって、構成したカメラ デバイスごとに Azure IoT Hub のインスタンスに送信される JSON メッセージの出力ストリームが生成されます。

空間分析コンテナーは、次の操作を実装します。 これらの操作は、コンテナーの配置マニフェストで構成できます。

操作識別子 説明
cognitiveservices.vision.spatialanalysis-personcount カメラの視野内の指定されたゾーン内の人数をカウントします。 PersonCount によって正確な合計を記録するには、ゾーンを 1 台のカメラで完全にカバーする必要があります。
初期 personCountEvent イベントを生成し、人数が変わると、personCountEvent イベントを生成します。
cognitiveservices.vision.spatialanalysis-personcrossingline 人がカメラの視野内の指定されたラインを越えた時点を追跡します。
人がラインを越えると、personLineEvent イベントを生成し、方向情報を提供します。
cognitiveservices.vision.spatialanalysis-personcrossingpolygon 人が指定のゾーンに出入りするときに personZoneEnterExitEvent イベントを発行し、交差したゾーンの側の方向情報を提供します。 人がゾーンを出るときに personZoneDwellTimeEvent を発行し、方向情報と人がゾーン内で過ごしたミリ秒数を提供します。
cognitiveservices.vision.spatialanalysis-persondistance 人が最小距離ルールに違反した時点を追跡します。
各距離違反が発生した場所で personDistanceEvent を定期的に生成します。
cognitiveservices.vision.spatialanalysis 上記にあるすべてのシナリオを実行する場合に使用できる汎用的な操作。 このオプションは、同じカメラで複数のシナリオを実行したり、システム リソース (GPU など) をより効率的に使用したりする場合に便利です。

上記のすべての操作は、サービスのバージョン .debug (例: cognitiveservices.vision.spatialanalysis-personcount.debug) でも使用できます。 デバッグには、処理中のビデオ フレームを視覚化する機能があります。 ビデオ フレームとイベントの視覚化を有効にするには、ホスト コンピューターで xhost + を実行する必要があります。

重要

Azure AI Vision AI モデルは、ビデオ映像で人の存在を検出してその位置を特定し、人体の周囲に境界ボックスを出力します。 これらの AI モデルは、個人の ID や人口統計情報の検出を試みることはありません。

操作のパラメーター

以下の各空間分析操作に必要なパラメーターを次に示します。

操作のパラメーター 説明
Operation ID 上記の表の操作識別子。
enabled ブール値: true または false。
VIDEO_URL カメラ デバイスの RTSP URL (例: rtsp://username:password@url)。 空間分析では、RTSP、http、または mp4 のいずれかを使用して H.264 でエンコードされたストリームがサポートされています。 Video_URL は、AES 暗号化を使用して難読化された base64 文字列値として指定できます。ビデオの URL が難読化されている場合は、環境変数として KEY_ENVIV_ENV を指定する必要があります。 キーと暗号化を生成するためのサンプル ユーティリティについては、こちらを参照してください。
VIDEO_SOURCE_ID カメラ デバイスまたはビデオ ストリームのフレンドリ名。 これは、イベントの JSON 出力と共に返されます。
VIDEO_IS_LIVE カメラ デバイスの場合は true、録画されたビデオの場合は false。
VIDEO_DECODE_GPU_INDEX ビデオ フレームをデコードする GPU。 既定では 0 です。 DETECTOR_NODE_CONFIGCAMERACALIBRATOR_NODE_CONFIG などの他のノード構成の gpu_index と同じである必要があります。
INPUT_VIDEO_WIDTH ビデオまたはストリームのフレーム幅を入力します (例: 1920)。 これは省略可能なフィールドですが、指定されている場合、フレームは縦横比を維持しながらこのディメンションに合わせてスケーリングされます。
DETECTOR_NODE_CONFIG 検出ノードを実行する GPU を示す JSON。 これは、"{ \"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 から取得できます。 このメソッドは、DETECTOR_NODE_CONFIGdo_calibration=false の場合にのみ有効になります。
CAMERACALIBRATOR_NODE_CONFIG カメラ キャリブレーター ノードを実行する GPU と、調整を使用するかどうかを示す 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。これは、mannequins や画像内の人などの長期的な静止した偽陽性ターゲットを学習および無視する機能を追加します。 構成は、"{\"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 string この操作が実行される GPU インデックス。
enable_breakpad [bool] デバッグ用のクラッシュ ダンプを生成するために使用される breakpad を有効にするかどうかを示します。 既定値は false です。 true に設定した場合は、コンテナー createOptionsHostConfig 部分に "CapAdd": ["SYS_PTRACE"] も追加する必要があります。 既定では、クラッシュ ダンプは RealTimePersonTracking AppCenter アプリにアップロードされます。クラッシュ ダンプを独自の AppCenter アプリにアップロードする場合は、環境変数 RTPT_APPCENTER_APP_SECRET をアプリのアプリ シークレットでオーバーライドできます。

カメラ調整ノードのパラメーター設定

すべての空間分析操作の CAMERACALIBRATOR_NODE_CONFIG パラメーターの例を次に示します。

{
  "gpu_index": 0,
  "do_calibration": true,
  "enable_breakpad": false,
  "enable_orientation": true
}
名前 タイプ 説明
do_calibration string 調整がオンになっていることを示します。 cognitiveservices.vision.spatialanalysis-persondistance が正しく機能するには、do_calibration が true である必要があります。 do_calibration は既定で True に設定されます。
enable_breakpad [bool] デバッグ用のクラッシュ ダンプを生成するために使用される breakpad を有効にするかどうかを示します。 既定値は false です。 true に設定した場合は、コンテナー createOptionsHostConfig 部分に "CapAdd": ["SYS_PTRACE"] も追加する必要があります。 既定では、クラッシュ ダンプは RealTimePersonTracking AppCenter アプリにアップロードされます。クラッシュ ダンプを独自の 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 のフィールド名 Type 内容
optimalZonePolygon object 操作の実線またはゾーンを配置して最適な結果を得られるカメラ画像内の多角形。
各値のペアは、多角形の頂点の x、y を表します。 多角形は、人の追跡または人数のカウントを行う領域を表します。多角形ポイントは、正規化された座標 (0-1) に基づいています。左上隅が (0.0, 0.0)、右下隅が (1.0, 1.0) になります。
fairZonePolygon object 操作の実線またはゾーンを配置して良い結果を得られるが、最適な結果は得られない可能性のあるカメラ画像内の多角形。
内容の詳細な説明については、上記の optimalZonePolygon を参照してください。
uniformlySpacedPersonBoundingBoxes list 実際の空間で均一に分散されたカメラ画像内の人の境界ボックスのリスト。 値は、正規化された座標 (0-1) に基づいています。
personBoundingBoxGroundPoints list カメラに相対するフロア平面上の座標の一覧。 各座標は、同じインデックスを持つ uniformlySpacedPersonBoundingBoxes の境界ボックスの右下に対応します。
フロア平面上の座標を計算する方法について詳しくは、cognitiveservices.vision.spatialanalysis-persondistance の AI 分析情報の JSON 形式セクションの centerGroundPointX/centerGroundPointY フィールドを参照してください。

ビデオ フレームで視覚化されたゾーン配置情報の出力例: 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
}
Name タイプ 説明
enable_speed bool 検出された人の速度を計算するかどうかを示します。 enable_speed は既定で True に設定されます。 速度と向きの両方に最適な推定値を設定することを強くお勧めします。
remove_stationary_objects [bool] 静止オブジェクトを削除するかどうかを示します。 remove_stationary_objects は既定で True に設定されています。
stationary_objects_dist_threshold_in_pixels INT 2 つの検出ボックスを同じ検出として扱うことができるかどうかを決定する近隣距離しきい値。 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 float ターゲットが同じ場所 (stationary_objects_dist_threshold_in_pixels で定義) で stationary_objects_buffer_length_in_seconds 時間間隔の stationary_objects_filter_ratio (0.2 は20% を意味する) より長い間繰り返し検出された場合、ターゲットは静止ターゲットとして扱われます。 stationary_objects_filter_ratio は既定で 0.2 に設定されています。

空間分析操作の構成と出力

personcount のゾーン構成

以下は、ゾーンを構成する SPACEANALYTICS_CONFIG パラメーターの JSON 入力の例です。 この操作には複数のゾーンを構成できます。

{
  "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"
          }
        }
      ]
    }
  ]
}
名前 タイプ 説明設定
zones list ゾーンのリスト。
name string このゾーンのフレンドリ名。
polygon list 各値のペアは、多角形の頂点の x、y を表します。 多角形は、人の追跡または人数のカウントを行う領域を表します。 多角形ポイントは、正規化された座標 (0-1) に基づいています。左上隅は (0.0, 0.0) で、右下隅は (1.0, 1.0) です。
threshold float その人がゾーン内のこのピクセル数よりも大きい場合にイベントが送信されます。 これは省略可能なフィールドであり、値は比率 (0 から 1) です。 たとえば、画像幅 = 512 (0.0253 X 512 = ~13) のビデオでは、値 0.0253 は 13 ピクセルになります。
type string cognitiveservices.vision.spatialanalysis-personcount の場合、これは count である必要があります。
trigger string イベントを送信するためのトリガーの種類。 サポートされている値は、event (カウントが変わったときにイベントを送信する場合)、または interval (カウントが変わったかどうかに関係なく、イベントを定期的に送信する場合) です。
output_frequency INT イベントが送信される頻度。 output_frequency = X の場合、X おきにイベントが送信されます。たとえば、 output_frequency = 2 は、1 つおきにイベントが送信されることを意味します。 output_frequency は、eventinterval の両方に適用されます。
focus string イベントの計算に使用される人の境界ボックス内のポイントの場所。 フォーカスの値は、footprint (人の占有領域)、bottom_center (人の境界ボックスの下部中央)、center (人の境界ボックスの中央) にすることができます。

personcrossingline のライン構成

次に、行を構成する SPACEANALYTICS_CONFIG パラメーターの JSON 入力の例を示します。 この操作には、交差する複数のラインを構成できます。

{
   "lines": [
       {
           "name": "doorcamera",
           "line": {
               "start": {
                   "x": 0,
                   "y": 0.5
               },
               "end": {
                   "x": 1,
                   "y": 0.5
               }
           },
           "events": [
               {
                   "type": "linecrossing",
                   "config": {
                       "trigger": "event",
                       "focus": "footprint"
                   }
               }
           ]
       }
   ]
}
名前 タイプ 説明設定
lines list ラインのリスト。
name string このラインのフレンドリ名。
line list ラインの定義。 これは、"入る" と "出る" を理解できるようにするための方向線です。
start 値のペア ラインの始点の x、y 座標。 浮動小数点値は、左上隅を基準とした頂点の位置を表します。 x、y の絶対値を計算するには、これらの値とフレーム サイズを乗算します。
end 値のペア ラインの終点の x、y 座標。 浮動小数点値は、左上隅を基準とした頂点の位置を表します。 x、y の絶対値を計算するには、これらの値とフレーム サイズを乗算します。
threshold float その人がゾーン内のこのピクセル数よりも大きい場合にイベントが送信されます。 これは省略可能なフィールドであり、値は比率 (0 から 1) です。 たとえば、画像幅 = 512 (0.0253 X 512 = ~13) のビデオでは、値 0.0253 は 13 ピクセルになります。
type string cognitiveservices.vision.spatialanalysis-personcrossingline の場合、これは linecrossing である必要があります。
trigger string イベントを送信するためのトリガーの種類。
サポートされている値: "event": だれかがラインを越えたときに発生します。
focus string イベントの計算に使用される人の境界ボックス内のポイントの場所。 フォーカスの値は、footprint (人の占有領域)、bottom_center (人の境界ボックスの下部中央)、center (人の境界ボックスの中央) にすることができます。 既定値は footprint です。

personcrossingpolygon のゾーン構成

これは、ゾーンを構成する SPACEANALYTICS_CONFIG パラメーターの JSON 入力の例です。 この操作には複数のゾーンを構成できます。

{
"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"
               }
           }]
   }]
}
名前 タイプ 説明設定
zones list ゾーンのリスト。
name string このゾーンのフレンドリ名。
polygon list 各値のペアは、多角形の頂点の x、y を表します。 多角形は、人の追跡または人数のカウントを行う領域を表します。 浮動小数点値は、左上隅を基準とした頂点の位置を表します。 x、y の絶対値を計算するには、これらの値とフレーム サイズを乗算します。
target_side INT polygon によって定義されたゾーンの辺を指定します。これにより、ゾーン内で人が辺に向いている時間を測定します。 'dwellTimeForTargetSide' では、その推定時間が出力されます。 各辺は、ゾーンを表す多角形の 2 つの頂点の間の番号付きのエッジです。 たとえば、多角形の最初の 2 つの頂点間のエッジは、最初の辺である 'side'=1 を表します。 target_side の値の範囲は [0,N-1] です。Npolygon の辺の数です。 これフィールドは必須ではありません。
threshold float その人がゾーン内のこのピクセル数よりも大きい場合にイベントが送信されます。 これは省略可能なフィールドであり、値は比率 (0 から 1) です。 たとえば、画像幅 = 512 (0.074 X 512 = ~38) のビデオでは、値 0.074 は 38 ピクセルになります。
type string cognitiveservices.vision.spatialanalysis-personcrossingpolygon の場合、これは zonecrossing または zonedwelltime である必要があります。
trigger string イベントを送信するためのトリガーの種類。
サポートされている値: "event": だれかがゾーンに入ったときまたはゾーンから出たときに発生します。
focus string イベントの計算に使用される人の境界ボックス内のポイントの場所。 フォーカスの値は、footprint (人の占有領域)、bottom_center (人の境界ボックスの下部中央)、center (人の境界ボックスの中央) にすることができます。 既定値は footprint です。

persondistance のゾーン構成

これは、cognitiveservices.vision.spatialanalysis-persondistance のゾーンを構成する SPACEANALYTICS_CONFIG パラメーターの JSON 入力の例です。 この操作には複数のゾーンを構成できます。

{
"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"
          }
          }]
   }]
}
名前 タイプ 説明設定
zones list ゾーンのリスト。
name string このゾーンのフレンドリ名。
polygon list 各値のペアは、多角形の頂点の x、y を表します。 多角形は人数をカウントする領域を表し、人と人との距離が測定されます。 浮動小数点値は、左上隅を基準とした頂点の位置を表します。 x、y の絶対値を計算するには、これらの値とフレーム サイズを乗算します。
threshold float その人がゾーン内のこのピクセル数よりも大きい場合にイベントが送信されます。 これは省略可能なフィールドであり、値は比率 (0 から 1) です。 たとえば、画像幅 = 512 (0.0253 X 512 = ~13) のビデオでは、値 0.0253 は 13 ピクセルになります。
type string cognitiveservices.vision.spatialanalysis-persondistance の場合、これは persondistance である必要があります。
trigger string イベントを送信するためのトリガーの種類。 サポートされている値は、event (カウントが変わったときにイベントを送信する場合)、または interval (カウントが変わったかどうかに関係なく、イベントを定期的に送信する場合) です。
output_frequency INT イベントが送信される頻度。 output_frequency = X の場合、X おきにイベントが送信されます。たとえば、 output_frequency = 2 は、1 つおきにイベントが送信されることを意味します。 output_frequency は、eventinterval の両方に適用されます。
minimum_distance_threshold float 人と人との距離がその距離よりも近いときに "TooClose" イベントをトリガーする距離 (フィート単位)。
maximum_distance_threshold float 人と人との距離がその距離よりも離れているときに "TooFar" イベントをトリガーする距離 (フィート単位)。
aggregation_method string persondistance 結果を集計するためのメソッド。 aggregation_method は modeaverage の両方に適用できます。
focus string イベントの計算に使用される人の境界ボックス内のポイントの場所。 フォーカスの値は、footprint (人の占有領域)、bottom_center (人の境界ボックスの下部中央)、center (人の境界ボックスの中央) にすることができます。

spatialanalysis の構成

次に、cognitiveservices.vision.spatialanalysis のラインとゾーンを構成する SPACEANALYTICS_CONFIG パラメーターの JSON 入力の例を以下に示します。 この操作では複数のラインやゾーンを構成でき、各ラインやゾーンには異なるイベントを持たせることができます。

{
  "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"
          }
        }
      ]
    }
  ]
}

カメラの構成

ゾーンとラインを構成する方法の詳細については、カメラの配置に関するガイドラインを参照してください。

空間分析操作の出力

各操作のイベントは、JSON 形式で Azure IoT Hub に送信されます。

personcount AI 分析情報の JSON 形式

この操作によって出力されるイベントのサンプル 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"
}
イベント フィールド名 Type 説明
id string イベント ID
type string イベントの種類
detectionsId array このイベントをトリガーした人検出の一意識別子のサイズ 1 の配列
properties collection 値のコレクション
trackinId string 検出された人の一意識別子
zone string 越えられたゾーンを表す多角形の "name" フィールド
trigger string SPACEANALYTICS_CONFIG の trigger の値に応じて、トリガーの種類は "event" または "interval" になります。
Detections フィールド名 Type 説明
id string 検出 ID
type string 検出の種類
region collection 値のコレクション
type string 領域の種類
points collection 領域の種類が RECTANGLE の場合の、左上と右下のポイント
confidence float アルゴリズムの信頼度
attributes array 属性の配列。 各属性は、ラベル、タスク、および信頼度で構成されます
label string 属性値 (たとえば、{label: face_mask} は、検出されたユーザーが顔マスクを装着していることを示します)
confidence (attribute) float 範囲 0 から 1 の属性信頼度値 (たとえば、{confidence: 0.9, label: face_nomask} は、検出された人がフェイス マスクを着用していないことを示します)
task string 属性分類タスク/クラス
SourceInfo フィールド名 Type 説明
id string Camera ID (カメラ ID)
timestamp 日付 JSON ペイロードが生成された UTC 日付
width INT ビデオ フレームの幅
height INT ビデオ フレームの高さ
frameId INT フレーム識別子
cameraCallibrationInfo collection 値のコレクション
status string state[;progress description] の形式での調整の状態。 状態は、CalibratingRecalibrating (再調整が有効な場合)、または Calibrated になります。 進行状況の説明部分は、現在の調整プロセスの進行状況を示すために使用される Calibrating および Recalibrating 状態の場合にのみ有効です。
cameraHeight float 地面からのカメラの高さ (フィート単位)。 これは自動調整から推論されます。
focalLength float カメラの焦点距離 (ピクセル単位)。 これは自動調整から推論されます。
tiltUpAngle float 垂直線からのカメラの傾斜角度。 これは自動調整から推論されます。

personcrossingline AI 分析情報の JSON 形式

この操作によって出力される検出のサンプル 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"
}
イベント フィールド名 Type 説明
id string イベント ID
type string イベントの種類
detectionsId array このイベントをトリガーした人検出の一意識別子のサイズ 1 の配列
properties collection 値のコレクション
trackinId string 検出された人の一意識別子
status string ラインを越える方向 ("CrossLeft" または "CrossRight") 方向は、そのラインの "終わり" に向かって "開始" 位置に立つことを想像することに基づいています。 CrossRight は左から右に交差しています。 CrossLeft は右から左に交差しています。
orientationDirection string 検出された人がラインを越える向きの方向。 "Left"、"Right"、または "Straigh" を指定できます。 この値は、CAMERACALIBRATOR_NODE_CONFIGTrueenable_orientation が設定されている場合に出力されます。
zone string 越えられたラインの "name" フィールド
Detections フィールド名 Type 説明
id string 検出 ID
type string 検出の種類
region collection 値のコレクション
type string 領域の種類
points collection 領域の種類が RECTANGLE の場合の、左上と右下のポイント
groundOrientationAngle float 推論された地上平面での人の向きの時計回りの角度
mappedImageOrientation float 2D イメージ空間における人の向きの時計回りの予測角度
speed float 検出された人の推定速度。 単位は foot per second (ft/s) です。
confidence float アルゴリズムの信頼度
attributes array 属性の配列。 各属性は、ラベル、タスク、および信頼度で構成されます
label string 属性値 (たとえば、{label: face_mask} は、検出されたユーザーが顔マスクを装着していることを示します)
confidence (attribute) float 範囲 0 から 1 の属性信頼度値 (たとえば、{confidence: 0.9, label: face_nomask} は、検出された人がフェイス マスクを着用していないことを示します)
task string 属性分類タスク/クラス
SourceInfo フィールド名 Type 説明
id string Camera ID (カメラ ID)
timestamp 日付 JSON ペイロードが生成された UTC 日付
width INT ビデオ フレームの幅
height INT ビデオ フレームの高さ
frameId INT フレーム識別子

重要

AI モデルは、人がカメラに顔を向けているか、カメラから顔をそらしているかに関係なく、その人を検出します。 AI モデルでは、顔認識は実行されず、生体認証情報も生成されません。

personcrossingpolygon AI 分析情報の JSON 形式

zonecrossing 型の SPACEANALYTICS_CONFIG を使用してこの操作によって出力された検出用のサンプル JSON。

{
    "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"
}

zonedwelltime 型の SPACEANALYTICS_CONFIG を使用してこの操作によって出力された検出用のサンプル JSON。

{
    "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"
}
イベント フィールド名 Type 説明
id string イベント ID
type string イベントの種類。 この値には、personZoneDwellTimeEvent または personZoneEnterExitEvent のいずれかを指定できます。
detectionsId array このイベントをトリガーした人検出の一意識別子のサイズ 1 の配列
properties collection 値のコレクション
trackinId string 検出された人の一意識別子
status string 多角形を越える方向 ("Enter" または "Exit")
side INT 人が越えた多角形の辺の数。 各辺は、ゾーンを表す多角形の 2 つの頂点の間の番号付きのエッジです。 多角形にある最初の 2 つの頂点間のエッジは、最初の辺を表します。 オクルージョンが原因でイベントが特定の側に関連付けられていない場合、'Side' は空です。 たとえば、人の姿が消えたにも関わらずゾーンの辺を横切る姿が見られなかった際に出たことが検出されたり、ゾーン内に人の姿が見られるにも関わらず、辺を横切っているのが見られなかった際に入りが発生したりなどです。
dwellTime float 人がゾーンで過ごした時間を表すミリ秒数。 このフィールドは、イベントの種類が personZoneDwellTimeEvent の場合に指定されます。
dwellFrames INT 人がゾーン内にいたフレーム数。 このフィールドは、イベントの種類が personZoneDwellTimeEvent の場合に指定されます。
dwellTimeForTargetSide float 人がゾーン内にいて target_side に向いていた時間を表すミリ秒数。 このフィールドは、CAMERACALIBRATOR_NODE_CONFIG enable_orientationTrue にあり、target_side の値が SPACEANALYTICS_CONFIG に設定されている場合に指定されます。
avgSpeed float ゾーン内の人の平均速度。 単位は foot per second (ft/s) です。
minSpeed float ゾーン内の人の最小速度。 単位は foot per second (ft/s) です。
zone string 越えられたゾーンを表す多角形の "name" フィールド
Detections フィールド名 Type 説明
id string 検出 ID
type string 検出の種類
region collection 値のコレクション
type string 領域の種類
points collection 領域の種類が RECTANGLE の場合の、左上と右下のポイント
groundOrientationAngle float 推論された地上平面での人の向きの時計回りの角度
mappedImageOrientation float 2D イメージ空間における人の向きの時計回りの予測角度
speed float 検出された人の推定速度。 単位は foot per second (ft/s) です。
confidence float アルゴリズムの信頼度
attributes array 属性の配列。 各属性は、ラベル、タスク、および信頼度で構成されます
label string 属性値 (たとえば、{label: face_mask} は、検出されたユーザーが顔マスクを装着していることを示します)
confidence (attribute) float 範囲 0 から 1 の属性信頼度値 (たとえば、{confidence: 0.9, label: face_nomask} は、検出された人がフェイス マスクを着用していないことを示します)
task string 属性分類タスク/クラス

persondistance AI 分析情報の JSON 形式

この操作によって出力される検出のサンプル 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"
}
イベント フィールド名 Type 説明
id string イベント ID
type string イベントの種類
detectionsId array このイベントをトリガーした人検出の一意識別子のサイズ 1 の配列
properties collection 値のコレクション
personCount INT イベントの生成時に検出された人数
averageDistance float 検出されたすべての人の間の平均距離 (フィート単位)
minimumDistanceThreshold float 人と人との距離がその距離よりも近いときに "TooClose" イベントをトリガーする距離 (フィート単位)。
maximumDistanceThreshold float 人と人との距離がその距離よりも離れているときに "TooFar" イベントをトリガーする距離 (フィート単位)。
eventName string イベント名は、TooClose (minimumDistanceThreshold に違反している場合)、TooFar (maximumDistanceThreshold に違反している場合)、または unknown (自動調整が完了していない場合) です
distanceViolationPersonCount INT minimumDistanceThreshold または maximumDistanceThreshold の違反で検出された人数
zone string 人と人との間の距離について監視されていたゾーンを表す多角形の "name" フィールド
trigger string SPACEANALYTICS_CONFIG の trigger の値に応じて、トリガーの種類は "event" または "interval" になります。
Detections フィールド名 Type 説明
id string 検出 ID
type string 検出の種類
region collection 値のコレクション
type string 領域の種類
points collection 領域の種類が RECTANGLE の場合の、左上と右下のポイント
confidence float アルゴリズムの信頼度
centerGroundPointX/centerGroundPointY 2 つの浮動小数点値 地面上での人の推論された位置の座標の x および y 値 (フィート単位)。 xy は、フロアが階層であると仮定した場合の床面上の座標です。 カメラの位置は原点です。

centerGroundPoint では、x は、カメラから、カメラのイメージ プレーンに垂直な人物までの距離のコンポーネントです。 y は、カメラのイメージ プレーンと平行な距離のコンポーネントです。

Example center ground point

この例では centerGroundPoint{centerGroundPointX: 4, centerGroundPointY: 5} です。 これは、カメラから前に 4 フィート、右に 5 フィートの場所に、部屋を見下ろしている人がいることを意味します。

SourceInfo フィールド名 Type 説明
id string Camera ID (カメラ ID)
timestamp 日付 JSON ペイロードが生成された UTC 日付
width INT ビデオ フレームの幅
height INT ビデオ フレームの高さ
frameId INT フレーム識別子
cameraCallibrationInfo collection 値のコレクション
status string state[;progress description] の形式での調整の状態。 状態は、CalibratingRecalibrating (再調整が有効な場合)、または Calibrated になります。 進行状況の説明部分は、現在の調整プロセスの進行状況を示すために使用される Calibrating および Recalibrating 状態の場合にのみ有効です。
cameraHeight float 地面からのカメラの高さ (フィート単位)。 これは自動調整から推論されます。
focalLength float カメラの焦点距離 (ピクセル単位)。 これは自動調整から推論されます。
tiltUpAngle float 垂直線からのカメラの傾斜角度。 これは自動調整から推論されます。

spatialanalysis AI 分析情報の JSON 形式

この操作の出力は構成された events によって異なります。たとえば、この操作用に構成された zonecrossing のイベントがある場合、出力は cognitiveservices.vision.spatialanalysis-personcrossingpolygon と同じになります。

コンテナーによって生成された出力を使用する

空間分析の検出またはイベントをアプリケーションに統合することをお勧めします。 検討すべきいくつかの方法を次に示します。

  • 選択したプログラミング言語の Azure Event Hub SDK を使用して、Azure IoT Hub エンドポイントに接続し、イベントを受信します。 詳細については、「デバイスからクラウドへのメッセージを組み込みのエンドポイントから読み取る」をご覧ください。
  • イベントを他のエンドポイントに送信したり、イベントをデータ ストレージに保存したりするには、Azure IoT Hub のメッセージ ルーティングを設定します。 詳細については、IoT Hub メッセージ ルーティングに関する記事をご覧ください。
  • 到着したイベントをリアルタイムで処理し、視覚化を作成する Azure Stream Analytics ジョブを設定します。

空間分析操作を大規模に展開する (複数のカメラ)

GPU のパフォーマンスと使用率を最大限に引き出すために、グラフ インスタンスを使用して複数のカメラに空間分析操作を展開できます。 15 台のカメラで cognitiveservices.vision.spatialanalysis-personcrossingline 操作を実行する場合の構成例を次に示します。

  "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) のままにします。これは、バッチがサポートされないことを示します。

次のステップ