عمليات التحليل المكاني
يتيح لك التحليل المكاني تحليل تدفقات الفيديو من أجهزة الكاميرا في الوقت الحقيقي. لكل جهاز كاميرا تقوم بتكوينه، ستنشئ عمليات التحليل المكاني تدفق إخراج لرسائل JSON المرسلة إلى مثيل Azure IoT Hub.
تقوم حاوية التحليل المكاني بتنفيذ العمليات التالية. يمكنك تكوين هذه العمليات في بيان توزيع الحاوية الخاصة بك.
معرف العملية | الوصف |
---|---|
cognitiveservices.vision.spatialanalysis-personcount |
عد الأشخاص في منطقة معينة في مجال رؤية الكاميرا. تجب تغطية المنطقة بالكامل بكاميرا واحدة حتى يتمكن PersonCount من تسجيل إجمالي دقيق. يصدر حدث personCountEvent مبدئياً ثم أحداث personCountEvent عندما يتغير العدد. |
cognitiveservices.vision.spatialanalysis-personcrossingline |
يتتبع عندما يعبر شخص ما خطاً معيناً في مجال رؤية الكاميرا. يصدر حدث personLineEvent عندما يتجاوز الشخص الخط ويقدم معلومات عن الاتجاه. |
cognitiveservices.vision.spatialanalysis-personcrossingpolygon |
يصدر حدث personZoneEnterExitEvent عندما يدخل شخص ما أو يخرج من المنطقة المحددة ويقدم معلومات اتجاهية بجانب المنطقة التي تم عبورها. يصدر personZoneDwellTimeEvent عندما يخرج الشخص من المنطقة ويقدم معلومات اتجاهية بالإضافة إلى عدد الملّي ثانية التي قضاها الشخص داخل المنطقة. |
cognitiveservices.vision.spatialanalysis-persondistance |
يتتبع عندما ينتهك الأشخاص قاعدة الحد الأدنى للمسافة. يرسل personDistanceEvent بشكل دوري مع موقع كل مخالفة للمسافة. |
cognitiveservices.vision.spatialanalysis |
العملية العامة، والتي يمكن استخدامها لتشغيل جميع السيناريوهات المذكورة أعلاه. يكون هذا الخيار أكثر فائدة عندما تريد تشغيل سيناريوهات متعددة على نفس الكاميرا أو استخدام موارد النظام (وحدة معالجة الرسومات، على سبيل المثال) بشكل أكثر كفاءة. |
تتوفر جميع العمليات المذكورة أعلاه أيضاً في إصدار .debug
من الخدمة (على سبيل المثال، cognitiveservices.vision.spatialanalysis-personcount.debug
). Debug لديه القدرة على تمثيل إطارات الفيديو أثناء معالجتها. ستحتاج إلى تشغيل xhost +
على الكمبيوتر المضيف لتمكين تصور إطارات وأحداث الفيديو.
هام
تكشف نماذج Azure الذكاء الاصطناعي Vision الذكاء الاصطناعي عن وجود الإنسان وتحديد موقعه في لقطات الفيديو وإخراج مربع إحاطة حول جسم الإنسان. لا تحاول نماذج الذكاء الاصطناعي اكتشاف الهويات أو التركيبة السكانية للأفراد.
معلمات التشغيل
فيما يلي المعلمات التي تتطلبها كل عملية من عمليات التحليل المكاني.
معلمات التشغيل | الوصف |
---|---|
Operation ID |
معرف العملية من الجدول أعلاه. |
enabled |
قيمة منطقية: صح أم خطأ |
VIDEO_URL |
عنوان URL لـ RTSP لجهاز الكاميرا (مثال: rtsp://username:password@url ). يدعم التحليل المكاني الدفق المشفر H.264 إما من خلال RTSP أو http أو mp4. يمكن توفير Video_URL كقيمة سلسلة base64 مشوشة باستخدام تشفير AES، وإذا كان عنوان url للفيديو مشوشاً، يجب تقديم KEY_ENV وIV_ENV كمتغيرات بيئة. يمكن العثور على نموذج أداة لإنشاء المفاتيح والتشفير هنا. |
VIDEO_SOURCE_ID |
اسم مألوف لجهاز الكاميرا أو دفق الفيديو. سيتم إرجاع هذا مع إخراج JSON للحدث. |
VIDEO_IS_LIVE |
صحيح لأجهزة الكاميرا؛ خطأ لمقاطع الفيديو المسجلة. |
VIDEO_DECODE_GPU_INDEX |
أي GPU لفك إطار الفيديو. بشكل افتراضي هو 0. يجب أن تكون مماثلة لـ gpu_index في تكوين العقدة الأخرى مثل DETECTOR_NODE_CONFIG وCAMERACALIBRATOR_NODE_CONFIG . |
INPUT_VIDEO_WIDTH |
عرض إطار إدخال الفيديو/الدفق (على سبيل المثال، 1920). هذا حقل اختياري وإذا تم توفيره، فسيتم تغيير حجم الإطار إلى هذا البعد مع الحفاظ على نسبة العرض إلى الارتفاع. |
DETECTOR_NODE_CONFIG |
يشير JSON إلى وحدة معالجة الرسومات (GPU) التي سيتم تشغيل عقدة الكاشف عليها. يجب أن يكون بالتنسيق التالي: "{ \"gpu_index\": 0 }", |
TRACKER_NODE_CONFIG |
JSON يشير إلى ما إذا كان سيتم حساب السرعة في عقدة التتبع أم لا. يجب أن يكون بالتنسيق التالي: "{ \"enable_speed\": true }", |
CAMERA_CONFIG |
يشير JSON إلى معلمات الكاميرا التي تمت معايرتها لكاميرات متعددة. إذا كانت المهارة التي استخدمتها تتطلب معايرة ولديك بالفعل معلمة الكاميرا، يمكنك استخدام هذا التكوين لتوفيرها مباشرة. يجب أن يكون بالتنسيق التالي: "{ \"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 لتعريف كل كاميرا. يمكن الحصول عليها من source_info الحدث الذي نشرناه. لن يسري مفعولها إلا عند do_calibration=false في DETECTOR_NODE_CONFIG . |
CAMERACALIBRATOR_NODE_CONFIG |
يشير JSON إلى وحدة معالجة الرسومات (GPU) التي سيتم تشغيل عقدة معايرة الكاميرا عليها وما إذا كنت تريد استخدام المعايرة أم لا. يجب أن يكون بالتنسيق التالي: "{ \"gpu_index\": 0, \"do_calibration\": true, \"enable_orientation\": true}", |
CALIBRATION_CONFIG |
يشير JSON إلى معلمات للتحكم في كيفية عمل معايرة الكاميرا. يجب أن يكون بالتنسيق التالي: "{\"enable_recalibration\": true, \"quality_check_frequency_seconds\": 86400}", |
SPACEANALYTICS_CONFIG |
تكوين JSON للمنطقة والخط كما هو موضح أدناه. |
ENABLE_FACE_MASK_CLASSIFIER |
True لتمكين اكتشاف الأشخاص الذين يرتدون أقنعة الوجه في دفق الفيديو، False لتعطيله. يُعطل هذا افتراضياً. يتطلب اكتشاف قناع الوجه أن تكون معلمة عرض فيديو الإدخال 1920 "INPUT_VIDEO_WIDTH": 1920 . لن يتم إرجاع سمة قناع الوجه إذا كان الأشخاص الذين تم اكتشافهم لا يواجهون الكاميرا أو بعيدون عنها. لمزيد من المعلومات، راجع وضع الكاميرا. |
STATIONARY_TARGET_REMOVER_CONFIG |
يشير JSON إلى معلمات إزالة الهدف الثابت، ما يضيف القدرة على التعلم وتجاهل الأهداف الإيجابية الخاطئة الثابتة طويلة المدى مثل العارضات أو الأشخاص في الصور. يجب أن يكون التكوين بالتنسيق التالي: "{\"enable\": true, \"bbox_dist_threshold-in_pixels\": 5, \"buffer_length_in_seconds\": 3600, \"filter_ratio\": 0.2 }" |
إعدادات معلمة عقدة الكاشف
فيما يلي مثال على معلمات DETECTOR_NODE_CONFIG
لجميع عمليات التحليل المكاني.
{
"gpu_index": 0,
"enable_breakpad": false
}
Name | كتابة | الوصف |
---|---|---|
gpu_index |
سلسلة | فهرس GPU الذي سيتم تشغيل هذه العملية عليه. |
enable_breakpad |
منطقي | يشير إلى ما إذا كان سيتم تمكين لوحة التوقف، والتي تُستخدم لإنشاء تفريغ تعطل لاستخدام التصحيح. إنه false افتراضي. إذا قمت بتعيينه على true ، فستحتاج أيضاً إلى إضافة "CapAdd": ["SYS_PTRACE"] في جزء HostConfig لحاوية createOptions . بشكل افتراضي، يتم تحميل ملف تفريغ الأعطال إلى تطبيق AppCenter RealTimePersonTracking، إذا كنت تريد تحميل تفريغ الأعطال إلى تطبيق AppCenter الخاص بك، يمكنك تجاوز متغير البيئة RTPT_APPCENTER_APP_SECRET بسر تطبيقك. |
إعدادات معلمات عقدة معايرة الكاميرا
فيما يلي مثال على معلمات CAMERACALIBRATOR_NODE_CONFIG
لجميع عمليات التحليل المكاني.
{
"gpu_index": 0,
"do_calibration": true,
"enable_breakpad": false,
"enable_orientation": true
}
Name | كتابة | الوصف |
---|---|---|
do_calibration |
سلسلة | يشير إلى تشغيل المعايرة. يجب أن يكون do_calibration صحيحاً لـ cognitiveservices.vision.spatialanalysis-persondistance لتعمل بشكل صحيح. تم تعيين do_calibration افتراضياً على True . |
enable_breakpad |
منطقي | يشير إلى ما إذا كان سيتم تمكين لوحة التوقف، والتي تُستخدم لإنشاء تفريغ تعطل لاستخدام التصحيح. إنه false افتراضي. إذا قمت بتعيينه على true ، فستحتاج أيضاً إلى إضافة "CapAdd": ["SYS_PTRACE"] في جزء HostConfig لحاوية createOptions . بشكل افتراضي، يتم تحميل ملف تفريغ الأعطال إلى تطبيق AppCenter RealTimePersonTracking، إذا كنت تريد تحميل تفريغ الأعطال إلى تطبيق AppCenter الخاص بك، يمكنك تجاوز متغير البيئة RTPT_APPCENTER_APP_SECRET بسر تطبيقك. |
enable_orientation |
منطقي | يشير إلى ما إذا كنت تريد حساب الاتجاه للأشخاص الذين تم اكتشافهم أم لا. تم تعيين enable_orientation افتراضياً على True . |
تكوين المعايرة
هذا مثال على معلمات CALIBRATION_CONFIG
لجميع عمليات التحليل المكاني.
{
"enable_recalibration": true,
"calibration_quality_check_frequency_seconds": 86400,
"calibration_quality_check_sample_collect_frequency_seconds": 300,
"calibration_quality_check_one_round_sample_collect_num": 10,
"calibration_quality_check_queue_max_size": 1000,
"calibration_event_frequency_seconds": -1
}
Name | كتابة | الوصف |
---|---|---|
enable_recalibration |
منطقي | يشير إلى ما إذا كانت إعادة المعايرة التلقائية قيد التشغيل. القيمة الافتراضية هي true . |
calibration_quality_check_frequency_seconds |
العدد الصحيح | الحد الأدنى لعدد الثواني بين كل فحص جودة لتحديد ما إذا كانت هناك حاجة إلى إعادة المعايرة أم لا. الافتراضي هو 86400 (24 ساعة). يستعمل فقط عند enable_recalibration=True . |
calibration_quality_check_sample_collect_frequency_seconds |
العدد الصحيح | الحد الأدنى لعدد الثواني بين جمع عينات بيانات جديدة لإعادة المعايرة وفحص الجودة. الافتراضي هو 300 (5 دقائق). يستعمل فقط عند enable_recalibration=True . |
calibration_quality_check_one_round_sample_collect_num |
العدد الصحيح | الحد الأدنى من عدد عينات البيانات الجديدة التي يجب جمعها في كل جولة من جمع العينات. القيمة الافتراضية هي 10 . يستعمل فقط عند enable_recalibration=True . |
calibration_quality_check_queue_max_size |
العدد الصحيح | الحد الأقصى لعدد عينات البيانات المراد تخزينها عند معايرة نموذج الكاميرا. القيمة الافتراضية هي 1000 . يستعمل فقط عند enable_recalibration=True . |
calibration_event_frequency_seconds |
العدد الصحيح | تردد الإخراج (بالثواني) لأحداث معايرة الكاميرا. تشير قيمة -1 إلى أنه لا ينبغي إرسال معايرة الكاميرا ما لم يتم تغيير معلومات معايرة الكاميرا. القيمة الافتراضية هي -1 . |
خرج معايرة الكاميرا
فيما يلي مثال على الإخراج من معايرة الكاميرا في حالة التمكين. تشير القطع الناقصة إلى المزيد من نفس نوع العناصر في القائمة.
{
"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
}
]
}
}
راجع ناتج عملية التحليل المكاني للحصول على تفاصيل حول source_info
.
اسم الحقل ZonePlacementInfo | النوع | الوصف |
---|---|---|
optimalZonePolygon |
كائن | مضلع في صورة الكاميرا حيث يمكن وضع خطوط أو مناطق لعملياتك للحصول على أفضل النتائج. يمثل كل زوج من القيم س، ص لرؤوس المضلع. يمثل المضلع المناطق التي يتم فيها تعقب الأشخاص أو عدهم وتعتمد نقاط المضلع على إحداثيات طبيعية (0-1)، حيث يكون الركن الأيمن العلوي (0.0، 0.0) والزاوية اليسرى السفلية (1.0، 1.0). |
fairZonePolygon |
كائن | مضلع في صورة الكاميرا حيث يمكن وضع خطوط أو مناطق لعملياتك للحصول على نتائج جيدة، ولكن ربما ليست مثالية. راجع optimalZonePolygon أعلاه للحصول على شرح تفصيلي للمحتويات. |
uniformlySpacedPersonBoundingBoxes |
قائمة | قائمة بالمربعات المحيطة بالأشخاص داخل صورة الكاميرا موزعة بشكل موحد في مساحة حقيقية. تستند القيم إلى الإحداثيات المعيارية (0-1). |
personBoundingBoxGroundPoints |
قائمة | قائمة بالإحداثيات على مستوى الأرضية بالنسبة للكاميرا. يتوافق كل إحداثي مع الجزء السفلي الأيمن من المربع المحيط في uniformlySpacedPersonBoundingBoxes بنفس الفهرس. راجع حقول centerGroundPointX/centerGroundPointY ضمن JSON format for cognitiveservices.vision.spatialanalysis-persondistance AI Insights لمزيد من التفاصيل حول كيفية حساب الإحداثيات على مستوى الأرضية. |
مثال على إخراج معلومات موضع المنطقة المرئية على إطار فيديو:
توفر معلومات تحديد موضع المنطقة اقتراحات للتكوينات الخاصة بك، ولكن يجب الاستمرار في اتباع الإرشادات الموجودة في تكوين الكاميرا للحصول على أفضل النتائج.
إعدادات معلمة عقدة المقتفي
يمكنك تكوين حساب السرعة من خلال إعدادات معلمة عقدة التعقب.
{
"enable_speed": true,
"remove_stationary_objects": true,
"stationary_objects_dist_threshold_in_pixels": 5,
"stationary_objects_buffer_length_in_seconds": 3600,
"stationary_objects_filter_ratio": 0.2
}
Name | كتابة | الوصف |
---|---|---|
enable_speed |
منطقي | يشير إلى ما إذا كنت تريد حساب السرعة للأشخاص الذين تم اكتشافهم أم لا. تم تعيين enable_speed افتراضياً على True . يوصى بشدة بتمكين كل من السرعة والاتجاه للحصول على أفضل القيم المقدرة. |
remove_stationary_objects |
منطقي | يشير إلى ما إذا كنت تريد إزالة العناصر الثابتة. يتم تعيين remove_stationary_objects افتراضياً على True. |
stationary_objects_dist_threshold_in_pixels |
العدد الصحيح | حد مسافة الحي لتحديد ما إذا كان يمكن التعامل مع صندوقي اكتشاف على أنهما نفس الاكتشاف. يتم تعيين stationary_objects_dist_threshold_in_pixels افتراضياً على 5. |
stationary_objects_buffer_length_in_seconds |
العدد الصحيح | الحد الأدنى لطول الوقت بالثواني الذي يجب على النظام أن ينظر فيه إلى الوراء ليقرر ما إذا كان الهدف هدفاً ثابتاً أم لا. يتم تعيين stationary_objects_buffer_length_in_seconds افتراضياً على 3600. |
stationary_objects_filter_ratio |
عائم | إذا تم اكتشاف هدف بشكل متكرر في نفس الموقع (المحدد في stationary_objects_dist_threshold_in_pixels ) لأكبر stationary_objects_filter_ratio (0.2 يعني 20%) من الفاصل الزمني stationary_objects_buffer_length_in_seconds ، فسيتم التعامل معه كهدف ثابت. يتم تعيين stationary_objects_filter_ratio افتراضياً على 0.2. |
تكوين عمليات التحليل المكاني والمخرجات
تكوين المنطقة لحساب الشخص
فيما يلي مثال على إدخال JSON للمعامل SPACEANALYTICS_CONFIG الذي يقوم بتكوين منطقة. يمكنك تكوين مناطق متعددة لهذه العملية.
{
"zones": [
{
"name": "lobbycamera",
"polygon": [[0.3,0.3], [0.3,0.9], [0.6,0.9], [0.6,0.3], [0.3,0.3]],
"events": [
{
"type": "count",
"config": {
"trigger": "event",
"focus": "footprint"
}
}
]
}
]
}
Name | كتابة | الوصف |
---|---|---|
zones |
قائمة | قائمة المناطق. |
name |
سلسلة | اسم مألوف لهذه المنطقة. |
polygon |
قائمة | يمثل كل زوج من القيم س، ص لرؤوس المضلع. يمثل المضلع المناطق التي يتم فيها تعقب الأشخاص أو عدهم. تعتمد نقاط المضلع على الإحداثيات المعيارية (0-1)، حيث يكون الركن الأيمن العلوي (0.0، 0.0) والزاوية اليسرى السفلية (1.0، 1.0). |
threshold |
عائم | تخرج الأحداث عندما يكون الشخص أكبر من عدد البكسلات داخل المنطقة. هذا حقل اختياري والقيمة في النسبة (0-1). على سبيل المثال، ستكون القيمة 0.0253 13 بكسل على فيديو بعرض الصورة = 512 (0.0253 X 512 = ~13). |
type |
سلسلة | بالنسبة إلى cognitiveservices.vision.spatialanalysis-personcount، يجب أن يكون هذا count . |
trigger |
سلسلة | نوع المشغل لإرسال حدث. القيم المدعومة هي event لإرسال الأحداث عندما يتغير العدد أو interval لإرسال الأحداث بشكل دوري، بصرف النظر عما إذا كان العدد قد تغير أم لا. |
output_frequency |
العدد الصحيح | معدل خروج الأحداث. عندما يكون output_frequency = X، يتم إخراج كل حدث X، على سبيل المثال. output_frequency = 2 تعني أن كل حدث آخر ناتج. output_frequency ينطبق على كل من event وinterval . |
focus |
سلسلة | موقع النقطة داخل المربع المحيط للشخص المستخدم لحساب الأحداث. يمكن أن تكون قيمة التركيز footprint (أثر الشخص)، bottom_center (المركز السفلي للمربع المحيط للشخص)، center (مركز المربع المحيط للشخص). |
تكوين خط ل personcrossingline
فيما يلي مثال على إدخال JSON للمعامل SPACEANALYTICS_CONFIG
الذي يقوم بتكوين سطر. يمكنك تكوين خطوط متقاطعة متعددة لهذه العملية.
{
"lines": [
{
"name": "doorcamera",
"line": {
"start": {
"x": 0,
"y": 0.5
},
"end": {
"x": 1,
"y": 0.5
}
},
"events": [
{
"type": "linecrossing",
"config": {
"trigger": "event",
"focus": "footprint"
}
}
]
}
]
}
Name | كتابة | الوصف |
---|---|---|
lines |
قائمة | قائمة البنود. |
name |
سلسلة | اسم مألوف لهذا الخط. |
line |
قائمة | تعريف الخط. هذا خط اتجاهي يسمح لك بفهم "دخول" مقابل "خروج". |
start |
زوج القيمة | إحداثيات x وy لنقطة بداية الخط. تمثل القيم العائمة موضع الرأس بالنسبة إلى الركن الأيسر العلوي. لحساب القيم المطلقة x وy، يمكنك ضرب هذه القيم بحجم الإطار. |
end |
زوج القيمة | إحداثيات x وy لنقطة نهاية الخط. تمثل القيم العائمة موضع الرأس بالنسبة إلى الركن الأيسر العلوي. لحساب القيم المطلقة x وy، يمكنك ضرب هذه القيم بحجم الإطار. |
threshold |
عائم | تخرج الأحداث عندما يكون الشخص أكبر من عدد البكسلات داخل المنطقة. هذا حقل اختياري والقيمة في النسبة (0-1). على سبيل المثال، ستكون القيمة 0.0253 13 بكسل على فيديو بعرض الصورة = 512 (0.0253 X 512 = ~13). |
type |
سلسلة | بالنسبة إلى cognitiveservices.vision.spatialanalysis-personcrossingline، يجب أن يكون هذا linecrossing . |
trigger |
سلسلة | نوع المشغل لإرسال حدث. القيم المدعومة: "حدث": أطلق النار عندما يعبر شخص ما الخط. |
focus |
سلسلة | موقع النقطة داخل المربع المحيط للشخص المستخدم لحساب الأحداث. يمكن أن تكون قيمة التركيز footprint (أثر الشخص)، bottom_center (المركز السفلي للمربع المحيط للشخص)، center (مركز المربع المحيط للشخص). والقيمة الافتراضية هي "json". |
تكوين المنطقة ل personcrossingpolygon
هذا مثال على إدخال JSON للمعلمة SPACEANALYTICS_CONFIG
التي تكوّن منطقة. يمكنك تكوين مناطق متعددة لهذه العملية.
{
"zones":[
{
"name": "queuecamera",
"polygon": [[0.3,0.3], [0.3,0.9], [0.6,0.9], [0.6,0.3], [0.3,0.3]],
"events":[{
"type": "zonecrossing",
"config":{
"trigger": "event",
"focus": "footprint"
}
}]
},
{
"name": "queuecamera1",
"polygon": [[0.3,0.3], [0.3,0.9], [0.6,0.9], [0.6,0.3], [0.3,0.3]],
"events":[{
"type": "zonedwelltime",
"config":{
"trigger": "event",
"focus": "footprint"
}
}]
}]
}
Name | كتابة | الوصف |
---|---|---|
zones |
قائمة | قائمة المناطق. |
name |
سلسلة | اسم مألوف لهذه المنطقة. |
polygon |
قائمة | يمثل كل زوج قيمة x،y لـ رؤوس المضلع. يمثل المضلع المناطق التي يتم فيها تعقب الأشخاص أو عدهم. تمثل القيم العائمة موضع الرأس بالنسبة إلى الركن الأيسر العلوي. لحساب القيم المطلقة x وy، يمكنك ضرب هذه القيم بحجم الإطار. |
target_side |
العدد الصحيح | يحدد جانباً من المنطقة المحددة بواسطة polygon لقياس المدة التي يواجهها الأشخاص في مواجهة هذا الجانب أثناء تواجدهم في المنطقة. سيخرج 'dwellTimeForTargetSide' ذلك الوقت المقدر. كل جانب هو حافة مرقمة بين رأسي المضلع الذي يمثل منطقتك. على سبيل المثال، تمثل الحافة الواقعة بين أول رأسين من المضلع الضلع الأول، "الجانب" = 1. تقع قيمة target_side بين [0,N-1] حيث N هو عدد أضلاع polygon . هذا حقل اختياري. |
threshold |
عائم | تخرج الأحداث عندما يكون الشخص أكبر من عدد البكسلات داخل المنطقة. هذا حقل اختياري والقيمة في النسبة (0-1). على سبيل المثال، ستكون القيمة 0.074 38 بكسل على فيديو بعرض الصورة = 512 (0.074 X 512 = ~38). |
type |
سلسلة | بالنسبة إلى cognitiveservices.vision.spatialanalysis-personcrossingpolygon يجب أن يكون هذا zonecrossing أو zonedwelltime . |
trigger |
سلسلة | نوع المشغل لإرسال الحدث القيم المدعومة: "الحدث": أطلق النار عند دخول شخص ما إلى المنطقة أو خروجها منها. |
focus |
سلسلة | موقع النقطة داخل المربع المحيط للشخص المستخدم لحساب الأحداث. يمكن أن تكون قيمة التركيز footprint (أثر الشخص)، bottom_center (المركز السفلي للمربع المحيط للشخص)، center (مركز المربع المحيط للشخص). والقيمة الافتراضية هي "json". |
تكوين المنطقة ل persondistance
هذا مثال على إدخال JSON للمعلمة SPACEANALYTICS_CONFIG
التي تهيئ منطقة لـ cognitiveservices.vision.spatialanalysis-persondistance. يمكنك تكوين مناطق متعددة لهذه العملية.
{
"zones":[{
"name": "lobbycamera",
"polygon": [[0.3,0.3], [0.3,0.9], [0.6,0.9], [0.6,0.3], [0.3,0.3]],
"events":[{
"type": "persondistance",
"config":{
"trigger": "event",
"output_frequency":1,
"minimum_distance_threshold":6.0,
"maximum_distance_threshold":35.0,
"aggregation_method": "average",
"focus": "footprint"
}
}]
}]
}
Name | كتابة | الوصف |
---|---|---|
zones |
قائمة | قائمة المناطق. |
name |
سلسلة | اسم مألوف لهذه المنطقة. |
polygon |
قائمة | يمثل كل زوج قيمة x،y لـ رؤوس المضلع. يمثل المضلع المناطق التي يتم فيها حساب الأشخاص ويتم قياس المسافة بين الأشخاص. تمثل القيم العائمة موضع الرأس بالنسبة إلى الركن الأيسر العلوي. لحساب القيم المطلقة x وy، يمكنك ضرب هذه القيم بحجم الإطار. |
threshold |
عائم | تخرج الأحداث عندما يكون الشخص أكبر من عدد البكسلات داخل المنطقة. هذا حقل اختياري والقيمة في النسبة (0-1). على سبيل المثال، ستكون القيمة 0.0253 13 بكسل على فيديو بعرض الصورة = 512 (0.0253 X 512 = ~13). |
type |
سلسلة | بالنسبة إلى cognitiveservices.vision.spatialanalysis-persondistance، يجب أن يكون هذا persondistance . |
trigger |
سلسلة | نوع المشغل لإرسال حدث. القيم المدعومة هي event لإرسال الأحداث عندما يتغير العدد أو interval لإرسال الأحداث بشكل دوري، بصرف النظر عما إذا كان العدد قد تغير أم لا. |
output_frequency |
العدد الصحيح | معدل خروج الأحداث. عندما يكون output_frequency = X، يتم إخراج كل حدث X، على سبيل المثال. output_frequency = 2 تعني أن كل حدث آخر ناتج. output_frequency ينطبق على كل من event وinterval . |
minimum_distance_threshold |
عائم | مسافة بالقدم من شأنها أن تؤدي إلى حدث "TooClose" عندما يكون الناس أقل من تلك المسافة. |
maximum_distance_threshold |
عائم | مسافة بالقدم من شأنها أن تؤدي إلى حدث "TooFar" عندما يكون الناس أقل من تلك المسافة. |
aggregation_method |
سلسلة | طريقة النتيجة المجمعة persondistance . يتم تطبيق طريقة التجميع على كل من mode وaverage . |
focus |
سلسلة | موقع النقطة داخل المربع المحيط للشخص المستخدم لحساب الأحداث. يمكن أن تكون قيمة التركيز footprint (أثر الشخص)، bottom_center (المركز السفلي للمربع المحيط للشخص)، center (مركز المربع المحيط للشخص). |
تكوين التحليل المكاني
فيما يلي مثال على إدخال JSON للمعلمة SPACEANALYTICS_CONFIG
التي تهيئ خطاً ومنطقة لـ cognitiveservices.vision.spatialanalysis. يمكنك تكوين خطوط/مناطق متعددة لهذه العملية ويمكن أن يكون لكل خط/منطقة أحداث مختلفة.
{
"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"
}
}
]
}
]
}
تكوين الكاميرا
راجع إرشادات وضع الكاميرا لمعرفة المزيد حول كيفية تكوين المناطق والخطوط.
ناتج عملية التحليل المكاني
يتم إخراج الأحداث من كل عملية إلى Azure IoT Hub بتنسيق JSON.
تنسيق JSON تحليلات الذكاء الاصطناعي حساب الشخص
نموذج JSON لإخراج حدث بهذه العملية.
{
"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"
}
اسم حقل الحدث | النوع | الوصف |
---|---|---|
id |
سلسلة | معرف الحدث |
type |
سلسلة | نوع الحدث |
detectionsId |
صفيف | صفيف بحجم 1 للمعرف الفريد لاكتشاف الشخص الذي أدى إلى هذا الحدث |
properties |
مجموعة | جمع القيم |
trackinId |
سلسلة | معرّف فريد للشخص الذي تم اكتشافه |
zone |
سلسلة | حقل "الاسم" في المضلع الذي يمثل المنطقة التي تم عبورها |
trigger |
سلسلة | نوع المشغل هو 'event' أو 'interval' بناءً على قيمة trigger في SPACEANALYTICS_CONFIG |
الكشف عن اسم الحقل | النوع | الوصف |
---|---|---|
id |
سلسلة | معرف الكشف |
type |
سلسلة | نوع الكشف |
region |
مجموعة | جمع القيم |
type |
سلسلة | نوع المنطقة |
points |
مجموعة | النقاط العلوية اليسرى والسفلية اليسرى عندما يكون نوع المنطقة RECTANGLE |
confidence |
عائم | ثقة الخوارزمية |
attributes |
صفيف | صفيف من السمات. تتكون كل سمة من التسمية والمهمة والثقة |
label |
سلسلة | قيمة السمة (على سبيل المثال، {label: face_mask} تشير إلى أن الشخص المكتشف يرتدي قناع وجه) |
confidence (attribute) |
عائم | قيمة ثقة السمة بنطاق من 0 إلى 1 (على سبيل المثال، تشير {confidence: 0.9, label: face_nomask} إلى أن الشخص المكتشف لا يرتدي قناع وجه) |
task |
سلسلة | مهمة/فئة تصنيف السمة |
اسم حقل SourceInfo | النوع | الوصف |
---|---|---|
id |
سلسلة | معرف الكاميرا |
timestamp |
date | تاريخ UTC عندما تم إرسال حمولة JSON |
width |
العدد الصحيح | عرض إطار الفيديو |
height |
العدد الصحيح | ارتفاع إطار الفيديو |
frameId |
العدد الصحيح | معرّف الإطار |
cameraCallibrationInfo |
مجموعة | جمع القيم |
status |
سلسلة | حالة المعايرة بتنسيق state[;progress description] . يمكن أن تكون الحالة Calibrating أو Recalibrating (إذا تم تمكين إعادة المعايرة) أو Calibrated . يكون جزء وصف التقدم صالحاً فقط عندما يكون في حالة Calibrating وRecalibrating ، والتي تُستخدم لإظهار تقدم عملية المعايرة الحالية. |
cameraHeight |
عائم | ارتفاع الكاميرا عن الأرض بالأقدام. هذا مستدل من المعايرة الذاتية. |
focalLength |
عائم | البعد البؤري للكاميرا بالبكسل. هذا مستدل من المعايرة الذاتية. |
tiltUpAngle |
عائم | زاوية إمالة الكاميرا من الوضع الرأسي. هذا مستدل من المعايرة الذاتية. |
تنسيق JSON تحليلات الذكاء الاصطناعي personcrossingline
نموذج JSON لعمليات الكشف الناتجة عن هذه العملية.
{
"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"
}
اسم حقل الحدث | النوع | الوصف |
---|---|---|
id |
سلسلة | معرف الحدث |
type |
سلسلة | نوع الحدث |
detectionsId |
صفيف | صفيف بحجم 1 للمعرف الفريد لاكتشاف الشخص الذي أدى إلى هذا الحدث |
properties |
مجموعة | جمع القيم |
trackinId |
سلسلة | معرّف فريد للشخص الذي تم اكتشافه |
status |
سلسلة | اتجاه تقاطعات الخطوط، إما "CrossLeft" أو "CrossRight". يعتمد الاتجاه على تخيل الوقوف عند "البداية" في مواجهة "نهاية" السطر. تعبر CrossRight من اليسار إلى اليسار. CrossLeft يتقاطع من اليسار إلى اليسار. |
orientationDirection |
سلسلة | اتجاه الشخص المكتشف بعد عبور الخط. يمكن أن تكون القيمة "يسار" أو "يمين" أو "مستقيم". يتم إخراج هذه القيمة إذا تم تعيين enable_orientation على True في CAMERACALIBRATOR_NODE_CONFIG |
zone |
سلسلة | حقل "الاسم" للخط الذي تم تجاوزه |
الكشف عن اسم الحقل | النوع | الوصف |
---|---|---|
id |
سلسلة | معرف الكشف |
type |
سلسلة | نوع الكشف |
region |
مجموعة | جمع القيم |
type |
سلسلة | نوع المنطقة |
points |
مجموعة | النقاط العلوية اليسرى والسفلية اليسرى عندما يكون نوع المنطقة RECTANGLE |
groundOrientationAngle |
عائم | زاوية راديان في اتجاه عقارب الساعة لاتجاه الشخص على مستوى الأرض المستنتج |
mappedImageOrientation |
عائم | زاوية راديان المسقطة في اتجاه عقارب الساعة لاتجاه الشخص على مساحة الصورة ثنائية الأبعاد |
speed |
عائم | السرعة المقدرة للشخص المكتشف. الوحدة foot per second (ft/s) |
confidence |
عائم | ثقة الخوارزمية |
attributes |
صفيف | صفيف من السمات. تتكون كل سمة من التسمية والمهمة والثقة |
label |
سلسلة | قيمة السمة (على سبيل المثال، {label: face_mask} تشير إلى أن الشخص المكتشف يرتدي قناع وجه) |
confidence (attribute) |
عائم | قيمة ثقة السمة بنطاق من 0 إلى 1 (على سبيل المثال، تشير {confidence: 0.9, label: face_nomask} إلى أن الشخص المكتشف لا يرتدي قناع وجه) |
task |
سلسلة | مهمة/فئة تصنيف السمة |
اسم حقل SourceInfo | النوع | الوصف |
---|---|---|
id |
سلسلة | معرف الكاميرا |
timestamp |
date | تاريخ UTC عندما تم إرسال حمولة JSON |
width |
العدد الصحيح | عرض إطار الفيديو |
height |
العدد الصحيح | ارتفاع إطار الفيديو |
frameId |
العدد الصحيح | معرّف الإطار |
هام
يكتشف نموذج الذكاء الاصطناعي أي شخص بغض النظر عما إذا كان الشخص يواجه الكاميرا أو بعيداً عنها. لا يعمل نموذج الذكاء الاصطناعي على التعرف على الوجوه ولا ينبعث منه أي معلومات بيومترية.
تنسيق JSON تحليلات الذكاء الاصطناعي personcrossingpolygon
نموذج JSON لعمليات الكشف الناتجة عن طريق هذه العملية مع 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"
}
نموذج JSON لعمليات الكشف الناتجة عن طريق هذه العملية مع 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"
}
اسم حقل الحدث | النوع | الوصف |
---|---|---|
id |
سلسلة | معرف الحدث |
type |
سلسلة | نوع الحدث. يمكن أن تكون القيمة إما personZoneDwellTimeEvent أو personZoneEnterExitEvent |
detectionsId |
صفيف | صفيف بحجم 1 للمعرف الفريد لاكتشاف الشخص الذي أدى إلى هذا الحدث |
properties |
مجموعة | جمع القيم |
trackinId |
سلسلة | معرّف فريد للشخص الذي تم اكتشافه |
status |
سلسلة | اتجاه تقاطعات المضلعات، إما "إدخال" أو "خروج" |
side |
العدد الصحيح | رقم جانب المضلع الذي تجاوزه الشخص. كل جانب هو حافة مرقمة بين رأسي المضلع الذي يمثل منطقتك. تمثل الحافة الواقعة بين الرأسين الأولين للمضلع الضلع الأول. يكون "الجانب" فارغاً عندما لا يرتبط الحدث بجانب معين بسبب الانسداد. على سبيل المثال، حدث الخروج عندما اختفى شخص ولكن لم يُشاهد وهو يعبر جانباً من المنطقة، أو حدث الدخول عندما ظهر شخص في المنطقة ولكن لم يُشاهد وهو يعبر جانباً. |
dwellTime |
عائم | عدد الملّي ثانية الذي يمثل الوقت الذي يقضيه الشخص في المنطقة. يتم توفير هذا الحقل عندما يكون نوع الحدث هو personZoneDwellTimeEvent |
dwellFrames |
العدد الصحيح | عدد الإطارات التي قضاها الشخص في المنطقة. يتم توفير هذا الحقل عندما يكون نوع الحدث هو personZoneDwellTimeEvent |
dwellTimeForTargetSide |
عائم | عدد الملّي ثانية الذي يمثل الوقت الذي يقضيه الشخص في المنطقة وكان يواجه target_side . يتم توفير هذا الحقل عندما يكون enable_orientation هو True في CAMERACALIBRATOR_NODE_CONFIG ويتم تعيين قيمة target_side في SPACEANALYTICS_CONFIG |
avgSpeed |
عائم | متوسط سرعة الشخص في المنطقة. الوحدة foot per second (ft/s) |
minSpeed |
عائم | السرعة الدنيا للشخص في المنطقة. الوحدة foot per second (ft/s) |
zone |
سلسلة | حقل "الاسم" في المضلع الذي يمثل المنطقة التي تم عبورها |
الكشف عن اسم الحقل | النوع | الوصف |
---|---|---|
id |
سلسلة | معرف الكشف |
type |
سلسلة | نوع الكشف |
region |
مجموعة | جمع القيم |
type |
سلسلة | نوع المنطقة |
points |
مجموعة | النقاط العلوية اليسرى والسفلية اليسرى عندما يكون نوع المنطقة RECTANGLE |
groundOrientationAngle |
عائم | زاوية راديان في اتجاه عقارب الساعة لاتجاه الشخص على مستوى الأرض المستنتج |
mappedImageOrientation |
عائم | زاوية راديان المسقطة في اتجاه عقارب الساعة لاتجاه الشخص على مساحة الصورة ثنائية الأبعاد |
speed |
عائم | السرعة المقدرة للشخص المكتشف. الوحدة foot per second (ft/s) |
confidence |
عائم | ثقة الخوارزمية |
attributes |
صفيف | صفيف من السمات. تتكون كل سمة من التسمية والمهمة والثقة |
label |
سلسلة | قيمة السمة (على سبيل المثال، {label: face_mask} تشير إلى أن الشخص المكتشف يرتدي قناع وجه) |
confidence (attribute) |
عائم | قيمة ثقة السمة بنطاق من 0 إلى 1 (على سبيل المثال، تشير {confidence: 0.9, label: face_nomask} إلى أن الشخص المكتشف لا يرتدي قناع وجه) |
task |
سلسلة | مهمة/فئة تصنيف السمة |
تنسيق JSON ل persondistance تحليلات الذكاء الاصطناعي
نموذج JSON لعمليات الكشف الناتجة عن هذه العملية.
{
"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"
}
اسم حقل الحدث | النوع | الوصف |
---|---|---|
id |
سلسلة | معرف الحدث |
type |
سلسلة | نوع الحدث |
detectionsId |
صفيف | صفيف بحجم 1 للمعرف الفريد لاكتشاف الشخص الذي أدى إلى هذا الحدث |
properties |
مجموعة | جمع القيم |
personCount |
العدد الصحيح | عدد الأشخاص الذين تم اكتشافهم عند إرسال الحدث |
averageDistance |
عائم | متوسط المسافة بين جميع الأشخاص المكتشفة بالأقدام |
minimumDistanceThreshold |
عائم | المسافة بالأقدام التي ستطلق حدث "TooClose" عندما تكون المسافة بين الأشخاص أقل من تلك المسافة. |
maximumDistanceThreshold |
عائم | المسافة بالأقدام التي ستطلق حدث "TooFar" عندما يكون الناس أكبر من المسافة بينهم. |
eventName |
سلسلة | تمت مخالفة اسم الحدث TooClose مع minimumDistanceThreshold أو TooFar عند مخالفة maximumDistanceThreshold أو unknown عند عدم اكتمال المعايرة التلقائية |
distanceViolationPersonCount |
العدد الصحيح | عدد الأشخاص الذين تم اكتشاف مخالفتهم لـ minimumDistanceThreshold أو maximumDistanceThreshold |
zone |
سلسلة | حقل "name" في المضلع الذي يمثل المنطقة التي تم رصدها للتباعد بين الأشخاص |
trigger |
سلسلة | نوع المشغل هو 'event' أو 'interval' بناءً على قيمة trigger في SPACEANALYTICS_CONFIG |
الكشف عن اسم الحقل | النوع | الوصف |
---|---|---|
id |
سلسلة | معرف الكشف |
type |
سلسلة | نوع الكشف |
region |
مجموعة | جمع القيم |
type |
سلسلة | نوع المنطقة |
points |
مجموعة | النقاط العلوية اليسرى والسفلية اليسرى عندما يكون نوع المنطقة RECTANGLE |
confidence |
عائم | ثقة الخوارزمية |
centerGroundPointX/centerGroundPointY |
2 قيم عائمة | x ، y قيم مع إحداثيات الموقع المستنتج للشخص على الأرض بالقدم. x وy هما إحداثيات على مستوى الأرضية، بافتراض أن الأرضية مستوية. موقع الكاميرا هو الأصل. |
في centerGroundPoint
، x
هو مكون المسافة من الكاميرا إلى الشخص الذي يكون عمودياً على مستوى صورة الكاميرا. y
هو مكون المسافة الموازية لمستوى صورة الكاميرا.
في هذا المثال، centerGroundPoint
هي {centerGroundPointX: 4, centerGroundPointY: 5}
. هذا يعني أن هناك شخصاً أمام الكاميرا بأربعة أقدام وخمسة أقدام على اليمين، ينظر إلى الغرفة من أعلى لأسفل.
اسم حقل SourceInfo | النوع | الوصف |
---|---|---|
id |
سلسلة | معرف الكاميرا |
timestamp |
date | تاريخ UTC عندما تم إرسال حمولة JSON |
width |
العدد الصحيح | عرض إطار الفيديو |
height |
العدد الصحيح | ارتفاع إطار الفيديو |
frameId |
العدد الصحيح | معرّف الإطار |
cameraCallibrationInfo |
مجموعة | جمع القيم |
status |
سلسلة | حالة المعايرة بتنسيق state[;progress description] . يمكن أن تكون الحالة Calibrating أو Recalibrating (إذا تم تمكين إعادة المعايرة) أو Calibrated . يكون جزء وصف التقدم صالحاً فقط عندما يكون في حالة Calibrating وRecalibrating ، والتي تُستخدم لإظهار تقدم عملية المعايرة الحالية. |
cameraHeight |
عائم | ارتفاع الكاميرا عن الأرض بالأقدام. هذا مستدل من المعايرة الذاتية. |
focalLength |
عائم | البعد البؤري للكاميرا بالبكسل. هذا مستدل من المعايرة الذاتية. |
tiltUpAngle |
عائم | زاوية إمالة الكاميرا من الوضع الرأسي. هذا مستدل من المعايرة الذاتية. |
تنسيق JSON تحليلات الذكاء الاصطناعي التحليل المكاني
يعتمد إخراج هذه العملية على التكوين events
، على سبيل المثال، إذا كان هناك حدث zonecrossing
تم تكوينه لهذه العملية، فسيكون الناتج هو نفسه cognitiveservices.vision.spatialanalysis-personcrossingpolygon
.
استخدام الإخراج الذي تم إنشاؤه بواسطة الحاوية
قد ترغب في دمج اكتشاف التحليل المكاني أو الأحداث في تطبيقك. فيما يلي بعض الطرق التي يجب مراعاتها:
- استخدم Azure Event Hubs SDK للغة البرمجة التي اخترتها للاتصال بنقطة نهاية Azure IoT Hub وتلقي الأحداث. لمزيد من المعلومات، راجع قراءة الرسائل من جهاز إلى مجموعة النظراء من نقطة النهاية المضمنة.
- قم بإعداد توجيه الرسائل على Azure IoT Hub لإرسال الأحداث إلى نقاط نهاية أخرى أو حفظ الأحداث في تخزين البيانات. لمزيد من المعلومات، راجع توجيه رسائل IoT Hub.
- قم بإعداد وظيفة Azure Stream Analytics لمعالجة الأحداث في الوقت الحقيقي فور وصولها وإنشاء تصورات.
توزيع عمليات التحليل المكاني على نطاق واسع (كاميرات متعددة)
من أجل الحصول على أفضل أداء واستخدام لوحدات معالجة الرسومات، يمكنك توزيع أي عمليات تحليل مكاني على كاميرات متعددة باستخدام مثيلات الرسم البياني. يوجد أدناه نموذج تكوين لتشغيل عملية cognitiveservices.vision.spatialanalysis-personcrossingline
على 15 كاميرا.
"properties.desired": {
"globalSettings": {
"PlatformTelemetryEnabled": false,
"CustomerTelemetryEnabled": true
},
"graphs": {
"personzonelinecrossing": {
"operationId": "cognitiveservices.vision.spatialanalysis-personcrossingline",
"version": 1,
"enabled": true,
"sharedNodes": {
"shared_detector0": {
"node": "PersonCrossingLineGraph.detector",
"parameters": {
"DETECTOR_NODE_CONFIG": "{ \"gpu_index\": 0, \"batch_size\": 7, \"do_calibration\": true}",
}
},
"shared_calibrator0": {
"node": "PersonCrossingLineGraph/cameracalibrator",
"parameters": {
"CAMERACALIBRATOR_NODE_CONFIG": "{ \"gpu_index\": 0, \"do_calibration\": true, \"enable_zone_placement\": true}",
"CALIBRATION_CONFIG": "{\"enable_recalibration\": true, \"quality_check_frequency_seconds\": 86400}",
}
},
"parameters": {
"VIDEO_DECODE_GPU_INDEX": 0,
"VIDEO_IS_LIVE": true
},
"instances": {
"1": {
"sharedNodeMap": {
"PersonCrossingLineGraph/detector": "shared_detector0",
"PersonCrossingLineGraph/cameracalibrator": "shared_calibrator0",
},
"parameters": {
"VIDEO_URL": "<Replace RTSP URL for camera 1>",
"VIDEO_SOURCE_ID": "camera 1",
"SPACEANALYTICS_CONFIG": "{\"zones\":[{\"name\":\"queue\",\"polygon\":[[0,0],[1,0],[0,1],[1,1],[0,0]]}]}"
}
},
"2": {
"sharedNodeMap": {
"PersonCrossingLineGraph/detector": "shared_detector0",
"PersonCrossingLineGraph/cameracalibrator": "shared_calibrator0",
},
"parameters": {
"VIDEO_URL": "<Replace RTSP URL for camera 2>",
"VIDEO_SOURCE_ID": "camera 2",
"SPACEANALYTICS_CONFIG": "<Replace the zone config value, same format as above>"
}
},
"3": {
"sharedNodeMap": {
"PersonCrossingLineGraph/detector": "shared_detector0",
"PersonCrossingLineGraph/cameracalibrator": "shared_calibrator0",
},
"parameters": {
"VIDEO_URL": "<Replace RTSP URL for camera 3>",
"VIDEO_SOURCE_ID": "camera 3",
"SPACEANALYTICS_CONFIG": "<Replace the zone config value, same format as above>"
}
},
"4": {
"sharedNodeMap": {
"PersonCrossingLineGraph/detector": "shared_detector0",
"PersonCrossingLineGraph/cameracalibrator": "shared_calibrator0",
},
"parameters": {
"VIDEO_URL": "<Replace RTSP URL for camera 4>",
"VIDEO_SOURCE_ID": "camera 4",
"SPACEANALYTICS_CONFIG": "<Replace the zone config value, same format as above>"
}
},
"5": {
"sharedNodeMap": {
"PersonCrossingLineGraph/detector": "shared_detector0",
"PersonCrossingLineGraph/cameracalibrator": "shared_calibrator0",
},
"parameters": {
"VIDEO_URL": "<Replace RTSP URL for camera 5>",
"VIDEO_SOURCE_ID": "camera 5",
"SPACEANALYTICS_CONFIG": "<Replace the zone config value, same format as above>"
}
},
"6": {
"sharedNodeMap": {
"PersonCrossingLineGraph/detector": "shared_detector0",
"PersonCrossingLineGraph/cameracalibrator": "shared_calibrator0",
},
"parameters": {
"VIDEO_URL": "<Replace RTSP URL for camera 6>",
"VIDEO_SOURCE_ID": "camera 6",
"SPACEANALYTICS_CONFIG": "<Replace the zone config value, same format as above>"
}
},
"7": {
"sharedNodeMap": {
"PersonCrossingLineGraph/detector": "shared_detector0",
"PersonCrossingLineGraph/cameracalibrator": "shared_calibrator0",
},
"parameters": {
"VIDEO_URL": "<Replace RTSP URL for camera 7>",
"VIDEO_SOURCE_ID": "camera 7",
"SPACEANALYTICS_CONFIG": "<Replace the zone config value, same format as above>"
}
},
"8": {
"sharedNodeMap": {
"PersonCrossingLineGraph/detector": "shared_detector0",
"PersonCrossingLineGraph/cameracalibrator": "shared_calibrator0",
},
"parameters": {
"VIDEO_URL": "<Replace RTSP URL for camera 8>",
"VIDEO_SOURCE_ID": "camera 8",
"SPACEANALYTICS_CONFIG": "<Replace the zone config value, same format as above>"
}
},
"9": {
"sharedNodeMap": {
"PersonCrossingLineGraph/detector": "shared_detector0",
"PersonCrossingLineGraph/cameracalibrator": "shared_calibrator0",
},
"parameters": {
"VIDEO_URL": "<Replace RTSP URL for camera 9>",
"VIDEO_SOURCE_ID": "camera 9",
"SPACEANALYTICS_CONFIG": "<Replace the zone config value, same format as above>"
}
},
"10": {
"sharedNodeMap": {
"PersonCrossingLineGraph/detector": "shared_detector0",
"PersonCrossingLineGraph/cameracalibrator": "shared_calibrator0",
},
"parameters": {
"VIDEO_URL": "<Replace RTSP URL for camera 10>",
"VIDEO_SOURCE_ID": "camera 10",
"SPACEANALYTICS_CONFIG": "<Replace the zone config value, same format as above>"
}
},
"11": {
"sharedNodeMap": {
"PersonCrossingLineGraph/detector": "shared_detector0",
"PersonCrossingLineGraph/cameracalibrator": "shared_calibrator0",
},
"parameters": {
"VIDEO_URL": "<Replace RTSP URL for camera 11>",
"VIDEO_SOURCE_ID": "camera 11",
"SPACEANALYTICS_CONFIG": "<Replace the zone config value, same format as above>"
}
},
"12": {
"sharedNodeMap": {
"PersonCrossingLineGraph/detector": "shared_detector0",
"PersonCrossingLineGraph/cameracalibrator": "shared_calibrator0",
},
"parameters": {
"VIDEO_URL": "<Replace RTSP URL for camera 12>",
"VIDEO_SOURCE_ID": "camera 12",
"SPACEANALYTICS_CONFIG": "<Replace the zone config value, same format as above>"
}
},
"13": {
"sharedNodeMap": {
"PersonCrossingLineGraph/detector": "shared_detector0",
"PersonCrossingLineGraph/cameracalibrator": "shared_calibrator0",
},
"parameters": {
"VIDEO_URL": "<Replace RTSP URL for camera 13>",
"VIDEO_SOURCE_ID": "camera 13",
"SPACEANALYTICS_CONFIG": "<Replace the zone config value, same format as above>"
}
},
"14": {
"sharedNodeMap": {
"PersonCrossingLineGraph/detector": "shared_detector0",
"PersonCrossingLineGraph/cameracalibrator": "shared_calibrator0",
},
"parameters": {
"VIDEO_URL": "<Replace RTSP URL for camera 14>",
"VIDEO_SOURCE_ID": "camera 14",
"SPACEANALYTICS_CONFIG": "<Replace the zone config value, same format as above>"
}
},
"15": {
"sharedNodeMap": {
"PersonCrossingLineGraph/detector": "shared_detector0",
"PersonCrossingLineGraph/cameracalibrator": "shared_calibrator0",
},
"parameters": {
"VIDEO_URL": "<Replace RTSP URL for camera 15>",
"VIDEO_SOURCE_ID": "camera 15",
"SPACEANALYTICS_CONFIG": "<Replace the zone config value, same format as above>"
}
}
}
},
}
}
Name | كتابة | الوصف |
---|---|---|
batch_size |
العدد الصحيح | إذا كانت جميع الكاميرات بنفس الدقة، فاضبط batch_size على عدد الكاميرات التي سيتم استخدامها في هذه العملية، وإلا فاضبط batch_size على 1 أو اتركها كإعداد افتراضي (1)، ما يشير إلى عدم دعم أي مجموعة. |
الخطوات التالية
الملاحظات
https://aka.ms/ContentUserFeedback.
قريبًا: خلال عام 2024، سنتخلص تدريجيًا من GitHub Issues بوصفها آلية إرسال ملاحظات للمحتوى ونستبدلها بنظام ملاحظات جديد. لمزيد من المعلومات، راجعإرسال الملاحظات وعرضها المتعلقة بـ