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 true wartość , 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 True wartość . |
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 true wartość , 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 True wartość . |
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_info
zobacz 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:
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 True wartość . 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ć count wartość . |
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ć persondistance wartość . |
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ć Calibrating wartość , 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 centerGroundPoint
systemie 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.
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ć Calibrating wartość , 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 events
zonecrossing
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. |