Share via


Operazioni di analisi spaziale

L'analisi spaziale consente di analizzare i flussi video dai dispositivi fotocamera in tempo reale. Per ogni dispositivo fotocamera configurato, le operazioni di analisi spaziale genereranno un flusso di output di messaggi JSON inviati all'istanza di hub IoT di Azure.

Il contenitore Analisi spaziale implementa le operazioni seguenti. È possibile configurare queste operazioni nel manifesto della distribuzione del contenitore.

Identificatore dell'operazione Descrizione
cognitiveservices.vision.spatialanalysis-personcount Conta le persone in una zona designata nel campo di visualizzazione della fotocamera. La zona deve essere completamente coperta da una singola fotocamera per consentire a PersonCount di registrare un totale accurato.
Genera un evento personCountEvent iniziale e quindi eventi personCountEvent quando il conteggio cambia.
cognitiveservices.vision.spatialanalysis-personcrossingline Tiene traccia quando una persona attraversa una linea designata nel campo di visualizzazione della fotocamera.
Genera un evento personLineEvent quando la persona attraversa la linea e fornisce informazioni direzionali.
cognitiveservices.vision.spatialanalysis-personcrossingpolygon Genera un evento personZoneEnterExitEvent quando una persona entra o esce dalla zona designata e fornisce informazioni direzionali sul lato della zona attraversata. Genera una personaZoneDwellTimeEvent quando la persona esce dalla zona e fornisce informazioni direzionali, nonché il numero di millisecondi trascorsi dalla persona all'interno della zona.
cognitiveservices.vision.spatialanalysis-persondistance Tiene traccia di quando le persone violano una regola di distanza minima.
Genera periodicamente una personaDistanceEvent con la posizione di ogni violazione della distanza.
cognitiveservices.vision.spatialanalysis Operazione generica, che può essere usata per eseguire tutti gli scenari indicati in precedenza. Questa opzione è più utile quando si vogliono eseguire più scenari nella stessa fotocamera o usare le risorse di sistema (ad esempio la GPU) in modo più efficiente.

Tutte le operazioni precedenti sono disponibili anche nella .debug versione del servizio , ad esempio cognitiveservices.vision.spatialanalysis-personcount.debug. Il debug offre la possibilità di visualizzare i fotogrammi video durante l'elaborazione. Sarà necessario eseguire xhost + nel computer host per abilitare la visualizzazione di fotogrammi video ed eventi.

Importante

I modelli di intelligenza artificiale di Visione artificiale di Azure rilevano e individuano la presenza umana nei filmati video e generano un rettangolo di selezione intorno al corpo umano. I modelli di intelligenza artificiale non tentano di individuare le identità o i dati demografici degli individui.

Parametri delle operazioni

Di seguito sono riportati i parametri richiesti da ognuna delle operazioni di analisi spaziale.

Parametri delle operazioni Descrizione
Operation ID Identificatore dell'operazione dalla tabella precedente.
enabled Boolean: true o false
VIDEO_URL URL RTSP per il dispositivo fotocamera (esempio: rtsp://username:password@url). L'analisi spaziale supporta il flusso con codifica H.264 tramite RTSP, http o mp4. Video_URL può essere fornito come valore di stringa base64 offuscato usando la crittografia AES e se l'URL video è offuscato KEY_ENV e IV_ENV deve essere fornito come variabili di ambiente. L'utilità di esempio per generare chiavi e crittografia è disponibile qui.
VIDEO_SOURCE_ID Nome descrittivo per il dispositivo fotocamera o il flusso video. Verrà restituito con l'output JSON dell'evento.
VIDEO_IS_LIVE True per i dispositivi fotocamera; false per i video registrati.
VIDEO_DECODE_GPU_INDEX Quale GPU decodificare il fotogramma video. Per impostazione predefinita, è 0. Deve essere uguale a in un'altra configurazione del gpu_index nodo, ad esempio DETECTOR_NODE_CONFIG e CAMERACALIBRATOR_NODE_CONFIG.
INPUT_VIDEO_WIDTH Larghezza fotogramma video/flusso di input (ad esempio, 1920). Si tratta di un campo facoltativo e, se specificato, il frame verrà ridimensionato a questa dimensione mantenendo le proporzioni.
DETECTOR_NODE_CONFIG JSON che indica la GPU in cui eseguire il nodo di rilevamento. Deve essere nel formato seguente: "{ \"gpu_index\": 0 }",
TRACKER_NODE_CONFIG JSON che indica se calcolare o meno la velocità di calcolo nel nodo di rilevamento. Deve essere nel formato seguente: "{ \"enable_speed\": true }",
CAMERA_CONFIG JSON che indica i parametri della fotocamera calibrata per più fotocamere. Se la competenza usata richiede la calibrazione e si dispone già del parametro della fotocamera, è possibile usare questa configurazione per fornirle direttamente. Deve essere nel formato seguente: "{ \"cameras\": [{\"source_id\": \"endcomputer.0.persondistancegraph.detector+end_computer1\", \"camera_height\": 13.105561256408691, \"camera_focal_length\": 297.60003662109375, \"camera_tiltup_angle\": 0.9738943576812744}] }", viene source_id usato per identificare ogni fotocamera. Può essere ottenuto dall'oggetto dell'evento source_info pubblicato. Avrà effetto solo quando do_calibration=false in DETECTOR_NODE_CONFIG.
CAMERACALIBRATOR_NODE_CONFIG JSON che indica la GPU in cui eseguire il nodo del calibratore della fotocamera e se usare o meno la calibrazione. Deve essere nel formato seguente: "{ \"gpu_index\": 0, \"do_calibration\": true, \"enable_orientation\": true}",
CALIBRATION_CONFIG JSON che indica i parametri per controllare il funzionamento della calibrazione della fotocamera. Deve essere nel formato seguente: "{\"enable_recalibration\": true, \"quality_check_frequency_seconds\": 86400}",
SPACEANALYTICS_CONFIG Configurazione JSON per la zona e la riga, come descritto di seguito.
ENABLE_FACE_MASK_CLASSIFIER True per abilitare il rilevamento delle persone che indossano maschere del viso nel flusso video, False per disabilitarlo. Per impostazione predefinita, questa opzione è disabilitata. Il rilevamento della maschera viso richiede che il parametro di larghezza video di input sia 1920 "INPUT_VIDEO_WIDTH": 1920. L'attributo maschera viso non verrà restituito se le persone rilevate non si trovano di fronte alla fotocamera o sono troppo lontane da esso. Per altre informazioni, vedi il posizionamento della fotocamera.
STATIONARY_TARGET_REMOVER_CONFIG JSON che indica i parametri per la rimozione di destinazione fissa, che aggiunge la funzionalità per apprendere e ignorare destinazioni false positive a lungo termine, ad esempio manichini o persone nelle immagini. La configurazione deve essere nel formato seguente: "{\"enable\": true, \"bbox_dist_threshold-in_pixels\": 5, \"buffer_length_in_seconds\": 3600, \"filter_ratio\": 0.2 }"

Impostazioni dei parametri del nodo di Rilevamento

Di seguito è riportato un esempio dei DETECTOR_NODE_CONFIG parametri per tutte le operazioni di analisi spaziale.

{
"gpu_index": 0,
"enable_breakpad": false
}
Nome Tipo Descrzione
gpu_index string Indice GPU in cui verrà eseguita questa operazione.
enable_breakpad bool Indica se abilitare il breakpad, che viene usato per generare un dump di arresto anomalo del sistema per l'uso del debug. false È per impostazione predefinita. Se lo si imposta su true, è necessario aggiungere "CapAdd": ["SYS_PTRACE"] anche nella HostConfig parte del contenitore createOptions. Per impostazione predefinita, il dump di arresto anomalo viene caricato nell'app RealTimePersonTracking AppCenter, se vuoi che i dump di arresto anomalo del sistema vengano caricati nella tua app AppCenter, puoi eseguire l'override della variabile RTPT_APPCENTER_APP_SECRET di ambiente con il segreto dell'app dell'app.

Fotocamera impostazioni dei parametri del nodo di calibrazione

Di seguito è riportato un esempio dei CAMERACALIBRATOR_NODE_CONFIG parametri per tutte le operazioni di analisi spaziale.

{
  "gpu_index": 0,
  "do_calibration": true,
  "enable_breakpad": false,
  "enable_orientation": true
}
Nome Tipo Descrzione
do_calibration string Indica che la calibrazione è attivata. do_calibration deve essere true per il corretto funzionamento di cognitiveservices.vision.spatialanalysis-persondistance . do_calibration è impostato per impostazione predefinita su True.
enable_breakpad bool Indica se abilitare il breakpad, che viene usato per generare un dump di arresto anomalo del sistema per l'uso del debug. false È per impostazione predefinita. Se lo si imposta su true, è necessario aggiungere "CapAdd": ["SYS_PTRACE"] anche nella HostConfig parte del contenitore createOptions. Per impostazione predefinita, il dump di arresto anomalo viene caricato nell'app RealTimePersonTracking AppCenter, se vuoi che i dump di arresto anomalo del sistema vengano caricati nella tua app AppCenter, puoi eseguire l'override della variabile RTPT_APPCENTER_APP_SECRET di ambiente con il segreto dell'app dell'app.
enable_orientation bool Indica se si desidera calcolare o meno l'orientamento per le persone rilevate. enable_orientation è impostato per impostazione predefinita su True.

Configurazione della calibrazione

Questo è un esempio dei CALIBRATION_CONFIG parametri per tutte le operazioni di analisi spaziale.

{
  "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
}
Nome Tipo Descrizione
enable_recalibration bool Indica se la ricalibrazione automatica è attivata. Il valore predefinito è true.
calibration_quality_check_frequency_seconds int Numero minimo di secondi tra ogni controllo di qualità per determinare se è necessaria o meno la ricalibrazione. Il valore predefinito è 86400 (24 ore). Usato solo quando enable_recalibration=True.
calibration_quality_check_sample_collect_frequency_seconds int Numero minimo di secondi tra la raccolta di nuovi campioni di dati per la ricalibrazione e il controllo qualità. Il valore predefinito è 300 (5 minuti). Usato solo quando enable_recalibration=True.
calibration_quality_check_one_round_sample_collect_num int Numero minimo di nuovi campioni di dati da raccogliere per round di raccolta di campioni. Il valore predefinito è 10. Usato solo quando enable_recalibration=True.
calibration_quality_check_queue_max_size int Numero massimo di campioni di dati da archiviare quando il modello di fotocamera è calibrato. Il valore predefinito è 1000. Usato solo quando enable_recalibration=True.
calibration_event_frequency_seconds int Frequenza di output (secondi) degli eventi di calibrazione della fotocamera. Un valore indica -1 che la calibrazione della fotocamera non deve essere inviata a meno che le informazioni di calibrazione della fotocamera non siano state modificate. Il valore predefinito è -1.

Fotocamera output di calibrazione

Di seguito è riportato un esempio dell'output della calibrazione della fotocamera, se abilitato. I puntini di sospensione indicano più dello stesso tipo di oggetti in un elenco.

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

Per informazioni dettagliate su , vedere Output dell'operazione di analisi spaziale.source_info

Nome campo ZonePlacementInfo Tipo Descrizione
optimalZonePolygon oggetto Poligono nell'immagine della fotocamera in cui le linee o le zone per le operazioni possono essere posizionate per ottenere risultati ottimali.
Ogni coppia di valori rappresenta la x,y per i vertici di un poligono. Il poligono rappresenta le aree in cui le persone vengono monitorate o conteggiate e i punti poligono sono basati su coordinate normalizzate (0-1), dove l'angolo superiore sinistro è (0,0, 0,0) e l'angolo inferiore destro è (1,0, 1,0).
fairZonePolygon oggetto Un poligono nell'immagine della fotocamera in cui le linee o le zone per le operazioni possono essere posizionate per un buon risultato, ma possibilmente non ottimale.
Vedere optimalZonePolygon sopra per una spiegazione approfondita del contenuto.
uniformlySpacedPersonBoundingBoxes list Elenco di rettangoli delimitatori di persone all'interno dell'immagine della fotocamera distribuita in modo uniforme nello spazio reale. I valori sono basati su coordinate normalizzate (0-1).
personBoundingBoxGroundPoints list Elenco di coordinate sul piano del pavimento rispetto alla fotocamera. Ogni coordinata corrisponde alla parte inferiore destra del rettangolo di selezione in uniformlySpacedPersonBoundingBoxes con lo stesso indice.
Vedere i centerGroundPointX/centerGroundPointY campi nel formato JSON per cognitiveservices.vision.spatialanalysis-persondistance ai Insights per altri dettagli su come vengono calcolate le coordinate sul piano piano.

Esempio di output delle informazioni di posizionamento della zona visualizzate in un fotogramma video: Zone placement info visualization

Le informazioni sulla posizione della zona forniscono suggerimenti per le configurazioni, ma le linee guida in Fotocamera configurazione devono comunque essere seguite per ottenere risultati ottimali.

Impostazioni dei parametri del nodo tracker

È possibile configurare il calcolo della velocità tramite le impostazioni dei parametri del nodo tracker.

{
"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
}
Nome Tipo Descrizione
enable_speed bool Indica se si desidera calcolare o meno la velocità per le persone rilevate. enable_speed è impostato per impostazione predefinita su True. È consigliabile abilitare sia la velocità che l'orientamento per ottenere i valori stimati migliori.
remove_stationary_objects bool Indica se si desidera rimuovere oggetti stazionari. remove_stationary_objects è impostato per impostazione predefinita su True.
stationary_objects_dist_threshold_in_pixels int Soglia di distanza del quartiere per decidere se due caselle di rilevamento possono essere considerate come lo stesso rilevamento. stationary_objects_dist_threshold_in_pixels è impostato per impostazione predefinita su 5.
stationary_objects_buffer_length_in_seconds int Periodo minimo di tempo in secondi in cui il sistema deve guardare indietro per decidere se una destinazione è un bersaglio fisso o meno. stationary_objects_buffer_length_in_seconds è impostato per impostazione predefinita su 3600.
stationary_objects_filter_ratio float Se una destinazione viene rilevata ripetutamente nella stessa posizione (definita in stationary_objects_dist_threshold_in_pixels) per maggiore stationary_objects_filter_ratio (0,2 indica il 20%) dell'intervallo stationary_objects_buffer_length_in_seconds di tempo, verrà considerata come destinazione stazionaria. stationary_objects_filter_ratio è impostato per impostazione predefinita su 0.2.

Configurazione e output delle operazioni di analisi spaziale

Configurazione della zona per personcount

Di seguito è riportato un esempio di input JSON per il parametro SPACEANALYTICS_CONFIG che configura una zona. È possibile configurare più zone per questa operazione.

{
  "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"
          }
        }
      ]
    }
  ]
}
Nome Tipo Descrizione
zones list Elenco di zone.
name string Nome descrittivo per questa zona.
polygon list Ogni coppia di valori rappresenta la x,y per i vertici di un poligono. Il poligono rappresenta le aree in cui vengono monitorate o conteggiate le persone. I punti poligono sono basati su coordinate normalizzate (0-1), dove l'angolo superiore sinistro è (0,0, 0,0) e l'angolo inferiore destro è (1,0, 1,0).
threshold float Gli eventi vengono in uscita quando la persona è maggiore di questo numero di pixel all'interno della zona. Si tratta di un campo facoltativo e il valore è in rapporto (0-1). Ad esempio, il valore 0,0253 sarà di 13 pixel su un video con larghezza dell'immagine = 512 (0,0253 X 512 = ~13).
type string Per cognitiveservices.vision.spatialanalysis-personcount, deve essere count.
trigger string Tipo di trigger per l'invio di un evento. I valori supportati sono event per l'invio di eventi quando il conteggio cambia o interval per l'invio periodico di eventi, indipendentemente dal fatto che il conteggio sia stato modificato o meno.
output_frequency int Frequenza con cui gli eventi vengono in uscita. Quando output_frequency = X, ogni evento X viene egresso, ad esempio output_frequency = 2 indica che ogni altro evento viene restituito. è output_frequency applicabile sia a che intervala event .
focus string Posizione del punto all'interno del rettangolo di selezione utilizzato per calcolare gli eventi. Il valore dello stato attivo può essere footprint (l'impronta della persona), bottom_center (il centro inferiore del riquadro della persona), center (il centro del rettangolo di selezione della persona).

Configurazione della riga per personcrossingline

Di seguito è riportato un esempio di input JSON per il SPACEANALYTICS_CONFIG parametro che configura una riga. È possibile configurare più linee di attraversamento per questa operazione.

{
   "lines": [
       {
           "name": "doorcamera",
           "line": {
               "start": {
                   "x": 0,
                   "y": 0.5
               },
               "end": {
                   "x": 1,
                   "y": 0.5
               }
           },
           "events": [
               {
                   "type": "linecrossing",
                   "config": {
                       "trigger": "event",
                       "focus": "footprint"
                   }
               }
           ]
       }
   ]
}
Nome Tipo Descrizione
lines list Elenco di righe.
name string Nome descrittivo per questa riga.
line list Definizione della riga. Si tratta di una linea direzionale che consente di comprendere "entry" e "exit".
start coppia valore x, coordinate y per il punto iniziale della linea. I valori float rappresentano la posizione del vertice rispetto all'angolo superiore sinistro. Per calcolare la x assoluta, i valori y vengono moltiplicati con le dimensioni del frame.
end coppia valore x, coordinate y per il punto finale della linea. I valori float rappresentano la posizione del vertice rispetto all'angolo superiore sinistro. Per calcolare la x assoluta, i valori y vengono moltiplicati con le dimensioni del frame.
threshold float Gli eventi vengono in uscita quando la persona è maggiore di questo numero di pixel all'interno della zona. Si tratta di un campo facoltativo e il valore è in rapporto (0-1). Ad esempio, il valore 0,0253 sarà di 13 pixel su un video con larghezza dell'immagine = 512 (0,0253 X 512 = ~13).
type string Per cognitiveservices.vision.spatialanalysis-personcrossingline, deve essere linecrossing.
trigger string Tipo di trigger per l'invio di un evento.
Valori supportati: "event": genera quando un utente attraversa la linea.
focus string Posizione del punto all'interno del rettangolo di selezione utilizzato per calcolare gli eventi. Il valore dello stato attivo può essere footprint (l'impronta della persona), bottom_center (il centro inferiore del riquadro della persona), center (il centro del rettangolo di selezione della persona). Il valore predefinito è footprint.

Configurazione della zona per personcrossingpolygon

Questo è un esempio di input JSON per il SPACEANALYTICS_CONFIG parametro che configura una zona. È possibile configurare più zone per questa operazione.

{
"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"
               }
           }]
   }]
}
Nome Tipo Descrizione
zones list Elenco di zone.
name string Nome descrittivo per questa zona.
polygon list Ogni coppia di valori rappresenta la x,y per i vertici del poligono. Il poligono rappresenta le aree in cui vengono monitorate o conteggiate le persone. I valori float rappresentano la posizione del vertice rispetto all'angolo superiore sinistro. Per calcolare la x assoluta, i valori y vengono moltiplicati con le dimensioni del frame.
target_side int Specifica un lato della zona definita da polygon per misurare per quanto tempo le persone devono affrontare tale lato mentre si trovano nella zona. 'dwellTimeForTargetSide' restituirà il tempo stimato. Ogni lato è un bordo numerato tra i due vertici del poligono che rappresenta la zona. Ad esempio, il bordo tra i primi due vertici del poligono rappresenta il primo lato, 'side'=1. Il valore di target_side è compreso tra [0,N-1] dove N è il numero di lati dell'oggetto polygon. Questo campo è facoltativo.
threshold float Gli eventi vengono in uscita quando la persona è maggiore di questo numero di pixel all'interno della zona. Si tratta di un campo facoltativo e il valore è in rapporto (0-1). Ad esempio, il valore 0,074 sarà di 38 pixel su un video con larghezza dell'immagine = 512 (0,074 X 512 = ~38).
type string Per cognitiveservices.vision.spatialanalysis-personcrossingpolygon , deve essere zonecrossing o zonedwelltime.
trigger string Tipo di trigger per l'invio di un evento
Valori supportati: "evento": attiva quando un utente entra o esce dalla zona.
focus string Posizione del punto all'interno del rettangolo di selezione utilizzato per calcolare gli eventi. Il valore dello stato attivo può essere footprint (l'impronta della persona), bottom_center (il centro inferiore del riquadro della persona), center (il centro del rettangolo di selezione della persona). Il valore predefinito è footprint.

Configurazione della zona per persondistance

Questo è un esempio di input JSON per il SPACEANALYTICS_CONFIG parametro che configura una zona per cognitiveservices.vision.spatialanalysis-persondistance. È possibile configurare più zone per questa operazione.

{
"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"
          }
          }]
   }]
}
Nome Tipo Descrizione
zones list Elenco di zone.
name string Nome descrittivo per questa zona.
polygon list Ogni coppia di valori rappresenta la x,y per i vertici del poligono. Il poligono rappresenta le aree in cui vengono conteggiate le persone e viene misurata la distanza tra le persone. I valori float rappresentano la posizione del vertice rispetto all'angolo superiore sinistro. Per calcolare la x assoluta, i valori y vengono moltiplicati con le dimensioni del frame.
threshold float Gli eventi vengono in uscita quando la persona è maggiore di questo numero di pixel all'interno della zona. Si tratta di un campo facoltativo e il valore è in rapporto (0-1). Ad esempio, il valore 0,0253 sarà di 13 pixel su un video con larghezza dell'immagine = 512 (0,0253 X 512 = ~13).
type string Per cognitiveservices.vision.spatialanalysis-persondistance, deve essere persondistance.
trigger string Tipo di trigger per l'invio di un evento. I valori supportati sono event per l'invio di eventi quando il conteggio cambia o interval per l'invio periodico di eventi, indipendentemente dal fatto che il conteggio sia stato modificato o meno.
output_frequency int Frequenza con cui gli eventi vengono in uscita. Quando output_frequency = X, ogni evento X viene egresso, ad esempio output_frequency = 2 indica che ogni altro evento viene restituito. è output_frequency applicabile sia a che intervala event .
minimum_distance_threshold float Distanza in piedi che attiverà un evento "TooClose" quando le persone sono inferiori a quella distanza.
maximum_distance_threshold float Distanza in piedi che attiverà un evento "TooFar" quando le persone sono maggiori di quella distanza.
aggregation_method string Metodo per il risultato aggregato persondistance . Il aggregation_method è applicabile sia a che averagea mode .
focus string Posizione del punto all'interno del rettangolo di selezione utilizzato per calcolare gli eventi. Il valore dello stato attivo può essere footprint (l'impronta della persona), bottom_center (il centro inferiore del riquadro della persona), center (il centro del rettangolo di selezione della persona).

Configurazione per l'analisi spaziale

Di seguito è riportato un esempio di input JSON per il SPACEANALYTICS_CONFIG parametro che configura una linea e una zona per cognitiveservices.vision.spatialanalysis. È possibile configurare più righe/zone per questa operazione e ogni riga/zona può avere eventi diversi.

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

configurazione di Fotocamera

Per altre informazioni su come configurare zone e linee, vedere le linee guida sulla posizione della fotocamera.

Output dell'operazione di analisi spaziale

Gli eventi di ogni operazione vengono inoltrati a hub IoT di Azure in formato JSON.

Formato JSON per personcount AI Insights

Codice JSON di esempio per un output dell'evento da questa operazione.

{
    "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"
}
Nome campo evento Tipo Descrzione
id string ID evento
type string Tipo di evento
detectionsId array Matrice di dimensioni 1 dell'identificatore univoco del rilevamento della persona che ha attivato questo evento
properties collection Raccolta di valori
trackinId string Identificatore univoco della persona rilevata
zone string Campo "name" del poligono che rappresenta la zona incrociata
trigger string Il tipo di trigger è 'event' o 'interval' a seconda del valore di trigger in SPACEANALYTICS_CONFIG
Nome campo rilevamenti Tipo Descrzione
id string ID rilevamento
type string Tipo di rilevamento
region collection Raccolta di valori
type string Tipo di area
points collection In alto a sinistra e in basso a destra quando il tipo di area è RECTANGLE
confidence float Attendibilità degli algoritmi
attributes array Matrice di attributi. Ogni attributo è costituito da etichetta, attività e attendibilità
label string Il valore dell'attributo (ad esempio, {label: face_mask} indica che la persona rilevata indossa una maschera del viso)
confidence (attribute) float Valore di attendibilità dell'attributo con intervallo compreso tra 0 e 1 (ad esempio, {confidence: 0.9, label: face_nomask} indica che la persona rilevata non indossa una maschera del viso)
task string Attività/classe di classificazione degli attributi
Nome campo SourceInfo Tipo Descrzione
id string Camera ID
timestamp data Data UTC in cui è stato generato il payload JSON
width int Larghezza fotogramma video
height int Altezza fotogramma video
frameId int Identificatore di frame
cameraCallibrationInfo collection Raccolta di valori
status string Stato della calibrazione nel formato di state[;progress description]. Lo stato può essere Calibrating, Recalibrating (se la ricalibrazione è abilitata) o Calibrated. La parte della descrizione dello stato è valida solo quando è in Calibrating stato e Recalibrating , che viene usata per mostrare lo stato di avanzamento del processo di calibrazione corrente.
cameraHeight float Altezza della fotocamera al di sopra del terreno in piedi. Ciò viene dedotto dalla scalabilità automatica.
focalLength float Lunghezza focale della fotocamera in pixel. Ciò viene dedotto dalla scalabilità automatica.
tiltUpAngle float Angolo di inclinazione della fotocamera da verticale. Ciò viene dedotto dalla scalabilità automatica.

Formato JSON per personcrossingline AI Insights

Codice JSON di esempio per i rilevamenti restituiti da questa operazione.

{
    "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"
}
Nome campo evento Tipo Descrzione
id string ID evento
type string Tipo di evento
detectionsId array Matrice di dimensioni 1 dell'identificatore univoco del rilevamento della persona che ha attivato questo evento
properties collection Raccolta di valori
trackinId string Identificatore univoco della persona rilevata
status string Direzione degli incroci di linea, 'CrossLeft' o 'CrossRight'. La direzione si basa sull'immaginare in piedi alla "partenza" di fronte alla "fine" della linea. CrossRight attraversa da sinistra a destra. CrossLeft attraversa da destra a sinistra.
orientationDirection string Direzione dell'orientamento della persona rilevata dopo aver attraversato la linea. Il valore può essere "Left", "Right" o "Straight". Questo valore viene restituito se enable_orientation è impostato su True in CAMERACALIBRATOR_NODE_CONFIG
zone string Campo "name" della linea incrociata
Nome campo rilevamenti Tipo Descrzione
id string ID rilevamento
type string Tipo di rilevamento
region collection Raccolta di valori
type string Tipo di area
points collection In alto a sinistra e in basso a destra quando il tipo di area è RECTANGLE
groundOrientationAngle float Angolo radiano in senso orario dell'orientamento della persona sul piano terra dedotto
mappedImageOrientation float Angolo radiano in senso orario proiettato dell'orientamento della persona nello spazio dell'immagine 2D
speed float Velocità stimata della persona rilevata. L'unità è foot per second (ft/s)
confidence float Attendibilità degli algoritmi
attributes array Matrice di attributi. Ogni attributo è costituito da etichetta, attività e attendibilità
label string Il valore dell'attributo (ad esempio, {label: face_mask} indica che la persona rilevata indossa una maschera del viso)
confidence (attribute) float Valore di attendibilità dell'attributo con intervallo compreso tra 0 e 1 (ad esempio, {confidence: 0.9, label: face_nomask} indica che la persona rilevata non indossa una maschera del viso)
task string Attività/classe di classificazione degli attributi
Nome campo SourceInfo Tipo Descrzione
id string Camera ID
timestamp data Data UTC in cui è stato generato il payload JSON
width int Larghezza fotogramma video
height int Altezza fotogramma video
frameId int Identificatore di frame

Importante

Il modello di intelligenza artificiale rileva una persona indipendentemente dal fatto che la persona si stia affrontando verso o lontano dalla fotocamera. Il modello di intelligenza artificiale non esegue il riconoscimento del viso e non genera informazioni biometriche.

Formato JSON per personcrossingpolygon AI Insights

Json di esempio per i rilevamenti restituiti da questa operazione con zonecrossing tipo 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"
}

Json di esempio per i rilevamenti restituiti da questa operazione con zonedwelltime tipo 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"
}
Nome campo evento Tipo Descrzione
id string ID evento
type string Tipo di evento. Il valore può essere personZoneDwellTimeEvent o personZoneEnterExitEvent
detectionsId array Matrice di dimensioni 1 dell'identificatore univoco del rilevamento della persona che ha attivato questo evento
properties collection Raccolta di valori
trackinId string Identificatore univoco della persona rilevata
status string Direzione di attraversamenti poligoni, 'Enter' o 'Exit'
side int Numero del lato del poligono attraversato dalla persona. Ogni lato è un bordo numerato tra i due vertici del poligono che rappresenta la zona. Il bordo tra i primi due vertici del poligono rappresenta il primo lato. 'Side' è vuoto quando l'evento non è associato a un lato specifico a causa dell'occlusione. Ad esempio, si è verificato un'uscita quando una persona è scomparsa ma non è stata vista attraversando un lato della zona o si è verificato un ingresso quando una persona è apparsa nella zona ma non è stata vista attraversando un lato.
dwellTime float Numero di millisecondi che rappresentano il tempo impiegato dalla persona nel fuso. Questo campo viene fornito quando il tipo di evento è personZoneDwellTimeEvent
dwellFrames int Numero di fotogrammi spesi dalla persona nella zona. Questo campo viene fornito quando il tipo di evento è personZoneDwellTimeEvent
dwellTimeForTargetSide float Numero di millisecondi che rappresentano il tempo trascorso dalla persona nel fuso e che si trovavano di fronte a target_side. Questo campo viene fornito quando enable_orientation è True in CAMERACALIBRATOR_NODE_CONFIG e il valore di target_side è impostato in SPACEANALYTICS_CONFIG
avgSpeed float Velocità media della persona nella zona. L'unità è foot per second (ft/s)
minSpeed float Velocità minima della persona nella zona. L'unità è foot per second (ft/s)
zone string Campo "name" del poligono che rappresenta la zona incrociata
Nome campo rilevamenti Tipo Descrzione
id string ID rilevamento
type string Tipo di rilevamento
region collection Raccolta di valori
type string Tipo di area
points collection In alto a sinistra e in basso a destra quando il tipo di area è RECTANGLE
groundOrientationAngle float Angolo radiano in senso orario dell'orientamento della persona sul piano terra dedotto
mappedImageOrientation float Angolo radiano in senso orario proiettato dell'orientamento della persona nello spazio dell'immagine 2D
speed float Velocità stimata della persona rilevata. L'unità è foot per second (ft/s)
confidence float Attendibilità degli algoritmi
attributes array Matrice di attributi. Ogni attributo è costituito da etichetta, attività e attendibilità
label string Il valore dell'attributo (ad esempio, {label: face_mask} indica che la persona rilevata indossa una maschera del viso)
confidence (attribute) float Valore di attendibilità dell'attributo con intervallo compreso tra 0 e 1 (ad esempio, {confidence: 0.9, label: face_nomask} indica che la persona rilevata non indossa una maschera del viso)
task string Attività/classe di classificazione degli attributi

Formato JSON per persondistance AI Insights

Codice JSON di esempio per i rilevamenti restituiti da questa operazione.

{
    "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"
}
Nome campo evento Tipo Descrzione
id string ID evento
type string Tipo di evento
detectionsId array Matrice di dimensioni 1 dell'identificatore univoco del rilevamento della persona che ha attivato questo evento
properties collection Raccolta di valori
personCount int Numero di persone rilevate quando l'evento è stato generato
averageDistance float Distanza media tra tutte le persone rilevate in piedi
minimumDistanceThreshold float Distanza in piedi che attiverà un evento "TooClose" quando le persone sono inferiori a quella distanza.
maximumDistanceThreshold float Distanza in piedi che attiverà un evento "TooFar" quando le persone sono superiori alla distanza.
eventName string Il nome dell'evento minimumDistanceThreshold è TooClose violato, TooFar quando maximumDistanceThreshold viene violato o unknown quando la scalabilità automatica non è stata completata
distanceViolationPersonCount int Numero di persone rilevate in violazione di minimumDistanceThreshold o maximumDistanceThreshold
zone string Campo "name" del poligono che rappresenta la zona monitorata per il distanziamento tra le persone
trigger string Il tipo di trigger è 'event' o 'interval' a seconda del valore di trigger in SPACEANALYTICS_CONFIG
Nome campo rilevamenti Tipo Descrzione
id string ID rilevamento
type string Tipo di rilevamento
region collection Raccolta di valori
type string Tipo di area
points collection In alto a sinistra e in basso a destra quando il tipo di area è RECTANGLE
confidence float Attendibilità degli algoritmi
centerGroundPointX/centerGroundPointY 2 valori float x, y valori con le coordinate della posizione dedotta della persona sul terreno in piedi. x e y sono coordinate sul piano del pavimento, supponendo che il pavimento sia livello. La posizione della fotocamera è l'origine.

x In centerGroundPointè il componente della distanza dalla fotocamera alla persona perpendicolare al piano immagine della fotocamera. y è il componente della distanza parallela al piano immagine della fotocamera.

Example center ground point

In this example, l'evento centerGroundPoint è {centerGroundPointX: 4, centerGroundPointY: 5}. Questo significa che c'è una persona quattro metri davanti alla fotocamera e cinque piedi a destra, guardando la stanza in alto verso il basso.

Nome campo SourceInfo Tipo Descrzione
id string Camera ID
timestamp data Data UTC in cui è stato generato il payload JSON
width int Larghezza fotogramma video
height int Altezza fotogramma video
frameId int Identificatore di frame
cameraCallibrationInfo collection Raccolta di valori
status string Stato della calibrazione nel formato di state[;progress description]. Lo stato può essere Calibrating, Recalibrating (se la ricalibrazione è abilitata) o Calibrated. La parte della descrizione dello stato è valida solo quando è in Calibrating stato e Recalibrating , che viene usata per mostrare lo stato di avanzamento del processo di calibrazione corrente.
cameraHeight float Altezza della fotocamera al di sopra del terreno in piedi. Ciò viene dedotto dalla scalabilità automatica.
focalLength float Lunghezza focale della fotocamera in pixel. Ciò viene dedotto dalla scalabilità automatica.
tiltUpAngle float Angolo di inclinazione della fotocamera da verticale. Ciò viene dedotto dalla scalabilità automatica.

Formato JSON per informazioni dettagliate sull'intelligenza artificiale per l'analisi spaziale

L'output di questa operazione dipende da configurato, ad esempio se è stato configurato eventsun zonecrossing evento per questa operazione, l'output sarà uguale a cognitiveservices.vision.spatialanalysis-personcrossingpolygon.

Usare l'output generato dal contenitore

È possibile integrare il rilevamento o gli eventi di analisi spaziale nell'applicazione. Ecco alcuni approcci da considerare:

  • Usare Hub eventi di Azure SDK per il linguaggio di programmazione scelto per connettersi all'endpoint hub IoT di Azure e ricevere gli eventi. Per altre informazioni, vedere Leggere i messaggi da dispositivo a cloud dall'endpoint predefinito.
  • Configurare Routing messaggi nel hub IoT di Azure per inviare gli eventi ad altri endpoint o salvare gli eventi nell'archivio dati. Per altre informazioni, vedere routing dei messaggi hub IoT.
  • Configurare un processo di Analisi di flusso di Azure per elaborare gli eventi in tempo reale man mano che arrivano e creano visualizzazioni.

Distribuire operazioni di analisi spaziale su larga scala (più fotocamere)

Per ottenere prestazioni ottimali e l'utilizzo delle GPU, è possibile distribuire qualsiasi operazione di analisi spaziale su più fotocamere usando istanze del grafo. Di seguito è riportata una configurazione di esempio per l'esecuzione dell'operazione cognitiveservices.vision.spatialanalysis-personcrossingline su 15 fotocamere.

  "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>"
                }
            }
          }
        },
      }
  }
Nome Tipo Descrizione
batch_size int Se tutte le fotocamere hanno la stessa risoluzione, impostare batch_size sul numero di fotocamere che verranno usate in tale operazione, altrimenti impostare su batch_size 1 o lasciarla predefinita (1), che indica che non è supportato alcun batch.

Passaggi successivi