1. الأهداف
نظرة عامة
يركز هذا الدرس التطبيقي حول الترميز على إنشاء تطبيق Vertex AI Vision شامل لإظهار إرسال الفيديوهات باستخدام ميزة فلترة الحركة. في هذا البرنامج التعليمي، سنستعرض المعلمات المختلفة في تهيئة فلتر الحركة:
- حساسية ميزة "كشف الحركة"
- الحد الأدنى لمدة الحدث
- فترة معاينة الإعلان
- وقت الانتظار
- منطقة رصد الحركة
ما ستتعرّف عليه
- كيفية نقل بيانات الفيديوهات للبث
- الميزات المختلفة المتوفرة في "فلتر الحركة" وكيفية استخدامها
- أماكن الاطّلاع على إحصاءات فلتر "الحركة"
- كيفية ضبط الإعدادات استنادًا إلى الفيديو
2. قبل البدء
- في وحدة تحكّم Google Cloud، في صفحة أداة اختيار المشاريع، اختَر إنشاء مشروع على Google Cloud أو أنشِئ مشروعًا. ملاحظة: إذا كنت لا تخطّط للاحتفاظ بالموارد التي تنشئها في هذه العملية، أنشئ مشروعًا بدلاً من اختيار مشروع حالي. بعد الانتهاء من هذه الخطوات، يمكنك حذف المشروع، ما يؤدي إلى إزالة جميع الموارد المرتبطة به. الانتقال إلى أداة اختيار المشاريع
- تأكَّد من تفعيل الفوترة لمشروعك على Cloud. تعرَّف على كيفية التحقّق مما إذا كانت الفوترة مفعَّلة في مشروع.
- فعِّل واجهات برمجة التطبيقات Compute Engine وVision AI. تفعيل واجهات برمجة التطبيقات
إنشاء حساب خدمة:
- في Google Cloud Console، انتقِل إلى صفحة إنشاء حساب خدمة. الانتقال إلى "إنشاء حساب خدمة"
- اختَر مشروعك.
- في حقل اسم حساب الخدمة، أدخِل اسمًا. تملأ وحدة تحكّم Google Cloud حقل معرّف حساب الخدمة استنادًا إلى هذا الاسم. في حقل وصف حساب الخدمة، أدخِل وصفًا. على سبيل المثال، حساب الخدمة للبدء السريع.
- انقر على إنشاء ومتابعة.
- لمنح إذن الوصول إلى مشروعك، امنح الأدوار التالية لحساب الخدمة: ذكاء الرؤية > محرِّر ذكاء الرؤية، Compute Engine > مشرف وحدة Compute (إصدار تجريبي)، مساحة التخزين > عارض عناصر مساحة التخزين † . في قائمة اختيار دور، اختَر دورًا. للحصول على أدوار إضافية، انقر على إضافة دور آخر وأضِف كل دور إضافي. ملاحظة: يؤثر حقل الدور في الموارد التي يمكن لحساب الخدمة الوصول إليها في مشروعك. يمكنك إلغاء هذه الأدوار أو منح أدوار إضافية لاحقًا. في بيئات الإنتاج، لا تمنح أدوار "المالك" أو "المحرِّر" أو "المُشاهد". بدلاً من ذلك، يمكنك منح دور محدّد مسبقًا أو دور مخصّص يلبي احتياجاتك.
- انقر على متابعة.
- انقر على تم لإنهاء إنشاء حساب الخدمة. لا تغلِق نافذة المتصفّح. ستحتاج إليه في الخطوة التالية.
إنشاء مفتاح حساب خدمة:
- في وحدة تحكُّم Google Cloud، انقر على عنوان البريد الإلكتروني لحساب الخدمة الذي أنشأته.
- انقر على المفاتيح.
- انقر على إضافة مفتاح، ثم انقر على إنشاء مفتاح جديد.
- انقر على إنشاء. يتم تنزيل ملف مفتاح JSON على جهاز الكمبيوتر.
- انقر على إغلاق (Close).
- ثبِّت واجهة سطر أوامر Google Cloud (CLI) وابدأ إعدادها.
† لا يلزم توفُّر الدور إلا في حال نسخ نموذج ملف فيديو من حزمة في Cloud Storage.
3- فلتر الحركة
يلتقط فلتر الحركة شرائح فيديو المنتجات والحركة التي تحتوي على أحداث حركة. من خلال ضبط حساسية الحركة والحد الأدنى لطول الحدث وفترة معاينة الإعلان وفترة التوقف المؤقت ومنطقة رصد الحركة، يمكن للمستخدم ضبط الفلتر وفقًا لاحتياجاته الخاصة.
ضبط فلتر الحركة
تتوفّر 5 إعدادات في فلتر الحركة للتخصيص.
- حساسية الحركة: درجة حساسية الحركة التي يجب إحداثها.
- الحد الأدنى لمدة الحدث: الحد الأدنى لمدة تسجيل حدث الحركة
- فترة معاينة الإعلان: المدة التي يجب أن يبدأ فيها تسجيل الفيديو قبل رصد حدث حركة
- فترة التوقف: بعد انتهاء حدث الحركة، ستتم فترة توقف بالمدة المحدّدة. خلال فترة الانتظار، لن يتم تشغيل أحداث الحركة.
- منطقة رصد الحركة: منطقة ضبطها المستخدم لتحديد مكان رصد الحركة (سنتحدّث عن المزيد من التفاصيل في قسم لاحق)
الحساسية للحركة
استخدِم العلامة motion_detection_sensitivity
في الأمر vaictl.
سلسلة. الوسيط التلقائي يمكنك الاختيار من بين "منخفض" أو "متوسط" أو "مرتفع".
كلما زاد مستوى الحساسية لرصد الحركة، زادت الحساسية للضوضاء والحركات الأصغر. ننصح باستخدام هذا الإعداد في الحالات التي تتوفّر فيها أجسام صغيرة متحركة (مثل الأشخاص من مسافة بعيدة) وإضاءة ثابتة.
من ناحية أخرى، تكون الحساسية المنخفضة أقل حساسية لتداخل الإضاءة. هذا الإعداد مثالي عندما يكون هناك المزيد من التداخل في الإضاءة، مثل البيئة الخارجية، وبالنسبة إلى جودة الفيديو المنخفضة التي قد تتضمّن المزيد من الضوضاء. بما أنّ هذا الإعداد هو أكثر الفلاتر صرامةً، قد يتجاهل الحركات الناتجة عن الأجسام الصغيرة.
الحد الأدنى لمدة الحدث
استخدام العلامة min_event_length_in_seconds
في أمر vaictl
عدد صحيح المدة التلقائية هي 10 ثوانٍ. يتراوح النطاق من 0 ثانية إلى 3600 ثانية.
الحد الأدنى لمدة فيديوهات أحداث الحركة التي سيتم تحليلها بعد رصد مقطع لحدث حركة في الإطار
فترة المراجعة
استخدِم العلامة look_back_window_in_seconds
في الأمر vaictl.
عدد صحيح المدة التلقائية هي 3 ثوانٍ. يتراوح النطاق من 0 ثانية إلى 3600 ثانية.
فترة معاينة الإعلان هي المدة المخزَّنة مؤقتًا قبل رصد حدث حركة. يكون ذلك مفيدًا عندما نريد معرفة ما يحدث في اللقطة قبل ثوانٍ قليلة من رصد أحداث الحركة.
فترة الانتظار
استخدام العلامة cool_down_period_in_seconds
في أمر vaictl
عدد صحيح القيمة التلقائية هي 300 ثانية. يتراوح النطاق من 0 ثانية إلى 3600 ثانية.
فترة التوقف هي المدة التي سيتم فيها إيقاف ميزة "رصد الحركة" مؤقتًا بعد تسجيل حدث حركة. خلال فترة الانتظار، لن يتم إجراء أي عمليات حسابية لرصد الحركة.
4. مثال على فلتر الحركة الأساسي
دليل Vaictl SDK
للتحقّق من vaictl
دليل بث الإدخال باستخدام فلتر الحركة، استخدِم الأمر أدناه.
vaictl send video-file applying motion-filter -h
إعداد نموذج فيديو
- يمكنك نسخ نموذج فيديو باستخدام الأمر gsutil cp التالي. استبدِل المتغيّر التالي:
- المصدر: موقع ملف الفيديو المراد استخدامه. يمكنك استخدام مصدر ملف الفيديو الخاص بك (على سبيل المثال، gs://BUCKET_NAME/FILENAME.mp4)، أو استخدام نموذج الفيديو (gs://cloud-samples-data/vertex-ai-vision/street_vehicles_people.mp4 )(فيديو يتضمّن أشخاصًا ومركبات، المصدر)
export SOURCE=gs://cloud-samples-data/vertex-ai-vision/street_vehicles_people.mp4 gsutil cp $SOURCE .
إعداد متغيّرات البيئة
اضبط المتغيّرات البيئية التالية لاستخدام نموذج الأوامر المقدَّم.
متغيّرات vaictl
- PROJECT_ID: معرّف مشروعك على Google Cloud
- LOCATION_ID: معرّف موقعك الجغرافي على سبيل المثال، us-central1. لمزيد من المعلومات، يُرجى الاطّلاع على المواقع الجغرافية في السحابة الإلكترونية.
- LOCAL_FILE: اسم ملف فيديو على الجهاز على سبيل المثال، street_vehicles_people.mp4.
- علامة –loop: اختيارية. تكرار بيانات الملفات لمحاكاة بث الوسائط
export PROJECT_ID=<Your Google Cloud project ID> export LOCATION_ID=us-central1
متغيّرات فلاتر الحركة
- MOTION_SENSITIVITY: مدى حساسية كشف الحركة.
- MIN_EVENT_LENGTH: الحد الأدنى لمدة أحداث الحركة
- LOOK_BACK_WINDOW: المدة التي يتم تسجيلها قبل أول حركة في حدث رصد حركة
- COOL_DOWN_PERIOD: الفترة التي سيتم فيها إيقاف ميزة "رصد الحركة" مؤقتًا بعد تسجيل حدث حركة
export MOTION_SENSITIVITY=<low or medium or high> export MIN_EVENT_LENGTH=<0-3600> export LOOK_BACK_WINDOW=<0-3600> export COOL_DOWN_PERIOD=<0-3600>
إعداد أمر فلتر الحركة
هناك خياران لاستخدام فلتر الحركة مع بث الإدخال. الخيار الأول هو إرسال أحداث الحركة إلى بث في وحدة تحكّم السحابة الإلكترونية. الخيار الثاني هو إرسال أحداث الحركة إلى مساحة التخزين المحلية.
إرسال النتائج إلى وحدة تحكّم السحابة الإلكترونية
يمكنك استخدام vaictl لبث بيانات فيديو المخرجات على Cloud Console. ابدأ بتفعيل واجهة برمجة التطبيقات Vision AI API في Cloud Console.
تسجيل بث جديد
- انقر على علامة التبويب "الأحداث" في اللوحة اليمنى من Vertex AI Vision.
- انقر على "تسجيل".
- في حقل "اسم مصدر البيانات"، أدخِل
motion-detection-stream
. - في المنطقة، أدخل
us-central1
- انقر على "تسجيل".
إرسال النتائج إلى البث
يبث هذا الأمر ملف فيديو إلى بث. في حال استخدام العلامة -loop، يتم تكرار عرض الفيديو في البث إلى أن توقف الأمر. سنشغِّل هذا الأمر كمهمة في الخلفية لمواصلة البث.
أضِف nohup
في البداية و&
في النهاية لجعلها وظيفة في الخلفية.
INPUT_VIDEO=street_vehicles_people.mp4 vaictl -p $PROJECT \ -l $LOCATION_ID \ -c application-cluster-0 \ --service-endpoint visionai.googleapis.com \ send video-file --file-path $INPUT_VIDEO \ applying motion-filter --motion-sensitivity=$MOTION_SENSITIVITY \ --min-event-length=$MIN_EVENT_LENGTH \ --lookback-length=$LOOK_BACK_WINDOW \ --cooldown-length=$COOL_DOWN_PERIOD \ to streams motion-detection-stream --loop
قد يستغرق الأمر 100 ثانية تقريبًا بين بدء عملية نقل البيانات باستخدام vaictl وظهور الفيديو في لوحة البيانات.
بعد توفّر ميزة نقل بيانات البث، يمكنك الاطّلاع على خلاصة الفيديو في علامة التبويب البث ضمن لوحة بيانات Vertex AI Vision من خلال اختيار بث "الزيارات".
الانتقال إلى علامة التبويب "الأحداث المباشرة"
إرسال النتائج إلى مساحة التخزين المتوفّرة على الجهاز
يبث هذا الأمر ملف فيديو إلى بث.
أضف nohup
في البداية و&
في النهاية لجعله مهمة في الخلفية.
INPUT_VIDEO=street_vehicles_people.mp4 OUTPUT_PATH=<path_to_store_motion_events_on_local_disk> nohup vaictl -p $PROJECT \ -l $LOCATION_ID \ -c application-cluster-0 \ --service-endpoint visionai.googleapis.com \ send video-file --file-path $INPUT_VIDEO \ applying motion-filter --motion-sensitivity=$MOTION_SENSITIVITY \ --min-event-length=$MIN_EVENT_LENGTH \ --lookback-length=$LOOK_BACK_WINDOW \ --cooldown-length=$COOL_DOWN_PERIOD \ to mp4file --mp4-file-path=$OUTPUT_PATH --loop
5- منطقة كشف الحركة
في هذا القسم، سنوضّح كيفية استخدام منطقة رصد الحركة وكيفية ضبطها. تم تصميم المنطقة لتحسين اكتشاف الحركة من خلال حجب الحركة القادمة من المناطق التي لا تهمّك.
تنقسم منطقة رصد الحركة إلى نوعَين: (1) المناطق الموجبة التي يتم فيها رصد الحركة في المنطقة التي تمت عليها التعليقات التوضيحية فقط، و(2) المناطق السالبة التي تتجاهل ميزة رصد الحركة أي حركة في المنطقة التي تمت عليها التعليقات التوضيحية.
التعليق التوضيحي للمنطقة
استخدِم العلامة zone_annotation
في الأمر vaictl لإدخال إحداثيات مضلّعات المناطق.سلسلة
القيمة التلقائية فارغة للتعليق التوضيحي للمنطقة.
سيكون التعليق التوضيحي للمنطقة عبارة عن سلسلة يدخلها المستخدم، وتشير إلى المناطق في الإطار التي يريد المستخدم إخفاءها أو التركيز عليها. لإضافة تعليق توضيحي على المنطقة، على المستخدم تحديد إحداثيات الصورة للإحداثيَين x وy لكل عقدة في المنطقة. يجب أن تحتوي المنطقة على ثلاث عقد أو أكثر لتشكيل مضلّع. يمكن أن تكون هناك مناطق متعدّدة في اللقطة. إذا تداخلت المنطقتان مع بعضهما البعض، فستظل المنطقة التي تغطيها كلتا المنطقتين مغطاة.
يحتوي التعليق التوضيحي للمنطقة على بنية إدخال محدّدة يجب اتّباعها.
- للإشارة إلى عقدة واحدة، استخدِم
:
لربط محورَي x وy لإحداثيات الصورة. على سبيل المثال، سيتم الإشارة إلى عقدة(0,0)
في أعلى يمين الصفحة باسم0:0
. - للإشارة إلى جميع العقد في منطقة واحدة، استخدِم
;
لربط العقد. على سبيل المثال، بالنسبة إلى منطقة تحتوي على العقد(0,0)
و(100,0)
و(100,100)
و(0, 100)
، سيتم الإشارة إلى المنطقة باسم0:0;100:0;100:100;0:100
. أدخِل العقد دائمًا كعقد ربط بجانب بعضها، ويمكن أن يكون الترتيب في اتجاه عقارب الساعة أو عكس اتجاه عقارب الساعة.
*منطقة مربّعة تتضمّن أربع عقد
*منطقة مثلثة تحتوي على ثلاث عقد
- للإشارة إلى مناطق متعدّدة في إطار واحد، استخدِم
-
لربط مناطق مختلفة. على سبيل المثال، إذا أردنا إدخال(0,0)
و(100,0)
و(100,100)
و(0,100)
و(120,120)
و(110,150)
و(200,160)
، سيكون التعليق التوضيحي لمنطقة الإدخال هو0:0;100:0;100:100;0:100-120:120;110:150;200:160
.
*منطقتان داخل إطار
للحصول على الإحداثيات من الصورة، تتوفّر بعض الأدوات على الإنترنت للمساعدة في الحصول على الإحداثيات. على سبيل المثال، راجِع Wolfram - الحصول على الإحداثيات من الصورة
استبعاد منطقة التعليق التوضيحي
يمكنك استخدام علامة exclude_annotated_zone
في أمر vaictl لضبط رصد الحركة في المنطقة أو خارجها.
منطقي الإعداد التلقائي "خطأ".
استبعاد المنطقة التي تمت عليها تعليقات توضيحية هو إدخال منطقي من المستخدم يشير إلى ما إذا كان المستخدم يريد استبعاد المنطقة التي تمت عليها تعليقات توضيحية في ميزة "رصد الحركة" أم لا.
- في حال ضبطها على
true
، ستتصرف المنطقة التي تمت عليها التعليقات التوضيحية كمنطقة سالبة. ولن يتم رصد الحركات في المناطق التي تمت عليها تعليقات توضيحية.
*لا فعِّل ميزة "رصد الحركة" إلا خارج مناطق الإدخال.
- في حال ضبطها على "خطأ"، ستتصرف المنطقة كمنطقة موجبة، حيث سيتركز رصد الحركة.
*يجب تشغيل كشف الحركة في مناطق الإدخال فقط.
6- مثال على فلتر الحركة مع منطقة كشف الحركة
في هذا المثال، سنستخدم فيديو يحتوي على شجرة تتحرك باستمرار في المقدّمة كمثال. في الإعداد العادي لفلترة الحركة، سينتج عن الفيديو حدث حركة واحد فقط يساوي مدة الفيديو الأصلي لأنّ فلتر الحركة يسجّل الشجرة المتحركة على أنّها "تتحرك باستمرار طوال الفيديو بأكمله". ومع ذلك، بمساعدة منطقة رصد الحركة، يمكننا حجب الحركة من الشجرة بشكل صحيح والتركيز على الحركة من السيارات والمشاة.
تحضير الفيديو
يحتوي نموذج الفيديو (gs://cloud-Sample-data/vertex-ai-vision/dynamic-background-fall.mp4) على شجرة وسيارات ومشاة من www.changedetection.net.
مصدر الفيديو: N. غوييه، بيير-ميشيل Jodoin, F. Porikli, J. كونراد، وP. إيشوار، changedetection.net: مجموعة بيانات جديدة لقياس الأداء في رصد التغيُّرات، في محاضرات ورشة عمل IEEE حول رصد التغيُّرات (CDW-2012) في مؤتمر CVPR-2012، بروفيدنس، رود آيلاند، في الفترة من 16 إلى 21 حزيران (يونيو). 2012
تحضير المتغيرات البيئية
متغيّرات مشروع Google Cloud
export PROJECT_ID=<Your Google Cloud project ID> export LOCATION_ID=us-central1 export LOCAL_FILE=street_vehicles_people.mp4
الإعداد الأساسي لفلتر الحركة.
export MOTION_SENSITIVITY=<low or medium or high> export MIN_EVENT_LENGTH=<0-3600> export LOOK_BACK_WINDOW=<0-3600> export COOL_DOWN_PERIOD=<0-3600>
ضبط منطقة رصد الحركة
اختَر أحد الخيارات أدناه للاطّلاع على أنواع مختلفة من استخدام منطقة رصد الحركة.
استبعد الشجرة لرصد الحركة.
export ZONE_ANNOTATION="0:0;680:0;660:70;380:320;100:150" export EXCLUDE_ANNOTATED_ZONE=true
*لا فعِّل ميزة "رصد الحركة" إلا خارج مناطق الإدخال.
تركيز كشف الحركة على الشارع.
export ZONE_ANNOTATION="0:300;780:300;780:480;0:480" export EXCLUDE_ANNOTATED_ZONE=false
*لا فعِّل ميزة "رصد الحركة" إلا خارج مناطق الإدخال.
إرسال بث فيديو باستخدام فلتر الحركة
إرسال أحداث الحركة إلى Cloud Console
يمكنك استخدام vaictl لبث بيانات فيديو المخرجات على Cloud Console. ابدأ بتفعيل واجهة برمجة التطبيقات Vision AI API في Cloud Console.
تسجيل بث جديد
- انقر على علامة التبويب "الأحداث" في اللوحة اليمنى من Vertex AI Vision.
- انقر على "تسجيل".
- في حقل "اسم مصدر البيانات"، أدخِل
motion-detection-stream
. - في المنطقة، أدخل
us-central1
- انقر على "تسجيل".
إرسال النتائج إلى البث
يبث هذا الأمر ملف فيديو إلى بث. في حال استخدام العلامة -loop، يتم تكرار عرض الفيديو في البث إلى أن توقف الأمر. سنشغِّل هذا الأمر كمهمة في الخلفية لمواصلة البث.
أضِف nohup
في البداية و&
في النهاية لجعلها وظيفة في الخلفية.
vaictl -p $PROJECT \ -l $LOCATION_ID \ -c application-cluster-0 \ --service-endpoint visionai.googleapis.com \ send video-file --file-path $INPUT_VIDEO \ applying motion-filter --motion-sensitivity=$MOTION_SENSITIVITY \ --min-event-length=$MIN_EVENT_LENGTH \ --lookback-length=$LOOK_BACK_WINDOW \ --cooldown-length=$COOL_DOWN_PERIOD \ --zone_annotation=ZONE_ANNOTATION \ --exclude_annotated_zone=$EXCLUDE_ANNOTATED_ZONE \ to streams motion-detection-stream --loop
قد يستغرق الأمر 100 ثانية تقريبًا بين بدء عملية نقل البيانات باستخدام vaictl وظهور الفيديو في لوحة البيانات.
بعد توفُّر إمكانية عرض البث، يمكنك الاطّلاع على خلاصة الفيديو في علامة التبويب أحداث البث في لوحة بيانات Vertex AI Vision من خلال اختيار بث الزيارات.
الانتقال إلى علامة التبويب "الأحداث المباشرة"
إرسال النتائج إلى مساحة التخزين المتوفّرة على الجهاز
يبث هذا الأمر ملف فيديو إلى بث. في حال استخدام العلامة -loop، يتم تكرار عرض الفيديو في البث إلى أن توقف الأمر. سننفّذ هذا الأمر كعمل في الخلفية لمواصلة البث.
أضِف nohup
في البداية و&
في النهاية لجعلها وظيفة في الخلفية.
OUTPUT_PATH=<path_to_store_motion_events> vaictl -p $PROJECT \ -l $LOCATION_ID \ -c application-cluster-0 \ --service-endpoint visionai.googleapis.com \ send video-file --file-path $INPUT_VIDEO \ applying motion-filter --motion-sensitivity=$MOTION_SENSITIVITY \ --min-event-length=$MIN_EVENT_LENGTH \ --lookback-length=$LOOK_BACK_WINDOW \ --cooldown-length=$COOL_DOWN_PERIOD \ --zone_annotation=$ZONE_ANNOTATION \ --exclude_annotated_zone=$EXCLUDE_ANNOTATED_ZONE \ to mp4file --mp4-file-path=$OUTPUT_PATH --loop
7- تهانينا
تهانينا، لقد أكملت الدرس التطبيقي.
إخلاء مساحة
لتجنُّب تحمُّل رسوم على حسابك على Google Cloud مقابل الموارد المستخدَمة في هذا الدليل التعليمي، يمكنك إنهاء عملية حزمة SDK من vaictl من خلال سطر الأوامر باستخدام ctrl
+ z
.
المراجع
https://cloud.google.com/vision-ai/docs/overview
https://cloud.google.com/vision-ai/docs/motion-filtering-model
https://cloud.google.com/vision-ai/docs/create-manage-streams
الملاحظات