Bewerkingen voor ruimtelijke analyse
Belangrijk
Op 30 maart 2025 wordt Azure AI Vision Spatial Analysis buiten gebruik gesteld. Stap over naar Azure AI Video Indexer of een andere opensource-oplossing vóór de opgegeven datum. We raden u aan om sneller over te stappen om de rijkere voordelen van Azure AI Video Indexer te verkrijgen. Naast de vertrouwde functies die u gebruikt, kunt u hier een snelle vergelijking maken tussen Ruimtelijke analyse van Azure AI Vision en Azure AI Video Indexer.
Functie | Ruimtelijke analyse van Azure AI Vision | Azure AI Video Indexer |
---|---|---|
Edge-ondersteuning | Ja | Ja |
Objectdetectie | Alleen detectie van personen en voertuigen | Detecteert meer dan 1000 objecten |
Audio/spraakverwerking | Niet ondersteund | Ondersteund (inclusief spraaktranscriptie, vertaling en samenvatting) Ondersteund >(inclusief spraaktranscriptie en sentimentanalyse) |
Gebeurtenisdetectie en -tracering | Ondersteund (tracering van personen en voertuigen, gebeurtenisdetectie) | Wordt nog niet ondersteund in Edge. Wordt gedeeltelijk ondersteund in de cloud. |
Ondersteuning voor Azure Arc | Niet ondersteund | Systeemeigen ondersteuning |
Focusgebied | Visuele analyse met gespecialiseerde tracering | Uitgebreide analyse van zowel audio- als visuele inhoud |
Vanaf nu tot en met 30 maart 2025 kunt u Azure AI Vision Spatial Analysis blijven gebruiken of vóór de opgegeven datum overstappen op Azure AI Video Indexer . Na 30 maart 2025 wordt de container ruimtelijke analyse niet meer ondersteund en wordt de verwerking van nieuwe streams gestopt.
Met ruimtelijke analyse kunt u videostreams van cameraapparaten in realtime analyseren. Voor elk cameraapparaat dat u configureert, genereren de bewerkingen voor ruimtelijke analyse een uitvoerstroom van JSON-berichten die naar uw exemplaar van Azure IoT Hub worden verzonden.
De container Ruimtelijke analyse implementeert de volgende bewerkingen. U kunt deze bewerkingen configureren in het implementatiemanifest van uw container.
Bewerkings-id | Beschrijving |
---|---|
cognitiveservices.vision.spatialanalysis-personcount |
Telt personen in een aangewezen zone in het weergaveveld van de camera. De zone moet volledig worden gedekt door één camera, zodat PersonCount een nauwkeurig totaal kan opnemen. Verzendt een eerste personCountEvent-gebeurtenis en vervolgens personCountEvent-gebeurtenissen wanneer het aantal verandert. |
cognitiveservices.vision.spatialanalysis-personcrossingline |
Houdt bij wanneer een persoon een aangewezen lijn overschrijdt in het gezichtsveld van de camera. Hiermee wordt een personLineEvent-gebeurtenis verzonden wanneer de persoon de lijn overschrijdt en aanwijzingen verstrekt. |
cognitiveservices.vision.spatialanalysis-personcrossingpolygon |
Hiermee wordt een personZoneEnterExitEvent-gebeurtenis verzonden wanneer een persoon de aangewezen zone binnenkomt of verlaat en aanwijzingen verstrekt aan de zijkant van de zone die is gekruist. Hiermee wordt een personZoneDwellTimeEvent verzonden wanneer de persoon de zone verlaat en aanwijzingen verstrekt, evenals het aantal milliseconden dat de persoon in de zone heeft doorgebracht. |
cognitiveservices.vision.spatialanalysis-persondistance |
Houdt bij wanneer mensen een regel voor minimale afstand schenden. Verzendt periodiek een personDistanceEvent met de locatie van elke schending van de afstand. |
cognitiveservices.vision.spatialanalysis |
De algemene bewerking, die kan worden gebruikt om alle hierboven genoemde scenario's uit te voeren. Deze optie is handiger als u meerdere scenario's op dezelfde camera wilt uitvoeren of systeembronnen (bijvoorbeeld de GPU) wilt gebruiken. |
Alle bovenstaande bewerkingen zijn ook beschikbaar in de .debug
versie van de service (bijvoorbeeld cognitiveservices.vision.spatialanalysis-personcount.debug
). Foutopsporing biedt de mogelijkheid om videoframes te visualiseren terwijl ze worden verwerkt. U moet op de hostcomputer worden uitgevoerd xhost +
om de visualisatie van videoframes en gebeurtenissen in te schakelen.
Belangrijk
De Ai-modellen van Azure AI Vision detecteren en lokaliseren menselijke aanwezigheid in videobeelden en voeren een begrenzingsvak rond het menselijk lichaam uit. De AI-modellen proberen de identiteiten of demografische gegevens van personen niet te detecteren.
Bewerkingsparameters
Hier volgen de parameters die vereist zijn voor elk van de ruimtelijke analysebewerkingen.
Bewerkingsparameters | Beschrijving |
---|---|
Operation ID |
De bewerkings-id uit de bovenstaande tabel. |
enabled |
Booleaanse waarde: waar of onwaar |
VIDEO_URL |
De RTSP-URL voor het cameraapparaat (bijvoorbeeld: rtsp://username:password@url ). Ruimtelijke analyse ondersteunt H.264 gecodeerde stream via RTSP, http of mp4. Video_URL kan worden opgegeven als een verborgen base64-tekenreekswaarde met behulp van AES-versleuteling en als de video-URL wordt KEY_ENV verborgen en IV_ENV moet worden opgegeven als omgevingsvariabelen. Hier vindt u voorbeeldhulpprogramma voor het genereren van sleutels en versleuteling. |
VIDEO_SOURCE_ID |
Een beschrijvende naam voor het cameraapparaat of de videostream. Dit wordt geretourneerd met de JSON-uitvoer van de gebeurtenis. |
VIDEO_IS_LIVE |
Waar voor cameraapparaten; onwaar voor opgenomen video's. |
VIDEO_DECODE_GPU_INDEX |
Welke GPU het videoframe decoderen. Standaard is dit 0. Moet hetzelfde zijn als de configuratie van het gpu_index andere knooppunt, zoals DETECTOR_NODE_CONFIG en CAMERACALIBRATOR_NODE_CONFIG . |
INPUT_VIDEO_WIDTH |
De breedte van het frame van de invoervideo/stream (bijvoorbeeld 1920). Dit is een optioneel veld en indien opgegeven, wordt het frame geschaald naar deze dimensie, terwijl de hoogte-breedteverhouding behouden blijft. |
DETECTOR_NODE_CONFIG |
JSON die aangeeft op welke GPU het detectorknooppunt moet worden uitgevoerd. Deze moet de volgende indeling hebben: "{ \"gpu_index\": 0 }", |
TRACKER_NODE_CONFIG |
JSON die aangeeft of de rekensnelheid in het tracker-knooppunt moet worden berekend of niet. Deze moet de volgende indeling hebben: "{ \"enable_speed\": true }", |
CAMERA_CONFIG |
JSON die de gekalibreerde cameraparameters voor meerdere camera's aangeeft. Als de vaardigheid die u hebt gebruikt kalibratie vereist en u de cameraparameter al hebt, kunt u deze configuratie gebruiken om ze rechtstreeks op te geven. Moet de volgende indeling hebben: "{ \"cameras\": [{\"source_id\": \"endcomputer.0.persondistancegraph.detector+end_computer1\", \"camera_height\": 13.105561256408691, \"camera_focal_length\": 297.60003662109375, \"camera_tiltup_angle\": 0.9738943576812744}] }" , de source_id wordt gebruikt om elke camera te identificeren. Het kan worden verkregen van het source_info evenement dat we hebben gepubliceerd. Het zal alleen van kracht worden als do_calibration=false het binnenkomt DETECTOR_NODE_CONFIG . |
CAMERACALIBRATOR_NODE_CONFIG |
JSON die aangeeft op welke GPU het camera-kalibratorknooppunt moet worden uitgevoerd en of kalibratie moet worden gebruikt of niet. Deze moet de volgende indeling hebben: "{ \"gpu_index\": 0, \"do_calibration\": true, \"enable_orientation\": true}", |
CALIBRATION_CONFIG |
JSON die parameters aangeeft om te bepalen hoe de camerakalibratie werkt. Deze moet de volgende indeling hebben: "{\"enable_recalibration\": true, \"quality_check_frequency_seconds\": 86400}", |
SPACEANALYTICS_CONFIG |
JSON-configuratie voor zone en regel, zoals hieronder wordt beschreven. |
ENABLE_FACE_MASK_CLASSIFIER |
True om het detecteren van mensen met gezichtsmaskers in de videostream False in te schakelen. Dit is standaard uitgeschakeld. Detectie van gezichtsmasker vereist dat de parameter voor de breedte van de invoervideo 1920 "INPUT_VIDEO_WIDTH": 1920 is. Het gezichtsmaskerkenmerk wordt niet geretourneerd als gedetecteerde personen niet naar de camera kijken of te ver van de camera zijn. Zie de plaatsing van de camera voor meer informatie. |
STATIONARY_TARGET_REMOVER_CONFIG |
JSON die de parameters voor stationaire doelverwijdering aangeeft, waarmee de mogelijkheid wordt toegevoegd om stationaire fout-positieve doelen op lange termijn te leren en negeren, zoals mannequins of mensen in foto's. De configuratie moet de volgende indeling hebben: "{\"enable\": true, \"bbox_dist_threshold-in_pixels\": 5, \"buffer_length_in_seconds\": 3600, \"filter_ratio\": 0.2 }" |
Parameterinstellingen voor detectorknooppunt
Hier volgt een voorbeeld van de DETECTOR_NODE_CONFIG
parameters voor alle ruimtelijke analysebewerkingen.
{
"gpu_index": 0,
"enable_breakpad": false
}
Name | Type | Omschrijving |
---|---|---|
gpu_index |
tekenreeks | De GPU-index waarop deze bewerking wordt uitgevoerd. |
enable_breakpad |
bool | Geeft aan of breakpad moet worden ingeschakeld, dat wordt gebruikt om een crashdump te genereren voor foutopsporing. Dit is false standaard. Als u dit instelt op true , moet u ook het deel van de HostConfig container createOptions toevoegen"CapAdd": ["SYS_PTRACE"] . Standaard wordt de crashdump geüpload naar de AppCenter-app RealTimePersonTracking AppCenter, als u wilt dat de crashdumps worden geüpload naar uw eigen AppCenter-app, kunt u de omgevingsvariabele RTPT_APPCENTER_APP_SECRET overschrijven met het app-geheim van uw app. |
Parameterinstellingen voor camerakalibratieknooppunt
Hier volgt een voorbeeld van de CAMERACALIBRATOR_NODE_CONFIG
parameters voor alle ruimtelijke analysebewerkingen.
{
"gpu_index": 0,
"do_calibration": true,
"enable_breakpad": false,
"enable_orientation": true
}
Name | Type | Omschrijving |
---|---|---|
do_calibration |
tekenreeks | Geeft aan dat kalibratie is ingeschakeld.
do_calibration moet waar zijn voor cognitiveservices.vision.spatialanalysis-persondistance om goed te kunnen functioneren.
do_calibration is standaard ingesteld op True . |
enable_breakpad |
bool | Geeft aan of breakpad moet worden ingeschakeld, dat wordt gebruikt om een crashdump te genereren voor foutopsporing. Dit is false standaard. Als u dit instelt op true , moet u ook het deel van de HostConfig container createOptions toevoegen"CapAdd": ["SYS_PTRACE"] . Standaard wordt de crashdump geüpload naar de AppCenter-app RealTimePersonTracking AppCenter, als u wilt dat de crashdumps worden geüpload naar uw eigen AppCenter-app, kunt u de omgevingsvariabele RTPT_APPCENTER_APP_SECRET overschrijven met het app-geheim van uw app. |
enable_orientation |
bool | Geeft aan of u de afdrukstand voor de gedetecteerde personen wilt berekenen of niet.
enable_orientation is standaard ingesteld op True . |
Kalibratieconfiguratie
Dit is een voorbeeld van de CALIBRATION_CONFIG
parameters voor alle ruimtelijke analysebewerkingen.
{
"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
}
Name | Type | Description |
---|---|---|
enable_recalibration |
bool | Hiermee wordt aangegeven of automatische herlibratie is ingeschakeld. Standaard is true . |
calibration_quality_check_frequency_seconds |
int | Minimaal aantal seconden tussen elke kwaliteitscontrole om te bepalen of herkalibratie al dan niet nodig is. De standaardwaarde is 86400 (24 uur). Alleen gebruikt wanneer enable_recalibration=True . |
calibration_quality_check_sample_collect_frequency_seconds |
int | Minimum aantal seconden tussen het verzamelen van nieuwe gegevensvoorbeelden voor herlibratie en kwaliteitscontrole. De standaardwaarde is 300 (5 minuten). Alleen gebruikt wanneer enable_recalibration=True . |
calibration_quality_check_one_round_sample_collect_num |
int | Minimaal aantal nieuwe gegevensvoorbeelden dat per ronde van de steekproefverzameling moet worden verzameld. Standaard is 10 . Alleen gebruikt wanneer enable_recalibration=True . |
calibration_quality_check_queue_max_size |
int | Maximum aantal gegevensvoorbeelden dat moet worden opgeslagen wanneer het cameramodel is gekalibreerd. Standaard is 1000 . Alleen gebruikt wanneer enable_recalibration=True . |
calibration_event_frequency_seconds |
int | Uitvoerfrequentie (seconden) van camerakalibratie-gebeurtenissen. Een waarde van -1 geeft aan dat de kalibratie van de camera niet mag worden verzonden, tenzij de kalibratiegegevens van de camera zijn gewijzigd. Standaard is -1 . |
Kalibratie-uitvoer van camera
Hier volgt een voorbeeld van de uitvoer van camerakalibratie, indien ingeschakeld. Drie puntjes geven meer van hetzelfde type objecten in een lijst aan.
{
"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
}
]
}
}
Zie de uitvoer van de ruimtelijke analysebewerking voor meer informatie over source_info
.
Veldnaam ZonePlacementInfo | Type | Description |
---|---|---|
optimalZonePolygon |
object | Een veelhoek in de cameraafbeelding waar lijnen of zones voor uw bewerkingen kunnen worden geplaatst voor optimale resultaten. Elk waardepaar vertegenwoordigt de x,y voor hoekpunten van een veelhoek. De veelhoek vertegenwoordigt de gebieden waarin mensen worden bijgehouden of geteld en veelhoekpunten zijn gebaseerd op genormaliseerde coördinaten (0-1), waarbij de linkerbovenhoek zich bevindt (0,0, 0,0) en de rechterbenedenhoek is (1,0, 1.0). |
fairZonePolygon |
object | Een veelhoek in de cameraafbeelding waar lijnen of zones voor uw bewerkingen goed kunnen worden geplaatst, maar mogelijk niet optimaal, resultaten. Zie optimalZonePolygon hierboven voor een uitgebreide uitleg van de inhoud. |
uniformlySpacedPersonBoundingBoxes |
lijst | Een lijst met begrenzingsvakken van personen binnen de cameraafbeelding die gelijkmatig in de echte ruimte zijn verdeeld. Waarden zijn gebaseerd op genormaliseerde coördinaten (0-1). |
personBoundingBoxGroundPoints |
lijst | Een lijst met coördinaten op het vloervlak ten opzichte van de camera. Elke coördinaat komt overeen met de rechterbenedenhoek van het begrenzingsvak met uniformlySpacedPersonBoundingBoxes dezelfde index. Zie de centerGroundPointX/centerGroundPointY velden onder de JSON-indeling voor cognitiveservices.vision.spatialanalysis-persondistance AI-inzichten sectie voor meer informatie over hoe coördinaten op het vloervlak worden berekend. |
Voorbeeld van de uitvoer van zoneplaatsingsgegevens die zijn gevisualiseerd op een videoframe:
De zoneplaatsingsinformatie bevat suggesties voor uw configuraties, maar de richtlijnen in de cameraconfiguratie moeten nog steeds worden gevolgd voor de beste resultaten.
Parameterinstellingen voor trackerknooppunt
U kunt de snelheidsberekening configureren via de parameterinstellingen van het tracker-knooppunt.
{
"enable_speed": true,
"remove_stationary_objects": true,
"stationary_objects_dist_threshold_in_pixels": 5,
"stationary_objects_buffer_length_in_seconds": 3600,
"stationary_objects_filter_ratio": 0.2
}
Name | Type | Description |
---|---|---|
enable_speed |
bool | Geeft aan of u de snelheid voor de gedetecteerde personen wilt berekenen of niet.
enable_speed is standaard ingesteld op True . Het wordt ten zeerste aanbevolen dat u zowel de snelheid als de stand inschakelt om de beste geschatte waarden te hebben. |
remove_stationary_objects |
bool | Hiermee wordt aangegeven of u stationaire objecten wilt verwijderen.
remove_stationary_objects is standaard ingesteld op True. |
stationary_objects_dist_threshold_in_pixels |
int | De drempelwaarde voor buurtafstand om te bepalen of twee detectievakken kunnen worden behandeld als dezelfde detectie.
stationary_objects_dist_threshold_in_pixels is standaard ingesteld op 5. |
stationary_objects_buffer_length_in_seconds |
int | De minimale tijdsduur in seconden die het systeem moet terugkijken om te bepalen of een doel een stationair doel is of niet.
stationary_objects_buffer_length_in_seconds is standaard ingesteld op 3600. |
stationary_objects_filter_ratio |
zwevend | Als een doel herhaaldelijk wordt gedetecteerd op dezelfde locatie (gedefinieerd in stationary_objects_dist_threshold_in_pixels ) voor groter stationary_objects_filter_ratio (0,2 betekent 20%) van het tijdsinterval, wordt het stationary_objects_buffer_length_in_seconds beschouwd als een stationair doel.
stationary_objects_filter_ratio is standaard ingesteld op 0.2. |
Configuratie en uitvoer van ruimtelijke analysebewerkingen
Zoneconfiguratie voor aantal personen
Hier volgt een voorbeeld van een JSON-invoer voor de parameter SPACEANALYTICS_CONFIG waarmee een zone wordt geconfigureerd. U kunt meerdere zones voor deze bewerking configureren.
{
"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"
}
}
]
}
]
}
Name | Type | Omschrijving |
---|---|---|
zones |
lijst | Lijst met zones. |
name |
tekenreeks | Beschrijvende naam voor deze zone. |
polygon |
lijst | Elk waardepaar vertegenwoordigt de x,y voor hoekpunten van een veelhoek. De veelhoek vertegenwoordigt de gebieden waarin mensen worden bijgehouden of geteld. Veelhoekpunten zijn gebaseerd op genormaliseerde coördinaten (0-1), waarbij de linkerbovenhoek (0,0, 0.0) en de rechterbenedenhoek is (1,0, 1.0). |
threshold |
zwevend | Gebeurtenissen worden uitgaand wanneer de persoon groter is dan dit aantal pixels in de zone. Dit is een optioneel veld en de waarde is in verhouding (0-1). De waarde 0,0253 is bijvoorbeeld 13 pixels op een video met afbeeldingsbreedte = 512 (0,0253 X 512 = ~13). |
type |
tekenreeks | Voor cognitiveservices.vision.spatialanalysis-personcount moet dit zijn count . |
trigger |
tekenreeks | Het type trigger voor het verzenden van een gebeurtenis. Ondersteunde waarden zijn event voor het verzenden van gebeurtenissen wanneer het aantal verandert of interval voor het periodiek verzenden van gebeurtenissen, ongeacht of het aantal is gewijzigd of niet. |
output_frequency |
int | De snelheid waarmee gebeurtenissen uitgaand zijn. Wanneer output_frequency = X, wordt elke X-gebeurtenis egressed, ex.
output_frequency = 2 betekent dat elke andere gebeurtenis uitvoer is. De output_frequency is van toepassing op zowel event als interval . |
focus |
tekenreeks | De puntlocatie binnen het begrenzingsvak van de persoon die wordt gebruikt om gebeurtenissen te berekenen. De waarde van de focus kan zijn footprint (de voetafdruk van de persoon), bottom_center (het onderste midden van het begrenzingsvak van de persoon), center (het midden van het begrenzingsvak van de persoon). |
Lijnconfiguratie voor personcrossingline
Hier volgt een voorbeeld van een JSON-invoer voor de SPACEANALYTICS_CONFIG
parameter waarmee een regel wordt geconfigureerd. U kunt meerdere kruislijnen configureren voor deze bewerking.
{
"lines": [
{
"name": "doorcamera",
"line": {
"start": {
"x": 0,
"y": 0.5
},
"end": {
"x": 1,
"y": 0.5
}
},
"events": [
{
"type": "linecrossing",
"config": {
"trigger": "event",
"focus": "footprint"
}
}
]
}
]
}
Name | Type | Omschrijving |
---|---|---|
lines |
lijst | Lijst met regels. |
name |
tekenreeks | Beschrijvende naam voor deze regel. |
line |
lijst | De definitie van de lijn. Dit is een richtingslijn waarmee u 'entry' versus 'exit' kunt begrijpen. |
start |
waardepaar | x, y-coördinaten voor het beginpunt van de lijn. De floatwaarden vertegenwoordigen de positie van het hoekpunt ten opzichte van de linkerbovenhoek. Als u de absolute x, y-waarden wilt berekenen, vermenigvuldigt u deze waarden met de framegrootte. |
end |
waardepaar | x, y-coördinaten voor het eindpunt van de lijn. De floatwaarden vertegenwoordigen de positie van het hoekpunt ten opzichte van de linkerbovenhoek. Als u de absolute x, y-waarden wilt berekenen, vermenigvuldigt u deze waarden met de framegrootte. |
threshold |
zwevend | Gebeurtenissen worden uitgaand wanneer de persoon groter is dan dit aantal pixels in de zone. Dit is een optioneel veld en de waarde is in verhouding (0-1). De waarde 0,0253 is bijvoorbeeld 13 pixels op een video met afbeeldingsbreedte = 512 (0,0253 X 512 = ~13). |
type |
tekenreeks | Voor cognitiveservices.vision.spatialanalysis-personcrossingline moet dit zijn linecrossing . |
trigger |
tekenreeks | Het type trigger voor het verzenden van een gebeurtenis. Ondersteunde waarden: 'gebeurtenis': wordt geactiveerd wanneer iemand de lijn overschrijdt. |
focus |
tekenreeks | De puntlocatie binnen het begrenzingsvak van de persoon die wordt gebruikt om gebeurtenissen te berekenen. De waarde van de focus kan zijn footprint (de voetafdruk van de persoon), bottom_center (het onderste midden van het begrenzingsvak van de persoon), center (het midden van het begrenzingsvak van de persoon). De standaardwaarde is footprint. |
Zoneconfiguratie voor personcrossingpolygon
Dit is een voorbeeld van een JSON-invoer voor de SPACEANALYTICS_CONFIG
parameter waarmee een zone wordt geconfigureerd. U kunt meerdere zones voor deze bewerking configureren.
{
"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"
}
}]
}]
}
Name | Type | Omschrijving |
---|---|---|
zones |
lijst | Lijst met zones. |
name |
tekenreeks | Beschrijvende naam voor deze zone. |
polygon |
lijst | Elk waardepaar vertegenwoordigt de x,y voor hoekpunten van veelhoek. De veelhoek vertegenwoordigt de gebieden waarin mensen worden bijgehouden of geteld. De floatwaarden vertegenwoordigen de positie van het hoekpunt ten opzichte van de linkerbovenhoek. Als u de absolute x, y-waarden wilt berekenen, vermenigvuldigt u deze waarden met de framegrootte. |
target_side |
int | Hiermee geeft u een zijde van de zone die is polygon gedefinieerd om te meten hoelang mensen die kant zien terwijl ze zich in de zone bevinden. 'dwellTimeForTargetSide' levert die geschatte tijd op. Elke zijde is een genummerde rand tussen de twee hoekpunten van de veelhoek die uw zone vertegenwoordigt. De rand tussen de eerste twee hoekpunten van de veelhoek vertegenwoordigt bijvoorbeeld de eerste kant, 'side'=1. De waarde is target_side tussen [0,N-1] waar N het aantal zijden van de polygon . Dit is een optioneel veld. |
threshold |
zwevend | Gebeurtenissen worden uitgaand wanneer de persoon groter is dan dit aantal pixels in de zone. Dit is een optioneel veld en de waarde is in verhouding (0-1). De waarde 0,074 is bijvoorbeeld 38 pixels op een video met afbeeldingsbreedte = 512 (0,074 X 512 = ~38). |
type |
tekenreeks | Voor cognitiveservices.vision.spatialanalysis-personcrossingpolygon moet dit of zonecrossing zonedwelltime . |
trigger |
tekenreeks | Het type trigger voor het verzenden van een gebeurtenis Ondersteunde waarden: 'gebeurtenis': wordt geactiveerd wanneer iemand de zone binnenkomt of verlaat. |
focus |
tekenreeks | De puntlocatie binnen het begrenzingsvak van de persoon die wordt gebruikt om gebeurtenissen te berekenen. De waarde van de focus kan zijn footprint (de voetafdruk van de persoon), bottom_center (het onderste midden van het begrenzingsvak van de persoon), center (het midden van het begrenzingsvak van de persoon). De standaardwaarde is footprint. |
Zoneconfiguratie voor persondistance
Dit is een voorbeeld van een JSON-invoer voor de SPACEANALYTICS_CONFIG
parameter waarmee een zone voor cognitiveservices.vision.spatialanalysis-persondistance wordt geconfigureerd. U kunt meerdere zones voor deze bewerking configureren.
{
"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"
}
}]
}]
}
Name | Type | Omschrijving |
---|---|---|
zones |
lijst | Lijst met zones. |
name |
tekenreeks | Beschrijvende naam voor deze zone. |
polygon |
lijst | Elk waardepaar vertegenwoordigt de x,y voor hoekpunten van veelhoek. De veelhoek vertegenwoordigt de gebieden waarin mensen worden geteld en de afstand tussen mensen wordt gemeten. De floatwaarden vertegenwoordigen de positie van het hoekpunt ten opzichte van de linkerbovenhoek. Als u de absolute x, y-waarden wilt berekenen, vermenigvuldigt u deze waarden met de framegrootte. |
threshold |
zwevend | Gebeurtenissen worden uitgaand wanneer de persoon groter is dan dit aantal pixels in de zone. Dit is een optioneel veld en de waarde is in verhouding (0-1). De waarde 0,0253 is bijvoorbeeld 13 pixels op een video met afbeeldingsbreedte = 512 (0,0253 X 512 = ~13). |
type |
tekenreeks | Voor cognitiveservices.vision.spatialanalysis-persondistance moet dit zijn persondistance . |
trigger |
tekenreeks | Het type trigger voor het verzenden van een gebeurtenis. Ondersteunde waarden zijn event voor het verzenden van gebeurtenissen wanneer het aantal verandert of interval voor het periodiek verzenden van gebeurtenissen, ongeacht of het aantal is gewijzigd of niet. |
output_frequency |
int | De snelheid waarmee gebeurtenissen uitgaand zijn. Wanneer output_frequency = X, wordt elke X-gebeurtenis egressed, ex.
output_frequency = 2 betekent dat elke andere gebeurtenis uitvoer is. De output_frequency is van toepassing op zowel event als interval . |
minimum_distance_threshold |
zwevend | Een afstand in voeten die een 'TooClose'-gebeurtenis activeert wanneer mensen minder dan die afstand van elkaar zijn. |
maximum_distance_threshold |
zwevend | Een afstand in voeten die een TooFar-gebeurtenis activeert wanneer mensen groter zijn dan die afstand van elkaar. |
aggregation_method |
tekenreeks | De methode voor het statistische persondistance resultaat. De aggregation_method is van toepassing op zowel mode als average . |
focus |
tekenreeks | De puntlocatie binnen het begrenzingsvak van de persoon die wordt gebruikt om gebeurtenissen te berekenen. De waarde van de focus kan zijn footprint (de voetafdruk van de persoon), bottom_center (het onderste midden van het begrenzingsvak van de persoon), center (het midden van het begrenzingsvak van de persoon). |
Configuratie voor ruimtelijke analyse
Hier volgt een voorbeeld van een JSON-invoer voor de SPACEANALYTICS_CONFIG
parameter waarmee een lijn en zone voor cognitiveservices.vision.spatialanalysis worden geconfigureerd. U kunt meerdere regels/zones configureren voor deze bewerking en elke regel/zone kan verschillende gebeurtenissen hebben.
{
"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"
}
}
]
}
]
}
Cameraconfiguratie
Zie de richtlijnen voor cameraplaatsing voor meer informatie over het configureren van zones en lijnen.
Uitvoer van ruimtelijke analysebewerking
De gebeurtenissen van elke bewerking worden verzonden naar Azure IoT Hub in JSON-indeling.
JSON-indeling voor AI-inzichten
Voorbeeld van JSON voor een gebeurtenisuitvoer door deze bewerking.
{
"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"
}
Naam van gebeurtenisveld | Type | Omschrijving |
---|---|---|
id |
tekenreeks | Gebeurtenis-id |
type |
tekenreeks | Gebeurtenistype |
detectionsId |
matrix | Matrix van grootte 1 van de unieke id van de persoonsdetectie die deze gebeurtenis heeft geactiveerd |
properties |
verzameling | Verzameling waarden |
trackinId |
tekenreeks | Unieke id van de gedetecteerde persoon |
zone |
tekenreeks | Het veld 'naam' van de veelhoek die de zone vertegenwoordigt die is gekruist |
trigger |
tekenreeks | Het triggertype is gebeurtenis of interval, afhankelijk van de waarde in trigger SPACEANALYTICS_CONFIG |
Veldnaam detectie | Type | Omschrijving |
---|---|---|
id |
tekenreeks | Detectie-id |
type |
tekenreeks | Detectietype |
region |
verzameling | Verzameling waarden |
type |
tekenreeks | Type regio |
points |
verzameling | Linksboven en rechtsonder wanneer het gebiedstype RECHTHOEK is |
confidence |
zwevend | Betrouwbaarheid van algoritme |
attributes |
matrix | Matrix met kenmerken. Elk kenmerk bestaat uit label, taak en betrouwbaarheid |
label |
tekenreeks | De kenmerkwaarde (geeft bijvoorbeeld {label: face_mask} aan dat de gedetecteerde persoon een gezichtsmasker draagt) |
confidence (attribute) |
zwevend | De betrouwbaarheidswaarde van het kenmerk met een bereik van 0 tot 1 (geeft bijvoorbeeld {confidence: 0.9, label: face_nomask} aan dat de gedetecteerde persoon geen gezichtsmasker draagt) |
task |
tekenreeks | De kenmerkclassificatietaak/-klasse |
Veldnaam SourceInfo | Type | Omschrijving |
---|---|---|
id |
tekenreeks | Camera-id |
timestamp |
datum | UTC-datum waarop de JSON-nettolading is verzonden |
width |
int | Breedte van videoframe |
height |
int | Hoogte van videoframe |
frameId |
int | Frame-id |
cameraCallibrationInfo |
verzameling | Verzameling waarden |
status |
tekenreeks | De status van de kalibratie in de indeling van state[;progress description] . De status kan Calibrating zijn , Recalibrating (als herlibratie is ingeschakeld) of Calibrated . Het deel van de voortgangsbeschrijving is alleen geldig wanneer het zich in Calibrating en Recalibrating toestand bevindt, die wordt gebruikt om de voortgang van het huidige kalibratieproces weer te geven. |
cameraHeight |
zwevend | De hoogte van de camera boven de grond in voeten. Dit wordt afgeleid van automatischecalibratie. |
focalLength |
zwevend | De brandpuntsafstand van de camera in pixels. Dit wordt afgeleid van automatischecalibratie. |
tiltUpAngle |
zwevend | De hoek van de camera kantelen vanaf verticaal. Dit wordt afgeleid van automatischecalibratie. |
JSON-indeling voor personcrossingline-AI-inzichten
Voorbeeld-JSON voor detectie-uitvoer door deze bewerking.
{
"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"
}
Naam van gebeurtenisveld | Type | Omschrijving |
---|---|---|
id |
tekenreeks | Gebeurtenis-id |
type |
tekenreeks | Gebeurtenistype |
detectionsId |
matrix | Matrix van grootte 1 van de unieke id van de persoonsdetectie die deze gebeurtenis heeft geactiveerd |
properties |
verzameling | Verzameling waarden |
trackinId |
tekenreeks | Unieke id van de gedetecteerde persoon |
status |
tekenreeks | Richting van lijnovergangen, 'CrossLeft' of 'CrossRight'. De richting is gebaseerd op het verbeelden van de 'start' tegenover het 'einde' van de lijn. CrossRight kruist van links naar rechts. CrossLeft kruist van rechts naar links. |
orientationDirection |
tekenreeks | De richting van de gedetecteerde persoon na het oversteken van de lijn. De waarde kan 'Links', 'Rechts' of 'Recht' zijn. Deze waarde is uitvoer als enable_orientation deze is ingesteld op True in CAMERACALIBRATOR_NODE_CONFIG |
zone |
tekenreeks | Het veld 'naam' van de lijn die is overschreden |
Veldnaam detectie | Type | Omschrijving |
---|---|---|
id |
tekenreeks | Detectie-id |
type |
tekenreeks | Detectietype |
region |
verzameling | Verzameling waarden |
type |
tekenreeks | Type regio |
points |
verzameling | Linksboven en rechtsonder wanneer het gebiedstype RECHTHOEK is |
groundOrientationAngle |
zwevend | De klokgewijze radiale hoek van de stand van de persoon op het uitgestelde grondvlak |
mappedImageOrientation |
zwevend | De geprojecteerde radiale hoek van de afdrukstand van de persoon op de 2D-afbeeldingsruimte |
speed |
zwevend | De geschatte snelheid van de gedetecteerde persoon. De eenheid is foot per second (ft/s) |
confidence |
zwevend | Betrouwbaarheid van algoritme |
attributes |
matrix | Matrix met kenmerken. Elk kenmerk bestaat uit label, taak en betrouwbaarheid |
label |
tekenreeks | De kenmerkwaarde (geeft bijvoorbeeld {label: face_mask} aan dat de gedetecteerde persoon een gezichtsmasker draagt) |
confidence (attribute) |
zwevend | De betrouwbaarheidswaarde van het kenmerk met een bereik van 0 tot 1 (geeft bijvoorbeeld {confidence: 0.9, label: face_nomask} aan dat de gedetecteerde persoon geen gezichtsmasker draagt) |
task |
tekenreeks | De kenmerkclassificatietaak/-klasse |
Veldnaam SourceInfo | Type | Omschrijving |
---|---|---|
id |
tekenreeks | Camera-id |
timestamp |
datum | UTC-datum waarop de JSON-nettolading is verzonden |
width |
int | Breedte van videoframe |
height |
int | Hoogte van videoframe |
frameId |
int | Frame-id |
Belangrijk
Het AI-model detecteert een persoon ongeacht of de persoon naar of van de camera gericht is. Het AI-model voert geen gezichtsherkenning uit en verzendt geen biometrische gegevens.
JSON-indeling voor personcrossingpolygon AI-inzichten
Voorbeeld-JSON voor uitvoer van detecties door deze bewerking met zonecrossing
het type 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"
}
Voorbeeld-JSON voor uitvoer van detecties door deze bewerking met zonedwelltime
het type 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"
}
Naam van gebeurtenisveld | Type | Omschrijving |
---|---|---|
id |
tekenreeks | Gebeurtenis-id |
type |
tekenreeks | Gebeurtenistype. De waarde kan personZoneDwellTimeEvent of personZoneEnterExitEvent zijn |
detectionsId |
matrix | Matrix van grootte 1 van de unieke id van de persoonsdetectie die deze gebeurtenis heeft geactiveerd |
properties |
verzameling | Verzameling waarden |
trackinId |
tekenreeks | Unieke id van de gedetecteerde persoon |
status |
tekenreeks | Richting van veelhoekkruisingen, 'Enter' of 'Exit' |
side |
int | Het nummer van de zijkant van de veelhoek die de persoon heeft gekruist. Elke zijde is een genummerde rand tussen de twee hoekpunten van de veelhoek die uw zone vertegenwoordigt. De rand tussen de eerste twee hoekpunten van de veelhoek vertegenwoordigt de eerste kant. 'Side' is leeg wanneer de gebeurtenis niet is gekoppeld aan een specifieke zijde vanwege occlusie. Er is bijvoorbeeld een uitgang opgetreden wanneer een persoon verdween, maar niet werd gezien door een zijde van de zone, of een enter die plaatsvond toen een persoon in de zone verscheen, maar niet werd gezien wanneer hij een zijde kruiste. |
dwellTime |
zwevend | Het aantal milliseconden dat de tijd vertegenwoordigt die de persoon in de zone heeft doorgebracht. Dit veld wordt opgegeven wanneer het gebeurtenistype personZoneDwellTimeEvent is |
dwellFrames |
int | Het aantal frames dat de persoon in de zone heeft doorgebracht. Dit veld wordt opgegeven wanneer het gebeurtenistype personZoneDwellTimeEvent is |
dwellTimeForTargetSide |
zwevend | Het aantal milliseconden dat de tijd vertegenwoordigt die de persoon in de zone heeft doorgebracht en tegenover de target_side . Dit veld wordt opgegeven wanneer enable_orientation het veld zich True bevindt CAMERACALIBRATOR_NODE_CONFIG en de waarde target_side is ingesteld in SPACEANALYTICS_CONFIG |
avgSpeed |
zwevend | De gemiddelde snelheid van de persoon in de zone. De eenheid is foot per second (ft/s) |
minSpeed |
zwevend | De minimale snelheid van de persoon in de zone. De eenheid is foot per second (ft/s) |
zone |
tekenreeks | Het veld 'naam' van de veelhoek die de zone vertegenwoordigt die is gekruist |
Veldnaam detectie | Type | Omschrijving |
---|---|---|
id |
tekenreeks | Detectie-id |
type |
tekenreeks | Detectietype |
region |
verzameling | Verzameling waarden |
type |
tekenreeks | Type regio |
points |
verzameling | Linksboven en rechtsonder wanneer het gebiedstype RECHTHOEK is |
groundOrientationAngle |
zwevend | De klokgewijze radiale hoek van de stand van de persoon op het uitgestelde grondvlak |
mappedImageOrientation |
zwevend | De geprojecteerde radiale hoek van de afdrukstand van de persoon op de 2D-afbeeldingsruimte |
speed |
zwevend | De geschatte snelheid van de gedetecteerde persoon. De eenheid is foot per second (ft/s) |
confidence |
zwevend | Betrouwbaarheid van algoritme |
attributes |
matrix | Matrix met kenmerken. Elk kenmerk bestaat uit label, taak en betrouwbaarheid |
label |
tekenreeks | De kenmerkwaarde (geeft bijvoorbeeld {label: face_mask} aan dat de gedetecteerde persoon een gezichtsmasker draagt) |
confidence (attribute) |
zwevend | De betrouwbaarheidswaarde van het kenmerk met een bereik van 0 tot 1 (geeft bijvoorbeeld {confidence: 0.9, label: face_nomask} aan dat de gedetecteerde persoon geen gezichtsmasker draagt) |
task |
tekenreeks | De kenmerkclassificatietaak/-klasse |
JSON-indeling voor persondistance AI-inzichten
Voorbeeld-JSON voor detectie-uitvoer door deze bewerking.
{
"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"
}
Naam van gebeurtenisveld | Type | Omschrijving |
---|---|---|
id |
tekenreeks | Gebeurtenis-id |
type |
tekenreeks | Gebeurtenistype |
detectionsId |
matrix | Matrix van grootte 1 van de unieke id van de persoonsdetectie die deze gebeurtenis heeft geactiveerd |
properties |
verzameling | Verzameling waarden |
personCount |
int | Aantal personen dat is gedetecteerd toen de gebeurtenis werd verzonden |
averageDistance |
zwevend | De gemiddelde afstand tussen alle gedetecteerde personen in voeten |
minimumDistanceThreshold |
zwevend | De afstand in voeten die een "TooClose"-gebeurtenis activeert wanneer mensen minder dan die afstand van elkaar zijn. |
maximumDistanceThreshold |
zwevend | De afstand in voeten die een TooFar-gebeurtenis activeert wanneer mensen groter zijn dan afstand van elkaar. |
eventName |
tekenreeks | Gebeurtenisnaam is TooClose met de minimumDistanceThreshold is geschonden, TooFar wanneer maximumDistanceThreshold wordt geschonden of unknown wanneer automatischecalibratie niet is voltooid |
distanceViolationPersonCount |
int | Aantal gedetecteerde personen in strijd met minimumDistanceThreshold of maximumDistanceThreshold |
zone |
tekenreeks | Het veld 'naam' van de veelhoek die de zone vertegenwoordigt die is gecontroleerd op afstand tussen personen |
trigger |
tekenreeks | Het triggertype is gebeurtenis of interval, afhankelijk van de waarde in trigger SPACEANALYTICS_CONFIG |
Veldnaam detectie | Type | Omschrijving |
---|---|---|
id |
tekenreeks | Detectie-id |
type |
tekenreeks | Detectietype |
region |
verzameling | Verzameling waarden |
type |
tekenreeks | Type regio |
points |
verzameling | Linksboven en rechtsonder wanneer het gebiedstype RECHTHOEK is |
confidence |
zwevend | Betrouwbaarheid van algoritme |
centerGroundPointX/centerGroundPointY |
2 float-waarden |
x , y waarden met de coördinaten van de uitgestelde locatie van de persoon op de grond in voeten.
x en y zijn coördinaten op het vloervlak, ervan uitgaande dat de vloer gelijk is. De locatie van de camera is de oorsprong. |
In centerGroundPoint
, x
is het onderdeel van afstand van de camera naar de persoon die loodrecht op het camerabeeldvlak staat.
y
is het onderdeel van de afstand die parallel is aan het camerabeeldvlak.
In dit voorbeeld centerGroundPoint
is dit {centerGroundPointX: 4, centerGroundPointY: 5}
. Dit betekent dat er een persoon is die vier meter voor de camera staat en vijf meter naar rechts, kijkend naar de kamer boven naar beneden.
Veldnaam SourceInfo | Type | Omschrijving |
---|---|---|
id |
tekenreeks | Camera-id |
timestamp |
datum | UTC-datum waarop de JSON-nettolading is verzonden |
width |
int | Breedte van videoframe |
height |
int | Hoogte van videoframe |
frameId |
int | Frame-id |
cameraCallibrationInfo |
verzameling | Verzameling waarden |
status |
tekenreeks | De status van de kalibratie in de indeling van state[;progress description] . De status kan Calibrating zijn , Recalibrating (als herlibratie is ingeschakeld) of Calibrated . Het deel van de voortgangsbeschrijving is alleen geldig wanneer het zich in Calibrating en Recalibrating toestand bevindt, die wordt gebruikt om de voortgang van het huidige kalibratieproces weer te geven. |
cameraHeight |
zwevend | De hoogte van de camera boven de grond in voeten. Dit wordt afgeleid van automatischecalibratie. |
focalLength |
zwevend | De brandpuntsafstand van de camera in pixels. Dit wordt afgeleid van automatischecalibratie. |
tiltUpAngle |
zwevend | De hoek van de camera kantelen vanaf verticaal. Dit wordt afgeleid van automatischecalibratie. |
JSON-indeling voor ruimtelijke analyse AI-inzichten
De uitvoer van deze bewerking is afhankelijk van geconfigureerd events
, bijvoorbeeld als er een zonecrossing
gebeurtenis is geconfigureerd voor deze bewerking, is de uitvoer hetzelfde als cognitiveservices.vision.spatialanalysis-personcrossingpolygon
.
De uitvoer gebruiken die wordt gegenereerd door de container
Mogelijk wilt u detectie of gebeurtenissen van ruimtelijke analyse integreren in uw toepassing. Hier volgen enkele manieren om rekening mee te houden:
- Gebruik de Azure Event Hubs SDK voor uw gekozen programmeertaal om verbinding te maken met het Azure IoT Hub-eindpunt en de gebeurtenissen te ontvangen. Zie Apparaat-naar-cloud-berichten lezen van het ingebouwde eindpunt voor meer informatie.
- Stel berichtroutering in op uw Azure IoT Hub om de gebeurtenissen naar andere eindpunten te verzenden of sla de gebeurtenissen op in uw gegevensopslag. Zie IoT Hub-berichtroutering voor meer informatie.
- Stel een Azure Stream Analytics-taak in om de gebeurtenissen in realtime te verwerken wanneer ze binnenkomen en visualisaties maken.
Ruimtelijke analysebewerkingen op schaal implementeren (meerdere camera's)
Om de beste prestaties en het beste gebruik van de GPU's te verkrijgen, kunt u eventuele ruimtelijke analysebewerkingen op meerdere camera's implementeren met behulp van grafiekexemplaren. Hieronder ziet u een voorbeeldconfiguratie voor het uitvoeren van de cognitiveservices.vision.spatialanalysis-personcrossingline
bewerking op 15 camera's.
"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>"
}
}
}
},
}
}
Name | Type | Description |
---|---|---|
batch_size |
int | Als alle camera's dezelfde resolutie hebben, stelt u in batch_size op het aantal camera's dat in die bewerking wordt gebruikt, anders ingesteld batch_size op 1 of laat deze staan als standaard (1), wat aangeeft dat er geen batch wordt ondersteund. |