Udostępnij za pośrednictwem


Operacje analizy przestrzennej

Ważne

30 marca 2025 r. analiza przestrzenna usługi Azure AI Vision zostanie wycofana. Przed określoną datą przejdź do usługi Azure AI Video Indexer lub innego rozwiązania typu open source. Zachęcamy do przejścia wcześniej, aby uzyskać bogatsze korzyści z usługi Azure AI Video Indexer. Oprócz znanych funkcji, których używasz, poniżej przedstawiono szybkie porównanie usługi Azure AI Vision Spatial Analysis i usługi Azure AI Video Indexer.

Funkcja Analiza przestrzenna usługi Azure AI Vision Azure AI Video Indexer
Obsługa przeglądarki Microsoft Edge Tak Tak
Wykrywanie obiektów Tylko wykrywanie osób i pojazdów Wykrywa 1000 obiektów i więcej
Przetwarzanie dźwięku/mowy Nieobsługiwane Obsługiwane (obejmuje transkrypcję mowy, tłumaczenie i podsumowanie)
Obsługiwane >(obejmuje transkrypcję mowy i analizę tonacji)
Wykrywanie zdarzeń i śledzenie Obsługiwane (śledzenie osób i pojazdów, wykrywanie zdarzeń) Nieobsługiwane jeszcze w przeglądarce Edge. Jest częściowo obsługiwana w chmurze.
Obsługa usługi Azure Arc Nieobsługiwane Natywna obsługa
Obszar, na którym się skupiasz Analiza wizualna z wyspecjalizowanym śledzeniem Kompleksowa analiza zawartości audio i wizualnej

Od teraz do 30 marca 2025 r. możesz nadal używać usługi Azure AI Vision Spatial Analysis lub przejść do usługi Azure AI Video Indexer przed określoną datą. Po 30 marca 2025 r. kontener analizy przestrzennej nie będzie już obsługiwany i przestanie przetwarzać nowe strumienie.

Analiza przestrzenna umożliwia analizowanie strumieni wideo z urządzeń aparatów w czasie rzeczywistym. Dla każdego skonfigurowanego urządzenia aparatu operacje analizy przestrzennej wygenerują strumień wyjściowy komunikatów JSON wysyłanych do wystąpienia usługi Azure IoT Hub.

Kontener Analizy przestrzennej implementuje następujące operacje. Te operacje można skonfigurować w manifeście wdrożenia kontenera.

Identyfikator operacji opis
cognitiveservices.vision.spatialanalysis-personcount Liczy osoby w wyznaczonej strefie w polu widzenia kamery. Strefa musi być w pełni objęta pojedynczą kamerą, aby funkcja PersonCount rejestrowała dokładną sumę.
Emituje początkowe zdarzenie personCountEvent , a następnie zdarzenia personCountEvent po zmianie liczby.
cognitiveservices.vision.spatialanalysis-personcrossingline Śledzi, gdy osoba przechodzi przez wyznaczoną linię w polu widzenia kamery.
Emituje zdarzenie personLineEvent , gdy osoba przechodzi przez linię i dostarcza informacje kierunkowe.
cognitiveservices.vision.spatialanalysis-personcrossingpolygon Emituje zdarzenie personZoneEnterExitEvent , gdy osoba wchodzi do wyznaczonej strefy lub wychodzi z niego i dostarcza informacje kierunkowe z boku strefy, która została skrzyżowana. Emituje personZoneDwellTimeEvent , gdy osoba wychodzi ze strefy i dostarcza informacje kierunkowe, a także liczbę milisekund, które osoba spędziła w strefie.
cognitiveservices.vision.spatialanalysis-persondistance Śledzi, kiedy ludzie naruszają regułę minimalnej odległości.
Emituje personDistanceEvent okresowo z lokalizacją każdego naruszenia odległości.
cognitiveservices.vision.spatialanalysis Operacja ogólna, która może służyć do uruchamiania wszystkich scenariuszy wymienionych powyżej. Ta opcja jest bardziej przydatna, gdy chcesz uruchomić wiele scenariuszy na tym samym aparacie lub użyć zasobów systemowych (na przykład procesora GPU).

Wszystkie powyższe operacje są również dostępne w .debug wersji usługi (na przykład cognitiveservices.vision.spatialanalysis-personcount.debug). Debugowanie umożliwia wizualizowanie ramek wideo podczas ich przetwarzania. Aby umożliwić wizualizację klatek wideo i zdarzeń, należy uruchomić xhost + na komputerze hosta.

Ważne

Modele sztucznej inteligencji usługi Azure AI Vision wykrywają i lokalizują ludzką obecność w nagraniach wideo i generują pole ograniczenia wokół ludzkiego ciała. Modele sztucznej inteligencji nie próbują odnajdywać tożsamości ani danych demograficznych osób.

Parametry operacji

Poniżej przedstawiono parametry wymagane przez każdą operację analizy przestrzennej.

Parametry operacji opis
Operation ID Identyfikator operacji z powyższej tabeli.
enabled Wartość logiczna: prawda lub fałsz
VIDEO_URL Adres URL PROTOKOŁU RTSP dla urządzenia z aparatem (przykład: rtsp://username:password@url). Analiza przestrzenna obsługuje strumień zakodowany w formacie H.264 za pośrednictwem protokołu RTSP, http lub mp4. Video_URL można podać jako zaciemnioną wartość ciągu base64 przy użyciu szyfrowania AES, a jeśli adres URL wideo jest zaciemniony KEY_ENV , należy IV_ENV podać jako zmienne środowiskowe. Przykładowe narzędzie do generowania kluczy i szyfrowania można znaleźć tutaj.
VIDEO_SOURCE_ID Przyjazna nazwa urządzenia aparatu lub strumienia wideo. Zostanie to zwrócone z danymi wyjściowymi JSON zdarzenia.
VIDEO_IS_LIVE Wartość true dla urządzeń z kamerą; wartość false dla nagranych filmów wideo.
VIDEO_DECODE_GPU_INDEX Który procesor GPU umożliwia dekodowanie ramki wideo. Domyślnie jest to 0. Powinna być taka sama jak gpu_index w innych konfiguracjach węzłów, takich jak DETECTOR_NODE_CONFIG i CAMERACALIBRATOR_NODE_CONFIG.
INPUT_VIDEO_WIDTH Szerokość ramki wejściowego strumienia/wideo (na przykład 1920). Jest to pole opcjonalne i jeśli zostanie podane, ramka zostanie przeskalowana do tego wymiaru przy zachowaniu współczynnika proporcji.
DETECTOR_NODE_CONFIG Kod JSON wskazujący, na którym procesorze GPU ma być uruchamiany węzeł detektora. Powinien mieć następujący format: "{ \"gpu_index\": 0 }",
TRACKER_NODE_CONFIG JSON wskazujący, czy ma być obliczana szybkość w węźle trackera, czy nie. Powinien mieć następujący format: "{ \"enable_speed\": true }",
CAMERA_CONFIG JSON wskazujący kalibrowane parametry aparatu dla wielu aparatów fotograficznych. Jeśli użyta umiejętność wymaga kalibracji i masz już parametr aparatu, możesz użyć tej konfiguracji, aby udostępnić je bezpośrednio. Powinien mieć następujący format: "{ \"cameras\": [{\"source_id\": \"endcomputer.0.persondistancegraph.detector+end_computer1\", \"camera_height\": 13.105561256408691, \"camera_focal_length\": 297.60003662109375, \"camera_tiltup_angle\": 0.9738943576812744}] }", source_id element jest używany do identyfikowania poszczególnych aparatów. Można go uzyskać z source_info wydarzenia opublikowanego przez nas. Zacznie obowiązywać tylko wtedy, gdy do_calibration=false w pliku DETECTOR_NODE_CONFIG.
CAMERACALIBRATOR_NODE_CONFIG JSON wskazujący procesor GPU do uruchomienia węzła kalibratora aparatu i czy używać kalibracji, czy nie. Powinien mieć następujący format: "{ \"gpu_index\": 0, \"do_calibration\": true, \"enable_orientation\": true}",
CALIBRATION_CONFIG JSON wskazujący parametry do kontrolowania sposobu działania kalibracji aparatu. Powinien mieć następujący format: "{\"enable_recalibration\": true, \"quality_check_frequency_seconds\": 86400}",
SPACEANALYTICS_CONFIG Konfiguracja JSON dla strefy i wiersza, jak opisano poniżej.
ENABLE_FACE_MASK_CLASSIFIER True aby umożliwić wykrywanie osób noszących maski twarzy w strumieniu wideo, False aby je wyłączyć. Domyślnie jest to wyłączone. Wykrywanie maski twarzy wymaga parametru szerokości wideo wejściowego 1920 "INPUT_VIDEO_WIDTH": 1920. Atrybut maski twarzy nie zostanie zwrócony, jeśli wykryte osoby nie stoją przed kamerą lub są zbyt daleko od niego. Aby uzyskać więcej informacji, zobacz umieszczanie aparatu.
STATIONARY_TARGET_REMOVER_CONFIG JSON wskazujący parametry dla stacjonarnego usuwania docelowego, co dodaje możliwość uczenia się i ignorowania długoterminowych stacjonarnych celów fałszywie dodatnich, takich jak manekiny lub osoby na zdjęciach. Konfiguracja powinna mieć następujący format: "{\"enable\": true, \"bbox_dist_threshold-in_pixels\": 5, \"buffer_length_in_seconds\": 3600, \"filter_ratio\": 0.2 }"

Ustawienia parametrów węzła detektora

Poniżej przedstawiono przykład parametrów DETECTOR_NODE_CONFIG dla wszystkich operacji analizy przestrzennej.

{
"gpu_index": 0,
"enable_breakpad": false
}
Nazwisko Pisz opis
gpu_index string Indeks procesora GPU, na którym zostanie uruchomiona ta operacja.
enable_breakpad bool Wskazuje, czy włączyć breakpad, który jest używany do generowania zrzutu awaryjnego na potrzeby debugowania. false Jest domyślnie. Jeśli ustawisz go na truewartość , musisz również dodać "CapAdd": ["SYS_PTRACE"] element w HostConfig części kontenera createOptions. Domyślnie zrzut awaryjny jest przekazywany do aplikacji RealTimePersonTracking AppCenter, jeśli chcesz przekazać zrzuty awaryjne do własnej aplikacji AppCenter, możesz zastąpić zmienną środowiskową RTPT_APPCENTER_APP_SECRET wpisem tajnym aplikacji aplikacji.

Ustawienia parametrów węzła kalibracji aparatu

Poniżej przedstawiono przykład parametrów CAMERACALIBRATOR_NODE_CONFIG dla wszystkich operacji analizy przestrzennej.

{
  "gpu_index": 0,
  "do_calibration": true,
  "enable_breakpad": false,
  "enable_orientation": true
}
Nazwisko Pisz opis
do_calibration string Wskazuje, że kalibracja jest włączona. do_calibration musi mieć wartość true, aby funkcja cognitiveservices.vision.spatialanalysis-persondistance działała prawidłowo. do_calibration parametr jest domyślnie ustawiony na Truewartość .
enable_breakpad bool Wskazuje, czy włączyć breakpad, który jest używany do generowania zrzutu awaryjnego na potrzeby debugowania. false Jest domyślnie. Jeśli ustawisz go na truewartość , musisz również dodać "CapAdd": ["SYS_PTRACE"] element w HostConfig części kontenera createOptions. Domyślnie zrzut awaryjny jest przekazywany do aplikacji RealTimePersonTracking AppCenter, jeśli chcesz przekazać zrzuty awaryjne do własnej aplikacji AppCenter, możesz zastąpić zmienną środowiskową RTPT_APPCENTER_APP_SECRET wpisem tajnym aplikacji aplikacji.
enable_orientation bool Wskazuje, czy chcesz obliczyć orientację wykrytych osób, czy nie. enable_orientation parametr jest domyślnie ustawiony na Truewartość .

Konfiguracja kalibracji

Jest to przykład parametrów CALIBRATION_CONFIG dla wszystkich operacji analizy przestrzennej.

{
  "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
}
Nazwisko Pisz Opis
enable_recalibration bool Wskazuje, czy automatyczna relibration jest włączona. Wartość domyślna to true.
calibration_quality_check_frequency_seconds int Minimalna liczba sekund między poszczególnymi testami jakości w celu określenia, czy jest wymagana rekalibacja. Wartość domyślna to 86400 (24 godziny). Używane tylko wtedy, gdy enable_recalibration=True.
calibration_quality_check_sample_collect_frequency_seconds int Minimalna liczba sekund między zbieraniem nowych próbek danych na potrzeby ponownego kalibracji i sprawdzania jakości. Wartość domyślna to 300 (5 minut). Używane tylko wtedy, gdy enable_recalibration=True.
calibration_quality_check_one_round_sample_collect_num int Minimalna liczba nowych próbek danych do zebrania na rundę kolekcji próbek. Wartość domyślna to 10. Używane tylko wtedy, gdy enable_recalibration=True.
calibration_quality_check_queue_max_size int Maksymalna liczba próbek danych do przechowywania, gdy model aparatu jest kalibrowany. Wartość domyślna to 1000. Używane tylko wtedy, gdy enable_recalibration=True.
calibration_event_frequency_seconds int Częstotliwość wyjściowa (w sekundach) zdarzeń kalibracji kamery. Wartość -1 wskazuje, że kalibracja kamery nie powinna być wysyłana, chyba że informacje kalibracji aparatu zostały zmienione. Wartość domyślna to -1.

Wyjście kalibracji kamery

Poniżej przedstawiono przykład danych wyjściowych kalibracji kamery, jeśli jest włączona. Wielokropek wskazuje więcej obiektów tego samego typu na liście.

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

Aby uzyskać szczegółowe informacje, source_infozobacz Dane wyjściowe operacji analizy przestrzennej.

Nazwa pola ZonePlacementInfo Type Opis
optimalZonePolygon obiekt Wielokąt na obrazie aparatu, na którym można umieścić linie lub strefy dla operacji w celu uzyskania optymalnych wyników.
Każda para wartości reprezentuje x,y dla wierzchołków wielokąta. Wielokąt reprezentuje obszary, w których osoby są śledzone lub liczone, a punkty wielokątne są oparte na znormalizowanych współrzędnych (0–1), gdzie lewy górny róg to (0,0, 0,0) i prawy dolny róg to (1.0, 1.0).
fairZonePolygon obiekt Wielokąt na obrazie aparatu, na którym można umieścić linie lub strefy dla operacji na dobre, ale ewentualnie nie optymalne wyniki.
Zobacz optimalZonePolygon powyżej, aby uzyskać szczegółowe wyjaśnienie zawartości.
uniformlySpacedPersonBoundingBoxes lista Lista pól ograniczenia osób w obrazie kamery rozmieszczonych równomiernie w rzeczywistej przestrzeni. Wartości są oparte na znormalizowanych współrzędnych (0–1).
personBoundingBoxGroundPoints lista Lista współrzędnych na płaszczyźnie podłogowej względem kamery. Każda współrzędna odpowiada prawej dolnej części pola ograniczenia w uniformlySpacedPersonBoundingBoxes tym samym indeksie.
centerGroundPointX/centerGroundPointY Zobacz pola w formacie JSON dla cognitiveservices.vision.spatialanalysis-persondistance AI Insights, aby uzyskać więcej informacji na temat sposobu obliczania współrzędnych na płaszczyźnie podłogi.

Przykład danych wyjściowych informacji o umieszczaniu strefy wizualizowanej na ramce wideo: Wizualizacja informacji o umieszczaniu strefy

Informacje o umieszczaniu strefy udostępniają sugestie dotyczące konfiguracji, ale wskazówki dotyczące konfiguracji aparatu muszą być nadal przestrzegane, aby uzyskać najlepsze wyniki.

Ustawienia parametrów węzła trackera

Szybkość obliczeń można skonfigurować za pomocą ustawień parametrów węzła trackera.

{
"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
}
Nazwisko Pisz Opis
enable_speed bool Wskazuje, czy chcesz obliczyć szybkość wykrytych osób, czy nie. enable_speed parametr jest domyślnie ustawiony na Truewartość . Zdecydowanie zaleca się włączenie zarówno szybkości, jak i orientacji, aby mieć najlepsze szacowane wartości.
remove_stationary_objects bool Wskazuje, czy chcesz usunąć obiekty stacjonarne. remove_stationary_objects jest domyślnie ustawiona na wartość True.
stationary_objects_dist_threshold_in_pixels int Próg odległości sąsiedztwa, aby zdecydować, czy dwa pola wykrywania mogą być traktowane jako takie same wykrywanie. stationary_objects_dist_threshold_in_pixels jest domyślnie ustawiona na 5.
stationary_objects_buffer_length_in_seconds int Minimalny czas w sekundach, przez który system musi spojrzeć wstecz, aby zdecydować, czy cel jest celem stacjonarnym, czy nie. stationary_objects_buffer_length_in_seconds jest domyślnie ustawiona na wartość 3600.
stationary_objects_filter_ratio liczba zmiennoprzecinkowa Jeśli cel jest wielokrotnie wykrywany w tej samej lokalizacji (zdefiniowanej w stationary_objects_dist_threshold_in_pixels) dla większej stationary_objects_filter_ratio (0,2 oznacza 20%) przedziału stationary_objects_buffer_length_in_seconds czasu, będzie traktowany jako cel stacjonarny. stationary_objects_filter_ratio jest domyślnie ustawiona na wartość 0.2.

Konfiguracja i dane wyjściowe operacji analizy przestrzennej

Konfiguracja strefy dla konta osoby

Poniżej przedstawiono przykład danych wejściowych JSON dla parametru SPACEANALYTICS_CONFIG, który konfiguruje strefę. Dla tej operacji można skonfigurować wiele stref.

{
  "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"
          }
        }
      ]
    }
  ]
}
Nazwisko Pisz opis
zones lista Lista stref.
name string Przyjazna nazwa dla tej strefy.
polygon lista Każda para wartości reprezentuje x,y dla wierzchołków wielokąta. Wielokąt reprezentuje obszary, w których osoby są śledzone lub zliczane. Punkty wielokątne są oparte na znormalizowanych współrzędnych (0–1), gdzie lewy górny róg to (0,0, 0,0), a prawy dolny róg to (1,0, 1,0).
threshold liczba zmiennoprzecinkowa Zdarzenia są przesyłane, gdy dana osoba jest większa niż ta liczba pikseli wewnątrz strefy. Jest to pole opcjonalne, a wartość jest w stosunku (0–1). Na przykład wartość 0,0253 będzie wynosić 13 pikseli na wideo o szerokości obrazu = 512 (0,0253 X 512 = ~13).
type string W przypadku konta cognitiveservices.vision.spatialanalysis-personcount powinna to być countwartość .
trigger string Typ wyzwalacza wysyłania zdarzenia. Obsługiwane wartości są event przeznaczone do wysyłania zdarzeń, gdy liczba zmienia się lub interval wysyła zdarzenia okresowo, niezależnie od tego, czy liczba uległa zmianie, czy nie.
output_frequency int Szybkość ruchu wychodzącego zdarzeń. Gdy output_frequency = X, każde zdarzenie X jest wychodzące, np. output_frequency = 2 oznacza, że każde inne zdarzenie jest wynikiem wyjściowym. Element output_frequency ma zastosowanie zarówno do , jak event i interval.
focus string Lokalizacja punktu w polu ograniczenia osoby służąca do obliczania zdarzeń. Wartość fokusu może być footprint (ślad osoby), bottom_center (dolny środek pola ograniczenia osoby), (środek pola ograniczenia osoby). center

Konfiguracja linii dla personcrossingline

Poniżej przedstawiono przykład danych wejściowych JSON dla parametru SPACEANALYTICS_CONFIG , który konfiguruje wiersz. Dla tej operacji można skonfigurować wiele linii przekraczania.

{
   "lines": [
       {
           "name": "doorcamera",
           "line": {
               "start": {
                   "x": 0,
                   "y": 0.5
               },
               "end": {
                   "x": 1,
                   "y": 0.5
               }
           },
           "events": [
               {
                   "type": "linecrossing",
                   "config": {
                       "trigger": "event",
                       "focus": "footprint"
                   }
               }
           ]
       }
   ]
}
Nazwisko Pisz opis
lines lista Lista wierszy.
name string Przyjazna nazwa dla tego wiersza.
line lista Definicja wiersza. Jest to linia kierunkowa umożliwiająca zrozumienie "entry" a "exit".
start para wartości x, y współrzędnych punktu początkowego linii. Wartości zmiennoprzecinkowe reprezentują położenie wierzchołka względem lewego górnego rogu. Aby obliczyć bezwzględne wartości x, y, należy pomnożyć te wartości przy użyciu rozmiaru ramki.
end para wartości x, współrzędne y dla punktu końcowego linii. Wartości zmiennoprzecinkowe reprezentują położenie wierzchołka względem lewego górnego rogu. Aby obliczyć bezwzględne wartości x, y, należy pomnożyć te wartości przy użyciu rozmiaru ramki.
threshold liczba zmiennoprzecinkowa Zdarzenia są przesyłane, gdy dana osoba jest większa niż ta liczba pikseli wewnątrz strefy. Jest to pole opcjonalne, a wartość jest w stosunku (0–1). Na przykład wartość 0,0253 będzie wynosić 13 pikseli na wideo o szerokości obrazu = 512 (0,0253 X 512 = ~13).
type string W przypadku cognitiveservices.vision.spatialanalysis-personcrossingline powinna to być linecrossing.
trigger string Typ wyzwalacza wysyłania zdarzenia.
Obsługiwane wartości: "event": wyzwolony, gdy ktoś przekroczy linię.
focus string Lokalizacja punktu w polu ograniczenia osoby służąca do obliczania zdarzeń. Wartość fokusu może być footprint (ślad osoby), bottom_center (dolny środek pola ograniczenia osoby), (środek pola ograniczenia osoby). center Wartość domyślna to ślad.

Konfiguracja strefy dla personcrossingpolygon

Jest to przykład danych wejściowych JSON dla parametru SPACEANALYTICS_CONFIG , który konfiguruje strefę. Dla tej operacji można skonfigurować wiele stref.

{
"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"
               }
           }]
   }]
}
Nazwisko Pisz opis
zones lista Lista stref.
name string Przyjazna nazwa dla tej strefy.
polygon lista Każda para wartości reprezentuje x,y dla wierzchołków wielokąta. Wielokąt reprezentuje obszary, w których osoby są śledzone lub zliczane. Wartości zmiennoprzecinkowe reprezentują położenie wierzchołka względem lewego górnego rogu. Aby obliczyć bezwzględne wartości x, y, należy pomnożyć te wartości przy użyciu rozmiaru ramki.
target_side int Określa stronę strefy zdefiniowanej przez polygon , aby zmierzyć, jak długo ludzie twarzą po tej stronie w strefie. Funkcja "dwellTimeForTargetSide" zwróci szacowany czas. Każda strona jest liczbą krawędzi między dwoma wierzchołkami wielokąta, który reprezentuje strefę. Na przykład krawędź między dwoma pierwszymi wierzchołkami wielokąta reprezentuje pierwszą stronę "side"=1. Wartość parametru target_side znajduje się między wartością [0,N-1] , gdzie N jest liczbą boków obiektu polygon. To pole jest opcjonalne.
threshold liczba zmiennoprzecinkowa Zdarzenia są przesyłane, gdy dana osoba jest większa niż ta liczba pikseli wewnątrz strefy. Jest to pole opcjonalne, a wartość jest w stosunku (0–1). Na przykład wartość 0,074 będzie wynosić 38 pikseli na wideo o szerokości obrazu = 512 (0,074 X 512 = ~38).
type string W przypadku cognitiveservices.vision.spatialanalysis-personcrossingpolygon powinien mieć wartość zonecrossing lub zonedwelltime.
trigger string Typ wyzwalacza wysyłania zdarzenia
Obsługiwane wartości: "zdarzenie": wyzwolony, gdy ktoś wejdzie do strefy lub wyjeżdża z niego.
focus string Lokalizacja punktu w polu ograniczenia osoby służąca do obliczania zdarzeń. Wartość fokusu może być footprint (ślad osoby), bottom_center (dolny środek pola ograniczenia osoby), (środek pola ograniczenia osoby). center Wartość domyślna to ślad.

Konfiguracja strefy dla persondistance

Jest to przykład danych wejściowych JSON dla parametru SPACEANALYTICS_CONFIG , który konfiguruje strefę dla cognitiveservices.vision.spatialanalysis-persondistance. Dla tej operacji można skonfigurować wiele stref.

{
"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"
          }
          }]
   }]
}
Nazwisko Pisz opis
zones lista Lista stref.
name string Przyjazna nazwa dla tej strefy.
polygon lista Każda para wartości reprezentuje x,y dla wierzchołków wielokąta. Wielokąt reprezentuje obszary, w których ludzie są liczone, a odległość między ludźmi jest mierzona. Wartości zmiennoprzecinkowe reprezentują położenie wierzchołka względem lewego górnego rogu. Aby obliczyć bezwzględne wartości x, y, należy pomnożyć te wartości przy użyciu rozmiaru ramki.
threshold liczba zmiennoprzecinkowa Zdarzenia są przesyłane, gdy dana osoba jest większa niż ta liczba pikseli wewnątrz strefy. Jest to pole opcjonalne, a wartość jest w stosunku (0–1). Na przykład wartość 0,0253 będzie wynosić 13 pikseli na wideo o szerokości obrazu = 512 (0,0253 X 512 = ~13).
type string W przypadku cognitiveservices.vision.spatialanalysis-persondistance powinna to być persondistancewartość .
trigger string Typ wyzwalacza wysyłania zdarzenia. Obsługiwane wartości są event przeznaczone do wysyłania zdarzeń, gdy liczba zmienia się lub interval wysyła zdarzenia okresowo, niezależnie od tego, czy liczba uległa zmianie, czy nie.
output_frequency int Szybkość ruchu wychodzącego zdarzeń. Gdy output_frequency = X, każde zdarzenie X jest wychodzące, np. output_frequency = 2 oznacza, że każde inne zdarzenie jest wynikiem wyjściowym. Element output_frequency ma zastosowanie zarówno do , jak event i interval.
minimum_distance_threshold liczba zmiennoprzecinkowa Odległość w stopach, która wyzwoli wydarzenie "TooClose", gdy ludzie są mniej niż odległość od siebie.
maximum_distance_threshold liczba zmiennoprzecinkowa Odległość w stopach, która wyzwoli wydarzenie "TooFar", gdy ludzie są większa niż odległość od siebie.
aggregation_method string Metoda agregacji persondistance wyniku. Aggregation_method ma zastosowanie zarówno do , jak mode i average.
focus string Lokalizacja punktu w polu ograniczenia osoby służąca do obliczania zdarzeń. Wartość fokusu może być footprint (ślad osoby), bottom_center (dolny środek pola ograniczenia osoby), (środek pola ograniczenia osoby). center

Konfiguracja analizy przestrzennej

Poniżej przedstawiono przykład danych wejściowych JSON dla parametru SPACEANALYTICS_CONFIG , który konfiguruje linię i strefę dla cognitiveservices.vision.spatialanalysis. Można skonfigurować wiele wierszy/stref dla tej operacji, a każda linia/strefa może mieć różne zdarzenia.

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

Konfiguracja aparatu

Zapoznaj się z wytycznymi dotyczącymi umieszczania aparatu, aby dowiedzieć się więcej o sposobie konfigurowania stref i linii.

Dane wyjściowe operacji analizy przestrzennej

Zdarzenia z każdej operacji są wychodzące do usługi Azure IoT Hub w formacie JSON.

Format JSON dla usługi Personcount AI Insights

Przykładowy kod JSON dla danych wyjściowych zdarzenia przez tę operację.

{
    "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"
}
Nazwa pola zdarzenia Type opis
id string Identyfikator zdarzenia
type string Typ zdarzenia
detectionsId tablica Tablica o rozmiarze 1 unikatowego identyfikatora wykrywania osoby, która wyzwoliła to zdarzenie
properties — kolekcja Kolekcja wartości
trackinId string Unikatowy identyfikator wykrytej osoby
zone string Pole "name" wielokąta reprezentujące strefę, która została skrzyżowana
trigger string Typ wyzwalacza to "zdarzenie" lub "interwał" w zależności od wartości trigger w SPACEANALYTICS_CONFIG
Nazwa pola wykrywania Type opis
id string Identyfikator wykrywania
type string Typ wykrywania
region — kolekcja Kolekcja wartości
type string Typ regionu
points — kolekcja Lewy górny i dolny prawy punkt, gdy typ regionu to PROSTOKĄT
confidence liczba zmiennoprzecinkowa Pewność algorytmu
attributes tablica Tablica atrybutów. Każdy atrybut składa się z etykiety, zadania i pewności
label string Wartość atrybutu (na przykład wskazuje, {label: face_mask} że wykryta osoba nosi maskę twarzy)
confidence (attribute) liczba zmiennoprzecinkowa Wartość ufności atrybutu z zakresem od 0 do 1 (na przykład wskazuje, {confidence: 0.9, label: face_nomask} że wykryta osoba nie nosi maski twarzy)
task string Zadanie/klasa klasyfikacji atrybutów
Nazwa pola SourceInfo Type opis
id string Identyfikator aparatu
timestamp data Data UTC emitowania ładunku JSON
width int Szerokość ramki wideo
height int Wysokość ramki wideo
frameId int Identyfikator ramki
cameraCallibrationInfo — kolekcja Kolekcja wartości
status string Stan kalibracji w formacie state[;progress description]. Stan może mieć Calibratingwartość , Recalibrating (jeśli jest włączona relibration) lub Calibrated. Część opisu postępu jest prawidłowa tylko wtedy, gdy jest w Calibrating stanie i Recalibrating , która służy do pokazywania postępu bieżącego procesu kalibracji.
cameraHeight liczba zmiennoprzecinkowa Wysokość kamery nad ziemią w stopach. Jest to wnioskowane z autokalibracji.
focalLength liczba zmiennoprzecinkowa Długość ogniskowa aparatu w pikselach. Jest to wnioskowane z autokalibracji.
tiltUpAngle liczba zmiennoprzecinkowa Kąt pochylenia aparatu z pionowego. Jest to wnioskowane z autokalibracji.

Format JSON dla personcrossingline AI Insights

Przykładowy kod JSON do wykrywania danych wyjściowych tej operacji.

{
    "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"
}
Nazwa pola zdarzenia Type opis
id string Identyfikator zdarzenia
type string Typ zdarzenia
detectionsId tablica Tablica o rozmiarze 1 unikatowego identyfikatora wykrywania osoby, która wyzwoliła to zdarzenie
properties — kolekcja Kolekcja wartości
trackinId string Unikatowy identyfikator wykrytej osoby
status string Kierunek przekraczania linii, "CrossLeft" lub "CrossRight". Kierunek opiera się na wyobrażaniu sobie, stojąc na "początku", w obliczu "końca" linii. CrossRight przechodzi od lewej do prawej. CrossLeft przechodzi od prawej do lewej.
orientationDirection string Kierunek orientacji wykrytej osoby po przekroczeniu linii. Wartość może mieć wartość "Left", "Right" lub "Straight". Ta wartość jest wartością wyjściową, jeśli enable_orientation jest ustawiona na True wartość w CAMERACALIBRATOR_NODE_CONFIG
zone string Pole "name" wiersza, które zostało skrzyżowane
Nazwa pola wykrywania Type opis
id string Identyfikator wykrywania
type string Typ wykrywania
region — kolekcja Kolekcja wartości
type string Typ regionu
points — kolekcja Lewy górny i dolny prawy punkt, gdy typ regionu to PROSTOKĄT
groundOrientationAngle liczba zmiennoprzecinkowa Zgodnie z ruchem wskazówek zegara kąt orientacji osoby na wywnioskowanym płaszczyźnie naziemnej
mappedImageOrientation liczba zmiennoprzecinkowa Przewidywany kąt radiany zgodnie z ruchem wskazówek zegara orientacji osoby na przestrzeni obrazu 2D
speed liczba zmiennoprzecinkowa Szacowana szybkość wykrytej osoby. Jednostka jest foot per second (ft/s)
confidence liczba zmiennoprzecinkowa Pewność algorytmu
attributes tablica Tablica atrybutów. Każdy atrybut składa się z etykiety, zadania i pewności
label string Wartość atrybutu (na przykład wskazuje, {label: face_mask} że wykryta osoba nosi maskę twarzy)
confidence (attribute) liczba zmiennoprzecinkowa Wartość ufności atrybutu z zakresem od 0 do 1 (na przykład wskazuje, {confidence: 0.9, label: face_nomask} że wykryta osoba nie nosi maski twarzy)
task string Zadanie/klasa klasyfikacji atrybutów
Nazwa pola SourceInfo Type opis
id string Identyfikator aparatu
timestamp data Data UTC emitowania ładunku JSON
width int Szerokość ramki wideo
height int Wysokość ramki wideo
frameId int Identyfikator ramki

Ważne

Model sztucznej inteligencji wykrywa osobę niezależnie od tego, czy dana osoba jest skierowana do aparatu, czy też z dala od kamery. Model sztucznej inteligencji nie uruchamia rozpoznawania twarzy i nie emituje żadnych informacji biometrycznych.

Format JSON dla personcrossingpolygon AI Insights

Przykładowy kod JSON do wykrywania danych wyjściowych tej operacji z zonecrossing typem 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"
}

Przykładowy kod JSON do wykrywania danych wyjściowych tej operacji z zonedwelltime typem 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"
}
Nazwa pola zdarzenia Type opis
id string Identyfikator zdarzenia
type string Typ zdarzenia. Wartość może być personZoneDwellTimeEvent lub personZoneEnterExitEvent
detectionsId tablica Tablica o rozmiarze 1 unikatowego identyfikatora wykrywania osoby, która wyzwoliła to zdarzenie
properties — kolekcja Kolekcja wartości
trackinId string Unikatowy identyfikator wykrytej osoby
status string Kierunek przepraw wielokątnych, "Enter" lub "Exit"
side int Liczba boku wielokąta, który przekroczyła osoba. Każda strona jest liczbą krawędzi między dwoma wierzchołkami wielokąta, który reprezentuje strefę. Krawędź między dwoma pierwszymi wierzchołkami wielokąta reprezentuje pierwszą stronę. Wartość "Side" jest pusta, gdy zdarzenie nie jest skojarzone z określoną stroną z powodu okluzji. Na przykład, wyjście miało miejsce, gdy osoba zniknęła, ale nie była widziana przechodząc przez bok strefy, lub nastąpiło wejście, gdy osoba pojawiła się w strefie, ale nie była widziana przechodzącą przez bok.
dwellTime liczba zmiennoprzecinkowa Liczba milisekund reprezentujących czas spędzony przez osobę w strefie. To pole jest udostępniane, gdy typ zdarzenia to personZoneDwellTimeEvent
dwellFrames int Liczba ramek, które osoba spędziła w strefie. To pole jest udostępniane, gdy typ zdarzenia to personZoneDwellTimeEvent
dwellTimeForTargetSide liczba zmiennoprzecinkowa Liczba milisekund, które reprezentują czas, jaki osoba spędziła w strefie i miała do czynienia z target_side. To pole jest udostępniane, gdy enable_orientation znajduje się w CAMERACALIBRATOR_NODE_CONFIG parametrze , a wartość parametru jest ustawiona target_side True wSPACEANALYTICS_CONFIG
avgSpeed liczba zmiennoprzecinkowa Średnia prędkość osoby w strefie. Jednostka jest foot per second (ft/s)
minSpeed liczba zmiennoprzecinkowa Minimalna prędkość osoby w strefie. Jednostka jest foot per second (ft/s)
zone string Pole "name" wielokąta reprezentujące strefę, która została skrzyżowana
Nazwa pola wykrywania Type opis
id string Identyfikator wykrywania
type string Typ wykrywania
region — kolekcja Kolekcja wartości
type string Typ regionu
points — kolekcja Lewy górny i dolny prawy punkt, gdy typ regionu to PROSTOKĄT
groundOrientationAngle liczba zmiennoprzecinkowa Zgodnie z ruchem wskazówek zegara kąt orientacji osoby na wywnioskowanym płaszczyźnie naziemnej
mappedImageOrientation liczba zmiennoprzecinkowa Przewidywany kąt radiany zgodnie z ruchem wskazówek zegara orientacji osoby na przestrzeni obrazu 2D
speed liczba zmiennoprzecinkowa Szacowana szybkość wykrytej osoby. Jednostka jest foot per second (ft/s)
confidence liczba zmiennoprzecinkowa Pewność algorytmu
attributes tablica Tablica atrybutów. Każdy atrybut składa się z etykiety, zadania i pewności
label string Wartość atrybutu (na przykład wskazuje, {label: face_mask} że wykryta osoba nosi maskę twarzy)
confidence (attribute) liczba zmiennoprzecinkowa Wartość ufności atrybutu z zakresem od 0 do 1 (na przykład wskazuje, {confidence: 0.9, label: face_nomask} że wykryta osoba nie nosi maski twarzy)
task string Zadanie/klasa klasyfikacji atrybutów

Format JSON dla persondistance AI Insights

Przykładowy kod JSON do wykrywania danych wyjściowych tej operacji.

{
    "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"
}
Nazwa pola zdarzenia Type opis
id string Identyfikator zdarzenia
type string Typ zdarzenia
detectionsId tablica Tablica o rozmiarze 1 unikatowego identyfikatora wykrywania osoby, która wyzwoliła to zdarzenie
properties — kolekcja Kolekcja wartości
personCount int Liczba osób wykrytych podczas emitowania zdarzenia
averageDistance liczba zmiennoprzecinkowa Średnia odległość między wszystkimi wykryte osoby w stopach
minimumDistanceThreshold liczba zmiennoprzecinkowa Odległość stóp, która wyzwoli wydarzenie "TooClose", gdy ludzie są mniej niż odległość od siebie.
maximumDistanceThreshold liczba zmiennoprzecinkowa Odległość w stopach, która wyzwoli wydarzenie "TooFar", gdy ludzie są większa niż odległość od siebie.
eventName string Nazwa zdarzenia jest TooClose z naruszeniem minimumDistanceThreshold , TooFar gdy maximumDistanceThreshold zostanie naruszona lub unknown gdy autokalibration nie została ukończona
distanceViolationPersonCount int Liczba osób wykrytych z naruszeniem minimumDistanceThreshold lub maximumDistanceThreshold
zone string Pole "name" wielokąta, które reprezentuje strefę monitorowaną pod kątem różnic między osobami
trigger string Typ wyzwalacza to "zdarzenie" lub "interwał" w zależności od wartości trigger w SPACEANALYTICS_CONFIG
Nazwa pola wykrywania Type opis
id string Identyfikator wykrywania
type string Typ wykrywania
region — kolekcja Kolekcja wartości
type string Typ regionu
points — kolekcja Lewy górny i dolny prawy punkt, gdy typ regionu to PROSTOKĄT
confidence liczba zmiennoprzecinkowa Pewność algorytmu
centerGroundPointX/centerGroundPointY 2 wartości zmiennoprzecinkowe x, y wartości ze współrzędnymi lokalizacji osoby wywnioskowanej na ziemi w stopach. x i y są współrzędnymi na płaszczyźnie podłogi, przy założeniu, że podłoga jest poziom. Lokalizacja aparatu to źródło.

W centerGroundPointsystemie x jest składnikiem odległości od aparatu do osoby, która jest prostopadła do płaszczyzny obrazu aparatu. y jest składnikiem odległości, która jest równoległa do płaszczyzny obrazu aparatu.

Przykładowy środkowy punkt naziemny

W tym przykładzie centerGroundPoint jest to {centerGroundPointX: 4, centerGroundPointY: 5}. Oznacza to, że jest osoba cztery stopy przed kamerą i pięć stóp po prawej stronie, patrząc na pokój od góry do dołu.

Nazwa pola SourceInfo Type opis
id string Identyfikator aparatu
timestamp data Data UTC emitowania ładunku JSON
width int Szerokość ramki wideo
height int Wysokość ramki wideo
frameId int Identyfikator ramki
cameraCallibrationInfo — kolekcja Kolekcja wartości
status string Stan kalibracji w formacie state[;progress description]. Stan może mieć Calibratingwartość , Recalibrating (jeśli jest włączona relibration) lub Calibrated. Część opisu postępu jest prawidłowa tylko wtedy, gdy jest w Calibrating stanie i Recalibrating , która służy do pokazywania postępu bieżącego procesu kalibracji.
cameraHeight liczba zmiennoprzecinkowa Wysokość kamery nad ziemią w stopach. Jest to wnioskowane z autokalibracji.
focalLength liczba zmiennoprzecinkowa Długość ogniskowa aparatu w pikselach. Jest to wnioskowane z autokalibracji.
tiltUpAngle liczba zmiennoprzecinkowa Kąt pochylenia aparatu z pionowego. Jest to wnioskowane z autokalibracji.

Format JSON dla analizy przestrzennej sztucznej inteligencji

Dane wyjściowe tej operacji zależą od skonfigurowanego eventszonecrossing elementu , na przykład jeśli dla tej operacji skonfigurowano zdarzenie, dane wyjściowe będą takie same jak cognitiveservices.vision.spatialanalysis-personcrossingpolygon.

Używanie danych wyjściowych wygenerowanych przez kontener

Możesz chcieć zintegrować wykrywanie lub zdarzenia analizy przestrzennej z aplikacją. Oto kilka podejść do rozważenia:

  • Użyj zestawu SDK usługi Azure Event Hubs dla wybranego języka programowania, aby nawiązać połączenie z punktem końcowym usługi Azure IoT Hub i odebrać zdarzenia. Aby uzyskać więcej informacji, zobacz Odczytywanie komunikatów z urządzenia do chmury z wbudowanego punktu końcowego.
  • Skonfiguruj routing komunikatów w usłudze Azure IoT Hub, aby wysyłać zdarzenia do innych punktów końcowych lub zapisywać zdarzenia w magazynie danych. Aby uzyskać więcej informacji, zobacz Routing komunikatów usługi IoT Hub.
  • Skonfiguruj zadanie usługi Azure Stream Analytics, aby przetwarzać zdarzenia w czasie rzeczywistym podczas ich nadejścia i tworzenia wizualizacji.

Wdrażanie operacji analizy przestrzennej na dużą skalę (wiele kamer)

Aby uzyskać najlepszą wydajność i wykorzystanie procesorów GPU, można wdrożyć dowolne operacje analizy przestrzennej na wielu kamerach przy użyciu wystąpień grafu. Poniżej przedstawiono przykładową konfigurację uruchamiania cognitiveservices.vision.spatialanalysis-personcrossingline operacji na 15 kamerach.

  "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>"
                }
            }
          }
        },
      }
  }
Nazwisko Pisz Opis
batch_size int Jeśli wszystkie kamery mają taką samą rozdzielczość, ustaw batch_size na liczbę kamer, które będą używane w tej operacji, w przeciwnym razie ustaw batch_size wartość 1 lub pozostaw ją jako domyślną (1), która wskazuje, że żadna partia nie jest obsługiwana.

Następne kroki