Bewerkingen voor ruimtelijke analyse

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": 1920is. 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 createOptionstoevoegen"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 createOptionstoevoegen"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: Zone placement info visualization

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 zonecrossingzonedwelltime.
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 Calibratingzijn , 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.

Example center ground point

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 Calibratingzijn , 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.

Volgende stappen