Vorgänge der räumlichen Analyse
Wichtig
Die räumliche Analyse von Azure KI Vision wird am 30. März 2025 eingestellt. Wechseln Sie vor dem angegebenen Datum zu Azure KI Video Indexer oder einer anderen Open-Source-Lösung. Wir empfehlen Ihnen jedoch, den Wechsel früher zu vollziehen, um die Vorteile von Azure KI Video Indexer zu nutzen. Zusätzlich zu den vertrauten Features, die Sie bereits verwenden, finden Sie hier einen kurzen Vergleich zwischen der räumlichen Analyse von Azure KI Vision und Azure KI Video Indexer.
Funktion | Azure KI Vision Räumliche Analyse | Azure KI Video Indexer |
---|---|---|
Edge-Unterstützung: | Ja | Ja |
Objekterkennung | Nur Personen- und Fahrzeugerkennung | Erkennt mehr als 1.000 Objekte. |
Audio-/Sprachverarbeitung | Nicht unterstützt | Unterstützt (einschließlich Sprachtranskription, Übersetzung und Zusammenfassung) Unterstützt >(einschließlich Sprachtranskription und Stimmungsanalyse) |
Ereigniserkennung und -nachverfolgung | Unterstützt (Nachverfolgen von Personen und Fahrzeugen, Ereigniserkennung) | Noch keine Unterstützung am Edge. Teilweise in der Cloud unterstützt. |
Azure Arc-Unterstützung | Nicht unterstützt | Native Unterstützung |
Schwerpunkt | Visuelle Analyse mit spezieller Nachverfolgung | Umfassende Analyse von Audioinhalten und visuellen Inhalten |
Ab jetzt bis zum 30. März 2025 können Sie die räumliche Analyse von Azure KI Vision weiterhin verwenden oder vor dem angegebenen Datum zu Azure KI Video Indexer wechseln. Nach dem 30. März 2025 wird der Container für räumliche Analyse nicht mehr unterstützt und verarbeitet keine neuen Streams mehr.
Mit der räumlichen Analyse können Sie Videostreams von Kamerageräten in Echtzeit analysieren. Für jedes von Ihnen konfigurierte Kameragerät generieren die räumlichen Analysevorgänge einen Ausgabestream mit JSON-Nachrichten, die an Ihre Instanz von Azure IoT Hub gesendet werden.
Durch den Container für die räumliche Analyse werden folgende Vorgänge implementiert: Sie können diese Vorgänge im Bereitstellungsmanifest Ihres Containers konfigurieren.
Vorgangsbezeichner | Beschreibung |
---|---|
cognitiveservices.vision.spatialanalysis-personcount |
Zählt Personen, die sich innerhalb einer festgelegten Zone im Blickfeld der Kamera befinden. Die Zone muss vollständig von einer einzelnen Kamera abgedeckt werden, damit PersonCount eine exakte Gesamtzahl aufzeichnen kann. Gibt ein personCountEvent-Anfangsereignis und anschließend personCountEvent-Ereignisse aus, wenn sich die Anzahl ändert. |
cognitiveservices.vision.spatialanalysis-personcrossingline |
Führt eine Nachverfolgung durch, wenn eine Person im Blickfeld der Kamera eine festgelegte Linie überschreitet. Gibt ein personLineEvent-Ereignis aus, wenn die Person die Linie überschreitet, und gibt Informationen zur Richtung an. |
cognitiveservices.vision.spatialanalysis-personcrossingpolygon |
Hiermit wird ein personZoneEnterExitEvent-Ereignis ausgegeben, wenn eine Person die designierte Zone betritt oder verlässt. Außerdem werden direktionale Informationen wie die Seite der überschrittenen Zone bereitstellt. Hiermit wird ein personZoneDwellTimeEvent-Ereignis ausgegeben, wenn eine Person die Zone verlässt. Außerdem wird neben direktionalen Informationen auch die Zeitspanne in Millisekunden angegeben, die die Person in der Zone verbracht hat. |
cognitiveservices.vision.spatialanalysis-persondistance |
Führt eine Nachverfolgung durch, wenn Personen gegen eine Mindestabstandsregel verstoßen. Gibt regelmäßig ein personDistanceEvent-Ereignis mit dem Ort der einzelnen Verstöße gegen die Abstandsregel aus. |
cognitiveservices.vision.spatialanalysis |
Der generische Vorgang, der zum Ausführen aller oben erwähnten Szenarien verwendet werden kann. Diese Option ist insbesondere hilfreich, wenn Sie die gleiche Kamera für mehrere Szenarien verwenden oder Systemressourcen (beispielsweise die GPU) effizienter nutzen möchten. |
Alle oben genannten Vorgänge sind auch in der .debug
-Version des Diensts verfügbar (z. B. cognitiveservices.vision.spatialanalysis-personcount.debug
). Debuggen bietet die Möglichkeit, Videoframes während ihrer Verarbeitung zu visualisieren. Sie müssen xhost +
auf dem Hostcomputer ausführen, um die Visualisierung von Videoframes und Ereignissen zu ermöglichen.
Wichtig
Mit den KI-Modellen von Azure KI Vision können Menschen in Videomaterial erkannt und lokalisiert werden. Dabei wird ein Begrenzungsrahmen um den menschlichen Körper ausgegeben. Bei den KI-Modellen wird nicht versucht, die Identitäten oder demografischen Daten von Personen zu ermitteln.
Vorgangsparametern
Im Folgenden sehen Sie die Parameter, die jeder dieser räumlichen Analysevorgänge benötigt.
Vorgangsparametern | Beschreibung |
---|---|
Operation ID |
Der Vorgangsbezeichner aus der obigen Tabelle. |
enabled |
Boolesch: „true“ oder „false“ |
VIDEO_URL |
Dies ist die RTSP-URL für das Kameragerät (Beispiel: rtsp://username:password@url ). Von der räumlichen Analyse wird der Datenstrom mit H.264-Codierung entweder über RTSP, HTTP oder MP4 unterstützt. Video_URL kann mithilfe der AES-Verschlüsselung als verschleierter base64-Zeichenfolgenwert bereitgestellt werden. Wenn die Video-URL verschleiert ist, müssen KEY_ENV und IV_ENV als Umgebungsvariablen bereitgestellt werden. Das Beispielhilfsprogramm zum Generieren von Schlüsseln und Verschlüsselungen finden Sie hier. |
VIDEO_SOURCE_ID |
Ein Anzeigename für das Kameragerät oder den Videostream. Dies wird zusammen mit der JSON-Ausgabe des Ereignisses zurückgegeben. |
VIDEO_IS_LIVE |
„true“ für Kamerageräte, „false“ für Videoaufzeichnungen |
VIDEO_DECODE_GPU_INDEX |
Gibt an, welche GPU zum Decodieren des Videoframes verwendet werden soll. Standardmäßig ist „0“ angegeben. Diese Angabe sollte dem gpu_index in einer anderen Knotenkonfiguration entsprechen, z. B. DETECTOR_NODE_CONFIG und CAMERACALIBRATOR_NODE_CONFIG . |
INPUT_VIDEO_WIDTH |
Dies ist die Framebreite des eingegangenen Videos oder Streams (z. B. 1920). Hierbei handelt es sich um ein optionales Feld. Ist es angegeben, wird der Frame unter Beibehaltung des Seitenverhältnisses auf diese Dimension skaliert. |
DETECTOR_NODE_CONFIG |
JSON-Code, mit dem angegeben wird, auf welcher GPU der Erkennungsknoten ausgeführt werden soll. Die ID sollte das folgende Format aufweisen: "{ \"gpu_index\": 0 }", . |
TRACKER_NODE_CONFIG |
JSON-Code, der angibt, ob die Geschwindigkeit im Knoten für die Nachverfolgung berechnet werden soll. Die ID sollte das folgende Format aufweisen: "{ \"enable_speed\": true }", . |
CAMERA_CONFIG |
JSON-Code, mit dem die kalibrierten Kameraparameter für mehrere Kameras angegeben werden. Wenn der verwendete Skill eine Kalibrierung erfordert und Sie bereits über den Kameraparameter verfügen, können Sie diese Konfiguration verwenden, um sie direkt bereitzustellen. Sollte das folgende Format aufweisen: "{ \"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 wird verwendet, um die einzelnen Kameras zu identifizieren. Es kann aus der source_info des von uns veröffentlichten Ereignisses abgerufen werden. Es wird nur wirksam, wenn do_calibration=false in DETECTOR_NODE_CONFIG enthalten ist. |
CAMERACALIBRATOR_NODE_CONFIG |
JSON gibt an, auf welcher GPU der Kamerakalibrierungsknoten ausgeführt werden soll und ob die Kalibrierung verwendet werden soll. Die ID sollte das folgende Format aufweisen: "{ \"gpu_index\": 0, \"do_calibration\": true, \"enable_orientation\": true}", . |
CALIBRATION_CONFIG |
JSON gibt die Parameter an, die die Funktionsweise der Kamerakalibrierung steuern. Die ID sollte das folgende Format aufweisen: "{\"enable_recalibration\": true, \"quality_check_frequency_seconds\": 86400}", . |
SPACEANALYTICS_CONFIG |
JSON-Konfiguration für Zone und Linie wie unten beschrieben. |
ENABLE_FACE_MASK_CLASSIFIER |
Mit True wird das Erkennen von Personen mit Gesichtsmasken im Videostream aktiviert, mit False wird diese Option deaktiviert. Diese Einstellung ist standardmäßig deaktiviert. Die Gesichtsmaskenerkennung erfordert, dass der width-Parameter für das Eingangsvideo 1920 ist ("INPUT_VIDEO_WIDTH": 1920 ). Das Gesichtsmaskenattribut wird nicht zurückgegeben, wenn erkannte Personen nicht in die Kamera sehen oder zu weit davon entfernt sind. Weitere Informationen finden Sie unter Kameraplatzierung. |
STATIONARY_TARGET_REMOVER_CONFIG |
JSON-Code, der die Parameter für die Entfernung stationärer Ziele angibt, wodurch die Möglichkeit zum Erlernen und Ignorieren von langfristig stationären, falsch positiven Zielen wie z. B. Schaufensterpuppen oder Personen in Bildern hinzugefügt wird. Die Konfiguration sollte im folgenden Format erfolgen: "{\"enable\": true, \"bbox_dist_threshold-in_pixels\": 5, \"buffer_length_in_seconds\": 3600, \"filter_ratio\": 0.2 }" . |
Parametereinstellungen für Erkennungsknoten
Im Folgenden sehen Sie ein Beispiel für die DETECTOR_NODE_CONFIG
-Parameter aller räumlichen Analysevorgänge.
{
"gpu_index": 0,
"enable_breakpad": false
}
Name | Typ | Beschreibung |
---|---|---|
gpu_index |
Zeichenfolge | Der GPU-Index, auf dem die Ausführung dieses Vorgangs basiert. |
enable_breakpad |
bool | Hiermit wird angegeben, ob Breakpad aktiviert werden soll, womit ein Speicherabbild für die Debugverwendung generiert wird. Die Standardeinstellung ist false . Wenn Sie diese Einstellung auf true festlegen, müssen Sie im HostConfig -Teil des createOptions -Containers auch "CapAdd": ["SYS_PTRACE"] hinzufügen. Das Speicherabbild wird standardmäßig in die AppCenter-App RealTimePersonTracking hochgeladen. Wenn Sie möchten, dass die Speicherabbilder in Ihre eigene AppCenter-App hochgeladen werden, können Sie die Umgebungsvariable RTPT_APPCENTER_APP_SECRET mit dem App-Geheimnis Ihrer App außer Kraft setzen. |
Parametereinstellungen für Kamerakalibrierungsknoten
Im Folgenden sehen Sie ein Beispiel für die CAMERACALIBRATOR_NODE_CONFIG
-Parameter aller räumlichen Analysevorgänge.
{
"gpu_index": 0,
"do_calibration": true,
"enable_breakpad": false,
"enable_orientation": true
}
Name | Typ | Beschreibung |
---|---|---|
do_calibration |
Zeichenfolge | Gibt an, dass die Kalibrierung aktiviert ist. do_calibration muss auf „true“ festgelegt sein, damit cognitiveservices.vision.spatialanalysis-persondistance richtig funktioniert. do_calibration ist standardmäßig auf True festgelegt. |
enable_breakpad |
bool | Hiermit wird angegeben, ob Breakpad aktiviert werden soll, womit ein Speicherabbild für die Debugverwendung generiert wird. Die Standardeinstellung ist false . Wenn Sie diese Einstellung auf true festlegen, müssen Sie im HostConfig -Teil des createOptions -Containers auch "CapAdd": ["SYS_PTRACE"] hinzufügen. Das Speicherabbild wird standardmäßig in die AppCenter-App RealTimePersonTracking hochgeladen. Wenn Sie möchten, dass die Speicherabbilder in Ihre eigene AppCenter-App hochgeladen werden, können Sie die Umgebungsvariable RTPT_APPCENTER_APP_SECRET mit dem App-Geheimnis Ihrer App außer Kraft setzen. |
enable_orientation |
bool | Gibt an, ob Sie die Ausrichtung für die erkannten Personen berechnen möchten. enable_orientation ist standardmäßig auf True festgelegt. |
Kalibrierungskonfiguration
Hier sehen Sie ein Beispiel für die CALIBRATION_CONFIG
-Parameter für alle Vorgänge der räumlichen Analyse.
{
"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
}
Name | Typ | Beschreibung |
---|---|---|
enable_recalibration |
bool | Hiermit wird angegeben, ob die automatische Neukalibrierung aktiviert ist. Der Standardwert ist true . |
calibration_quality_check_frequency_seconds |
INT | Dies ist die minimale Anzahl von Sekunden zwischen den einzelnen Qualitätsprüfungen, um zu bestimmen, ob eine Neukalibrierung erforderlich ist. Der Standardwert ist 86400 (24 Stunden). Nur verwendet, wenn enable_recalibration=True . |
calibration_quality_check_sample_collect_frequency_seconds |
INT | Dies ist die minimale Anzahl von Sekunden zwischen dem Erfassen neuer Datenstichproben für die Neukalibrierung und der Qualitätsprüfung. Der Standardwert ist 300 (fünf Minuten). Nur verwendet, wenn enable_recalibration=True . |
calibration_quality_check_one_round_sample_collect_num |
INT | Dies ist die minimale Anzahl der pro Stichprobenerfassungsrunde zu erfassenden neuen Datenstichproben. Der Standardwert ist 10 . Nur verwendet, wenn enable_recalibration=True . |
calibration_quality_check_queue_max_size |
INT | Dies ist die maximale Anzahl der zu speichernden Datenstichproben, wenn das Kameramodell kalibriert wird. Der Standardwert ist 1000 . Nur verwendet, wenn enable_recalibration=True . |
calibration_event_frequency_seconds |
INT | Ausgabefrequenz (Sekunden) von Kamerakalibrierungsereignissen. Der Wert -1 weist darauf hin, dass die Kamerakalibrierung nur gesendet werden soll, wenn sich die Informationen zur Kamerakalibrierung geändert haben. Der Standardwert ist -1 . |
Ausgabe der Kamerakalibrierung
Im Folgenden sehen Sie ein Beispiel für die Ausgabe der Kamerakalibrierung, sofern diese aktiviert ist. Auslassungspunkte weisen darauf hin, dass die Liste weitere Objekte desselben Typs enthält.
{
"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
}
]
}
}
Unter Ausgabe von Vorgängen der räumlichen Analyse finden Sie weitere Details zu source_info
.
ZonePlacementInfo-Feldname | type | Beschreibung |
---|---|---|
optimalZonePolygon |
Objekt (object) | Ein Polygon im Kamerabild, in dem Linien oder Zonen für Ihre Vorgänge platziert werden können, damit Sie optimale Ergebnisse erzielen. Jedes Wertpaar stellt den x/y-Wert für die Scheitelpunkte eines Polygons dar. Mit dem Polygon werden die Bereiche dargestellt, in denen Personen nachverfolgt und gezählt werden. Die Punkte des Polygons basieren auf normalisierten Koordinaten (0 - 1), wobei die obere Linke Ecke die Werte (0,0, 0,0) und die untere rechte Ecke die Werte (1,0, 1,0) aufweist. |
fairZonePolygon |
Objekt | Ein Polygon im Kamerabild, in dem Linien oder Zonen für Ihre Vorgänge platziert werden können, damit Sie gute, aber möglicherweise nicht optimale Ergebnisse erzielen. Eine detaillierte Erläuterung der Inhalte finden Sie unter optimalZonePolygon weiter oben. |
uniformlySpacedPersonBoundingBoxes |
list | Eine Liste von Begrenzungsrahmen für Personen im Kamerabild, gleichmäßig verteilt im tatsächlichen Raum. Werte basieren auf normalisierten Koordinaten (0–1). |
personBoundingBoxGroundPoints |
list | Eine Liste von Koordinaten auf Bodenebene relativ zur Kamera. Jede Koordinate entspricht der rechten unteren Ecke des Begrenzungsrahmens in uniformlySpacedPersonBoundingBoxes mit demselben Index. Weitere Informationen zur Berechnung von Koordinaten auf Bodenebene finden Sie im Abschnitt JSON-Format für „cognitiveservices.vision.spatialanalysis-persondistance“: KI-Erkenntnisse in den centerGroundPointX/centerGroundPointY -Feldern. |
Beispiel für die Visualisierung der Zonenplatzierungsinformationen in einem Videoframe:
Die Zonenplatzierungsinformationen bieten Vorschläge für Ihre Konfigurationen; um die besten Ergebnisse zu erzielen, müssen aber immer noch die Anleitungen für die Kamerakonfiguration befolgt werden.
Parametereinstellungen für Knoten für die Nachverfolgung
Sie können die Geschwindigkeitsberechnung über die Parametereinstellungen des Knotens für die Nachverfolgung konfigurieren.
{
"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
}
Name | Typ | Beschreibung |
---|---|---|
enable_speed |
bool | Gibt an, ob Sie die Geschwindigkeit für die erkannten Personen berechnen möchten. enable_speed ist standardmäßig auf True festgelegt. Es wird dringend empfohlen, sowohl Geschwindigkeit als auch Ausrichtung zu aktivieren, um die besten Schätzwerte zu erhalten. |
remove_stationary_objects |
bool | Gibt an, ob Sie stationäre Objekte entfernen möchten. remove_stationary_objects ist standardmäßig auf TRUE festgelegt. |
stationary_objects_dist_threshold_in_pixels |
INT | Der Schwellenwert für den Abstand zwischen Nachbarn, um zu entscheiden, ob zwei Erkennungsrahmen als dieselbe Erkennung behandelt werden können. stationary_objects_dist_threshold_in_pixels ist standardmäßig auf 5 festgelegt. |
stationary_objects_buffer_length_in_seconds |
INT | Die Mindestdauer in Sekunden, die das System zurückschauen muss, um zu entscheiden, ob ein Ziel ein stationäres Ziel ist oder nicht. stationary_objects_buffer_length_in_seconds ist standardmäßig auf 3600 festgelegt. |
stationary_objects_filter_ratio |
float | Wenn ein Ziel über einen längeren Zeitraum (länger als stationary_objects_filter_ratio (0,2 entspricht 20 %) des stationary_objects_buffer_length_in_seconds -Zeitintervalls) wiederholt an derselben Position (definiert in stationary_objects_dist_threshold_in_pixels ) erkannt wird, wird es als stationäres Ziel behandelt. stationary_objects_filter_ratio ist standardmäßig auf 0,2 festgelegt. |
Konfiguration und Ausgabe von Vorgängen der räumlichen Analyse
Zonenkonfiguration für personcount
Im Folgenden sehen Sie ein Beispiel für eine JSON-Eingabe für den SPACEANALYTICS_CONFIG-Parameter, mit dem eine Zone konfiguriert wird. Sie können mehrere Zonen für diesen Vorgang konfigurieren.
{
"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"
}
}
]
}
]
}
Name | Typ | Beschreibung des Dataflows |
---|---|---|
zones |
list | Die Liste mit den Zonen. |
name |
Zeichenfolge | Der Anzeigename für diese Zone. |
polygon |
list | Jedes Wertpaar stellt den x/y-Wert für die Scheitelpunkte eines Polygons dar. Mit dem Polygon werden die Bereiche dargestellt, in denen Personen nachverfolgt oder gezählt werden. Polygonpunkte basieren auf normalisierten Koordinaten (0–1), wobei die obere linke Ecke (0,0; 0,0) und die untere rechte Ecke (1,0; 1,0) ist. |
threshold |
float | Ereignisse werden ausgegeben, wenn der Personenwert größer als diese Anzahl von Pixeln innerhalb der Zone ist. Dies ist ein optionales Feld, und der Wert wird im Verhältnis (0-1) angegeben. Der Wert 0,0253 entspricht beispielsweise 13 Pixel in einem Video mit der Bildbreite = 512 (0,0253 · 512 = ~13). |
type |
Zeichenfolge | Für cognitiveservices.vision.spatialanalysis-personcount sollte dies count lauten. |
trigger |
Zeichenfolge | Der Typ des Triggers für das Senden eines Ereignisses. Unterstützte Werte sind event zum Senden von Ereignissen, wenn sich die Anzahl ändert, oder interval zum regelmäßigen Senden von Ereignissen unabhängig davon, ob sich die Anzahl geändert hat. |
output_frequency |
INT | Die Rate, mit der Ereignisse ausgegeben werden. Bei output_frequency = X wird jedes x-te Ereignis ausgegeben. Beispiel: output_frequency = 2 bedeutet, dass jedes zweite Ereignis ausgegeben wird. output_frequency gilt sowohl für event als auch für interval . |
focus |
Zeichenfolge | Dies ist die Punktposition innerhalb des Begrenzungsrahmens der Person, die zum Berechnen von Ereignissen verwendet wird. Der Wert für den Fokus kann footprint (Fußabdruck der Person), bottom_center (untere Mitte des Begrenzungsrahmens der Person) oder center (Mitte des Begrenzungsrahmens der Person) sein. |
Schlangenkonfiguration für personcrossingline
Im Folgenden finden Sie ein Beispiel für eine JSON-Eingabe für den SPACEANALYTICS_CONFIG
-Parameter, der eine Linie konfiguriert. Sie können für diesen Vorgang mehrere Linien für die Überschreitung konfigurieren.
{
"lines": [
{
"name": "doorcamera",
"line": {
"start": {
"x": 0,
"y": 0.5
},
"end": {
"x": 1,
"y": 0.5
}
},
"events": [
{
"type": "linecrossing",
"config": {
"trigger": "event",
"focus": "footprint"
}
}
]
}
]
}
Name | Typ | Beschreibung des Dataflows |
---|---|---|
lines |
list | Die Liste mit den Linien. |
name |
Zeichenfolge | Der Anzeigename für diese Linie. |
line |
list | Die Definition der Linie. Dies ist eine direktionale Linie zum Festlegen von „Betreten“ bzw. „Verlassen“. |
start |
Wertpaar | x/y-Koordinaten für den Startpunkt der Linie. Die Gleitkommawerte stellen die Position des Scheitelpunkts relativ zur oberen linken Ecke dar. Zum Berechnen der absoluten x/y-Werte multiplizieren Sie diese Werte mit der Framegröße. |
end |
Wertpaar | x/y-Koordinaten für den Endpunkt der Linie. Die Gleitkommawerte stellen die Position des Scheitelpunkts relativ zur oberen linken Ecke dar. Zum Berechnen der absoluten x/y-Werte multiplizieren Sie diese Werte mit der Framegröße. |
threshold |
float | Ereignisse werden ausgegeben, wenn der Personenwert größer als diese Anzahl von Pixeln innerhalb der Zone ist. Dies ist ein optionales Feld, und der Wert wird im Verhältnis (0-1) angegeben. Der Wert 0,0253 entspricht beispielsweise 13 Pixel in einem Video mit der Bildbreite = 512 (0,0253 · 512 = ~13). |
type |
Zeichenfolge | Für cognitiveservices.vision.spatialanalysis-personcrossingline sollte dies linecrossing lauten. |
trigger |
Zeichenfolge | Der Typ des Triggers für das Senden eines Ereignisses. Unterstützte Werte: „event“ (Ereignis). Wird ausgelöst, wenn eine Person die Linie überschreitet. |
focus |
Zeichenfolge | Dies ist die Punktposition innerhalb des Begrenzungsrahmens der Person, die zum Berechnen von Ereignissen verwendet wird. Der Wert für den Fokus kann footprint (Fußabdruck der Person), bottom_center (untere Mitte des Begrenzungsrahmens der Person) oder center (Mitte des Begrenzungsrahmens der Person) sein. Der Standardwert ist „footprint“. |
Zonenkonfiguration für personcrossingpolygon
Dies ist ein Beispiel für eine JSON-Eingabe für den SPACEANALYTICS_CONFIG
-Parameter, mit dem eine Zone konfiguriert wird. Sie können mehrere Zonen für diesen Vorgang konfigurieren.
{
"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"
}
}]
}]
}
Name | Typ | Beschreibung des Dataflows |
---|---|---|
zones |
list | Die Liste mit den Zonen. |
name |
Zeichenfolge | Der Anzeigename für diese Zone. |
polygon |
list | Jedes Wertpaar stellt den x/y-Wert für Scheitelpunkte eines Polygons dar. Mit dem Polygon werden die Bereiche dargestellt, in denen Personen nachverfolgt oder gezählt werden. Die Gleitkommawerte stellen die Position des Scheitelpunkts relativ zur oberen linken Ecke dar. Zum Berechnen der absoluten x/y-Werte multiplizieren Sie diese Werte mit der Framegröße. |
target_side |
INT | Gibt eine Seite der Zone an, die durch polygon definiert wird, um zu messen, wie lange Personen auf diese Seite schauen, während sie sich in der Zone befinden. Diese geschätzte Zeit wird von „dwellTimeForTargetSide“ ausgegeben. Jede Seite ist eine nummerierte Kante zwischen den beiden Eckpunkten des Polygons, das Ihre Zone darstellt. Beispiel: Die Kante zwischen den ersten beiden Eckpunkten des Polygons stellt die erste Seite dar, 'side'=1. Der Wert von target_side liegt zwischen [0,N-1] , wobei N die Anzahl der Seiten von polygon ist. Dies ist ein optionales Feld. |
threshold |
float | Ereignisse werden ausgegeben, wenn der Personenwert größer als diese Anzahl von Pixeln innerhalb der Zone ist. Dies ist ein optionales Feld, und der Wert wird im Verhältnis (0-1) angegeben. Der Wert 0,074 entspricht beispielsweise 38 Pixel in einem Video mit der Bildbreite = 512 (0,074· 512 = ~38). |
type |
Zeichenfolge | Für cognitiveservices.vision.spatialanalysis-personcrossingpolygon sollte dies zonecrossing oder zonedwelltime lauten. |
trigger |
Zeichenfolge | Der Typ des Triggers für das Senden eines Ereignisses. Unterstützte Werte: „event“ (Ereignis). Wird ausgelöst, wenn eine Person die Zone betritt oder verlässt. |
focus |
Zeichenfolge | Dies ist die Punktposition innerhalb des Begrenzungsrahmens der Person, die zum Berechnen von Ereignissen verwendet wird. Der Wert für den Fokus kann footprint (Fußabdruck der Person), bottom_center (untere Mitte des Begrenzungsrahmens der Person) oder center (Mitte des Begrenzungsrahmens der Person) sein. Der Standardwert ist „footprint“. |
Zonenkonfiguration für persondistance
Dies ist ein Beispiel für eine JSON-Eingabe für den SPACEANALYTICS_CONFIG
-Parameter, mit dem eine Zone für cognitiveservices.vision.spatialanalysis-persondistance konfiguriert wird. Sie können mehrere Zonen für diesen Vorgang konfigurieren.
{
"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"
}
}]
}]
}
Name | Typ | Beschreibung des Dataflows |
---|---|---|
zones |
list | Die Liste mit den Zonen. |
name |
Zeichenfolge | Der Anzeigename für diese Zone. |
polygon |
list | Jedes Wertpaar stellt den x/y-Wert für Scheitelpunkte eines Polygons dar. Mit dem Polygon werden die Bereiche dargestellt, in denen Personen gezählt werden und der Abstand zwischen den Personen gemessen wird. Die Gleitkommawerte stellen die Position des Scheitelpunkts relativ zur oberen linken Ecke dar. Zum Berechnen der absoluten x/y-Werte multiplizieren Sie diese Werte mit der Framegröße. |
threshold |
float | Ereignisse werden ausgegeben, wenn der Personenwert größer als diese Anzahl von Pixeln innerhalb der Zone ist. Dies ist ein optionales Feld, und der Wert wird im Verhältnis (0-1) angegeben. Der Wert 0,0253 entspricht beispielsweise 13 Pixel in einem Video mit der Bildbreite = 512 (0,0253 · 512 = ~13). |
type |
Zeichenfolge | Für cognitiveservices.vision.spatialanalysis-persondistance sollte dies persondistance lauten. |
trigger |
Zeichenfolge | Der Typ des Triggers für das Senden eines Ereignisses. Unterstützte Werte sind event zum Senden von Ereignissen, wenn sich die Anzahl ändert, oder interval zum regelmäßigen Senden von Ereignissen unabhängig davon, ob sich die Anzahl geändert hat. |
output_frequency |
INT | Die Rate, mit der Ereignisse ausgegeben werden. Bei output_frequency = X wird jedes x-te Ereignis ausgegeben. Beispiel: output_frequency = 2 bedeutet, dass jedes zweite Ereignis ausgegeben wird. output_frequency gilt sowohl für event als auch für interval . |
minimum_distance_threshold |
float | Ein Abstand in Fuß, bei dem das Ereignis „TooClose“ ausgelöst wird, wenn Personen weniger als den angegebenen Abstand voneinander aufweisen. |
maximum_distance_threshold |
float | Ein Abstand in Fuß, bei dem das Ereignis „TooFar“ ausgelöst wird, wenn Personen mehr als den angegebenen Abstand voneinander aufweisen. |
aggregation_method |
Zeichenfolge | Die Methode für das aggregierte persondistance -Ergebnis. Die Aggregationsmethode gilt sowohl für mode als auch für average . |
focus |
Zeichenfolge | Dies ist die Punktposition innerhalb des Begrenzungsrahmens der Person, die zum Berechnen von Ereignissen verwendet wird. Der Wert für den Fokus kann footprint (Fußabdruck der Person), bottom_center (untere Mitte des Begrenzungsrahmens der Person) oder center (Mitte des Begrenzungsrahmens der Person) sein. |
Konfiguration für spatialanalysis
Im Folgenden sehen Sie ein Beispiel für eine JSON-Eingabe für den SPACEANALYTICS_CONFIG
-Parameter, mit dem eine Linie und eine Zone für cognitiveservices.vision.spatialanalysis konfiguriert werden. Für diesen Vorgang können mehrere Linien/Zonen konfiguriert werden, und jede Linie/Zone kann unterschiedliche Ereignisse aufweisen.
{
"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"
}
}
]
}
]
}
Kamerakonfiguration
Weitere Informationen zum Konfigurieren von Zonen und Linien finden Sie im Leitfaden zur Kameraplatzierung.
Ausgabe von Vorgängen der räumlichen Analyse
Die Ereignisse aus den einzelnen Vorgängen werden für Azure IoT Hub im JSON-Format ausgegeben.
JSON-Format für personcount in KI Insights
JSON-Beispielcode für ein Ereignis, das von diesem Vorgang ausgegeben wird.
{
"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"
}
Ereignisfeldname | Typ | Beschreibung |
---|---|---|
id |
Zeichenfolge | Ereignis-ID |
type |
Zeichenfolge | Ereignistyp |
detectionsId |
array | Array mit der Größe 1 des eindeutigen Bezeichners der Personenerkennung, für die dieses Ereignis ausgelöst wurde |
properties |
collection | Sammlung mit Werten |
trackinId |
Zeichenfolge | Eindeutiger Bezeichner der erkannten Person |
zone |
Zeichenfolge | „Name“ des Polygonfelds, das für die durchquerte Zone steht |
trigger |
Zeichenfolge | Der Triggertyp lautet je nach Wert von trigger in SPACEANALYTICS_CONFIG entweder „event“ (Ereignis) oder „interval“ (Intervall). |
Name des Erkennungsfelds | Typ | Beschreibung |
---|---|---|
id |
Zeichenfolge | Erkennungs-ID |
type |
Zeichenfolge | Erkennungstyp |
region |
collection | Sammlung mit Werten |
type |
Zeichenfolge | Typ der Region |
points |
collection | Oberer linker und unterer rechter Punkt, wenn der Regionstyp RECTANGLE (RECHTECK) lautet. |
confidence |
float | Algorithmusvertrauen |
attributes |
array | Array von Attributen. Jedes Attribut besteht aus Bezeichnung, Aufgabe und Konfidenz. |
label |
Zeichenfolge | Der Attributwert ({label: face_mask} zeigt beispielsweise an, dass die erkannte Person eine Gesichtsmaske trägt). |
confidence (attribute) |
float | Der Attributkonfidenzwert mit dem Bereich 0 bis 1 ({confidence: 0.9, label: face_nomask} zeigt beispielsweise an, dass die erkannte Person keine Gesichtsmaske trägt). |
task |
Zeichenfolge | Die Attributklassifizierungsaufgabe/-klasse. |
Name des Felds „SourceInfo“ | Typ | Beschreibung |
---|---|---|
id |
Zeichenfolge | Camera ID (Kamera-ID) |
timestamp |
date | UTC-Datum, an dem die JSON-Nutzlast ausgegeben wurde |
width |
INT | Videoframebreite |
height |
INT | Videoframehöhe |
frameId |
INT | Framebezeichner |
cameraCallibrationInfo |
collection | Sammlung mit Werten |
status |
Zeichenfolge | Dies ist der Status der Kalibrierung im Format state[;progress description] . Der Status kann Calibrating , Recalibrating (bei aktivierter Neukalibrierung) oder Calibrated sein. Der Teil für die Beschreibung des Fortschritts ist nur gültig, wenn der Status Calibrating und der Status Recalibrating vorliegt, da hiermit der Fortschritt des aktuellen Kalibrierungsprozesses angezeigt wird. |
cameraHeight |
float | Die Höhe der Kamera über dem Boden in Fuß. Dieser Wert wird von der automatischen Kalibrierung abgeleitet. |
focalLength |
float | Die Brennweite der Kamera in Pixel. Dieser Wert wird von der automatischen Kalibrierung abgeleitet. |
tiltUpAngle |
float | Der Neigungswinkel der Kamera gegenüber der Vertikalen. Dieser Wert wird von der automatischen Kalibrierung abgeleitet. |
JSON-Format für personcrossingline in KI Insights
JSON-Beispiel für Erkennungen, die von diesem Vorgang ausgegeben werden.
{
"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"
}
Ereignisfeldname | Typ | Beschreibung |
---|---|---|
id |
Zeichenfolge | Ereignis-ID |
type |
Zeichenfolge | Ereignistyp |
detectionsId |
array | Array mit der Größe 1 des eindeutigen Bezeichners der Personenerkennung, für die dieses Ereignis ausgelöst wurde |
properties |
collection | Sammlung mit Werten |
trackinId |
Zeichenfolge | Eindeutiger Bezeichner der erkannten Person |
status |
Zeichenfolge | Die Richtung von Linienüberquerungen (entweder „CrossLeft“ oder „CrossRight“). Die Richtungsangabe basiert auf der Vorstellung, am Beginn der Linie zu stehen und in Richtung des Linienendes zu blicken. Bei „CrossRight“ erfolgt die Überquerung von links nach rechts. Bei „CrossLeft“ erfolgt die Überquerung von rechts nach links. |
orientationDirection |
Zeichenfolge | Die Ausrichtung der erkannten Person nach der Überquerung der Linie. Der Wert kann „Left“, „Right“ oder „Straight“ sein. Dieser Wert wird ausgegeben, wenn enable_orientation in CAMERACALIBRATOR_NODE_CONFIG auf True festgelegt ist. |
zone |
Zeichenfolge | Feld „Name“ der überschrittenen Linie |
Name des Erkennungsfelds | Typ | Beschreibung |
---|---|---|
id |
Zeichenfolge | Erkennungs-ID |
type |
Zeichenfolge | Erkennungstyp |
region |
collection | Sammlung mit Werten |
type |
Zeichenfolge | Typ der Region |
points |
collection | Oberer linker und unterer rechter Punkt, wenn der Regionstyp RECTANGLE (RECHTECK) lautet. |
groundOrientationAngle |
float | Der Winkel im Bogenmaß und Uhrzeigersinn der Ausrichtung der Person auf der abgeleiteten Bodenfläche. |
mappedImageOrientation |
float | Der projizierte Winkel im Bogenmaß und Uhrzeigersinn der Ausrichtung der Person im 2D-Bildraum. |
speed |
float | Die geschätzte Geschwindigkeit der erkannten Person. Die Einheit ist foot per second (ft/s) . |
confidence |
float | Algorithmusvertrauen |
attributes |
array | Array von Attributen. Jedes Attribut besteht aus Bezeichnung, Aufgabe und Konfidenz. |
label |
Zeichenfolge | Der Attributwert ({label: face_mask} zeigt beispielsweise an, dass die erkannte Person eine Gesichtsmaske trägt). |
confidence (attribute) |
float | Der Attributkonfidenzwert mit dem Bereich 0 bis 1 ({confidence: 0.9, label: face_nomask} zeigt beispielsweise an, dass die erkannte Person keine Gesichtsmaske trägt). |
task |
Zeichenfolge | Die Attributklassifizierungsaufgabe/-klasse. |
Name des Felds „SourceInfo“ | Typ | Beschreibung |
---|---|---|
id |
Zeichenfolge | Camera ID (Kamera-ID) |
timestamp |
date | UTC-Datum, an dem die JSON-Nutzlast ausgegeben wurde |
width |
INT | Videoframebreite |
height |
INT | Videoframehöhe |
frameId |
INT | Framebezeichner |
Wichtig
Das KI-Modell erkennt eine Person unabhängig davon, ob ihr Gesicht zur Kamera oder in die andere Richtung weist. Das KI-Modell führt keine Gesichtserkennung durch und gibt keine biometrischen Informationen aus.
JSON-Format für personcrossingpolygon in KI Insights
JSON-Beispiel für Erkennungen, die von diesem Vorgang mit dem zonecrossing
-Typ SPACEANALYTICS_CONFIG ausgegeben werden:
{
"events": [
{
"id": "f095d6fe8cfb4ffaa8c934882fb257a5",
"type": "personZoneEnterExitEvent",
"detectionIds": [
"afcc2e2a32a6480288e24381f9c5d00e"
],
"properties": {
"trackingId": "afcc2e2a32a6480288e24381f9c5d00e",
"status": "Enter",
"side": "1"
},
"zone": "queuecamera"
}
],
"sourceInfo": {
"id": "camera_id",
"timestamp": "2020-08-24T06:15:09.680Z",
"width": 608,
"height": 342,
"frameId": "428",
"imagePath": ""
},
"detections": [
{
"type": "person",
"id": "afcc2e2a32a6480288e24381f9c5d00e",
"region": {
"type": "RECTANGLE",
"points": [
{
"x": 0.8135572734631991,
"y": 0.6653949670624315
},
{
"x": 0.9937645761590255,
"y": 0.9925406829655519
}
]
},
"confidence": 0.6267998814582825,
"metadata": {
"centerGroundPointX": "2.6310102939605713",
"centerGroundPointY": "18.635927200317383",
"groundOrientationAngle": "1.3",
"trackingId": "afcc2e2a32a6480288e24381f9c5d00e",
"speed": "1.2",
"footprintX": "0.7306610584259033",
"footprintY": "0.8814966493381893"
},
"attributes": [
{
"label": "face_mask",
"confidence": 0.99,
"task": ""
}
]
}
],
"schemaVersion": "2.0"
}
JSON-Beispiel für Erkennungen, die von diesem Vorgang mit dem zonedwelltime
-Typ SPACEANALYTICS_CONFIG ausgegeben werden:
{
"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"
}
Ereignisfeldname | Typ | Beschreibung |
---|---|---|
id |
Zeichenfolge | Ereignis-ID |
type |
Zeichenfolge | Der Ereignistyp. Der Wert kann entweder personZoneDwellTimeEvent oder personZoneEnterExitEvent sein. |
detectionsId |
array | Array mit der Größe 1 des eindeutigen Bezeichners der Personenerkennung, für die dieses Ereignis ausgelöst wurde |
properties |
collection | Sammlung mit Werten |
trackinId |
Zeichenfolge | Eindeutiger Bezeichner der erkannten Person |
status |
Zeichenfolge | Richtung von Polygondurchquerungen, entweder „Enter“ oder „Exit“ |
side |
INT | Dies ist die Nummer der Polygonseite, die von der Person überschritten wurde. Jede Seite ist eine nummerierte Kante zwischen den beiden Eckpunkten des Polygons, das Ihre Zone darstellt. Die Kante zwischen den ersten beiden Eckpunkten des Polygons stellt die erste Seite dar. „side“ ist leer, wenn das Ereignis aufgrund von Verdeckung keiner bestimmten Seite zugeordnet ist. Beispiele: Ein Exit-Ereignis ist aufgetreten, wenn eine Person verschwunden ist, für sie aber keine Überquerung einer Seite der Zone registriert wurde, oder ein Enter-Ereignis ist aufgetreten, wenn eine Person in der Zone aufgetaucht ist, ohne dass die Überquerung einer Seite registriert wurde. |
dwellTime |
float | Dies ist die Zeit in Millisekunden, die die Person in der Zone verbracht hat. Dieses Feld wird bereitgestellt, wenn der Ereignistyp personZoneDwellTimeEvent ist. |
dwellFrames |
INT | Die Anzahl der Frames, die die Person in der Zone verbracht hat. Dieses Feld wird bereitgestellt, wenn der Ereignistyp personZoneDwellTimeEvent ist. |
dwellTimeForTargetSide |
float | Dies ist die Zeit in Millisekunden, die die Person in der Zone und der target_side zugerichtet verbracht hat. Dieses Feld wird bereitgestellt, wenn enable_orientation in CAMERACALIBRATOR_NODE_CONFIG True entspricht und der Wert von target_side in SPACEANALYTICS_CONFIG festgelegt ist. |
avgSpeed |
float | Die durchschnittliche Geschwindigkeit der Person in der Zone. Die Einheit ist foot per second (ft/s) . |
minSpeed |
float | Die minimale Geschwindigkeit der Person in der Zone. Die Einheit ist foot per second (ft/s) . |
zone |
Zeichenfolge | „Name“ des Polygonfelds, das für die durchquerte Zone steht |
Name des Erkennungsfelds | Typ | Beschreibung |
---|---|---|
id |
Zeichenfolge | Erkennungs-ID |
type |
Zeichenfolge | Erkennungstyp |
region |
collection | Sammlung mit Werten |
type |
Zeichenfolge | Typ der Region |
points |
collection | Oberer linker und unterer rechter Punkt, wenn der Regionstyp RECTANGLE (RECHTECK) lautet. |
groundOrientationAngle |
float | Der Winkel im Bogenmaß und Uhrzeigersinn der Ausrichtung der Person auf der abgeleiteten Bodenfläche. |
mappedImageOrientation |
float | Der projizierte Winkel im Bogenmaß und Uhrzeigersinn der Ausrichtung der Person im 2D-Bildraum. |
speed |
float | Die geschätzte Geschwindigkeit der erkannten Person. Die Einheit ist foot per second (ft/s) . |
confidence |
float | Algorithmusvertrauen |
attributes |
array | Array von Attributen. Jedes Attribut besteht aus Bezeichnung, Aufgabe und Konfidenz. |
label |
Zeichenfolge | Der Attributwert ({label: face_mask} zeigt beispielsweise an, dass die erkannte Person eine Gesichtsmaske trägt). |
confidence (attribute) |
float | Der Attributkonfidenzwert mit dem Bereich 0 bis 1 ({confidence: 0.9, label: face_nomask} zeigt beispielsweise an, dass die erkannte Person keine Gesichtsmaske trägt). |
task |
Zeichenfolge | Die Attributklassifizierungsaufgabe/-klasse. |
JSON-Format für persondistance in KI Insights
JSON-Beispiel für Erkennungen, die von diesem Vorgang ausgegeben werden.
{
"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"
}
Ereignisfeldname | Typ | Beschreibung |
---|---|---|
id |
Zeichenfolge | Ereignis-ID |
type |
Zeichenfolge | Ereignistyp |
detectionsId |
array | Array mit der Größe 1 des eindeutigen Bezeichners der Personenerkennung, für die dieses Ereignis ausgelöst wurde |
properties |
collection | Sammlung mit Werten |
personCount |
INT | Anzahl von erkannten Personen bei Ausgabe des Ereignisses |
averageDistance |
float | Durchschnittlicher Abstand zwischen allen erkannten Personen in Fuß |
minimumDistanceThreshold |
float | Der Abstand in Fuß, bei dem das Ereignis „TooClose“ ausgelöst wird, wenn Personen weniger als den angegebenen Abstand voneinander aufweisen. |
maximumDistanceThreshold |
float | Der Abstand in Fuß, bei dem das Ereignis „TooFar“ ausgelöst wird, wenn Personen mehr als den angegebenen Abstand voneinander aufweisen. |
eventName |
Zeichenfolge | Der Ereignisname lautet TooClose bei einem Verstoß gegen minimumDistanceThreshold , TooFar bei einem Verstoß gegen maximumDistanceThreshold oder unknown , falls die automatische Kalibrierung nicht abgeschlossen wurde. |
distanceViolationPersonCount |
INT | Anzahl von erkannten Personen, die gegen minimumDistanceThreshold oder maximumDistanceThreshold verstoßen haben |
zone |
Zeichenfolge | Das Feld „name“ des Polygons, das für die Zone steht, in der der Abstand zwischen Personen überwacht wird. |
trigger |
Zeichenfolge | Der Triggertyp lautet je nach Wert von trigger in SPACEANALYTICS_CONFIG entweder „event“ (Ereignis) oder „interval“ (Intervall). |
Name des Erkennungsfelds | Typ | Beschreibung |
---|---|---|
id |
Zeichenfolge | Erkennungs-ID |
type |
Zeichenfolge | Erkennungstyp |
region |
collection | Sammlung mit Werten |
type |
Zeichenfolge | Typ der Region |
points |
collection | Oberer linker und unterer rechter Punkt, wenn der Regionstyp RECTANGLE (RECHTECK) lautet. |
confidence |
float | Algorithmusvertrauen |
centerGroundPointX/centerGroundPointY |
2 Gleitkommawerte | x /y -Werte mit den Koordinaten der abgeleiteten Position der Person auf dem Boden in Fuß. x und y sind Koordinaten auf der Bodenebene, vorausgesetzt, der Boden ist eben. Die Position der Kamera ist der Ausgangspunkt. |
In centerGroundPoint
ist x
die Komponente des Abstands zwischen der Kamera und der Person, die sich senkrecht zur Kamerabildebene befindet. y
ist die Komponente des Abstands, die sich parallel zur Kamerabildebene befindet.
In diesem Beispiel hat centerGroundPoint
den Wert {centerGroundPointX: 4, centerGroundPointY: 5}
. Dies bedeutet, dass der Raum in der Vogelperspektive von einer Kamera überwacht wird und sich eine Person an einem Punkt im Raum befindet, der vier Fuß (1,20 m) vor und fünf Fuß (1,50 m) rechts von der Kamera liegt.
Name des Felds „SourceInfo“ | Typ | Beschreibung |
---|---|---|
id |
Zeichenfolge | Camera ID (Kamera-ID) |
timestamp |
date | UTC-Datum, an dem die JSON-Nutzlast ausgegeben wurde |
width |
INT | Videoframebreite |
height |
INT | Videoframehöhe |
frameId |
INT | Framebezeichner |
cameraCallibrationInfo |
collection | Sammlung mit Werten |
status |
Zeichenfolge | Dies ist der Status der Kalibrierung im Format state[;progress description] . Der Status kann Calibrating , Recalibrating (bei aktivierter Neukalibrierung) oder Calibrated sein. Der Teil für die Beschreibung des Fortschritts ist nur gültig, wenn der Status Calibrating und der Status Recalibrating vorliegt, da hiermit der Fortschritt des aktuellen Kalibrierungsprozesses angezeigt wird. |
cameraHeight |
float | Die Höhe der Kamera über dem Boden in Fuß. Dieser Wert wird von der automatischen Kalibrierung abgeleitet. |
focalLength |
float | Die Brennweite der Kamera in Pixel. Dieser Wert wird von der automatischen Kalibrierung abgeleitet. |
tiltUpAngle |
float | Der Neigungswinkel der Kamera gegenüber der Vertikalen. Dieser Wert wird von der automatischen Kalibrierung abgeleitet. |
JSON-Format für spatialanalysis in KI Insights
Die Ausgabe dieses Vorgangs hängt von den konfigurierten Ereignissen (events
) ab. Wenn für diesen Vorgang also beispielsweise ein Ereignis vom Typ zonecrossing
konfiguriert ist, ist die Ausgabe mit cognitiveservices.vision.spatialanalysis-personcrossingpolygon
identisch.
Verwenden der vom Container generierten Ausgabe
Möglicherweise möchten Sie die Erkennung oder Ereignisse der räumlichen Analyse in Ihre Anwendung integrieren. Hier sind einige Punkte angegeben, die Sie beachten sollten:
- Verwenden Sie das Azure Event Hub-SDK für Ihre gewählte Programmiersprache, um eine Verbindung mit dem Azure IoT Hub-Endpunkt herstellen und die Ereignisse empfangen zu können. Weitere Informationen finden Sie unter Lesen von Nachrichten, die von Geräten an die Cloud gesendet werden, vom integrierten Endpunkt.
- Richten Sie das Nachrichtenrouting auf Ihrer Azure IoT Hub-Instanz ein, um Ereignisse an andere Endpunkte zu senden oder die Ereignisse in Ihrem Datenspeicher zu speichern. Weitere Informationen finden Sie unter Verwenden des IoT Hub-Nachrichtenroutings zum Senden von D2C-Nachrichten an verschiedene Endpunkte.
- Richten Sie einen Azure Stream Analytics-Auftrag ein, um die Ereignisse bei ihrem Eintreffen in Echtzeit zu verarbeiten und Visualisierungen zu erstellen.
Bereitstellen von räumlichen Analysevorgängen im großen Stil (mehrere Kameras)
Um eine optimale Leistung und Auslastung der GPUs zu erzielen, können Sie beliebige Vorgänge der räumlichen Analyse unter Verwendung von Graphinstanzen auf mehreren Kameras bereitstellen. Im Folgenden finden Sie eine Beispielkonfiguration für die Ausführung des cognitiveservices.vision.spatialanalysis-personcrossingline
-Vorgangs auf 15 Kameras.
"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>"
}
}
}
},
}
}
Name | Typ | Beschreibung |
---|---|---|
batch_size |
INT | Wenn alle Kameras die gleiche Auflösung haben, legen Sie batch_size auf die Anzahl der Kameras fest, die in diesem Vorgang verwendet werden. Andernfalls legen Sie batch_size auf 1 fest oder belassen es beim Standardwert (1), was bedeutet, dass kein Batch unterstützt wird. |