Operações de Análise Espacial
Importante
Em 30 de março de 2025, o Azure AI Vision Spatial Analysis será desativado. Faça a transição para o Azure AI Video Indexer ou outra solução de código aberto antes da data especificada. Recomendamos que você faça a mudança mais cedo para obter os benefícios mais ricos do Azure AI Video Indexer. Além dos recursos familiares que você está usando, aqui está uma comparação rápida entre a Análise Espacial do Azure AI Vision e o Azure AI Video Indexer.
Caraterística | Análise Espacial do Azure AI Vision | Azure AI Video Indexer |
---|---|---|
Suporte de borda | Sim | Sim |
Deteção de Objetos | Pessoas e apenas deteção de veículos | Deteta 1000+ objetos |
Processamento de Áudio/Fala | Não suportado | Suportado (inclui transcrição, tradução e sumarização de fala) Suportado >(inclui transcrição de fala e análise de sentimento) |
Deteção de eventos e rastreamento | Suportado (rastreamento de pessoas e veículos, deteção de eventos) | Ainda não é suportado no Edge. É parcialmente suportado na nuvem. |
Suporte do Azure Arc | Não suportado | Suporte nativo |
Área de foco | Análise visual com acompanhamento especializado | Análise abrangente de conteúdo áudio e visual |
De agora até 30 de março de 2025, você pode continuar a usar a Análise Espacial do Azure AI Vision ou fazer a transição para o Azure AI Video Indexer antes da data especificada. Após 30 de março de 2025, o contentor de Análise Espacial deixará de ser suportado e deixará de processar novos fluxos.
A Análise Espacial permite-lhe analisar fluxos de vídeo a partir de dispositivos de câmara em tempo real. Para cada dispositivo de câmera configurado, as operações de Análise Espacial gerarão um fluxo de saída de mensagens JSON enviadas para sua instância do Hub IoT do Azure.
O contêiner Análise Espacial implementa as seguintes operações. Você pode configurar essas operações no manifesto de implantação do seu contêiner.
Identificador da operação | Description |
---|---|
cognitiveservices.vision.spatialanalysis-personcount |
Conta pessoas em uma zona designada no campo de visão da câmera. A zona deve ser totalmente coberta por uma única câmera para que o PersonCount grave um total preciso. Emite um evento inicial personCountEvent e, em seguida, eventos personCountEvent quando a contagem é alterada. |
cognitiveservices.vision.spatialanalysis-personcrossingline |
Rastreia quando uma pessoa cruza uma linha designada no campo de visão da câmera. Emite um evento personLineEvent quando a pessoa cruza a linha e fornece informações direcionais. |
cognitiveservices.vision.spatialanalysis-personcrossingpolygon |
Emite um evento personZoneEnterExitEvent quando uma pessoa entra ou sai da zona designada e fornece informações direcionais com o lado da zona que foi cruzada. Emite um personZoneDwellTimeEvent quando a pessoa sai da zona e fornece informações direcionais, bem como o número de milissegundos que a pessoa passou dentro da zona. |
cognitiveservices.vision.spatialanalysis-persondistance |
Rastreia quando as pessoas violam uma regra de distância mínima. Emite um personDistanceEvent periodicamente com a localização de cada violação de distância. |
cognitiveservices.vision.spatialanalysis |
A operação genérica, que pode ser usada para executar todos os cenários mencionados acima. Essa opção é mais útil quando você deseja executar vários cenários na mesma câmera ou usar recursos do sistema (a GPU, por exemplo) com mais eficiência. |
Todas as operações acima também estão disponíveis na .debug
versão do serviço (por exemplo, cognitiveservices.vision.spatialanalysis-personcount.debug
). O Debug tem a capacidade de visualizar quadros de vídeo enquanto eles estão sendo processados. Você precisará executar xhost +
no computador host para permitir a visualização de quadros de vídeo e eventos.
Importante
Os modelos de IA do Azure AI Vision detetam e localizam a presença humana em imagens de vídeo e produzem uma caixa delimitadora ao redor do corpo humano. Os modelos de IA não tentam descobrir as identidades ou demografias dos indivíduos.
Parâmetros de operação
Seguem-se os parâmetros exigidos por cada uma das operações de Análise Espacial.
Parâmetros de operação | Description |
---|---|
Operation ID |
O identificador de operação da tabela acima. |
enabled |
Booleano: verdadeiro ou falso |
VIDEO_URL |
O URL RTSP para o dispositivo de câmera (exemplo: rtsp://username:password@url ). A Análise Espacial suporta fluxo codificado H.264 através de RTSP, http ou mp4. Video_URL pode ser fornecido como um valor de cadeia de caracteres base64 ofuscado usando criptografia AES e, se a url do vídeo for ofuscada, precisará KEY_ENV IV_ENV ser fornecida como variáveis de ambiente. Exemplo de utilitário para gerar chaves e criptografia pode ser encontrado aqui. |
VIDEO_SOURCE_ID |
Um nome amigável para o dispositivo de câmera ou fluxo de vídeo. Isso será retornado com a saída JSON do evento. |
VIDEO_IS_LIVE |
Verdadeiro para dispositivos de câmera; falso para vídeos gravados. |
VIDEO_DECODE_GPU_INDEX |
Qual GPU decodificar o quadro de vídeo. Por padrão, é 0. Deve ser o mesmo que em gpu_index outra configuração de nó como DETECTOR_NODE_CONFIG e CAMERACALIBRATOR_NODE_CONFIG . |
INPUT_VIDEO_WIDTH |
Largura do quadro de vídeo/fluxo de entrada (por exemplo, 1920). Este é um campo opcional e, se fornecido, o quadro será dimensionado para esta dimensão, preservando a proporção. |
DETECTOR_NODE_CONFIG |
JSON indicando em qual GPU executar o nó do detetor. Deve estar no seguinte formato: "{ \"gpu_index\": 0 }", |
TRACKER_NODE_CONFIG |
JSON indicando se a velocidade deve ser calculada no nó do rastreador ou não. Deve estar no seguinte formato: "{ \"enable_speed\": true }", |
CAMERA_CONFIG |
JSON indicando os parâmetros da câmera calibrada para várias câmeras. Se a habilidade que você usou requer calibração e você já tem o parâmetro da câmera, você pode usar essa configuração para fornecê-los diretamente. Deve estar no seguinte formato: "{ \"cameras\": [{\"source_id\": \"endcomputer.0.persondistancegraph.detector+end_computer1\", \"camera_height\": 13.105561256408691, \"camera_focal_length\": 297.60003662109375, \"camera_tiltup_angle\": 0.9738943576812744}] }" , o source_id é usado para identificar cada câmera. Pode ser obtido a source_info partir do evento que publicamos. Só entrará em vigor quando do_calibration=false estiver em DETECTOR_NODE_CONFIG . |
CAMERACALIBRATOR_NODE_CONFIG |
JSON indicando em qual GPU executar o nó do calibrador da câmera e se deve usar a calibração ou não. Deve estar no seguinte formato: "{ \"gpu_index\": 0, \"do_calibration\": true, \"enable_orientation\": true}", |
CALIBRATION_CONFIG |
JSON indicando parâmetros para controlar como funciona a calibração da câmera. Deve estar no seguinte formato: "{\"enable_recalibration\": true, \"quality_check_frequency_seconds\": 86400}", |
SPACEANALYTICS_CONFIG |
Configuração JSON para zona e linha, conforme descrito abaixo. |
ENABLE_FACE_MASK_CLASSIFIER |
True para permitir a deteção de pessoas usando máscaras faciais no fluxo de vídeo, False para desativá-lo. Por padrão, isso está desativado. A deteção de máscara facial requer que o parâmetro de largura de vídeo de entrada seja 1920 "INPUT_VIDEO_WIDTH": 1920 . O atributo de máscara facial não será retornado se as pessoas detetadas não estiverem voltadas para a câmera ou estiverem muito longe dela. Para obter mais informações, consulte o posicionamento da câmera. |
STATIONARY_TARGET_REMOVER_CONFIG |
JSON indicando os parâmetros para a remoção de alvos estacionários, o que adiciona a capacidade de aprender e ignorar alvos falsos positivos estacionários de longo prazo, como manequins ou pessoas em imagens. A configuração deve estar no seguinte formato: "{\"enable\": true, \"bbox_dist_threshold-in_pixels\": 5, \"buffer_length_in_seconds\": 3600, \"filter_ratio\": 0.2 }" |
Configurações de parâmetros do nó do detetor
Segue-se DETECTOR_NODE_CONFIG
um exemplo dos parâmetros para todas as operações de Análise Espacial.
{
"gpu_index": 0,
"enable_breakpad": false
}
Nome | Tipo | Description |
---|---|---|
gpu_index |
string | O índice da GPU no qual esta operação será executada. |
enable_breakpad |
booleano | Indica se o breakpad deve ser habilitado, que é usado para gerar um despejo de memória para uso de depuração. É false por defeito. Se você defini-lo como true , você também precisa adicionar "CapAdd": ["SYS_PTRACE"] na HostConfig parte do contêiner createOptions . Por padrão, o despejo de memória é carregado no aplicativo RealTimePersonTracking AppCenter, se você quiser que os despejos de memória sejam carregados para seu próprio aplicativo AppCenter, poderá substituir a variável RTPT_APPCENTER_APP_SECRET de ambiente pelo segredo do aplicativo do seu aplicativo. |
Configurações de parâmetros do nó de calibração da câmera
Segue-se CAMERACALIBRATOR_NODE_CONFIG
um exemplo dos parâmetros para todas as operações de análise espacial.
{
"gpu_index": 0,
"do_calibration": true,
"enable_breakpad": false,
"enable_orientation": true
}
Nome | Tipo | Description |
---|---|---|
do_calibration |
string | Indica que a calibração está ativada. do_calibration deve ser verdadeiro para cognitiveservices.vision.spatialanalysis-persondistance para funcionar corretamente. do_calibration é definido por padrão como True . |
enable_breakpad |
booleano | Indica se o breakpad deve ser habilitado, que é usado para gerar um despejo de memória para uso de depuração. É false por defeito. Se você defini-lo como true , você também precisa adicionar "CapAdd": ["SYS_PTRACE"] na HostConfig parte do contêiner createOptions . Por padrão, o despejo de memória é carregado no aplicativo RealTimePersonTracking AppCenter, se você quiser que os despejos de memória sejam carregados para seu próprio aplicativo AppCenter, poderá substituir a variável RTPT_APPCENTER_APP_SECRET de ambiente pelo segredo do aplicativo do seu aplicativo. |
enable_orientation |
booleano | Indica se você deseja calcular a orientação para as pessoas detetadas ou não. enable_orientation é definido por padrão como True . |
Configuração de calibração
Este é um exemplo dos parâmetros para todas as operações de CALIBRATION_CONFIG
análise espacial.
{
"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 | Description |
---|---|---|
enable_recalibration |
booleano | Indica se a recalibração automática está ativada. A predefinição é true . |
calibration_quality_check_frequency_seconds |
número inteiro | Número mínimo de segundos entre cada verificação de qualidade para determinar se é ou não necessária uma recalibração. O padrão é 86400 (24 horas). Utilizado apenas quando enable_recalibration=True . |
calibration_quality_check_sample_collect_frequency_seconds |
número inteiro | Número mínimo de segundos entre a recolha de novas amostras de dados para recalibração e verificação da qualidade. O padrão é 300 (5 minutos). Utilizado apenas quando enable_recalibration=True . |
calibration_quality_check_one_round_sample_collect_num |
número inteiro | Número mínimo de novas amostras de dados a recolher por ronda de recolha de amostras. A predefinição é 10 . Utilizado apenas quando enable_recalibration=True . |
calibration_quality_check_queue_max_size |
número inteiro | Número máximo de amostras de dados para armazenar quando o modelo da câmera é calibrado. A predefinição é 1000 . Utilizado apenas quando enable_recalibration=True . |
calibration_event_frequency_seconds |
número inteiro | Frequência de saída (segundos) dos eventos de calibração da câmara. Um valor indica que a calibração da câmera não deve ser enviada, a menos que as informações de calibração da -1 câmera tenham sido alteradas. A predefinição é -1 . |
Saída de calibração da câmera
A seguir está um exemplo da saída da calibração da câmera, se habilitada. As elipses indicam mais do mesmo tipo de objetos em uma lista.
{
"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
}
]
}
}
Consulte Saída da operação de análise espacial para obter detalhes sobre source_info
o .
Nome do campo ZonePlacementInfo | Tipo | Description |
---|---|---|
optimalZonePolygon |
objeto | Um polígono na imagem da câmara onde podem ser colocadas linhas ou zonas para as suas operações para obter os melhores resultados. Cada par de valores representa o x,y para vértices de um polígono. O polígono representa as áreas nas quais as pessoas são rastreadas ou contadas e os pontos do polígono são baseados em coordenadas normalizadas (0-1), onde o canto superior esquerdo é (0,0, 0,0) e o canto inferior direito é (1,0, 1,0). |
fairZonePolygon |
objeto | Um polígono na imagem da câmera onde linhas ou zonas para suas operações podem ser colocadas para bons resultados, mas possivelmente não ideais. Veja optimalZonePolygon acima uma explicação detalhada do conteúdo. |
uniformlySpacedPersonBoundingBoxes |
list | Uma lista de caixas delimitadoras de pessoas dentro da imagem da câmera distribuída uniformemente no espaço real. Os valores são baseados em coordenadas normalizadas (0-1). |
personBoundingBoxGroundPoints |
list | Uma lista de coordenadas no plano do chão em relação à câmera. Cada coordenada corresponde ao canto inferior direito da caixa delimitadora com uniformlySpacedPersonBoundingBoxes o mesmo índice. Consulte os centerGroundPointX/centerGroundPointY campos sob o formato JSON para a seção cognitiveservices.vision.spatialanalysis-persondistance AI Insights para obter mais detalhes sobre como as coordenadas no plano do piso são calculadas. |
Exemplo da saída de informações de posicionamento de zona visualizada em um quadro de vídeo:
As informações de posicionamento da zona fornecem sugestões para suas configurações, mas as diretrizes em Configuração da câmera ainda devem ser seguidas para obter melhores resultados.
Configurações de parâmetros do nó do rastreador
Você pode configurar o cálculo de velocidade através das configurações de parâmetros do nó do rastreador.
{
"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 | Description |
---|---|---|
enable_speed |
booleano | Indica se você deseja calcular a velocidade para as pessoas detetadas ou não. enable_speed é definido por padrão como True . É altamente recomendável que você habilite a velocidade e a orientação para ter os melhores valores estimados. |
remove_stationary_objects |
booleano | Indica se você deseja remover objetos estacionários. remove_stationary_objects é definido por padrão como True. |
stationary_objects_dist_threshold_in_pixels |
número inteiro | O limite de distância de vizinhança para decidir se duas caixas de deteção podem ser tratadas como a mesma deteção. stationary_objects_dist_threshold_in_pixels é definido por padrão como 5. |
stationary_objects_buffer_length_in_seconds |
número inteiro | O período mínimo de tempo em segundos que o sistema tem que olhar para trás para decidir se um alvo é um alvo estacionário ou não. stationary_objects_buffer_length_in_seconds é definido por padrão como 3600. |
stationary_objects_filter_ratio |
flutuante | Se um alvo for repetidamente detetado no mesmo local (definido em stationary_objects_dist_threshold_in_pixels ) para maior stationary_objects_filter_ratio (0,2 significa 20%) do stationary_objects_buffer_length_in_seconds intervalo de tempo, ele será tratado como um alvo estacionário. stationary_objects_filter_ratio é definido por padrão como 0,2. |
Configuração e saída de operações de Análise Espacial
Configuração de zona para contagem de pessoas
A seguir está um exemplo de uma entrada JSON para o parâmetro SPACEANALYTICS_CONFIG que configura uma zona. Você pode configurar várias zonas para esta operação.
{
"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 | Description |
---|---|---|
zones |
list | Lista de zonas. |
name |
string | Nome amigável para esta zona. |
polygon |
list | Cada par de valores representa o x,y para vértices de um polígono. O polígono representa as áreas em que as pessoas são rastreadas ou contadas. Os pontos do polígono são baseados em coordenadas normalizadas (0-1), onde o canto superior esquerdo é (0,0, 0,0) e o canto inferior direito é (1,0, 1,0). |
threshold |
flutuante | Os eventos são egressos quando a pessoa é maior do que esse número de pixels dentro da zona. Este é um campo opcional e o valor está na proporção (0-1). Por exemplo, o valor 0,0253 será 13 pixels em um vídeo com largura de imagem = 512 (0,0253 X 512 = ~13). |
type |
string | Para cognitiveservices.vision.spatialanalysis-personcount, isso deve ser count . |
trigger |
string | O tipo de gatilho para enviar um evento. Os valores suportados destinam-se event ao envio de eventos quando a contagem é alterada ou interval ao envio de eventos periodicamente, independentemente de a contagem ter sido alterada ou não. |
output_frequency |
número inteiro | A velocidade com que os eventos são egressos. Quando output_frequency = X, cada evento X é egresso, ex. output_frequency = 2 significa que todos os outros eventos são saída. O output_frequency é aplicável a ambos e interval event . |
focus |
string | A localização do ponto dentro da caixa delimitadora da pessoa usada para calcular eventos. O valor do foco pode ser footprint (a pegada da pessoa), bottom_center (o centro inferior da caixa delimitadora da pessoa), center (o centro da caixa delimitadora da pessoa). |
Configuração de linha para personcrossingline
A seguir está um exemplo de uma entrada JSON para o SPACEANALYTICS_CONFIG
parâmetro que configura uma linha. Você pode configurar várias linhas de cruzamento para esta operação.
{
"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 | Description |
---|---|---|
lines |
list | Lista de linhas. |
name |
string | Nome amigável para esta linha. |
line |
list | A definição da linha. Esta é uma linha direcional que lhe permite entender "entrada" vs. "saída". |
start |
par de valores | x, y coordenadas para o ponto de partida da linha. Os valores float representam a posição do vértice em relação ao canto superior esquerdo. Para calcular os valores absolutos x, y, multiplique esses valores pelo tamanho do quadro. |
end |
par de valores | x, y coordenadas para o ponto final da linha. Os valores float representam a posição do vértice em relação ao canto superior esquerdo. Para calcular os valores absolutos x, y, multiplique esses valores pelo tamanho do quadro. |
threshold |
flutuante | Os eventos são egressos quando a pessoa é maior do que esse número de pixels dentro da zona. Este é um campo opcional e o valor está na proporção (0-1). Por exemplo, o valor 0,0253 será 13 pixels em um vídeo com largura de imagem = 512 (0,0253 X 512 = ~13). |
type |
string | Para cognitiveservices.vision.spatialanalysis-personcrossingline, isso deve ser linecrossing . |
trigger |
string | O tipo de gatilho para enviar um evento. Valores suportados: "evento": disparar quando alguém cruza a linha. |
focus |
string | A localização do ponto dentro da caixa delimitadora da pessoa usada para calcular eventos. O valor do foco pode ser footprint (a pegada da pessoa), bottom_center (o centro inferior da caixa delimitadora da pessoa), center (o centro da caixa delimitadora da pessoa). O valor padrão é footprint. |
Configuração de zona para personcrossingpolygon
Este é um exemplo de uma entrada JSON para o SPACEANALYTICS_CONFIG
parâmetro que configura uma zona. Você pode configurar várias zonas para esta operação.
{
"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 | Description |
---|---|---|
zones |
list | Lista de zonas. |
name |
string | Nome amigável para esta zona. |
polygon |
list | Cada par de valores representa o x,y para vértices de polígono. O polígono representa as áreas em que as pessoas são rastreadas ou contadas. Os valores float representam a posição do vértice em relação ao canto superior esquerdo. Para calcular os valores absolutos x, y, multiplique esses valores pelo tamanho do quadro. |
target_side |
número inteiro | Especifica um lado da zona definido por polygon para medir quanto tempo as pessoas enfrentam esse lado enquanto estão na zona. 'dwellTimeForTargetSide' produzirá esse tempo estimado. Cada lado é uma aresta numerada entre os dois vértices do polígono que representa a sua zona. Por exemplo, a aresta entre os dois primeiros vértices do polígono representa o primeiro lado, 'lado'=1. O valor de target_side está entre [0,N-1] onde N está o número de lados do polygon . Este é um campo opcional. |
threshold |
flutuante | Os eventos são egressos quando a pessoa é maior do que esse número de pixels dentro da zona. Este é um campo opcional e o valor está na proporção (0-1). Por exemplo, o valor 0,074 será de 38 pixels em um vídeo com largura de imagem = 512 (0,074 X 512 = ~38). |
type |
string | Para cognitiveservices.vision.spatialanalysis-personcrossingpolygon isso deve ser zonecrossing ou zonedwelltime . |
trigger |
string | O tipo de gatilho para enviar um evento Valores suportados: "evento": disparar quando alguém entra ou sai da zona. |
focus |
string | A localização do ponto dentro da caixa delimitadora da pessoa usada para calcular eventos. O valor do foco pode ser footprint (a pegada da pessoa), bottom_center (o centro inferior da caixa delimitadora da pessoa), center (o centro da caixa delimitadora da pessoa). O valor padrão é footprint. |
Configuração de zona para persondistance
Este é um exemplo de uma entrada JSON para o SPACEANALYTICS_CONFIG
parâmetro que configura uma zona para cognitiveservices.vision.spatialanalysis-persondistance. Você pode configurar várias zonas para esta operação.
{
"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 | Description |
---|---|---|
zones |
list | Lista de zonas. |
name |
string | Nome amigável para esta zona. |
polygon |
list | Cada par de valores representa o x,y para vértices de polígono. O polígono representa as áreas em que as pessoas são contadas e a distância entre as pessoas é medida. Os valores float representam a posição do vértice em relação ao canto superior esquerdo. Para calcular os valores absolutos x, y, multiplique esses valores pelo tamanho do quadro. |
threshold |
flutuante | Os eventos são egressos quando a pessoa é maior do que esse número de pixels dentro da zona. Este é um campo opcional e o valor está na proporção (0-1). Por exemplo, o valor 0,0253 será 13 pixels em um vídeo com largura de imagem = 512 (0,0253 X 512 = ~13). |
type |
string | Para cognitiveservices.vision.spatialanalysis-persondistance, isso deve ser persondistance . |
trigger |
string | O tipo de gatilho para enviar um evento. Os valores suportados destinam-se event ao envio de eventos quando a contagem é alterada ou interval ao envio de eventos periodicamente, independentemente de a contagem ter sido alterada ou não. |
output_frequency |
número inteiro | A velocidade com que os eventos são egressos. Quando output_frequency = X, cada evento X é egresso, ex. output_frequency = 2 significa que todos os outros eventos são saída. O output_frequency é aplicável a ambos e interval event . |
minimum_distance_threshold |
flutuante | Uma distância em pés que desencadeará um evento "TooClose" quando as pessoas estiverem a menos de distância entre si. |
maximum_distance_threshold |
flutuante | Uma distância em pés que desencadeará um evento "TooFar" quando as pessoas estiverem separadas por mais do que essa distância. |
aggregation_method |
string | O método do resultado agregado persondistance . O aggregation_method é aplicável a ambos e mode average . |
focus |
string | A localização do ponto dentro da caixa delimitadora da pessoa usada para calcular eventos. O valor do foco pode ser footprint (a pegada da pessoa), bottom_center (o centro inferior da caixa delimitadora da pessoa), center (o centro da caixa delimitadora da pessoa). |
Configuração para análise espacial
A seguir está um exemplo de uma entrada JSON para o SPACEANALYTICS_CONFIG
parâmetro que configura uma linha e zona para cognitiveservices.vision.spatialanalysis. Você pode configurar várias linhas/zonas para esta operação e cada linha/zona pode ter eventos diferentes.
{
"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"
}
}
]
}
]
}
Configuração da câmara
Consulte as diretrizes de posicionamento da câmera para saber mais sobre como configurar zonas e linhas.
Saída da operação de Análise Espacial
Os eventos de cada operação são enviados para o Hub IoT do Azure no formato JSON.
Formato JSON para contagem de pessoas AI Insights
Exemplo de JSON para uma saída de evento por esta operação.
{
"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 do campo do evento | Tipo | Description |
---|---|---|
id |
string | ID do Evento |
type |
string | Tipo de evento |
detectionsId |
matriz | Matriz de tamanho 1 de identificador exclusivo da deteção de pessoa que disparou esse evento |
properties |
Coleção | Recolha de valores |
trackinId |
string | Identificador único da pessoa detetada |
zone |
string | O campo "nome" do polígono que representa a zona que foi cruzada |
trigger |
string | O tipo de gatilho é 'evento' ou 'intervalo', dependendo do valor de trigger in SPACEANALYTICS_CONFIG |
Nome do campo de deteções | Tipo | Description |
---|---|---|
id |
string | ID de deteção |
type |
string | Tipo de deteção |
region |
Coleção | Recolha de valores |
type |
string | Tipo de região |
points |
Coleção | Pontos superiores esquerdo e inferior direito quando o tipo de região é RECTANGLE |
confidence |
flutuante | Confiança no algoritmo |
attributes |
matriz | Matriz de atributos. Cada atributo consiste em rótulo, tarefa e confiança |
label |
string | O valor do atributo (por exemplo, {label: face_mask} indica que a pessoa detetada está usando uma máscara facial) |
confidence (attribute) |
flutuante | O valor de confiança do atributo com intervalo de 0 a 1 (por exemplo, {confidence: 0.9, label: face_nomask} indica que a pessoa detetada não está usando uma máscara facial) |
task |
string | A tarefa/classe de classificação de atributos |
Nome do campo SourceInfo | Tipo | Description |
---|---|---|
id |
string | ID da câmara |
timestamp |
data | Data UTC em que a carga JSON foi emitida |
width |
número inteiro | Largura do quadro de vídeo |
height |
número inteiro | Altura do quadro de vídeo |
frameId |
número inteiro | Identificador de quadro |
cameraCallibrationInfo |
Coleção | Recolha de valores |
status |
string | O estado da calibração no formato de state[;progress description] . O estado pode ser Calibrating , Recalibrating (se a recalibração estiver habilitada) ou Calibrated . A parte de descrição do progresso só é válida quando está em Calibrating e Recalibrating estado, que é usado para mostrar o progresso do processo de calibração atual. |
cameraHeight |
flutuante | A altura da câmera acima do solo em pés. Isto é inferido a partir da autocalibração. |
focalLength |
flutuante | A distância focal da câmera em pixels. Isto é inferido a partir da autocalibração. |
tiltUpAngle |
flutuante | O ângulo de inclinação da câmera da vertical. Isto é inferido a partir da autocalibração. |
Formato JSON para personcrossingline AI Insights
Exemplo de JSON para deteções saídas por esta operação.
{
"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 do campo do evento | Tipo | Description |
---|---|---|
id |
string | ID do Evento |
type |
string | Tipo de evento |
detectionsId |
matriz | Matriz de tamanho 1 de identificador exclusivo da deteção de pessoa que disparou esse evento |
properties |
Coleção | Recolha de valores |
trackinId |
string | Identificador único da pessoa detetada |
status |
string | Direção dos cruzamentos de linha, 'CrossLeft' ou 'CrossRight'. A direção baseia-se em imaginar em pé no "início" de frente para o "fim" da linha. CrossRight é cruzar da esquerda para a direita. CrossLeft é cruzar da direita para a esquerda. |
orientationDirection |
string | A direção de orientação da pessoa detetada depois de cruzar a linha. O valor pode ser 'Esquerda', 'Direita' ou 'Reto'. Este valor é saída se enable_orientation estiver definido como True em CAMERACALIBRATOR_NODE_CONFIG |
zone |
string | O campo "nome" da linha que foi cruzada |
Nome do campo de deteções | Tipo | Description |
---|---|---|
id |
string | ID de deteção |
type |
string | Tipo de deteção |
region |
Coleção | Recolha de valores |
type |
string | Tipo de região |
points |
Coleção | Pontos superiores esquerdo e inferior direito quando o tipo de região é RECTANGLE |
groundOrientationAngle |
flutuante | O ângulo radiano no sentido horário da orientação da pessoa no plano de solo inferido |
mappedImageOrientation |
flutuante | O ângulo radiano projetado no sentido horário da orientação da pessoa no espaço de imagem 2D |
speed |
flutuante | A velocidade estimada da pessoa detetada. A unidade é foot per second (ft/s) |
confidence |
flutuante | Confiança no algoritmo |
attributes |
matriz | Matriz de atributos. Cada atributo consiste em rótulo, tarefa e confiança |
label |
string | O valor do atributo (por exemplo, {label: face_mask} indica que a pessoa detetada está usando uma máscara facial) |
confidence (attribute) |
flutuante | O valor de confiança do atributo com intervalo de 0 a 1 (por exemplo, {confidence: 0.9, label: face_nomask} indica que a pessoa detetada não está usando uma máscara facial) |
task |
string | A tarefa/classe de classificação de atributos |
Nome do campo SourceInfo | Tipo | Description |
---|---|---|
id |
string | ID da câmara |
timestamp |
data | Data UTC em que a carga JSON foi emitida |
width |
número inteiro | Largura do quadro de vídeo |
height |
número inteiro | Altura do quadro de vídeo |
frameId |
número inteiro | Identificador de quadro |
Importante
O modelo de IA deteta uma pessoa independentemente de a pessoa estar virada para ou longe da câmara. O modelo de IA não executa reconhecimento facial e não emite nenhuma informação biométrica.
Formato JSON para personcrossingpolygon AI Insights
Exemplo de JSON para deteções saídas por esta operação com zonecrossing
o 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"
}
Exemplo de JSON para deteções saídas por esta operação com zonedwelltime
o 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 do campo do evento | Tipo | Description |
---|---|---|
id |
string | ID do Evento |
type |
string | Tipo de evento. O valor pode ser personZoneDwellTimeEvent ou personZoneEnterExitEvent |
detectionsId |
matriz | Matriz de tamanho 1 de identificador exclusivo da deteção de pessoa que disparou esse evento |
properties |
Coleção | Recolha de valores |
trackinId |
string | Identificador único da pessoa detetada |
status |
string | Direção das travessias de polígonos, 'Enter' ou 'Exit' |
side |
número inteiro | O número do lado do polígono que a pessoa cruzou. Cada lado é uma aresta numerada entre os dois vértices do polígono que representa a sua zona. A aresta entre os dois primeiros vértices do polígono representa o primeiro lado. 'Lado' fica vazio quando o evento não está associado a um lado específico devido à oclusão. Por exemplo, uma saída ocorreu quando uma pessoa desapareceu, mas não foi vista atravessando um lado da zona, ou uma entrada ocorreu quando uma pessoa apareceu na zona, mas não foi vista atravessando um lado. |
dwellTime |
flutuante | O número de milissegundos que representam o tempo que a pessoa passou na zona. Este campo é fornecido quando o tipo de evento é personZoneDwellTimeEvent |
dwellFrames |
número inteiro | O número de quadros que a pessoa passou na zona. Este campo é fornecido quando o tipo de evento é personZoneDwellTimeEvent |
dwellTimeForTargetSide |
flutuante | O número de milissegundos que representam o tempo que a pessoa passou na zona e estava voltada para o target_side . Este campo é fornecido quando enable_orientation está True em CAMERACALIBRATOR_NODE_CONFIG e o valor de target_side é definido em SPACEANALYTICS_CONFIG |
avgSpeed |
flutuante | A velocidade média da pessoa na zona. A unidade é foot per second (ft/s) |
minSpeed |
flutuante | A velocidade mínima da pessoa na zona. A unidade é foot per second (ft/s) |
zone |
string | O campo "nome" do polígono que representa a zona que foi cruzada |
Nome do campo de deteções | Tipo | Description |
---|---|---|
id |
string | ID de deteção |
type |
string | Tipo de deteção |
region |
Coleção | Recolha de valores |
type |
string | Tipo de região |
points |
Coleção | Pontos superiores esquerdo e inferior direito quando o tipo de região é RECTANGLE |
groundOrientationAngle |
flutuante | O ângulo radiano no sentido horário da orientação da pessoa no plano de solo inferido |
mappedImageOrientation |
flutuante | O ângulo radiano projetado no sentido horário da orientação da pessoa no espaço de imagem 2D |
speed |
flutuante | A velocidade estimada da pessoa detetada. A unidade é foot per second (ft/s) |
confidence |
flutuante | Confiança no algoritmo |
attributes |
matriz | Matriz de atributos. Cada atributo consiste em rótulo, tarefa e confiança |
label |
string | O valor do atributo (por exemplo, {label: face_mask} indica que a pessoa detetada está usando uma máscara facial) |
confidence (attribute) |
flutuante | O valor de confiança do atributo com intervalo de 0 a 1 (por exemplo, {confidence: 0.9, label: face_nomask} indica que a pessoa detetada não está usando uma máscara facial) |
task |
string | A tarefa/classe de classificação de atributos |
Formato JSON para persondistance AI Insights
Exemplo de JSON para deteções saídas por esta operação.
{
"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 do campo do evento | Tipo | Description |
---|---|---|
id |
string | ID do Evento |
type |
string | Tipo de evento |
detectionsId |
matriz | Matriz de tamanho 1 de identificador exclusivo da deteção de pessoa que disparou esse evento |
properties |
Coleção | Recolha de valores |
personCount |
número inteiro | Número de pessoas detetadas quando o evento foi emitido |
averageDistance |
flutuante | A distância média entre todas as pessoas detetadas nos pés |
minimumDistanceThreshold |
flutuante | A distância em pés que desencadeará um evento "TooClose" quando as pessoas estiverem a menos de distância entre si. |
maximumDistanceThreshold |
flutuante | A distância em pés que desencadeará um evento "TooFar" quando as pessoas estão maiores do que a distância separada. |
eventName |
string | O nome do evento está TooClose com o é violado, TooFar quando maximumDistanceThreshold é violado ou unknown quando a minimumDistanceThreshold calibração automática não foi concluída |
distanceViolationPersonCount |
número inteiro | Número de pessoas detetadas em violação de minimumDistanceThreshold ou maximumDistanceThreshold |
zone |
string | O campo "nome" do polígono que representa a zona que foi monitorada para distanciamento entre as pessoas |
trigger |
string | O tipo de gatilho é 'evento' ou 'intervalo', dependendo do valor de trigger in SPACEANALYTICS_CONFIG |
Nome do campo de deteções | Tipo | Description |
---|---|---|
id |
string | ID de deteção |
type |
string | Tipo de deteção |
region |
Coleção | Recolha de valores |
type |
string | Tipo de região |
points |
Coleção | Pontos superiores esquerdo e inferior direito quando o tipo de região é RECTANGLE |
confidence |
flutuante | Confiança no algoritmo |
centerGroundPointX/centerGroundPointY |
2 valores flutuantes | x , y valores com as coordenadas da localização inferida da pessoa no chão em pés. x e y são coordenadas no plano do piso, assumindo que o piso é nivelado. A localização da câmera é a origem. |
Em centerGroundPoint
, x
é o componente de distância da câmera para a pessoa que é perpendicular ao plano de imagem da câmera. y
é o componente de distância que é paralelo ao plano de imagem da câmera.
Neste exemplo, centerGroundPoint
é {centerGroundPointX: 4, centerGroundPointY: 5}
. Isso significa que há uma pessoa quatro metros à frente da câmera e cinco metros à direita, olhando para a sala de cima para baixo.
Nome do campo SourceInfo | Tipo | Description |
---|---|---|
id |
string | ID da câmara |
timestamp |
data | Data UTC em que a carga JSON foi emitida |
width |
número inteiro | Largura do quadro de vídeo |
height |
número inteiro | Altura do quadro de vídeo |
frameId |
número inteiro | Identificador de quadro |
cameraCallibrationInfo |
Coleção | Recolha de valores |
status |
string | O estado da calibração no formato de state[;progress description] . O estado pode ser Calibrating , Recalibrating (se a recalibração estiver habilitada) ou Calibrated . A parte de descrição do progresso só é válida quando está em Calibrating e Recalibrating estado, que é usado para mostrar o progresso do processo de calibração atual. |
cameraHeight |
flutuante | A altura da câmera acima do solo em pés. Isto é inferido a partir da autocalibração. |
focalLength |
flutuante | A distância focal da câmera em pixels. Isto é inferido a partir da autocalibração. |
tiltUpAngle |
flutuante | O ângulo de inclinação da câmera da vertical. Isto é inferido a partir da autocalibração. |
Formato JSON para análise espacial AI Insights
A saída desta operação depende de configurado events
, por exemplo, se houver um zonecrossing
evento configurado para esta operação, a saída será igual a cognitiveservices.vision.spatialanalysis-personcrossingpolygon
.
Use a saída gerada pelo contêiner
Você pode querer integrar a deteção de Análise Espacial ou eventos em seu aplicativo. Aqui estão algumas abordagens a considerar:
- Use o SDK dos Hubs de Eventos do Azure para sua linguagem de programação escolhida para se conectar ao ponto de extremidade do Hub IoT do Azure e receber os eventos. Para obter mais informações, consulte Ler mensagens do dispositivo para a nuvem a partir do ponto de extremidade interno.
- Configure o Roteamento de Mensagens em seu Hub IoT do Azure para enviar os eventos para outros pontos de extremidade ou salvá-los em seu armazenamento de dados. Para obter mais informações, consulte Roteamento de mensagens do Hub IoT.
- Configure um trabalho do Azure Stream Analytics para processar os eventos em tempo real à medida que chegam e criar visualizações.
Implante operações de análise espacial em escala (várias câmeras)
Para obter o melhor desempenho e utilização das GPUs, você pode implantar qualquer operação de Análise Espacial em várias câmeras usando instâncias gráficas. Abaixo está um exemplo de configuração para executar a cognitiveservices.vision.spatialanalysis-personcrossingline
operação em 15 câmaras.
"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 | Description |
---|---|---|
batch_size |
número inteiro | Se todas as câmeras tiverem a mesma resolução, defina batch_size o número de câmeras que serão usadas nessa operação, caso contrário, defina batch_size como 1 ou deixe-o como padrão (1), o que indica que nenhum lote é suportado. |