عمليات التحليل المكاني

يتيح لك التحليل المكاني تحليل تدفقات الفيديو من أجهزة الكاميرا في الوقت الحقيقي. لكل جهاز كاميرا تقوم بتكوينه، ستنشئ عمليات التحليل المكاني تدفق إخراج لرسائل 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 لمزيد من التفاصيل حول كيفية حساب الإحداثيات على مستوى الأرضية.

مثال على إخراج معلومات موضع المنطقة المرئية على إطار فيديو: Zone placement info visualization

توفر معلومات تحديد موضع المنطقة اقتراحات للتكوينات الخاصة بك، ولكن يجب الاستمرار في اتباع الإرشادات الموجودة في تكوين الكاميرا للحصول على أفضل النتائج.

إعدادات معلمة عقدة المقتفي

يمكنك تكوين حساب السرعة من خلال إعدادات معلمة عقدة التعقب.

{
"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 هو مكون المسافة الموازية لمستوى صورة الكاميرا.

Example center ground point

في هذا المثال، 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)، ما يشير إلى عدم دعم أي مجموعة.

الخطوات التالية