Condividi tramite


Operazioni di analisi spaziale

Importante

Il 30 marzo 2025, l'analisi spaziale di Visione artificiale di Azure verrà ritirata. Passare ad Azure AI Video Indexer o a un'altra soluzione open source prima della data specificata. È consigliabile passare prima a ottenere i vantaggi più avanzati di Video Indexer per intelligenza artificiale di Azure. Oltre alle funzionalità familiari in uso, di seguito è riportato un rapido confronto tra Analisi spaziale di Visione artificiale di Azure e Video Indexer di Intelligenza artificiale di Azure.

Funzionalità Analisi spaziale di Visione di Azure AI Video Indexer di Azure AI
Supporto edge
Rilevamento oggetti Solo rilevamento persone e veicoli Rileva più di 1000 oggetti
Elaborazione audio/vocale Non supportato Supportato (include trascrizione vocale, traduzione e riepilogo)
Supportato >(include la trascrizione vocale e l'analisi del sentiment)
Rilevamento e rilevamento eventi Supportato (rilevamento di persone e veicoli, rilevamento eventi) Non supportato ancora in Edge. È parzialmente supportato nel cloud.
Supporto di Azure Arc Non supportato Supporto nativo
Area di interesse Analisi visiva con rilevamento specializzato Analisi completa del contenuto audio e visivo

Fino al 30 marzo 2025, è possibile continuare a usare Analisi spaziale di Visione artificiale di Azure o passare ad Azure AI Video Indexer prima della data specificata. Dopo il 30 marzo 2025, il contenitore di analisi spaziale non sarà più supportato e interromperà l'elaborazione di nuovi flussi.

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

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

Identificatore operazione Descrizione
cognitiveservices.vision.spatialanalysis-personcount Conta le persone in una zona designata nel campo visivo 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, successivamente, eventi personCountEvent quando il conteggio cambia.
cognitiveservices.vision.spatialanalysis-personcrossingline Tiene traccia dell’attraversamento di una persona di una linea designata nel campo visivo della fotocamera.
Genera un evento personLineEvent quando la persona attraversa la linea, quindi fornisce informazioni sulla direzione.
cognitiveservices.vision.spatialanalysis-personcrossingpolygon Genera un evento personZoneEnterExitEvent quando una persona entra o esce dalla zona designata, fornisce informazioni sulla direzione, indicando il lato della zona attraversata. Genera un evento personZoneDwellTimeEvent quando la persona esce dalla zona e fornisce informazioni sulla direzione, nonché il numero di millisecondi trascorsi dalla persona all'interno della zona.
cognitiveservices.vision.spatialanalysis-persondistance Tiene traccia delle violazioni delle regole di distanza minima da parte delle persone.
Genera periodicamente un evento personDistanceEvent con la posizione di ogni violazione della regola di distanza.
cognitiveservices.vision.spatialanalysis Operazione generica, che può essere usata per eseguire tutti gli scenari indicati in precedenza. Questa opzione è più utile se si desidera eseguire più scenari nella stessa fotocamera o usare le risorse di sistema, ad esempio, la GPU, in modo più efficiente.

Tutte le operazioni riportate in precedenza sono disponibili anche nella versione .debug 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 IA di Visione di Azure AI rilevano e individuano la presenza umana nel filmato video e generano un rettangolo di selezione intorno al corpo umano. I modelli di intelligenza artificiale non tentano di scoprire 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 Booleano: true o false
VIDEO_URL URL RTSP per il dispositivo con 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, allora KEY_ENV e IV_ENV devono essere fornite come variabili di ambiente. L'utilità di esempio per generare chiavi e crittografia è disponibile qui.
VIDEO_SOURCE_ID Nome descrittivo per il dispositivo con fotocamera o per lo streaming video. Verrà restituito insieme all’output JSON dell'evento.
VIDEO_IS_LIVE True per i dispositivi con fotocamera; false per i video registrati.
VIDEO_DECODE_GPU_INDEX Con quale GPU decodificare il fotogramma video. L'impostazione predefinita è 0. Deve essere uguale a gpu_index in un'altra configurazione del nodo, ad esempio DETECTOR_NODE_CONFIG e CAMERACALIBRATOR_NODE_CONFIG.
INPUT_VIDEO_WIDTH Larghezza fotogramma video/flusso di input (ad esempio, 1920). È un campo facoltativo e, se specificato, il fotogramma verrà ridimensionato a questa dimensione pur mantenendo le proporzioni.
DETECTOR_NODE_CONFIG JSON indica con quale GPU eseguire il nodo di rilevamento. Deve avere il formato seguente: "{ \"gpu_index\": 0 }",
TRACKER_NODE_CONFIG JSON indica se calcolare o meno la velocità di calcolo nel nodo di rilevamento. Deve avere il formato seguente: "{ \"enable_speed\": true }",
CAMERA_CONFIG JSON indica i parametri della fotocamera tarata per più fotocamere. Se la competenza usata richiede la calibrazione e si dispone già del parametro della fotocamera, è possibile usare questa configurazione per fornirli direttamente. Deve avere il 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}] }", source_id viene usato per identificare ogni fotocamera. Si può ottenere dall'oggetto source_info dell’evento pubblicato. Avrà effetto soltanto se do_calibration=false è in DETECTOR_NODE_CONFIG.
CAMERACALIBRATOR_NODE_CONFIG JSON indica con quale GPU eseguire il nodo dello strumento di calibrazione della fotocamera e se usare o meno la calibrazione. Deve avere il formato seguente: "{ \"gpu_index\": 0, \"do_calibration\": true, \"enable_orientation\": true}",
CALIBRATION_CONFIG JSON indica i parametri per controllare il funzionamento della calibrazione della fotocamera. Deve avere il formato seguente: "{\"enable_recalibration\": true, \"quality_check_frequency_seconds\": 86400}",
SPACEANALYTICS_CONFIG Configurazione JSON per la zona e la linea, come descritto di seguito.
ENABLE_FACE_MASK_CLASSIFIER True per abilitare il rilevamento delle persone che indossano mascherine nel flusso video, False per disabilitarlo. Per impostazione predefinita, tale opzione è disabilitata. Il rilevamento delle mascherine richiede che il parametro di larghezza fotogramma del video di input sia 1920 "INPUT_VIDEO_WIDTH": 1920. L'attributo mascherina non verrà restituito se le persone rilevate non si trovano di fronte alla fotocamera o sono troppo distanti. Per altre informazioni, vedere posizione della fotocamera.
STATIONARY_TARGET_REMOVER_CONFIG JSON indica i parametri per la rimozione della destinazione fissa, che aggiunge la funzionalità di acquisizione e rigetto di destinazioni false positive a lungo termine, ad esempio manichini o persone in fotografie. La configurazione deve avere il 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 si riporta un esempio dei parametri DETECTOR_NODE_CONFIG per tutte le operazioni di analisi spaziale.

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

Impostazioni dei parametri del nodo di calibrazione della fotocamera

Di seguito si riporta un esempio dei parametri CAMERACALIBRATOR_NODE_CONFIG per tutte le operazioni di analisi spaziale.

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

Configurazione della calibrazione

Questo è un esempio dei parametri CALIBRATION_CONFIG 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 è attiva. 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 eseguire nuovamente la calibrazione. Il valore predefinito è 86400 (24 ore). Si usa soltanto 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 di qualità. Il valore predefinito è 300 (5 minuti). Si usa soltanto quando enable_recalibration=True.
calibration_quality_check_one_round_sample_collect_num int Numero minimo di nuovi campioni di dati da raccogliere per ciclo di raccolta campioni. Il valore predefinito è 10. Si usa soltanto quando enable_recalibration=True.
calibration_quality_check_queue_max_size int Numero massimo di campioni di dati da archiviare quando il modello della fotocamera è tarato. Il valore predefinito è 1000. Si usa soltanto quando enable_recalibration=True.
calibration_event_frequency_seconds int Frequenza di output (secondi) degli eventi di calibrazione della fotocamera. Un valore -1 indica 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.

Output di calibrazione della fotocamera

Di seguito si riporta un esempio dell'output della calibrazione della fotocamera, se abilitato. I puntini di sospensione indicano la presenza di più oggetti dello stesso tipo 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
      }
    ]
  }
}

Vedere Output dell'operazione di analisi spaziale, per informazioni dettagliate su source_info.

Nome campo ZonePlacementInfo Tipo Descrizione
optimalZonePolygon oggetto Per risultati ottimali, è possibile posizionare un poligono nell'immagine della fotocamera per inserire le linee o le zone delle operazioni.
Ogni coppia di valori rappresenta x,y per i vertici di un poligono. Il poligono rappresenta le aree in cui le persone vengono monitorate o conteggiate, mentre i punti del poligono si basano 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 Per risultati buoni, ma probabilmente non ottimali, è possibile posizionare un poligono nell'immagine della fotocamera in cui è possibile inserire le linee o le zone delle operazioni.
Vedere optimalZonePolygon in precedenza, per una spiegazione approfondita del contenuto.
uniformlySpacedPersonBoundingBoxes list Elenco di rettangoli delimitatori di persone nell'immagine della fotocamera distribuita in modo uniforme nello spazio reale. I valori si basano su coordinate normalizzate (0-1).
personBoundingBoxGroundPoints list Elenco di coordinate sul piano pavimento rispetto alla fotocamera. Ogni coordinata corrisponde alla parte inferiore destra del rettangolo delimitatore in uniformlySpacedPersonBoundingBoxes, con lo stesso indice.
Vedere i campi centerGroundPointX/centerGroundPointY nella sezione Formato JSON per informazioni dettagliate di IA cognitiveservices.vision.spatialanalysis-persondistance per maggiori dettagli su come si calcolano le coordinate sul piano pavimento.

Esempio di output delle informazioni di posizionamento della zona visualizzate in un fotogramma video: Visualizzazione delle informazioni sulla posizione della zona

Le informazioni sul posizionamento della zona forniscono suggerimenti per le configurazioni, tuttavia è necessario attenersi alle linee guida di Configurazione della fotocamera per ottenere risultati ottimali.

Impostazioni dei parametri del nodo tracciatore

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

{
"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à delle persone rilevate. Per impostazione predefinita, enable_speed è impostato su True. Si consiglia vivamente di abilitare sia la velocità, sia l'orientamento, per ottenere i migliori valori stimati.
remove_stationary_objects bool Indica se si desidera rimuovere oggetti stazionari. Per impostazione predefinita, remove_stationary_objects è impostato su True.
stationary_objects_dist_threshold_in_pixels int Soglia della distanza di zona per decidere se due caselle di rilevamento possono essere considerate come lo stesso rilevamento. Per impostazione predefinita, stationary_objects_dist_threshold_in_pixels è impostato su 5.
stationary_objects_buffer_length_in_seconds int Periodo minimo di tempo, misurato in secondi, durante il quale il sistema deve guardare indietro per decidere se una destinazione è un bersaglio fisso o meno. Per impostazione predefinita, stationary_objects_buffer_length_in_seconds è impostato 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 stationary_objects_filter_ratio maggiore (0,2 indica il 20%) dell'intervallo di tempo stationary_objects_buffer_length_in_seconds, essa sarà considerata destinazione stazionaria. Per impostazione predefinita, stationary_objects_filter_ratio è impostato 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 consente di configurare una zona. Per questa operazione è possibile configurare più zone.

{
  "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 delle zone.
name string Nome descrittivo di questa zona.
polygon list Ogni coppia di valori rappresenta x,y per i vertici di un poligono. Il poligono rappresenta le aree in cui vengono monitorate o tracciate le persone. I punti del poligono si basano 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 generati quando la persona ha un valore maggiore di questo numero di pixel all'interno della zona. Si tratta di un campo facoltativo e il valore è in un rapporto (0-1). Ad esempio, il valore 0,0253 sarà di 13 pixel in 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 cambi o meno.
output_frequency int Frequenza con cui gli eventi vengono generati. Se output_frequency = X, viene generato ogni evento X, ad esempio output_frequency = 2 indica che ogni altro evento viene inserito nell’output. output_frequency è applicabile sia a event, sia a interval.
focus string Posizione del punto all'interno del rettangolo delimitatore utilizzato per il calcolo degli eventi. Il valore della messa a fuoco può essere impostato su footprint (footprint della persona), bottom_center (il centro inferiore del rettangolo delimitatore della persona), center (il centro del rettangolo delimitatore della persona).

Configurazione della riga per personcrossingline

Di seguito si riporta un esempio di input JSON per il parametro SPACEANALYTICS_CONFIG che configura una linea. È 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 delle linee.
name string Nome descrittivo di questa linea.
line list Definizione della linea. Si tratta di una linea direzionale che consente di riconoscere "entry" ed "exit".
start coppia di valori x,y coordinate del punto iniziale della linea. I valori float rappresentano la posizione del vertice rispetto all'angolo superiore sinistro. Per calcolare i valori x, y assoluti, è necessario moltiplicarli per le dimensioni del fotogramma.
end coppia di valori x, y coordinate del punto finale della linea. I valori float rappresentano la posizione del vertice rispetto all'angolo superiore sinistro. Per calcolare i valori assoluti di x, y, è necessario moltiplicarli per le dimensioni del fotogramma.
threshold float Gli eventi vengono generati quando la persona ha un valore maggiore di questo numero di pixel all'interno della zona. Si tratta di un campo facoltativo e il valore è in un rapporto (0-1). Ad esempio, il valore 0,0253 sarà di 13 pixel in 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": scatta quando una persona attraversa la linea.
focus string Posizione del punto all'interno del rettangolo delimitatore utilizzato per il calcolo degli eventi. Il valore della messa a fuoco può essere impostato su footprint (footprint della persona), bottom_center (il centro inferiore del rettangolo delimitatore della persona), center (il centro del rettangolo delimitatore della persona). Il valore predefinito è footprint.

Configurazione della zona per personcrossingpolygon

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

{
"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 delle zone.
name string Nome descrittivo di questa zona.
polygon list Ogni coppia di valori rappresenta x,y per i vertici del poligono. Il poligono rappresenta le aree in cui vengono monitorate o tracciate le persone. I valori float rappresentano la posizione del vertice rispetto all'angolo superiore sinistro. Per calcolare i valori assoluti di x, y, è necessario moltiplicarli per le dimensioni del fotogramma.
target_side int Consente di specificare un lato della zona definita da polygon per misurare il tempo durante il quale il volto delle persone è rivolto verso quel lato quando si trovano nella zona. 'dwellTimeForTargetSide' restituirà il suddetto tempo stimato. Ciascun lato è un bordo numerato tra i due vertici del poligono che rappresenta la zona interessata. 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 di polygon. Questo campo è facoltativo.
threshold float Gli eventi vengono generati quando la persona ha un valore maggiore di questo numero di pixel all'interno della zona. Si tratta di un campo facoltativo e il valore è in un rapporto (0-1). Ad esempio, un valore 0,074 sarà di 38 pixel in 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": si attiva quando un utente entra nella zona o esce dai suoi limiti.
focus string Posizione del punto all'interno del rettangolo delimitatore utilizzato per il calcolo degli eventi. Il valore della messa a fuoco può essere impostato su footprint (footprint della persona), bottom_center (il centro inferiore del rettangolo delimitatore della persona), center (il centro del rettangolo delimitatore della persona). Il valore predefinito è footprint.

Configurazione della zona per persondistance

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

{
"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 delle zone.
name string Nome descrittivo di questa zona.
polygon list Ogni coppia di valori rappresenta x,y per i vertici del poligono. Il poligono rappresenta le aree in cui avviene il conteggio delle persone e viene misurata la distanza tra persone. I valori float rappresentano la posizione del vertice rispetto all'angolo superiore sinistro. Per calcolare i valori assoluti di x, y, è necessario moltiplicarli per le dimensioni del fotogramma.
threshold float Gli eventi vengono generati quando la persona ha un valore maggiore di questo numero di pixel all'interno della zona. Si tratta di un campo facoltativo e il valore è in un rapporto (0-1). Ad esempio, il valore 0,0253 sarà di 13 pixel in 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 cambi o meno.
output_frequency int Frequenza con cui gli eventi vengono generati. Se output_frequency = X, viene generato ogni evento X, ad esempio output_frequency = 2 indica che ogni altro evento viene inserito nell’output. output_frequency è applicabile sia a event, sia a interval.
minimum_distance_threshold float Distanza in piedi che attiva un evento "TooClose" quando le persone sono a una distanza minore dalla soglia di distanza.
maximum_distance_threshold float Distanza in piedi che attiva un evento "TooFar" se le persone si trovano a una distanza maggiore della soglia di distanza.
aggregation_method string Metodo per il risultato aggregato persondistance. aggregation_method è applicabile sia a average, sia a mode.
focus string Posizione del punto all'interno del rettangolo delimitatore utilizzato per il calcolo degli eventi. Il valore della messa a fuoco può essere impostato su footprint (footprint della persona), bottom_center (il centro inferiore del rettangolo delimitatore della persona), center (il centro del rettangolo delimitatore della persona).

Configurazione per spatialanalysis

Di seguito si riporta un esempio di input JSON per il parametro SPACEANALYTICS_CONFIG che configura una linea e una zona per cognitiveservices.vision.spatialanalysis. È possibile configurare più linee/zone per questa operazione e ogni linea/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 della fotocamera

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

Output dell'operazione di analisi spaziale

Gli eventi di ogni operazione vengono inviati all'hub IoT di Azure in formato JSON.

Formato JSON per personcount AI Insights

JSON di esempio per un evento restituito 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 Descrizione
id stringa 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 che è stata attraversata
trigger string Il tipo di trigger di evento è 'event' o 'interval' a seconda del valore di trigger in SPACEANALYTICS_CONFIG
Nome campo rilevamenti Tipo Descrizione
id stringa ID rilevamento
type string Tipo di rilevamento
region collection Raccolta di valori
type string Tipo di area
points collection Punti in alto a sinistra e in basso a destra se il tipo di area è RECTANGLE
confidence float Attendibilità degli algoritmi
attributes array Matrice degli 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 mascherina)
confidence (attribute) float Valore di attendibilità dell'attributo con un intervallo compreso tra 0 e 1 (ad esempio, {confidence: 0.9, label: face_nomask} indica che la persona rilevata non indossa una mascherina)
task string Attività/classe di classificazione degli attributi
Nome campo SourceInfo Tipo Descrizione
id stringa Camera ID
timestamp data Data UTC in cui è stato generato il payload JSON
width int Larghezza del fotogramma video
height int Altezza del fotogramma video
frameId int Identificatore del fotogramma
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 di avanzamento è valida soltanto se lo stato è Calibrating e Recalibrating, che si usa per mostrare lo stato di avanzamento del processo di calibrazione corrente.
cameraHeight float Altezza della fotocamera sopra il livello del suolo, in piedi. Si deduce dalla calibrazione automatica.
focalLength float Lunghezza focale della fotocamera in pixel. Si deduce dalla calibrazione automatica.
tiltUpAngle float Angolo di inclinazione della fotocamera dalla posizione verticale. Si deduce dalla calibrazione automatica.

Formato JSON per personcrossingline AI Insights

JSON di esempio per i rilevamenti generati 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 Descrizione
id stringa 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 attraversamenti della linea, 'CrossLeft' o 'CrossRight'. La direzione si basa sull'immagine in posizione eretta in corrispondenza del punto "start" di fronte al punto "end" della linea. CrossRight significa attraversamento da sinistra a destra. CrossLeft significa attraversamento 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 che è stata attraversata
Nome campo rilevamenti Tipo Descrizione
id stringa ID rilevamento
type string Tipo di rilevamento
region collection Raccolta di valori
type string Tipo di area
points collection Punti in alto a sinistra e in basso a destra se il tipo di area è RECTANGLE
groundOrientationAngle float Angolo radiante, in senso orario, dell'orientamento della persona sul piano del suolo dedotto
mappedImageOrientation float Angolo radiante proiettato, in senso orario, 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 degli 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 mascherina)
confidence (attribute) float Valore di attendibilità dell'attributo con un intervallo compreso tra 0 e 1 (ad esempio, {confidence: 0.9, label: face_nomask} indica che la persona rilevata non indossa una mascherina)
task string Attività/classe di classificazione degli attributi
Nome campo SourceInfo Tipo Descrizione
id stringa Camera ID
timestamp data Data UTC in cui è stato generato il payload JSON
width int Larghezza del fotogramma video
height int Altezza del fotogramma video
frameId int Identificatore del fotogramma

Importante

Il modello di intelligenza artificiale rileva una persona indipendentemente dal fatto che la persona sia rivolta verso la fotocamera o lontano da essa. Il modello di intelligenza artificiale non esegue il riconoscimento volto e non genera informazioni biometriche.

Formato JSON per personcrossingpolygon AI Insights

JSON di esempio per i rilevamenti restituiti da questa operazione con il tipo zonecrossing 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 il tipo zonedwelltime 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 Descrizione
id stringa 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 degli attraversamenti del poligono, 'Enter' o 'Exit'
side int Numero del lato del poligono attraversato dalla persona. Ciascun lato è un bordo numerato tra i due vertici del poligono che rappresenta la zona interessata. Il bordo tra i primi due vertici del poligono costituisce il primo lato. 'Side' è vuoto quando l'evento non è associato a un lato specifico a causa di un ostacolo. Ad esempio, si è verificata un'uscita quando una persona è scomparsa ma non è stata vista attraversare un lato della zona, o si è verificato un ingresso quando una persona è comparsa nella zona ma non è stata vista attraversare un lato.
dwellTime float Numero di millisecondi che rappresentano il tempo impiegato dalla persona nella zona. Questo campo viene specificato quando il tipo di evento è personZoneDwellTimeEvent
dwellFrames int Numero di fotogrammi durante i quali la persona è stata nella zona. Questo campo viene specificato quando il tipo di evento è personZoneDwellTimeEvent
dwellTimeForTargetSide float Numero di millisecondi che rappresentano il tempo trascorso dalla persona nella zona e che era rivolta verso target_side. Questo campo viene fornito se 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 che è stata attraversata
Nome campo rilevamenti Tipo Descrizione
id stringa ID rilevamento
type string Tipo di rilevamento
region collection Raccolta di valori
type string Tipo di area
points collection Punti in alto a sinistra e in basso a destra se il tipo di area è RECTANGLE
groundOrientationAngle float Angolo radiante, in senso orario, dell'orientamento della persona sul piano del suolo dedotto
mappedImageOrientation float Angolo radiante proiettato, in senso orario, 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 degli 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 mascherina)
confidence (attribute) float Valore di attendibilità dell'attributo con un intervallo compreso tra 0 e 1 (ad esempio, {confidence: 0.9, label: face_nomask} indica che la persona rilevata non indossa una mascherina)
task string Attività/classe di classificazione degli attributi

Formato JSON per persondistance AI Insights

JSON di esempio per i rilevamenti generati 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 Descrizione
id stringa 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 restituito
averageDistance float Distanza media tra tutte le persone rilevate, in piedi
minimumDistanceThreshold float Distanza in piedi che attiva un evento "TooClose" se le persone si trovano a una distanza minore della soglia di distanza.
maximumDistanceThreshold float Distanza in piedi che attiva un evento "TooFar" quando le persone si trovano a una distanza maggiore della soglia di distanza.
eventName string Il nome evento è TooClose in caso di violazione di minimumDistanceThreshold, TooFar in caso di violazione di maximumDistanceThreshold, o unknown nel caso in cui la calibrazione automatica non sia stata completata
distanceViolationPersonCount int Numero di persone rilevate in violazione di minimumDistanceThreshold o maximumDistanceThreshold
zone string Il campo "name" del poligono che rappresenta la zona monitorata per rilevare il distanziamento tra persone
trigger string Il tipo di trigger di evento è 'event' o 'interval' a seconda del valore di trigger in SPACEANALYTICS_CONFIG
Nome campo rilevamenti Tipo Descrizione
id stringa ID rilevamento
type string Tipo di rilevamento
region collection Raccolta di valori
type string Tipo di area
points collection Punti in alto a sinistra e in basso a destra se il tipo di area è RECTANGLE
confidence float Attendibilità degli algoritmi
centerGroundPointX/centerGroundPointY 2 valori float Valori x, y con le coordinate della posizione dedotta della persona sul suolo, in piedi. x e y sono le coordinate a livello del suolo, posto che il pavimento sia in piano. La posizione della fotocamera è l'origine.

In centerGroundPoint, x è il componente della distanza tra la fotocamera e la persona, perpendicolare al piano immagine della fotocamera. y è il componente della distanza, parallelo al piano immagine della fotocamera.

Esempio di punto di terra centrale

In this example, l'evento centerGroundPoint è {centerGroundPointX: 4, centerGroundPointY: 5}. Questo significa che una persona si trova a una distanza di quattro piedi davanti alla fotocamera e di cinque piedi a destra, guardando la sala dall’alto verso il basso.

Nome campo SourceInfo Tipo Descrizione
id stringa Camera ID
timestamp data Data UTC in cui è stato generato il payload JSON
width int Larghezza del fotogramma video
height int Altezza del fotogramma video
frameId int Identificatore del fotogramma
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 di avanzamento è valida soltanto se lo stato è Calibrating e Recalibrating, che si usa per mostrare lo stato di avanzamento del processo di calibrazione corrente.
cameraHeight float Altezza della fotocamera sopra il livello del suolo, in piedi. Si deduce dalla calibrazione automatica.
focalLength float Lunghezza focale della fotocamera in pixel. Si deduce dalla calibrazione automatica.
tiltUpAngle float Angolo di inclinazione della fotocamera dalla posizione verticale. Si deduce dalla calibrazione automatica.

Formato JSON per spatialanalysis AI Insights

L'output di questa operazione dipende dalla configurazione di events, ad esempio se è stato configurato un evento zonecrossing per questa operazione, l'output sarà il medesimo di cognitiveservices.vision.spatialanalysis-personcrossingpolygon.

Utilizzare l'output generato dal contenitore

Si potrebbe decidere di integrare il rilevamento o gli eventi di analisi spaziale nell'applicazione. Ecco alcuni approcci da prendere in considerazione:

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

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

Per ottenere prestazioni e utilizzo delle GPU ottimali, è possibile distribuire qualsiasi operazione di analisi spaziale su più fotocamere tramite le istanze di grafo. Di seguito si riporta 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 saranno utilizzate in questa operazione, altrimenti impostare batch_size su 1 o lasciare il valore predefinito (1), a indicare che non sono supportati batch.

Passaggi successivi