لمحة عن هذا الدرس التطبيقي حول الترميز
1. الأهداف
نظرة عامة
يركّز هذا الدرس التطبيقي حول الترميز على إنشاء تطبيق Vertex AI Vision الشامل لتوضيح إرسال الفيديوهات باستخدام ميزة فلترة الحركة. في هذا البرنامج التعليمي، سنستعرض المعلمات المختلفة في تهيئة فلتر الحركة:
- حساسية كشف الحركة
- الحد الأدنى لمدة الحدث
- فترة معاينة الإعلان
- وقت الاستراحة
- منطقة كشف الحركة
المعلومات التي ستطّلع عليها
- كيفية نقل بيانات الفيديوهات للبث
- الميزات المختلفة المتوفّرة في "فلتر الحركة" وكيفية استخدامها
- مكان الاطّلاع على إحصاءات فلتر الحركة
- كيفية ضبط الإعدادات استنادًا إلى الفيديو
2. قبل البدء
- في "وحدة تحكُّم Google Cloud"، وفي صفحة أداة اختيار المشاريع، اختَر أو أنشئ مشروعًا على Google Cloud. ملاحظة: إذا كنت لا تخطط للاحتفاظ بالموارد التي تنشئها في هذا الإجراء، يمكنك إنشاء مشروع بدلاً من اختيار مشروع حالي. بعد الانتهاء من هذه الخطوات، يمكنك حذف المشروع وإزالة جميع الموارد المرتبطة به. الانتقال إلى أداة اختيار المشروع
- تأكَّد من تفعيل الفوترة لمشروعك على السحابة الإلكترونية. تعرَّف على كيفية التحقّق مما إذا كانت الفوترة مفعَّلة في مشروع.
- تفعيل واجهتَي Compute Engine وVision AI تفعيل واجهات برمجة التطبيقات
إنشاء حساب خدمة:
- في وحدة تحكُّم Google Cloud، انتقِل إلى صفحة إنشاء حساب خدمة. الانتقال إلى "إنشاء حساب خدمة"
- اختَر مشروعك.
- في حقل اسم حساب الخدمة، أدخِل اسمًا. تملأ وحدة التحكّم في Google Cloud حقل رقم تعريف حساب الخدمة بناءً على هذا الاسم. في حقل وصف حساب الخدمة، أدخِل وصفًا. على سبيل المثال، حساب الخدمة للبدء السريع.
- انقر على إنشاء ومتابعة.
- لمنح الإذن بالوصول إلى مشروعك، عليك منح الأدوار التالية لحساب الخدمة: Vision AI > Vision AI Editor, Compute Engine > Compute Instance Admin (الإصدار التجريبي)، مساحة التخزين > عارض عناصر التخزين † . في قائمة اختيار دور، اختَر دورًا. للحصول على أدوار إضافية، انقر على إضافة دور آخر وأضِف كل دور إضافي. ملاحظة: يؤثر حقل الدور في الموارد التي يمكن لحساب الخدمة الوصول إليها في مشروعك. يمكنك إبطال هذه الأدوار أو منح أدوار إضافية لاحقًا. في بيئات الإنتاج، لا تمنح أدوار "المالك" أو "المحرِّر" أو "المُشاهد". يمكنك بدلاً من ذلك منح دور محدّد مسبقًا أو دور مخصّص يلبي احتياجاتك.
- انقر على متابعة.
- انقر على تمّ للانتهاء من إنشاء حساب الخدمة. لا تغلِق نافذة المتصفّح. ستستخدمه في الخطوة التالية.
إنشاء مفتاح حساب خدمة:
- في وحدة تحكُّم Google Cloud، انقر على عنوان البريد الإلكتروني لحساب الخدمة الذي أنشأته.
- انقر على المفاتيح.
- انقر على إضافة مفتاح، ثم انقر على إنشاء مفتاح جديد.
- انقر على إنشاء. يتم تنزيل ملف مفتاح JSON على جهاز الكمبيوتر.
- انقر على إغلاق.
- تثبيت وإعداد واجهة سطر الأوامر في Google Cloud
† الدور المطلوب فقط في حال نسخ نموذج فيديو من حزمة على 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- sample-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 tag: اختياري. تكرار بيانات الملف لمحاكاة التدفق
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>
إعداد أمر فلتر الحركة
هناك خياران لاستخدام فلتر الحركة مع تدفق الإدخال. الخيار الأول هو إرسال أحداث الحركة إلى ساحة مشاركات في Cloud Console. الخيار الثاني هو إرسال أحداث الحركة إلى مساحة التخزين المحلية.
إرسال النتائج إلى Cloud Console
يمكنك استخدام 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 ثانية بين بدء عملية نقل البيانات وظهور الفيديو في لوحة البيانات.
بعد توفُّر إمكانية عرض البث، يمكنك الاطّلاع على خلاصة الفيديو في علامة التبويب أحداث البث في لوحة بيانات 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-عيّنات-data/vertex-ai-vision/dynamic-background-fall.mp4) على شجرة وسيارات ومشاة من www.changedetection.net.
ملكية الفيديو: ن. Goyette، P.-M. Jodoin, F. Porikli, J. كونراد وبي. Ishwar ، changedetection.net: مجموعة بيانات جديدة لقياس أداء رصد التغيير، في Proc. ورشة عمل 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 ثانية بين بدء عملية نقل البيانات وظهور الفيديو في لوحة البيانات.
بعد توفُّر إمكانية عرض البث، يمكنك الاطّلاع على خلاصة الفيديو في علامة التبويب أحداث البث في لوحة بيانات 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 مقابل الموارد المُستخدَمة في هذا الدليل التوجيهي، يمكنك إنهاء عملية حزمة vaictl SDK من خلال سطر الأوامر باستخدام 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
الملاحظات
يُرجى النقر هنا لتقديم ملاحظات.