Operasi Analisis Spasial

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 Jenis 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: Zone placement info visualization

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_CONFIGparameter 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 Jenis 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 Jenis 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 Jenis 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 Jenis 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 Jenis 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 Jenis 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 Jenis 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 Jenis 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 Jenis 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 Jenis 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.

Example center ground point

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 Jenis 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.

Langkah berikutnya