Åtgärder för rumslig analys
Viktigt!
Den 30 mars 2025 dras Azure AI Vision Spatial Analysis tillbaka. Övergå till Azure AI Video Indexer eller en annan lösning med öppen källkod före det angivna datumet. Vi rekommenderar att du byter tidigare för att få de rikare fördelarna med Azure AI Video Indexer. Förutom de välbekanta funktioner som du använder, här är en snabb jämförelse mellan Azure AI Vision Spatial Analysis och Azure AI Video Indexer.
Funktion | Rumslig analys i Azure AI Vision | Azure AI Video Indexer |
---|---|---|
Edge-stöd | Ja | Ja |
Objektidentifiering | Person- och fordonsidentifiering | Identifierar över 1 000 objekt |
Ljud-/talbearbetning | Stöds inte | Stöds (inkluderar talranskription, översättning och sammanfattning) Stöds >(inkluderar talranskription och attitydanalys) |
Händelseidentifiering och spårning | Stöds (spåra personer och fordon, händelseidentifiering) | Stöds inte på Edge ännu. Stöds delvis i molnet. |
Stöd för Azure Arc | Stöds inte | Internt stöd |
Fokusområde | Visuell analys med specialiserad spårning | Omfattande analys av både ljud- och visuellt innehåll |
Från och med nu fram till den 30 mars 2025 kan du fortsätta att använda Azure AI Vision Spatial Analysis eller övergå till Azure AI Video Indexer före det angivna datumet. Efter den 30 mars 2025 stöds inte längre containern Spatial Analysis och kommer att sluta bearbeta nya strömmar.
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_ENV IV_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å true må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. |
Inställningar för parameterinställningar för kamerakalibreringsnod
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å true må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 . |
Utdata för kamerakalibrering
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_info
finns 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:
Zonens placeringsinformation innehåller förslag på dina konfigurationer, men riktlinjerna i Kamerakonfiguration 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"
}
}
]
}
]
}
Kamerakonfiguration
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.
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. |