Operasi Analisis Spasial
Penting
Pada 30 Maret 2025, Azure AI Vision Spatial Analysis akan dihentikan. Silakan transisi ke Azure AI Video Indexer atau solusi sumber terbuka lainnya sebelum tanggal yang ditentukan. Kami mendorong Anda untuk beralih lebih cepat untuk mendapatkan manfaat yang lebih kaya dari Azure AI Video Indexer. Selain fitur familier yang Anda gunakan, berikut adalah perbandingan cepat antara Azure AI Vision Spatial Analysis dan Azure AI Video Indexer.
Fitur | Analisis Spasial Azure AI Vision | Azure AI Video Indexer |
---|---|---|
Dukungan Edge | Ya | Ya |
Deteksi Objek | Deteksi Orang & Kendaraan saja | Mendeteksi 1000+ objek |
Pemrosesan Audio/Ucapan | Tidak didukung | Didukung (termasuk transkripsi ucapan, terjemahan, dan ringkasan) Didukung >(termasuk transkripsi ucapan dan analisis sentimen) |
Deteksi Peristiwa & Pelacakan | Didukung (melacak orang & kendaraan, deteksi peristiwa) | Belum didukung di Edge. Didukung sebagian di Cloud. |
Dukungan Azure Arc | Tidak didukung | Dukungan asli |
Area Fokus | Analisis visual dengan pelacakan khusus | Analisis komprehensif konten audio dan visual |
Mulai sekarang hingga 30 Maret 2025, Anda dapat terus menggunakan Azure AI Vision Spatial Analysis atau transisi ke Azure AI Video Indexer sebelum tanggal yang ditentukan. Setelah 30 Maret 2025, kontainer Analisis Spasial tidak akan lagi didukung dan akan berhenti memproses aliran baru.
Spatial Analysis memungkinkan Anda menganalisis aliran video dari perangkat kamera secara real time. Untuk setiap perangkat kamera yang Anda konfigurasikan, operasi Spatial Analysis akan menghasilkan aliran output pesan JSON yang dikirim ke instans Azure IoT Hub Anda.
Kontainer Analisis Spasial mengimplementasikan operasi berikut. Anda dapat mengkonfigurasi operasi ini dalam manifes penyebaran kontainer Anda.
Pengidentifikasi Operasi | Deskripsi |
---|---|
cognitiveservices.vision.spatialanalysis-personcount |
Menghitung orang dalam zona yang ditentukan di bidang tampilan kamera. Zona tersebut harus sepenuhnya dicakup oleh satu kamera agar PersonCount merekam jumlah yang akurat. Memancarkan peristiwa awal personCountEvent lalu peristiwa personCountEvent saat hitungan berubah. |
cognitiveservices.vision.spatialanalysis-personcrossingline |
Melacak saat seseorang melewati garis yang ditentukan di bidang pandang kamera. Memancarkan peristiwa personLineEvent saat orang tersebut melewati batas dan memberikan info terarah. |
cognitiveservices.vision.spatialanalysis-personcrossingpolygon |
Memancarkan peristiwa personZoneEnterExitEvent ketika seseorang masuk atau keluar dari zona yang ditentukan dan memberikan info terarah dengan sisi zona yang dilewati. Memancarkan seseorangZoneDwellTimeEvent ketika orang tersebut keluar dari zona dan memberikan info arah serta jumlah milidetik yang dihabiskan orang di dalam zona. |
cognitiveservices.vision.spatialanalysis-persondistance |
Melacak saat seseorang melanggar aturan jarak. Memancarkan personDistanceEvent secara berkala dengan lokasi setiap pelanggaran jarak. |
cognitiveservices.vision.spatialanalysis |
Operasi generik yang dapat digunakan untuk menjalankan semua skenario yang disebutkan di atas. Opsi ini lebih berguna ketika Anda ingin menjalankan beberapa skenario pada kamera yang sama atau menggunakan sumber daya sistem (misalnya GPU) yang lebih efisien. |
Semua operasi di atas juga tersedia dalam .debug
versi layanan (misalnya, cognitiveservices.vision.spatialanalysis-personcount.debug
). Debug memiliki kemampuan untuk memvisualisasikan bingkai video saat sedang diproses. Anda harus menjalankannya xhost +
di komputer host untuk mengaktifkan visualisasi bingkai video dan peristiwa.
Penting
Model Azure AI Vision AI mendeteksi dan menemukan keberadaan manusia dalam rekaman video dan menghasilkan kotak pembatas di sekitar tubuh manusia. Model AI tidak mencoba untuk menemukan identitas atau demografi individu.
Parameter operasi
Berikut ini adalah parameter yang diperlukan oleh masing-masing operasi Spatial Analysis.
Parameter operasi | Deskripsi |
---|---|
Operation ID |
Pengidentifikasi Operasi dari tabel di atas. |
enabled |
Boolean: benar atau salah |
VIDEO_URL |
Url RTSP untuk perangkat kamera (Contoh: rtsp://username:password@url ). Analisis Spasial mendukung aliran terkodekan H.264 baik melalui RTSP, http, atau mp4. Video_URL dapat disediakan sebagai nilai string base64 yang di-obfuscated menggunakan enkripsi AES, dan jika url video di-obfuscated maka KEY_ENV dan IV_ENV perlu disediakan sebagai variabel lingkungan. Contoh utilitas untuk menghasilkan kunci dan enkripsi dapat ditemukan di sini. |
VIDEO_SOURCE_ID |
Nama yang ramah untuk perangkat kamera atau streaming video. Ini akan dikembalikan dengan output JSON peristiwa. |
VIDEO_IS_LIVE |
Benar untuk perangkat kamera; salah untuk video yang direkam. |
VIDEO_DECODE_GPU_INDEX |
GPU mana yang akan dikodekan bingkai video. Secara default, adalah 0. Harus sama dengan gpu_index di node konfigurasi lain seperti DETECTOR_NODE_CONFIG dan CAMERACALIBRATOR_NODE_CONFIG . |
INPUT_VIDEO_WIDTH |
Masukkan lebar bingkai video/aliran (misalnya, 1920). Ini adalah bidang opsional dan jika disediakan, bingkai akan diskalakan ke dimensi ini sambil mempertahankan rasio aspek. |
DETECTOR_NODE_CONFIG |
JSON menunjukkan GPU mana yang akan menjalankan node detektor. Nilai harus dalam format berikut: "{ \"gpu_index\": 0 }", |
TRACKER_NODE_CONFIG |
JSON menunjukkan apakah akan menghitung kecepatan di node pelacak atau tidak. Nilai harus dalam format berikut: "{ \"enable_speed\": true }", |
CAMERA_CONFIG |
JSON menunjukkan parameter kamera yang dikalibrasi untuk beberapa kamera. Jika keterampilan yang Anda gunakan memerlukan kalibrasi dan Anda sudah memiliki parameter kamera, Anda dapat menggunakan konfigurasi ini untuk menyediakannya secara langsung. Harus dalam format berikut: "{ \"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 yang digunakan untuk mengidentifikasi setiap kamera. Hal itu bisa didapatkan dari source_info peristiwa yang kami terbitkan. Ini hanya akan berlaku ketika do_calibration=false masuk DETECTOR_NODE_CONFIG . |
CAMERACALIBRATOR_NODE_CONFIG |
JSON menunjukkan GPU mana yang akan menjalankan node kalibrasi kamera dan apakah akan menggunakan kalibrasi atau tidak. Nilai harus dalam format berikut: "{ \"gpu_index\": 0, \"do_calibration\": true, \"enable_orientation\": true}", |
CALIBRATION_CONFIG |
JSON menunjukkan parameter untuk mengontrol cara kerja kalibrasi kamera. Nilai harus dalam format berikut: "{\"enable_recalibration\": true, \"quality_check_frequency_seconds\": 86400}", |
SPACEANALYTICS_CONFIG |
Konfigurasi JSON untuk zona dan garis seperti yang diuraikan di bawah ini. |
ENABLE_FACE_MASK_CLASSIFIER |
True untuk memungkinkan mendeteksi orang yang mengenakan masker wajah di streaming video, False untuk menonaktifkannya. Opsi ini dinonaktifkan secara default. Deteksi masker wajah membutuhkan parameter lebar video input menjadi 1920 "INPUT_VIDEO_WIDTH": 1920 . Atribut masker wajah tidak akan dikembalikan jika orang yang terdeteksi tidak menghadap kamera atau terlalu jauh darinya. Untuk informasi selengkapnya, lihat penempatan kamera. |
STATIONARY_TARGET_REMOVER_CONFIG |
JSON menunjukkan parameter untuk penghapusan target stasioner, yang akan menambahkan kemampuan untuk mempelajari dan mengabaikan target positif palsu stasioner jangka panjang seperti maneken atau orang-orang dalam gambar. Konfigurasi harus dalam format berikut: "{\"enable\": true, \"bbox_dist_threshold-in_pixels\": 5, \"buffer_length_in_seconds\": 3600, \"filter_ratio\": 0.2 }" |
Pengaturan parameter node detektor
Berikut ini adalah contoh parameter DETECTOR_NODE_CONFIG
untuk semua operasi Spatial Analysis.
{
"gpu_index": 0,
"enable_breakpad": false
}
Nama | Tipe | Deskripsi |
---|---|---|
gpu_index |
string | Indeks GPU tempat operasi ini akan berjalan. |
enable_breakpad |
bool | Menunjukkan apakah akan mengaktifkan breakpad, yang digunakan untuk menghasilkan crash dump untuk penggunaan debug. Itu false diatur secara default. Jika Anda mengaturnya ke true , Anda juga perlu menambahkan "CapAdd": ["SYS_PTRACE"] di bagian HostConfig kontainer createOptions . Secara default, crash dump diunggah ke aplikasi RealTimePersonTracking AppCenter, jika Anda ingin crash dump diunggah ke aplikasi AppCenter Anda sendiri, Anda dapat mengganti variabel lingkungan RTPT_APPCENTER_APP_SECRET dengan rahasia aplikasi dari aplikasi Anda. |
Pengaturan parameter node kalibrasi kamera
Ini adalah contoh parameter CAMERACALIBRATOR_NODE_CONFIG
untuk semua operasi Spatial Analysis.
{
"gpu_index": 0,
"do_calibration": true,
"enable_breakpad": false,
"enable_orientation": true
}
Nama | Tipe | Deskripsi |
---|---|---|
do_calibration |
string | Menunjukkan bahwa kalibrasi diaktifkan. do_calibration harus berlaku agar cognitiveservices.vision.spatialanalysis-persondistance berfungsi dengan baik. do_calibration diatur secara default ke True . |
enable_breakpad |
bool | Menunjukkan apakah akan mengaktifkan breakpad, yang digunakan untuk menghasilkan crash dump untuk penggunaan debug. Itu false diatur secara default. Jika Anda mengaturnya ke true , Anda juga perlu menambahkan "CapAdd": ["SYS_PTRACE"] di bagian HostConfig kontainer createOptions . Secara default, crash dump diunggah ke aplikasi RealTimePersonTracking AppCenter, jika Anda ingin crash dump diunggah ke aplikasi AppCenter Anda sendiri, Anda dapat mengganti variabel lingkungan RTPT_APPCENTER_APP_SECRET dengan rahasia aplikasi dari aplikasi Anda. |
enable_orientation |
bool | Menunjukkan apakah Anda ingin menghitung orientasi untuk orang yang terdeteksi atau tidak. enable_orientation diatur secara default ke True . |
Konfigurasi kalibrasi
Ini adalah contoh parameter CALIBRATION_CONFIG
untuk semua operasi analisis spasial.
{
"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
}
Nama | Tipe | Deskripsi |
---|---|---|
enable_recalibration |
bool | Menunjukkan apakah kalibrasi ulang otomatis diaktifkan. Defaultnya adalah true . |
calibration_quality_check_frequency_seconds |
int | Jumlah detik minimum antara setiap pemeriksaan kualitas untuk menentukan apakah diperlukan kalibrasi ulang atau tidak. Defaultnya adalah 86400 (24 jam). Hanya digunakan ketika enable_recalibration=True . |
calibration_quality_check_sample_collect_frequency_seconds |
int | Jumlah detik minimum antara mengumpulkan sampel data baru untuk kalibrasi ulang dan pemeriksaan kualitas. Defaultnya adalah 300 (5 menit). Hanya digunakan ketika enable_recalibration=True . |
calibration_quality_check_one_round_sample_collect_num |
int | Jumlah minimum sampel data baru untuk dikumpulkan per putaran pengumpulan sampel. Defaultnya adalah 10 . Hanya digunakan ketika enable_recalibration=True . |
calibration_quality_check_queue_max_size |
int | Jumlah maksimum sampel data untuk disimpan saat model kamera dikalibrasi. Defaultnya adalah 1000 . Hanya digunakan ketika enable_recalibration=True . |
calibration_event_frequency_seconds |
int | Frekuensi output (detik) dari peristiwa kalibrasi kamera. Nilai -1 menunjukkan bahwa kalibrasi kamera tidak boleh dikirim kecuali info kalibrasi kamera telah diubah. Defaultnya adalah -1 . |
Output kalibrasi kamera
Berikut ini adalah contoh output dari kalibrasi kamera jika diaktifkan. Elips menunjukkan lebih banyak jenis objek yang sama dalam daftar.
{
"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
}
]
}
}
Lihat Hasil operasi analisis spasial untuk detail tentang source_info
.
Nama Bidang ZonePlacementInfo | Tipe | Deskripsi |
---|---|---|
optimalZonePolygon |
object | Poligon dalam gambar kamera di mana garis atau zona untuk operasi Anda dapat ditempatkan untuk hasil yang optimal. Setiap pasangan nilai mewakili x,y untuk simpul poligon. Poligon mewakili area di mana orang dilacak atau dihitung dan titik poligon didasarkan pada koordinat yang dinormalisasi (0-1), di mana sudut kiri atas (0,0, 0,0) dan sudut kanan bawah adalah (1,0, 1,0). |
fairZonePolygon |
object | Poligon dalam gambar kamera di mana garis atau zona untuk operasi Anda dapat ditempatkan untuk hasil yang baik, tetapi mungkin tidak optimal. Lihat optimalZonePolygon di atas untuk penjelasan mendalam tentang isinya. |
uniformlySpacedPersonBoundingBoxes |
list | Daftar kotak pembatas orang-orang dalam gambar kamera didistribusikan secara seragam di ruang nyata. Nilai didasarkan pada koordinat normalisasi (0-1). |
personBoundingBoxGroundPoints |
list | Daftar koordinat di bidang lantai relatif terhadap kamera. Setiap koordinat sesuai dengan kanan bawah kotak pembatas di uniformlySpacedPersonBoundingBoxes dengan indeks yang sama. Lihat centerGroundPointX/centerGroundPointY di bagian format JSON untuk Wawasan AI cognitiveservices.vision.spatialanalysis-persondistance untuk detail selengkapnya tentang cara menghitung koordinat pada bidang lantai. |
Contoh output info penempatan zona yang divisualisasikan pada bingkai video:
Info penempatan zona memberikan saran untuk konfigurasi Anda, namun pedoman dalam Konfigurasi kamera tetap harus diikuti untuk hasil terbaik.
Pengaturan parameter simpul pelacak
Anda dapat mengonfigurasi komputasi kecepatan melalui pengaturan parameter node pelacak.
{
"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
}
Nama | Tipe | Deskripsi |
---|---|---|
enable_speed |
bool | Menunjukkan apakah Anda ingin menghitung keceptan untuk orang yang terdeteksi atau tidak. enable_speed diatur secara default ke True . Sangat disarankan agar Anda memungkinkan kecepatan dan orientasi untuk memiliki nilai perkiraan terbaik. |
remove_stationary_objects |
bool | Menunjukkan apakah Anda ingin menghapus objek stasioner. remove_stationary_objects ditetapkan secara default ke True. |
stationary_objects_dist_threshold_in_pixels |
int | Ambang batas jarak lingkungan untuk memutuskan apakah dua kotak pendeteksi dapat diperlakukan sebagai deteksi yang sama. stationary_objects_dist_threshold_in_pixels diatur secara default ke 5. |
stationary_objects_buffer_length_in_seconds |
int | Panjang minimum waktu dalam hitungan detik bahwa sistem harus melihat ke belakang untuk memutuskan apakah target adalah stasioner atau tidak. stationary_objects_buffer_length_in_seconds diatur secara default ke 3600. |
stationary_objects_filter_ratio |
float | Jika target berulang kali terdeteksi di lokasi yang sama (didefinisikan dalam stationary_objects_dist_threshold_in_pixels ) dengan lebih besar stationary_objects_filter_ratio (0,2 berarti 20%) dari stationary_objects_buffer_length_in_seconds interval waktu, itu akan dianggap sebagai target stasioner. stationary_objects_filter_ratio diatur secara default ke 0.2. |
Konfigurasi dan output operasi Analisis Spasial
Konfigurasi zona untuk personcount
Berikut ini adalah contoh input JSON untuk parameter SPACEANALYTICS_CONFIG yang mengonfigurasi sebuah zona. Anda bisa mengonfigurasi beberapa zona untuk operasi ini.
{
"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"
}
}
]
}
]
}
Nama | Tipe | Deskripsi |
---|---|---|
zones |
list | Daftar zona. |
name |
string | Nama yang ramah untuk zona ini. |
polygon |
list | Setiap pasangan nilai mewakili x,y untuk simpul poligon. Poligon mewakili area di mana orang dilacak atau dihitung. Titik Poligon didasarkan pada koordinat yang dinormalisasi (0-1), di mana sudut kiri atas (0,0, 0,0) dan sudut kanan bawah adalah (1,0, 1,0). |
threshold |
float | Acara dikeluarkan ketika orang tersebut lebih besar dari jumlah piksel ini di dalam zona. Ini adalah bidang dan nilai opsional dalam rasio (0-1). Misalnya, nilai 0,0253 akan menjadi 13 piksel pada video dengan lebar gambar = 512 (0,0253 X 512 = ~13). |
type |
string | Untuk cognitiveservices.vision.spatialanalysis-personcount, ini seharusnya adalah count . |
trigger |
string | Jenis pemicu untuk mengirim acara. Nilai yang didukung adalah event untuk mengirim peristiwa ketika hitungan berubah atau interval untuk mengirim peristiwa secara berkala, terlepas dari apakah hitungan telah berubah atau tidak. |
output_frequency |
int | Tingkat di mana peristiwa dikeluarkan. Ketika output_frequency = X, setiap peristiwa X dilegalkan, mantan. output_frequency =2 berarti setiap peristiwa lainnya adalah output. output_frequency berlaku untuk keduanya event dan interval . |
focus |
string | Lokasi titik dalam kotak batas orang yang digunakan untuk menghitung peristiwa. Nilai fokus bisa footprint (jejak kaki orang), bottom_center (bagian tengah bawah kotak batas orang), center (bagian tengah kotak batas orang). |
Konfigurasi baris untuk personcrossingline
Berikut ini adalah contoh input JSON untuk parameter SPACEANALYTICS_CONFIG
yang mengonfigurasi sebuah zona. Anda bisa mengonfigurasi beberapa garis persimpangan untuk operasi ini.
{
"lines": [
{
"name": "doorcamera",
"line": {
"start": {
"x": 0,
"y": 0.5
},
"end": {
"x": 1,
"y": 0.5
}
},
"events": [
{
"type": "linecrossing",
"config": {
"trigger": "event",
"focus": "footprint"
}
}
]
}
]
}
Nama | Tipe | Deskripsi |
---|---|---|
lines |
list | Daftar baris. |
name |
string | Nama yang ramah untuk baris ini. |
line |
list | Definisi garis. Ini adalah garis arah yang memungkinkan Anda untuk memahami "entri" vs. "keluar". |
start |
pasangan nilai | Koordinat x, y untuk titik awal garis. Nilai float mewakili posisi relatif vertex terhadap sudut kiri atas. Untuk menghitung nilai x, y absolut, Anda mengalikan nilai ini dengan ukuran bingkai. |
end |
pasangan nilai | Koordinat x, y untuk titik akhir garis. Nilai float mewakili posisi relatif vertex terhadap sudut kiri atas. Untuk menghitung nilai x, y absolut, Anda mengalikan nilai ini dengan ukuran bingkai. |
threshold |
float | Acara dikeluarkan ketika orang tersebut lebih besar dari jumlah piksel ini di dalam zona. Ini adalah bidang dan nilai opsional dalam rasio (0-1). Misalnya, nilai 0,0253 akan menjadi 13 piksel pada video dengan lebar gambar = 512 (0,0253 X 512 = ~13). |
type |
string | Untuk cognitiveservices.vision.spatialanalysis-personcrossingline, ini seharusnya adalah linecrossing . |
trigger |
string | Jenis pemicu untuk mengirim acara. Nilai yang Didukung: "peristiwa": tembakkan saat seseorang melewati garis. |
focus |
string | Lokasi titik dalam kotak batas orang yang digunakan untuk menghitung peristiwa. Nilai fokus bisa footprint (jejak kaki orang), bottom_center (bagian tengah bawah kotak batas orang), center (bagian tengah kotak batas orang). Nilai defaultnya adalah jejak kaki. |
Konfigurasi zona untuk personcrossingpolygon
Ini adalah contoh input JSON untuk SPACEANALYTICS_CONFIG
parameter SPACEANALYTICS_CONFIG yang mengonfigurasi zona. Anda bisa mengonfigurasi beberapa zona untuk operasi ini.
{
"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"
}
}]
}]
}
Nama | Tipe | Deskripsi |
---|---|---|
zones |
list | Daftar zona. |
name |
string | Nama yang ramah untuk zona ini. |
polygon |
list | Setiap pasangan nilai mewakili x,y untuk simpul poligon. Poligon mewakili area di mana orang dilacak atau dihitung. Nilai float mewakili posisi relatif vertex terhadap sudut kiri atas. Untuk menghitung nilai x, y absolut, Anda mengalikan nilai ini dengan ukuran bingkai. |
target_side |
int | Menentukan sisi zona yang ditentukan polygon untuk mengukur berapa lama orang menghadapi sisi tersebut saat berada di zona tersebut. 'dwellTimeForTargetSide' akan menghasilkan perkiraan waktu tersebut. Setiap sisi adalah tepi bernomor antara dua simpul poligon yang mewakili zona Anda. Misalnya, tepi di antara dua simpul pertama poligon mewakili sisi pertama, 'sisi'=1. Nilainya target_side antara [0,N-1] di mana N adalah jumlah sisi dari polygon . Ini langkah opsional. |
threshold |
float | Acara dikeluarkan ketika orang tersebut lebih besar dari jumlah piksel ini di dalam zona. Ini adalah bidang dan nilai opsional dalam rasio (0-1). Misalnya, nilai 0,074 akan menjadi 38 piksel pada video dengan lebar gambar = 512 (0,074 X 512 = ~38). |
type |
string | Untuk cognitiveservices.vision.spatialanalysis-personcrossingpolygon ini seharusnya adalah zonecrossing atau zonedwelltime . |
trigger |
string | Jenis pemicu untuk mengirim peristiwa Nilai yang Didukung: "peristiwa": tembakkan saat seseorang memasuki atau keluar dari zona. |
focus |
string | Lokasi titik dalam kotak batas orang yang digunakan untuk menghitung peristiwa. Nilai fokus bisa footprint (jejak kaki orang), bottom_center (bagian tengah bawah kotak batas orang), center (bagian tengah kotak batas orang). Nilai defaultnya adalah jejak kaki. |
Konfigurasi zona untuk persondistance
Ini adalah contoh input JSON untuk parameterSPACEANALYTICS_CONFIG
yang mengonfigurasi zona untuk cognitiveservices.vision.spatialanalysis-persondistance. Anda bisa mengonfigurasi beberapa zona untuk operasi ini.
{
"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"
}
}]
}]
}
Nama | Tipe | Deskripsi |
---|---|---|
zones |
list | Daftar zona. |
name |
string | Nama yang ramah untuk zona ini. |
polygon |
list | Setiap pasangan nilai mewakili x,y untuk simpul poligon. Poligon mewakili area di mana orang dihitung dan jarak antara orang diukur. Nilai float mewakili posisi relatif vertex terhadap sudut kiri atas. Untuk menghitung nilai x, y absolut, Anda mengalikan nilai ini dengan ukuran bingkai. |
threshold |
float | Acara dikeluarkan ketika orang tersebut lebih besar dari jumlah piksel ini di dalam zona. Ini adalah bidang dan nilai opsional dalam rasio (0-1). Misalnya, nilai 0,0253 akan menjadi 13 piksel pada video dengan lebar gambar = 512 (0,0253 X 512 = ~13). |
type |
string | Untuk cognitiveservices.vision.spatialanalysis-persondistance, ini seharusnya adalah persondistance . |
trigger |
string | Jenis pemicu untuk mengirim acara. Nilai yang didukung adalah event untuk mengirim peristiwa ketika hitungan berubah atau interval untuk mengirim peristiwa secara berkala, terlepas dari apakah hitungan telah berubah atau tidak. |
output_frequency |
int | Tingkat di mana peristiwa dikeluarkan. Ketika output_frequency = X, setiap peristiwa X dilegalkan, mantan. output_frequency =2 berarti setiap peristiwa lainnya adalah output. output_frequency berlaku untuk keduanya event dan interval . |
minimum_distance_threshold |
float | Jarak dalam kaki yang akan memicu peristiwa "TooClose" ketika orang-orang berjarak kurang dari jarak tersebut. |
maximum_distance_threshold |
float | Jarak dalam kaki yang akan memicu peristiwa "Terlalu Jauh" ketika orang-orang lebih jauh dari jarak tersebut. |
aggregation_method |
string | Metode untuk hasilpersondistance agregat. Metode agregasi berlaku untuk keduanya, yakni mode dan average . |
focus |
string | Lokasi titik dalam kotak batas orang yang digunakan untuk menghitung peristiwa. Nilai fokus bisa footprint (jejak kaki orang), bottom_center (bagian tengah bawah kotak batas orang), center (bagian tengah kotak batas orang). |
Konfigurasi untuk spatialanalysis
Berikut ini adalah contoh input JSON untuk parameter SPACEANALYTICS_CONFIG
yang mengonfigurasi garis dan zona untuk cognitiveservices.vision.spatialanalysis. Anda dapat mengonfigurasi beberapa baris/zona untuk operasi ini dan setiap baris/zona dapat memiliki peristiwa yang berbeda.
{
"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"
}
}
]
}
]
}
Konfigurasi kamera
Lihat panduan penempatan kamera untuk mempelajari selengkapnya tentang cara mengonfigurasi zona dan garis.
Output operasi Analisis Spasial
Peristiwa dari setiap operasi di-egress ke Azure IoT Hub pada format JSON.
Format JSON untuk personcount Wawasan AI
Sampel JSON untuk output peristiwa oleh operasi ini.
{
"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"
}
Nama Bidang Peristiwa | Tipe | Deskripsi |
---|---|---|
id |
string | ID Peristiwa |
type |
string | Jenis peristiwa |
detectionsId |
array | Array ukuran 1 pengidentifikasi unik deteksi orang yang memicu peristiwa ini |
properties |
collection | Kumpulan nilai |
trackinId |
string | Pengidentifikasi unik orang yang terdeteksi |
zone |
string | Bidang "nama" poligon yang mewakili zona yang disilangkan |
trigger |
string | Jenis pemicunya adalah 'peristiwa' atau 'interval' tergantung pada nilai trigger dalam SPACEANALYTICS_CONFIG |
Nama Bidang Deteksi | Tipe | Deskripsi |
---|---|---|
id |
string | ID Deteksi |
type |
string | Jenis deteksi |
region |
collection | Kumpulan nilai |
type |
string | Jenis wilayah |
points |
collection | Titik kiri atas dan kanan bawah saat jenis kawasan adalah PERSEGI PANJANG |
confidence |
float | Kepercayaan algoritma |
attributes |
array | Susunan atribut. Setiap atribut terdiri dari label, tugas, dan kepercayaan diri |
label |
string | Nilai atribut (sebagai contoh, {label: face_mask} menunjukkan orang yang terdeteksi mengenakan masker wajah) |
confidence (attribute) |
float | Nilai konfidensi atribut dengan kisaran 0 hingga 1 (misalnya, {confidence: 0.9, label: face_nomask} menunjukkan orang yang terdeteksi tidak mengenakan masker wajah) |
task |
string | Tugas/kelas klasifikasi atribut |
Nama Bidang SourceInfo | Tipe | Deskripsi |
---|---|---|
id |
string | ID Kamera |
timestamp |
date | Tanggal UTC ketika muatan JSON dipancarkan |
width |
int | Lebar bingkai video |
height |
int | Tinggi bingkai video |
frameId |
int | Pengidentifikasi bingkai |
cameraCallibrationInfo |
collection | Kumpulan nilai |
status |
string | Status kalibrasi dalam format state[;progress description] . Status dapat berupa Calibrating , Recalibrating (jika kalibrasi ulang diaktifkan), atau Calibrated . Bagian deskripsi kemajuan hanya valid ketika berada di dalam status Calibrating dan Recalibrating , yang digunakan untuk menunjukkan kemajuan proses kalibrasi saat ini. |
cameraHeight |
float | Ketinggian kamera di atas tanah dalam kaki. Ini disimpulkan dari kalibrasi otomatis. |
focalLength |
float | Panjang fokus kamera dalam piksel. Ini disimpulkan dari kalibrasi otomatis. |
tiltUpAngle |
float | Sudut kemiringan kamera dari vertikal. Ini disimpulkan dari kalibrasi otomatis. |
Format JSON untuk Wawasan AI personcrossingline
Contoh JSON untuk output deteksi oleh operasi ini.
{
"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"
}
Nama Bidang Peristiwa | Tipe | Deskripsi |
---|---|---|
id |
string | ID Peristiwa |
type |
string | Jenis peristiwa |
detectionsId |
array | Array ukuran 1 pengidentifikasi unik deteksi orang yang memicu peristiwa ini |
properties |
collection | Kumpulan nilai |
trackinId |
string | Pengidentifikasi unik orang yang terdeteksi |
status |
string | Arah penyeberangan jalur, baik 'CrossLeft' atau 'CrossRight'. Arah didasarkan pada imajinasi berdiri di "awal" menghadap "akhir" garis. CrossRight menyeberang dari kiri ke kanan. CrossRight menyeberang dari kanan ke kiri. |
orientationDirection |
string | Arah orientasi orang yang terdeteksi setelah melewati batas. Nilainya bisa 'Kiri', 'Kanan, atau 'Lurus'. Nilai ini adalah keluaran jika enable_orientation disetel ke True dalam CAMERACALIBRATOR_NODE_CONFIG |
zone |
string | Bidang "nama" dari garis yang disilangkan |
Nama Bidang Deteksi | Tipe | Deskripsi |
---|---|---|
id |
string | ID Deteksi |
type |
string | Jenis deteksi |
region |
collection | Kumpulan nilai |
type |
string | Jenis wilayah |
points |
collection | Titik kiri atas dan kanan bawah saat jenis kawasan adalah PERSEGI PANJANG |
groundOrientationAngle |
float | Sudut radian searah jarum jam dari orientasi orang tersebut pada bidang tanah yang disimpulkan |
mappedImageOrientation |
float | Proyeksi sudut radian searah jarum jam dari orientasi orang tersebut pada ruang gambar 2D |
speed |
float | Perkiraan kecepatan orang yang terdeteksi. Satuannya adalah foot per second (ft/s) |
confidence |
float | Kepercayaan algoritma |
attributes |
array | Susunan atribut. Setiap atribut terdiri dari label, tugas, dan kepercayaan diri |
label |
string | Nilai atribut (sebagai contoh, {label: face_mask} menunjukkan orang yang terdeteksi mengenakan masker wajah) |
confidence (attribute) |
float | Nilai konfidensi atribut dengan kisaran 0 hingga 1 (misalnya, {confidence: 0.9, label: face_nomask} menunjukkan orang yang terdeteksi tidak mengenakan masker wajah) |
task |
string | Tugas/kelas klasifikasi atribut |
Nama Bidang SourceInfo | Tipe | Deskripsi |
---|---|---|
id |
string | ID Kamera |
timestamp |
date | Tanggal UTC ketika muatan JSON dipancarkan |
width |
int | Lebar bingkai video |
height |
int | Tinggi bingkai video |
frameId |
int | Pengidentifikasi bingkai |
Penting
Model AI mendeteksi seseorang terlepas dari apakah orang tersebut menghadap ke arah atau menjauh dari kamera. Model AI tidak menjalankan pengenalan wajah dan tidak memancarkan informasi biometrik apa pun.
Format JSON untuk personcrossingpolygon Wawasan AI
Contoh JSON untuk output deteksi oleh operasi ini dengan jenis zonecrossing
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"
}
Contoh JSON untuk output deteksi oleh operasi ini dengan jenis zonedwelltime
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"
}
Nama Bidang Peristiwa | Tipe | Deskripsi |
---|---|---|
id |
string | ID Peristiwa |
type |
string | Jenis peristiwa. Nilainya bisa berupa orangZoneDwellTimeEvent atau orangZoneEnterExitEvent |
detectionsId |
array | Array ukuran 1 pengidentifikasi unik deteksi orang yang memicu peristiwa ini |
properties |
collection | Kumpulan nilai |
trackinId |
string | Pengidentifikasi unik orang yang terdeteksi |
status |
string | Arah penyeberangan poligon, baik 'Masuk' atau 'Keluar' |
side |
int | Jumlah sisi poligon yang dilintasi orang tersebut. Setiap sisi adalah tepi bernomor antara dua simpul poligon yang mewakili zona Anda. Tepi antara dua simpul pertama poligon mewakili sisi pertama. 'Sisi' kosong ketika peristiwa tidak dikaitkan dengan sisi tertentu karena oklusi. Misalnya, jalan keluar terjadi ketika seseorang menghilang tetapi tidak terlihat melintasi sisi zona atau jalan masuk terjadi ketika seseorang muncul di zona itu tetapi tidak terlihat melintasi sisi. |
dwellTime |
float | Jumlah milidetik yang mewakili waktu yang dihabiskan orang tersebut di zona tersebut. Bidang ini disediakan ketika jenis peristiwa adalah personZoneDwellTimeEvent |
dwellFrames |
int | Jumlah bingkai yang dihabiskan orang tersebut di zona tersebut. Bidang ini disediakan ketika jenis peristiwa adalah personZoneDwellTimeEvent |
dwellTimeForTargetSide |
float | Jumlah milidetik yang menunjukkan waktu yang dihabiskan orang tersebut di zona tersebut dan menghadapi target_side . Bidang ini disediakan ketika enable_orientation berada di True dalam CAMERACALIBRATOR_NODE_CONFIG dan nilai target_side ditetapkan dalam SPACEANALYTICS_CONFIG |
avgSpeed |
float | Kecepatan rata-rata orang di zona tersebut. Satuannya adalah foot per second (ft/s) |
minSpeed |
float | Kecepatan minimum orang di zona tersebut. Satuannya adalah foot per second (ft/s) |
zone |
string | Bidang "nama" poligon yang mewakili zona yang disilangkan |
Nama Bidang Deteksi | Tipe | Deskripsi |
---|---|---|
id |
string | ID Deteksi |
type |
string | Jenis deteksi |
region |
collection | Kumpulan nilai |
type |
string | Jenis wilayah |
points |
collection | Titik kiri atas dan kanan bawah saat jenis kawasan adalah PERSEGI PANJANG |
groundOrientationAngle |
float | Sudut radian searah jarum jam dari orientasi orang tersebut pada bidang tanah yang disimpulkan |
mappedImageOrientation |
float | Proyeksi sudut radian searah jarum jam dari orientasi orang tersebut pada ruang gambar 2D |
speed |
float | Perkiraan kecepatan orang yang terdeteksi. Satuannya adalah foot per second (ft/s) |
confidence |
float | Kepercayaan algoritma |
attributes |
array | Susunan atribut. Setiap atribut terdiri dari label, tugas, dan kepercayaan diri |
label |
string | Nilai atribut (sebagai contoh, {label: face_mask} menunjukkan orang yang terdeteksi mengenakan masker wajah) |
confidence (attribute) |
float | Nilai konfidensi atribut dengan kisaran 0 hingga 1 (misalnya, {confidence: 0.9, label: face_nomask} menunjukkan orang yang terdeteksi tidak mengenakan masker wajah) |
task |
string | Tugas/kelas klasifikasi atribut |
Format JSON untuk Wawasan AI persondistance
Contoh JSON untuk output deteksi oleh operasi ini.
{
"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"
}
Nama Bidang Peristiwa | Tipe | Deskripsi |
---|---|---|
id |
string | ID Peristiwa |
type |
string | Jenis peristiwa |
detectionsId |
array | Array ukuran 1 pengidentifikasi unik deteksi orang yang memicu peristiwa ini |
properties |
collection | Kumpulan nilai |
personCount |
int | Jumlah orang yang terdeteksi ketika peristiwa tersebut diemisi |
averageDistance |
float | Jarak rata-rata antara semua orang yang terdeteksi dalam satuan kaki |
minimumDistanceThreshold |
float | Jarak dalam satuan kaki yang akan memicu peristiwa "TooClose" ketika orang kurang dari jarak pemisah. |
maximumDistanceThreshold |
float | Jarak dalam satuan kaki yang akan memicu peristiwa "TooFar" ketika orang lebih dari jarak pemisah. |
eventName |
string | Nama kejadian adalah TooClose dengan minimumDistanceThreshold telah dilanggar, TooFar ketika maximumDistanceThreshold dilanggar, atau unknown ketika kalibrasi otomatis belum selesai |
distanceViolationPersonCount |
int | Jumlah orang yang terdeteksi dalam pelanggaran minimumDistanceThreshold atau maximumDistanceThreshold |
zone |
string | Bidang "nama" poligon yang mewakili zona yang dipantau untuk menjaga jarak antara orang-orang |
trigger |
string | Jenis pemicunya adalah 'peristiwa' atau 'interval' tergantung pada nilai trigger dalam SPACEANALYTICS_CONFIG |
Nama Bidang Deteksi | Tipe | Deskripsi |
---|---|---|
id |
string | ID Deteksi |
type |
string | Jenis deteksi |
region |
collection | Kumpulan nilai |
type |
string | Jenis wilayah |
points |
collection | Titik kiri atas dan kanan bawah saat jenis kawasan adalah PERSEGI PANJANG |
confidence |
float | Kepercayaan algoritma |
centerGroundPointX/centerGroundPointY |
2 nilai float | Nilai x , y dengan koordinat lokasi orang yang disimpulkan di tanah dalam kaki. x dan y merupakan koordinat di bidang lantai, dengan asumsi lantai rata. Lokasi kamera adalah asalnya. |
SaatcenterGroundPoint
, x
adalah jarak komponen dari kamera ke orang di sepanjang garis tegak lurus dengan bidang gambar kamera. y
adalah komponen jarak yang sejajar dengan bidang gambar kamera.
Dalam contoh ini, centerGroundPoint
adalah {centerGroundPointX: 4, centerGroundPointY: 5}
. Ini berarti ada orang yang berjarak 4 kaki dari kamera dan 5 kaki ke kanan, melihat bagian atas ruangan.
Nama Bidang SourceInfo | Tipe | Deskripsi |
---|---|---|
id |
string | ID Kamera |
timestamp |
date | Tanggal UTC ketika muatan JSON dipancarkan |
width |
int | Lebar bingkai video |
height |
int | Tinggi bingkai video |
frameId |
int | Pengidentifikasi bingkai |
cameraCallibrationInfo |
collection | Kumpulan nilai |
status |
string | Status kalibrasi dalam format state[;progress description] . Status dapat berupa Calibrating , Recalibrating (jika kalibrasi ulang diaktifkan), atau Calibrated . Bagian deskripsi kemajuan hanya valid ketika berada di dalam status Calibrating dan Recalibrating , yang digunakan untuk menunjukkan kemajuan proses kalibrasi saat ini. |
cameraHeight |
float | Ketinggian kamera di atas tanah dalam kaki. Ini disimpulkan dari kalibrasi otomatis. |
focalLength |
float | Panjang fokus kamera dalam piksel. Ini disimpulkan dari kalibrasi otomatis. |
tiltUpAngle |
float | Sudut kemiringan kamera dari vertikal. Ini disimpulkan dari kalibrasi otomatis. |
Format JSON untuk Wawasan AI spatialanalysis
Output dari operasi ini tergantung pada events
dikonfigurasi, misalnya jika ada peristiwa zonecrossing
yang dikonfigurasi untuk operasi ini maka output akan sama dengan cognitiveservices.vision.spatialanalysis-personcrossingpolygon
.
Menggunakan output yang dihasilkan oleh kontainer
Anda mungkin ingin mengintegrasikan deteksi analisis spasial atau peristiwa ke dalam aplikasi Anda. Berikut adalah beberapa pendekatan yang perlu dipertimbangkan:
- Gunakan SDK Azure Event Hubs untuk bahasa pemrograman pilihan Anda guna menyambungkan ke titik akhir Azure IoT Hub dan menerima peristiwa. Untuk informasi selengkapnya, lihat Baca pesan perangkat-ke-cloud dari titik akhir bawaan.
- Siapkan Perutean Pesan di Azure IoT Hub Anda untuk mengirim acara ke titik akhir lain atau menyimpan peristiwa ke penyimpanan data Anda. Untuk informasi selengkapnya, lihat Perutean Pesan Azure IoT Hub.
- Siapkan tugas Azure Stream Analytics untuk memproses peristiwa secara real-time saat mereka tiba dan membuat visualisasi.
Menyebarkan operasi Spatial Analysis dalam skala besar (beberapa kamera)
Untuk mendapatkan performa dan pemanfaatan GPU terbaik, Anda dapat menyebarkan operasi Analisis Spasial pada beberapa kamera menggunakan instans grafik. Di bawah ini adalah konfigurasi sampel untuk menjalankan operasi cognitiveservices.vision.spatialanalysis-personcrossingline
pada 15 kamera.
"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>"
}
}
}
},
}
}
Nama | Tipe | Deskripsi |
---|---|---|
batch_size |
int | Jika semua kamera memiliki resolusi yang sama, atur batch_size ke jumlah kamera yang akan digunakan dalam operasi tersebut, jika tidak, atur batch_size ke 1 atau biarkan sebagai default (1), yang menunjukkan tidak ada batch yang didukung. |