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:
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 interval a 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 interval a 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 average a 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.
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 events
un 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. |