Åtgärder för rumslig analys

Med rumslig analys kan du analysera videoströmmar från kameraenheter i realtid. För varje kameraenhet som du konfigurerar genereras en utdataström med JSON-meddelanden som skickas till din instans av Azure IoT Hub.

Containern Spatial Analysis implementerar följande åtgärder. Du kan konfigurera dessa åtgärder i distributionsmanifestet för containern.

Åtgärdsidentifierare beskrivning
cognitiveservices.vision.spatialanalysis-personcount Räknar personer i en angiven zon i kamerans synfält. Zonen måste vara helt täckt av en enda kamera för att PersonCount ska kunna registrera en korrekt summa.
Genererar en första personCountEvent-händelse och sedan personCountEvent-händelser när antalet ändras.
cognitiveservices.vision.spatialanalysis-personcrossingline Spårar när en person korsar en angiven linje i kamerans synfält.
Genererar en personLineEvent-händelse när personen korsar linjen och tillhandahåller riktningsinformation.
cognitiveservices.vision.spatialanalysis-personcrossingpolygon Genererar en personZoneEnterExitEvent-händelse när en person går in i eller avslutar den avsedda zonen och tillhandahåller riktningsinformation med sidan av zonen som korsades. Genererar en personZoneDwellTimeEvent när personen lämnar zonen och tillhandahåller riktningsinformation samt antalet millisekunder som personen tillbringade i zonen.
cognitiveservices.vision.spatialanalysis-persondistance Spårar när personer bryter mot en minimidistansregel.
Genererar en personDistanceEvent med jämna mellanrum med platsen för varje avståndsöverträdelse.
cognitiveservices.vision.spatialanalysis Den allmänna åtgärden, som kan användas för att köra alla scenarier som nämns ovan. Det här alternativet är mer användbart när du vill köra flera scenarier på samma kamera eller använda systemresurser (till exempel GPU) mer effektivt.

Alla ovanstående åtgärder är också tillgängliga i versionen .debug av tjänsten (till exempel cognitiveservices.vision.spatialanalysis-personcount.debug). Felsökning har möjlighet att visualisera videorutor när de bearbetas. Du måste köra xhost + på värddatorn för att aktivera visualisering av videoramar och händelser.

Viktigt!

Azure AI Vision AI-modellerna identifierar och hittar mänsklig närvaro i videofilmer och matar ut en avgränsningsruta runt kroppen. AI-modellerna försöker inte identifiera enskilda personers identiteter eller demografi.

Åtgärdsparametrar

Följande är de parametrar som krävs av var och en av åtgärderna för rumslig analys.

Åtgärdsparametrar beskrivning
Operation ID Åtgärdsidentifieraren från tabellen ovan.
enabled Booleskt värde: sant eller falskt
VIDEO_URL RTSP-url:en för kameraenheten (exempel: rtsp://username:password@url). Spatial Analysis stöder H.264-kodad dataström antingen via RTSP, http eller mp4. Video_URL kan anges som ett dolt base64-strängvärde med hjälp av AES-kryptering, och om video-URL:en är fördunklad måste KEY_ENVIV_ENV den anges som miljövariabler. Exempelverktyget för att generera nycklar och kryptering finns här.
VIDEO_SOURCE_ID Ett eget namn för kameraenheten eller videoströmmen. Detta returneras med JSON-utdata för händelsen.
VIDEO_IS_LIVE Sant för kameraenheter; false för inspelade videor.
VIDEO_DECODE_GPU_INDEX Vilken GPU som ska avkoda videoramen. Som standard är den 0. Bör vara samma som i den andra nodkonfigurationen gpu_index som DETECTOR_NODE_CONFIG och CAMERACALIBRATOR_NODE_CONFIG.
INPUT_VIDEO_WIDTH Mata in video/ströms bildbredd (till exempel 1920). Det här är ett valfritt fält och om det tillhandahålls skalas ramen till den här dimensionen samtidigt som proportionen bevaras.
DETECTOR_NODE_CONFIG JSON som anger vilken GPU som ska köra detektornoden på. Det bör vara i följande format: "{ \"gpu_index\": 0 }",
TRACKER_NODE_CONFIG JSON som anger om hastigheten ska beräknas i trackernoden eller inte. Det bör vara i följande format: "{ \"enable_speed\": true }",
CAMERA_CONFIG JSON som anger de kalibrerade kameraparametrarna för flera kameror. Om den kunskap du använde kräver kalibrering och du redan har kameraparametern kan du använda den här konfigurationen för att tillhandahålla dem direkt. Ska vara i följande format: "{ \"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 används för att identifiera varje kamera. Det kan hämtas från händelsen source_info vi publicerade. Den börjar bara gälla när do_calibration=false den är i DETECTOR_NODE_CONFIG.
CAMERACALIBRATOR_NODE_CONFIG JSON som anger vilken GPU som ska köra kamerans kalibratornod på och om kalibrering ska användas eller inte. Det bör vara i följande format: "{ \"gpu_index\": 0, \"do_calibration\": true, \"enable_orientation\": true}",
CALIBRATION_CONFIG JSON som anger parametrar för att styra hur kamerakalibreringen fungerar. Det bör vara i följande format: "{\"enable_recalibration\": true, \"quality_check_frequency_seconds\": 86400}",
SPACEANALYTICS_CONFIG JSON-konfiguration för zon och linje enligt beskrivningen nedan.
ENABLE_FACE_MASK_CLASSIFIER True för att aktivera identifiering av personer som bär ansiktsmasker i videoströmmen för False att inaktivera den. Som standard är detta inaktiverat. Ansiktsmaskidentifiering kräver att indataparametern för videobredd är 1920 "INPUT_VIDEO_WIDTH": 1920. Ansiktsmaskattributet returneras inte om identifierade personer inte är riktade mot kameran eller är för långt från den. Mer information finns i kameraplaceringen.
STATIONARY_TARGET_REMOVER_CONFIG JSON som anger parametrarna för stationär målborttagning, vilket lägger till möjligheten att lära sig och ignorera långsiktiga stationära falska positiva mål som skyltdockor eller personer i bilder. Konfigurationen bör ha följande format: "{\"enable\": true, \"bbox_dist_threshold-in_pixels\": 5, \"buffer_length_in_seconds\": 3600, \"filter_ratio\": 0.2 }"

Inställningar för detektornodparameter

Följande är ett exempel på parametrarna DETECTOR_NODE_CONFIG för alla spatiala analysåtgärder.

{
"gpu_index": 0,
"enable_breakpad": false
}
Namn Type Description
gpu_index sträng Det GPU-index som den här åtgärden ska köras på.
enable_breakpad bool Anger om du vill aktivera breakpad, som används för att generera en kraschdump för felsökning. Det är false som standard. Om du ställer in den på truemåste du också lägga "CapAdd": ["SYS_PTRACE"] till i delen HostConfig av containern createOptions. Som standard laddas kraschdumpen upp till Appen RealTimePersonTracking AppCenter. Om du vill att kraschdumparna ska laddas upp till din egen AppCenter-app kan du åsidosätta miljövariabeln RTPT_APPCENTER_APP_SECRET med appens apphemlighet.

Kamera inställningar för kalibreringsnodparameter

Följande är ett exempel på parametrarna CAMERACALIBRATOR_NODE_CONFIG för alla rumsliga analysåtgärder.

{
  "gpu_index": 0,
  "do_calibration": true,
  "enable_breakpad": false,
  "enable_orientation": true
}
Namn Type Description
do_calibration sträng Anger att kalibrering är aktiverat. do_calibration måste vara sant för att cognitiveservices.vision.spatialanalysis-persondistance ska fungera korrekt. do_calibration anges som standard till True.
enable_breakpad bool Anger om du vill aktivera breakpad, som används för att generera en kraschdump för felsökning. Det är false som standard. Om du ställer in den på truemåste du också lägga "CapAdd": ["SYS_PTRACE"] till i delen HostConfig av containern createOptions. Som standard laddas kraschdumpen upp till Appen RealTimePersonTracking AppCenter. Om du vill att kraschdumparna ska laddas upp till din egen AppCenter-app kan du åsidosätta miljövariabeln RTPT_APPCENTER_APP_SECRET med appens apphemlighet.
enable_orientation bool Anger om du vill beräkna orienteringen för de identifierade personerna eller inte. enable_orientation anges som standard till True.

Kalibreringskonfiguration

Det här är ett exempel på parametrarna CALIBRATION_CONFIG för alla rumsliga analysåtgärder.

{
  "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
}
Namn Type Beskrivning
enable_recalibration bool Anger om automatisk omkalibrering är aktiverat. Standard är true.
calibration_quality_check_frequency_seconds heltal Minsta antal sekunder mellan varje kvalitetskontroll för att avgöra om om omkalibrering krävs eller inte. Standardvärdet är 86400 (24 timmar). Används endast när enable_recalibration=True.
calibration_quality_check_sample_collect_frequency_seconds heltal Minsta antal sekunder mellan insamling av nya dataexempel för omkalibrering och kvalitetskontroll. Standardvärdet är 300 (5 minuter). Används endast när enable_recalibration=True.
calibration_quality_check_one_round_sample_collect_num heltal Minsta antal nya dataexempel som ska samlas in per omgång exempelinsamling. Standard är 10. Används endast när enable_recalibration=True.
calibration_quality_check_queue_max_size heltal Maximalt antal dataexempel som ska lagras när kameramodellen kalibreras. Standard är 1000. Används endast när enable_recalibration=True.
calibration_event_frequency_seconds heltal Utdatafrekvens (sekunder) för kamerakalibreringshändelser. Värdet -1 anger att kamerakalibreringen inte ska skickas om inte kamerakalibreringsinformationen har ändrats. Standard är -1.

Kamera kalibreringsutdata

Följande är ett exempel på utdata från kamerakalibrering om det är aktiverat. Ellipser anger mer av samma typ av objekt i en lista.

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

Mer information om source_infofinns i Utdata för spatial analysåtgärd.

Fältnamn för ZonePlacementInfo Typ Beskrivning
optimalZonePolygon objekt En polygon i kamerabilden där linjer eller zoner för dina åtgärder kan placeras för optimala resultat.
Varje värdepar representerar x,y för hörn i en polygon. Polygonen representerar de områden där personer spåras eller räknas och polygonpunkter baseras på normaliserade koordinater (0–1), där det övre vänstra hörnet är (0,0, 0,0) och det nedre högra hörnet är (1,0, 1,0).
fairZonePolygon objekt En polygon i kamerabilden där linjer eller zoner för dina åtgärder kan placeras för gott, men kanske inte optimalt, resultat.
Se optimalZonePolygon ovan för en detaljerad förklaring av innehållet.
uniformlySpacedPersonBoundingBoxes lista En lista över avgränsningsrutor med personer i kamerabilden som distribueras enhetligt i verkligt utrymme. Värdena baseras på normaliserade koordinater (0–1).
personBoundingBoxGroundPoints lista En lista över koordinater på golvplanet i förhållande till kameran. Varje koordinat motsvarar den nedre högra delen av avgränsningsrutan i uniformlySpacedPersonBoundingBoxes med samma index.
Mer information om hur koordinaterna på golvplanet beräknas finns i fälten centerGroundPointX/centerGroundPointY under JSON-formatet för cognitiveservices.vision.spatialanalysis-persondistance Alla insikter.

Exempel på utdata för zonplaceringsinformation som visualiserats på en videoram: Zone placement info visualization

Zonens placeringsinformation innehåller förslag på dina konfigurationer, men riktlinjerna i Kamera konfiguration måste fortfarande följas för bästa resultat.

Inställningar för trackernodparameter

Du kan konfigurera hastighetsberäkningen via parameterinställningarna för trackernoden.

{
"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
}
Namn Type Beskrivning
enable_speed bool Anger om du vill beräkna hastigheten för de identifierade personerna eller inte. enable_speed anges som standard till True. Vi rekommenderar starkt att du aktiverar både hastighet och orientering för att ha de bästa uppskattade värdena.
remove_stationary_objects bool Anger om du vill ta bort stationära objekt. remove_stationary_objects anges som standard till Sant.
stationary_objects_dist_threshold_in_pixels heltal Tröskelvärdet för grannskapsavstånd för att avgöra om två identifieringsrutor kan behandlas som samma identifiering. stationary_objects_dist_threshold_in_pixels anges som standard till 5.
stationary_objects_buffer_length_in_seconds heltal Den minsta tid i sekunder som systemet måste se tillbaka för att avgöra om ett mål är ett stationärt mål eller inte. stationary_objects_buffer_length_in_seconds anges som standard till 3600.
stationary_objects_filter_ratio flyttal Om ett mål identifieras upprepade gånger på samma plats (definierat i stationary_objects_dist_threshold_in_pixels) för större stationary_objects_filter_ratio (0,2 innebär 20 %) av stationary_objects_buffer_length_in_seconds tidsintervallet, behandlas det som ett stationärt mål. stationary_objects_filter_ratio anges som standard till 0.2.

Konfiguration och utdata för spatial analysåtgärder

Zonkonfiguration för personcount

Följande är ett exempel på en JSON-indata för parametern SPACEANALYTICS_CONFIG som konfigurerar en zon. Du kan konfigurera flera zoner för den här åtgärden.

{
  "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"
          }
        }
      ]
    }
  ]
}
Namn Type Description
zones lista Lista över zoner.
name sträng Eget namn för den här zonen.
polygon lista Varje värdepar representerar x,y för hörn i en polygon. Polygonen representerar de områden där personer spåras eller räknas. Polygonpunkter baseras på normaliserade koordinater (0–1), där det övre vänstra hörnet är (0,0, 0,0) och det nedre högra hörnet är (1.0, 1.0).
threshold flyttal Händelser utgående när personen är större än det här antalet bildpunkter i zonen. Det här är ett valfritt fält och värdet är i förhållande (0–1). Till exempel kommer värdet 0,0253 att vara 13 bildpunkter på en video med bildbredd = 512 (0,0253 X 512 = ~13).
type sträng För cognitiveservices.vision.spatialanalysis-personcount bör detta vara count.
trigger sträng Typ av utlösare för att skicka en händelse. Värden som stöds är event för att skicka händelser när antalet ändras eller interval för att skicka händelser regelbundet, oavsett om antalet har ändrats eller inte.
output_frequency heltal Den hastighet med vilken händelser utgåendes. När output_frequency = X utlöss varje X-händelse, t.ex. output_frequency = 2 innebär att varannan händelse är utdata. output_frequency Gäller både event och interval.
focus sträng Punktplatsen i personens avgränsningsruta som används för att beräkna händelser. Fokus värde kan vara footprint (fotavtrycket för person), bottom_center (den nedre mitten av personens avgränsningsruta), center (mitten av personens avgränsningsruta).

Linjekonfiguration för personcrossingline

Följande är ett exempel på en JSON-indata för parametern SPACEANALYTICS_CONFIG som konfigurerar en rad. Du kan konfigurera flera korsningslinjer för den här åtgärden.

{
   "lines": [
       {
           "name": "doorcamera",
           "line": {
               "start": {
                   "x": 0,
                   "y": 0.5
               },
               "end": {
                   "x": 1,
                   "y": 0.5
               }
           },
           "events": [
               {
                   "type": "linecrossing",
                   "config": {
                       "trigger": "event",
                       "focus": "footprint"
                   }
               }
           ]
       }
   ]
}
Namn Type Description
lines lista Lista över rader.
name sträng Eget namn för den här raden.
line lista Definitionen av raden. Det här är en riktningslinje som gör att du kan förstå "entry" kontra "exit".
start värdepar x, y koordinater för linjens startpunkt. Flyttalvärdena representerar hörnens position i förhållande till det övre vänstra hörnet. Om du vill beräkna de absoluta x- och y-värdena multiplicerar du dessa värden med bildrutestorleken.
end värdepar x, y koordinater för radens slutpunkt. Flyttalvärdena representerar hörnens position i förhållande till det övre vänstra hörnet. Om du vill beräkna de absoluta x- och y-värdena multiplicerar du dessa värden med bildrutestorleken.
threshold flyttal Händelser utgående när personen är större än det här antalet bildpunkter i zonen. Det här är ett valfritt fält och värdet är i förhållande (0–1). Till exempel kommer värdet 0,0253 att vara 13 bildpunkter på en video med bildbredd = 512 (0,0253 X 512 = ~13).
type sträng För cognitiveservices.vision.spatialanalysis-personcrossingline bör detta vara linecrossing.
trigger sträng Typ av utlösare för att skicka en händelse.
Värden som stöds: "händelse": utlöses när någon korsar linjen.
focus sträng Punktplatsen i personens avgränsningsruta som används för att beräkna händelser. Fokus värde kan vara footprint (fotavtrycket för person), bottom_center (den nedre mitten av personens avgränsningsruta), center (mitten av personens avgränsningsruta). Standardvärdet är fotavtryck.

Zonkonfiguration för personcrossingpolygon

Det här är ett exempel på en JSON-indata för parametern SPACEANALYTICS_CONFIG som konfigurerar en zon. Du kan konfigurera flera zoner för den här åtgärden.

{
"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"
               }
           }]
   }]
}
Namn Type Description
zones lista Lista över zoner.
name sträng Eget namn för den här zonen.
polygon lista Varje värdepar representerar x,y för hörn av polygon. Polygonen representerar de områden där personer spåras eller räknas. Flyttalvärdena representerar hörnens position i förhållande till det övre vänstra hörnet. Om du vill beräkna de absoluta x- och y-värdena multiplicerar du dessa värden med bildrutestorleken.
target_side heltal Anger en sida av zonen som definieras av polygon för att mäta hur länge personer möter den sidan i zonen. "dwellTimeForTargetSide" matar ut den uppskattade tiden. Varje sida är en numrerad kant mellan de två hörnen i polygonen som representerar din zon. Till exempel representerar kanten mellan de två första hörnen i polygonen den första sidan, 'side'=1. Värdet för target_side är mellan [0,N-1] var N är antalet sidor i polygon. Det här är ett valfritt fält.
threshold flyttal Händelser utgående när personen är större än det här antalet bildpunkter i zonen. Det här är ett valfritt fält och värdet är i förhållande (0–1). Till exempel kommer värdet 0,074 att vara 38 bildpunkter på en video med bildbredd = 512 (0,074 X 512 = ~38).
type sträng För cognitiveservices.vision.spatialanalysis-personcrossingpolygon bör detta vara zonecrossing eller zonedwelltime.
trigger sträng Typ av utlösare för att skicka en händelse
Värden som stöds: "händelse": utlöses när någon går in i eller avslutar zonen.
focus sträng Punktplatsen i personens avgränsningsruta som används för att beräkna händelser. Fokus värde kan vara footprint (fotavtrycket för person), bottom_center (den nedre mitten av personens avgränsningsruta), center (mitten av personens avgränsningsruta). Standardvärdet är fotavtryck.

Zonkonfiguration för persondistance

Det här är ett exempel på en JSON-indata för parametern SPACEANALYTICS_CONFIG som konfigurerar en zon för cognitiveservices.vision.spatialanalysis-persondistance. Du kan konfigurera flera zoner för den här åtgärden.

{
"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"
          }
          }]
   }]
}
Namn Type Description
zones lista Lista över zoner.
name sträng Eget namn för den här zonen.
polygon lista Varje värdepar representerar x,y för hörn av polygon. Polygonen representerar de områden där människor räknas och avståndet mellan människor mäts. Flyttalvärdena representerar hörnens position i förhållande till det övre vänstra hörnet. Om du vill beräkna de absoluta x- och y-värdena multiplicerar du dessa värden med bildrutestorleken.
threshold flyttal Händelser utgående när personen är större än det här antalet bildpunkter i zonen. Det här är ett valfritt fält och värdet är i förhållande (0–1). Till exempel kommer värdet 0,0253 att vara 13 bildpunkter på en video med bildbredd = 512 (0,0253 X 512 = ~13).
type sträng För cognitiveservices.vision.spatialanalysis-persondistance bör detta vara persondistance.
trigger sträng Typ av utlösare för att skicka en händelse. Värden som stöds är event för att skicka händelser när antalet ändras eller interval för att skicka händelser regelbundet, oavsett om antalet har ändrats eller inte.
output_frequency heltal Den hastighet med vilken händelser utgåendes. När output_frequency = X utlöss varje X-händelse, t.ex. output_frequency = 2 innebär att varannan händelse är utdata. output_frequency Gäller både event och interval.
minimum_distance_threshold flyttal Ett avstånd i fötterna som utlöser en "TooClose"-händelse när människor är mindre än avståndet ifrån varandra.
maximum_distance_threshold flyttal Ett avstånd i fötterna som utlöser en "TooFar"-händelse när personer är större än avståndet ifrån varandra.
aggregation_method sträng Metoden för aggregerat persondistance resultat. Aggregation_method gäller både mode och average.
focus sträng Punktplatsen i personens avgränsningsruta som används för att beräkna händelser. Fokus värde kan vara footprint (fotavtrycket för person), bottom_center (den nedre mitten av personens avgränsningsruta), center (mitten av personens avgränsningsruta).

Konfiguration för spatialanalysis

Följande är ett exempel på en JSON-indata för parametern SPACEANALYTICS_CONFIG som konfigurerar en linje och zon för cognitiveservices.vision.spatialanalysis. Du kan konfigurera flera rader/zoner för den här åtgärden och varje rad/zon kan ha olika händelser.

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

Kamera konfiguration

Mer information om hur du konfigurerar zoner och linjer finns i riktlinjerna för kameraplacering .

Utdata för spatial analysåtgärd

Händelserna från varje åtgärd överförs till Azure IoT Hub i JSON-format.

JSON-format för personcount Alla insikter

Exempel på JSON för en händelse som utdata från den här åtgärden.

{
    "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"
}
Namn på händelsefält Typ Description
id sträng Händelse-ID
type sträng Händelsetyp
detectionsId matris Matris med storlek 1 av unik identifierare för den personidentifiering som utlöste den här händelsen
properties Samling Samling med värden
trackinId sträng Unik identifierare för den identifierade personen
zone sträng Fältet "namn" för polygonen som representerar den zon som korsades
trigger sträng Utlösartypen är "händelse" eller "intervall" beroende på värdet trigger för i SPACEANALYTICS_CONFIG
Namn på identifieringsfält Typ Description
id sträng Identifierings-ID
type sträng Identifieringstyp
region Samling Samling med värden
type sträng Typ av region
points Samling Övre vänstra och nedre högra punkter när regiontypen är REKTANGEL
confidence flyttal Algoritmförtroende
attributes matris Matris med attribut. Varje attribut består av etikett, uppgift och konfidens
label sträng Attributvärdet (anger till exempel {label: face_mask} att den identifierade personen bär en ansiktsmask)
confidence (attribute) flyttal Attributets konfidensvärde med intervallet 0 till 1 (anger till exempel {confidence: 0.9, label: face_nomask} att den identifierade personen inte bär ansiktsmask)
task sträng Uppgift/klass för attributklassificering
SourceInfo-fältnamn Typ Description
id sträng Kamera ID
timestamp datum UTC-datum då JSON-nyttolasten skickades
width heltal Bredd på videoram
height heltal Höjd på videoram
frameId heltal Ramidentifierare
cameraCallibrationInfo Samling Samling med värden
status sträng Kalibreringens status i formatet state[;progress description]. Tillståndet kan vara Calibrating, Recalibrating (om omkalibrering är aktiverat) eller Calibrated. Förloppsbeskrivningsdelen är endast giltig när den är i Calibrating och Recalibrating tillstånd, vilket används för att visa förloppet för den aktuella kalibreringsprocessen.
cameraHeight flyttal Kamerans höjd ovanför marken i fot. Detta härleds från autokalibrering.
focalLength flyttal Kamerans brännvidd i bildpunkter. Detta härleds från autokalibrering.
tiltUpAngle flyttal Kamerans lutningsvinkel från lodrätt. Detta härleds från autokalibrering.

JSON-format för personcrossingline Alla insikter

Exempel på JSON för identifieringar som utdata från den här åtgärden.

{
    "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"
}
Namn på händelsefält Typ Description
id sträng Händelse-ID
type sträng Händelsetyp
detectionsId matris Matris med storlek 1 av unik identifierare för den personidentifiering som utlöste den här händelsen
properties Samling Samling med värden
trackinId sträng Unik identifierare för den identifierade personen
status sträng Riktning för linjekorsningar, antingen "CrossLeft" eller "CrossRight". Riktningen baseras på att föreställa sig stående vid "start" mot "slutet" av linjen. CrossRight korsar från vänster till höger. CrossLeft korsar från höger till vänster.
orientationDirection sträng Orienteringsriktningen för den identifierade personen efter att ha korsat linjen. Värdet kan vara "Left", "Right, or 'Straight". Det här värdet är utdata om enable_orientation det är inställt på True i CAMERACALIBRATOR_NODE_CONFIG
zone sträng Fältet "namn" för den linje som korsades
Namn på identifieringsfält Typ Description
id sträng Identifierings-ID
type sträng Identifieringstyp
region Samling Samling med värden
type sträng Typ av region
points Samling Övre vänstra och nedre högra punkter när regiontypen är REKTANGEL
groundOrientationAngle flyttal Den medurs radiska vinkeln för personens orientering på det härledda markplanet
mappedImageOrientation flyttal Den projicerade medurs radiska vinkeln för personens orientering på 2D-bildutrymmet
speed flyttal Den uppskattade hastigheten för den identifierade personen. Enheten är foot per second (ft/s)
confidence flyttal Algoritmförtroende
attributes matris Matris med attribut. Varje attribut består av etikett, uppgift och konfidens
label sträng Attributvärdet (anger till exempel {label: face_mask} att den identifierade personen bär en ansiktsmask)
confidence (attribute) flyttal Attributets konfidensvärde med intervallet 0 till 1 (anger till exempel {confidence: 0.9, label: face_nomask} att den identifierade personen inte bär ansiktsmask)
task sträng Uppgift/klass för attributklassificering
SourceInfo-fältnamn Typ Description
id sträng Kamera ID
timestamp datum UTC-datum då JSON-nyttolasten skickades
width heltal Bredd på videoram
height heltal Höjd på videoram
frameId heltal Ramidentifierare

Viktigt!

AI-modellen identifierar en person oavsett om personen är riktad mot eller bort från kameran. AI-modellen kör inte ansiktsigenkänning och genererar ingen biometrisk information.

JSON-format för personcrossingpolygon Alla insikter

Exempel på JSON för identifieringar som utdata från den här åtgärden med zonecrossing typen 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"
}

Exempel på JSON för identifieringar som utdata från den här åtgärden med zonedwelltime typen 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"
}
Namn på händelsefält Typ Description
id sträng Händelse-ID
type sträng Händelsetyp. Värdet kan vara antingen personZoneDwellTimeEvent eller personZoneEnterExitEvent
detectionsId matris Matris med storlek 1 av unik identifierare för den personidentifiering som utlöste den här händelsen
properties Samling Samling med värden
trackinId sträng Unik identifierare för den identifierade personen
status sträng Riktning för polygonkorsningar, antingen "Retur" eller "Exit"
side heltal Antalet av polygonens sida som personen korsade. Varje sida är en numrerad kant mellan de två hörnen i polygonen som representerar din zon. Kanten mellan de två första hörnen i polygonen representerar första sidan. Sidan är tom när händelsen inte är associerad med en specifik sida på grund av ocklusion. Till exempel inträffade en utgång när en person försvann men inte sågs korsa en sida av zonen, eller när en inmatning inträffade när en person dök upp i zonen men inte sågs korsa en sida.
dwellTime flyttal Antalet millisekunder som representerar den tid som personen tillbringade i zonen. Det här fältet anges när händelsetypen är personZoneDwellTimeEvent
dwellFrames heltal Antalet bildrutor som personen tillbringade i zonen. Det här fältet anges när händelsetypen är personZoneDwellTimeEvent
dwellTimeForTargetSide flyttal Antalet millisekunder som representerar den tid som personen tillbringade i zonen och var vänd mot target_side. Det här fältet anges när enable_orientation är True i CAMERACALIBRATOR_NODE_CONFIG och värdet target_side för anges i SPACEANALYTICS_CONFIG
avgSpeed flyttal Medelhastigheten för personen i zonen. Enheten är foot per second (ft/s)
minSpeed flyttal Minsta hastighet för personen i zonen. Enheten är foot per second (ft/s)
zone sträng Fältet "namn" för polygonen som representerar den zon som korsades
Namn på identifieringsfält Typ Description
id sträng Identifierings-ID
type sträng Identifieringstyp
region Samling Samling med värden
type sträng Typ av region
points Samling Övre vänstra och nedre högra punkter när regiontypen är REKTANGEL
groundOrientationAngle flyttal Den medurs radiska vinkeln för personens orientering på det härledda markplanet
mappedImageOrientation flyttal Den projicerade medurs radiska vinkeln för personens orientering på 2D-bildutrymmet
speed flyttal Den uppskattade hastigheten för den identifierade personen. Enheten är foot per second (ft/s)
confidence flyttal Algoritmförtroende
attributes matris Matris med attribut. Varje attribut består av etikett, uppgift och konfidens
label sträng Attributvärdet (anger till exempel {label: face_mask} att den identifierade personen bär en ansiktsmask)
confidence (attribute) flyttal Attributets konfidensvärde med intervallet 0 till 1 (anger till exempel {confidence: 0.9, label: face_nomask} att den identifierade personen inte bär ansiktsmask)
task sträng Uppgift/klass för attributklassificering

JSON-format för Alla insikter

Exempel på JSON för identifieringar som utdata från den här åtgärden.

{
    "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"
}
Namn på händelsefält Typ Description
id sträng Händelse-ID
type sträng Händelsetyp
detectionsId matris Matris med storlek 1 av unik identifierare för den personidentifiering som utlöste den här händelsen
properties Samling Samling med värden
personCount heltal Antal personer som identifierades när händelsen avgavs
averageDistance flyttal Det genomsnittliga avståndet mellan alla identifierade personer i fötterna
minimumDistanceThreshold flyttal Avståndet i fötter som utlöser en "TooClose"-händelse när människor är mindre än avståndet ifrån varandra.
maximumDistanceThreshold flyttal Avståndet i fötter som utlöser en "TooFar"-händelse när människor är större än avståndet ifrån varandra.
eventName sträng Händelsenamnet är TooClose med minimumDistanceThreshold är kränkt, TooFar när maximumDistanceThreshold överträds eller unknown när autoskalning inte har slutförts
distanceViolationPersonCount heltal Antal personer som upptäckts i strid med minimumDistanceThreshold eller maximumDistanceThreshold
zone sträng Fältet "namn" i polygonen som representerar den zon som övervakades för distansering mellan personer
trigger sträng Utlösartypen är "händelse" eller "intervall" beroende på värdet trigger för i SPACEANALYTICS_CONFIG
Namn på identifieringsfält Typ Description
id sträng Identifierings-ID
type sträng Identifieringstyp
region Samling Samling med värden
type sträng Typ av region
points Samling Övre vänstra och nedre högra punkter när regiontypen är REKTANGEL
confidence flyttal Algoritmförtroende
centerGroundPointX/centerGroundPointY 2 flyttalsvärden x, y värden med koordinaterna för personens härledda plats på marken i fötterna. x och y är koordinater på golvet planet, förutsatt att golvet är nivå. Kamerans plats är ursprunget.

x I centerGroundPointär komponenten i avståndet från kameran till den person som är vinkelrät mot kamerabildplanet. y är den del av avståndet som är parallell med kamerabildplanet.

Example center ground point

I det här exemplet centerGroundPoint är {centerGroundPointX: 4, centerGroundPointY: 5}. Det betyder att det finns en person fyra meter före kameran och 1,5 meter till höger, som tittar på rummet uppifrån och ner.

SourceInfo-fältnamn Typ Description
id sträng Kamera ID
timestamp datum UTC-datum då JSON-nyttolasten skickades
width heltal Bredd på videoram
height heltal Höjd på videoram
frameId heltal Ramidentifierare
cameraCallibrationInfo Samling Samling med värden
status sträng Kalibreringens status i formatet state[;progress description]. Tillståndet kan vara Calibrating, Recalibrating (om omkalibrering är aktiverat) eller Calibrated. Förloppsbeskrivningsdelen är endast giltig när den är i Calibrating och Recalibrating tillstånd, vilket används för att visa förloppet för den aktuella kalibreringsprocessen.
cameraHeight flyttal Kamerans höjd ovanför marken i fot. Detta härleds från autokalibrering.
focalLength flyttal Kamerans brännvidd i bildpunkter. Detta härleds från autokalibrering.
tiltUpAngle flyttal Kamerans lutningsvinkel från lodrätt. Detta härleds från autokalibrering.

JSON-format för spatialanalysis Alla insikter

Utdata för den här åtgärden beror på konfigurerad events, till exempel om en händelse har konfigurerats zonecrossing för den här åtgärden kommer utdata att vara samma som cognitiveservices.vision.spatialanalysis-personcrossingpolygon.

Använda utdata som genereras av containern

Du kanske vill integrera spatial analysidentifiering eller händelser i ditt program. Här följer några metoder att tänka på:

  • Använd Azure Event Hubs SDK för ditt valda programmeringsspråk för att ansluta till Azure IoT Hub-slutpunkten och ta emot händelserna. Mer information finns i Läsa meddelanden från enhet till moln från den inbyggda slutpunkten.
  • Konfigurera meddelanderoutning på din Azure IoT Hub för att skicka händelserna till andra slutpunkter eller spara händelserna i din datalagring. Mer information finns i IoT Hub-meddelanderoutning.
  • Konfigurera ett Azure Stream Analytics-jobb för att bearbeta händelserna i realtid när de anländer och skapa visualiseringar.

Distribuera spatiala analysåtgärder i stor skala (flera kameror)

För att få bästa prestanda och användning av GPU:er kan du distribuera alla spatiala analysåtgärder på flera kameror med hjälp av grafinstanser. Nedan visas en exempelkonfiguration för att köra cognitiveservices.vision.spatialanalysis-personcrossingline åtgärden på 15 kameror.

  "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>"
                }
            }
          }
        },
      }
  }
Namn Type Beskrivning
batch_size heltal Om alla kameror har samma upplösning ställer du in batch_size på antalet kameror som ska användas i den åtgärden, annars inställt batch_size på 1 eller lämna den som standard (1), vilket indikerar att ingen batch stöds.

Nästa steg