تطبيق Vertex AI Vision "إحصاءات حول الإشغال" مع إدارة الفعاليات

1. الأهداف

نظرة عامة

سيركّز هذا الدرس التطبيقي حول الترميز على إنشاء تطبيق Vertex AI Vision بشكل شامل لإرسال الأحداث مع ميزة إدارة الأحداث. سنستخدم النموذج المتخصص المدرَّب مسبقًا إحصاءات الإشغال". ميزات مضمّنة لإنشاء الأحداث استنادًا إلى تسجيل العناصر التالية:

  • حساب عدد المركبات والشخص الذي يعبر طريقًا عند خط معين.
  • احسب عدد المركبات/الأشخاص في أي منطقة ثابتة من الطريق.
  • اكتشاف الازدحام في أي جزء من الطريق.

المعلومات التي ستطّلع عليها

  • كيفية نقل بيانات الفيديوهات للبث
  • طريقة إنشاء تطبيق في Vertex AI Vision
  • الميزات المختلفة المتوفّرة في "إحصاءات الإشغال" وكيفية استخدامها
  • كيفية نشر التطبيق
  • كيفية البحث عن فيديوهات في مساحة التخزين في Vertex AI Vision's Media Warehouse
  • كيفية إنشاء دالة سحابية تعالج بيانات نموذج "إحصاءات الإشغال"
  • طريقة إنشاء موضوع نشر/اشتراك اشتراكك.
  • طريقة إعداد إدارة الأحداث لإرسال الأحداث من خلال موضوع النشر/الاشتراك

2. قبل البدء

  1. في "وحدة تحكُّم Google Cloud"، وفي صفحة أداة اختيار المشاريع، اختَر أو أنشئ مشروعًا على Google Cloud. ملاحظة: إذا كنت لا تخطط للاحتفاظ بالموارد التي تنشئها في هذا الإجراء، يمكنك إنشاء مشروع بدلاً من اختيار مشروع حالي. بعد الانتهاء من هذه الخطوات، يمكنك حذف المشروع وإزالة جميع الموارد المرتبطة به. الانتقال إلى أداة اختيار المشروع
  2. تأكَّد من تفعيل الفوترة لمشروعك على السحابة الإلكترونية. تعرَّف على كيفية التحقّق مما إذا كانت الفوترة مفعَّلة في مشروع.
  3. تفعيل واجهتَي Compute Engine وVision AI تفعيل واجهات برمجة التطبيقات

إنشاء حساب خدمة:

  1. في وحدة تحكُّم Google Cloud، انتقِل إلى صفحة إنشاء حساب خدمة. الانتقال إلى "إنشاء حساب خدمة"
  2. اختَر مشروعك.
  3. في حقل اسم حساب الخدمة، أدخِل اسمًا. تملأ وحدة التحكّم في Google Cloud حقل رقم تعريف حساب الخدمة بناءً على هذا الاسم. في حقل وصف حساب الخدمة، أدخِل وصفًا. على سبيل المثال، حساب الخدمة للبدء السريع.
  4. انقر على إنشاء ومتابعة.
  5. لمنح الإذن بالوصول إلى مشروعك، عليك منح الأدوار التالية لحساب الخدمة: Vision AI > Vision AI Editor, Compute Engine > Compute Instance Admin (الإصدار التجريبي)، مساحة التخزين > عارض عناصر التخزين † . في قائمة اختيار دور، اختَر دورًا. للحصول على أدوار إضافية، انقر على إضافة دور آخر وأضِف كل دور إضافي. ملاحظة: يؤثر حقل الدور في الموارد التي يمكن لحساب الخدمة الوصول إليها في مشروعك. يمكنك إبطال هذه الأدوار أو منح أدوار إضافية لاحقًا. في بيئات الإنتاج، لا تمنح أدوار "المالك" أو "المحرِّر" أو "المُشاهد". يمكنك بدلاً من ذلك منح دور محدّد مسبقًا أو دور مخصّص يلبي احتياجاتك.
  6. انقر على متابعة.
  7. انقر على تمّ للانتهاء من إنشاء حساب الخدمة. لا تغلِق نافذة المتصفّح. ستستخدمه في الخطوة التالية.

إنشاء مفتاح حساب خدمة:

  1. في وحدة تحكُّم Google Cloud، انقر على عنوان البريد الإلكتروني لحساب الخدمة الذي أنشأته.
  2. انقر على المفاتيح.
  3. انقر على إضافة مفتاح، ثم انقر على إنشاء مفتاح جديد.
  4. انقر على إنشاء. يتم تنزيل ملف مفتاح JSON على جهاز الكمبيوتر.
  5. انقر على إغلاق.
  6. تثبيت وإعداد واجهة سطر الأوامر في Google Cloud

† الدور المطلوب فقط في حال نسخ نموذج فيديو من حزمة على Cloud Storage.

3- نقل ملف فيديو للبث

يمكنك استخدام vaictl لبث بيانات الفيديو إلى تطبيق إحصاءات الإشغال.

البدء من خلال تفعيل Vision AI API في Cloud Console

تسجيل بث جديد

  1. انقر على علامة تبويب "البث" في اللوحة اليمنى من Vertex AI Vision.
  2. انقر على "تسجيل".
  3. في اسم مصدر البيانات، أدخل "مصدر الزيارات"
  4. في المنطقة، أدخل 'us-central1'
  5. انقر على "التسجيل"

سيستغرق التسجيل في البث بضع دقائق.

إعداد فيديو نموذجي

  1. يمكنك نسخ نموذج فيديو باستخدام الأمر 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 .

نقل البيانات إلى مصدر بياناتك

  1. لإرسال ملف الفيديو المحلي هذا إلى بث إدخال التطبيق، استخدِم الأمر التالي. يجب عليك إجراء البدائل المتغيرة التالية:
  • 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
export LOCAL_FILE=street_vehicles_people.mp4
  1. يعمل هذا الأمر على بث ملف فيديو إلى مجموعة بث. في حال استخدام علامة –loop، يتم تكرار الفيديو في البث المباشر إلى أن توقف الأمر. سنشغِّل هذا الأمر كمهمة في الخلفية لمواصلة البث.
  • ( أضف أي شيء في البداية و"&" في النهاية لجعله وظيفة في الخلفية)
nohup vaictl -p $PROJECT_ID \
    -l $LOCATION_ID \
    -c application-cluster-0 \
    --service-endpoint visionai.googleapis.com \
send video-file to streams 'traffic-stream' --file-path $LOCAL_FILE --loop &

قد يستغرق الأمر حوالي 100 ثانية بين بدء عملية نقل البيانات وظهور الفيديو في لوحة البيانات.

بعد توفُّر إمكانية عرض البث، يمكنك الاطّلاع على خلاصة الفيديو في علامة التبويب أحداث البث في لوحة بيانات Vertex AI Vision من خلال اختيار بث الزيارات.

الانتقال إلى علامة التبويب "ساحات المشاركات"

عرض الفيديو المباشر الذي يتم بثه في واجهة المستخدمالعرض المباشر للفيديو الذي يتم نقله إلى البث المباشر في وحدة تحكُّم Google Cloud. مصدر الفيديو: Elizabeth Mavor على Pixabay (تمت إضافة وحدات البكسل).

4. إنشاء دالة سحابية

سنحتاج إلى دالة السحابة لاستيعاب بيانات النموذج إنشاء أحداث سيتم إرسالها لاحقًا عبر قناة الحدث.

يمكنك معرفة المزيد من المعلومات عن دالة Cloud هنا

إنشاء وظيفة السحابة الإلكترونية التي تستمع إلى النموذج الخاص بك

  1. انتقِل إلى صفحة إنشاء واجهة مستخدم Cloud Function.
  2. حدِّد اسم الدالة الذي سيتم استخدامه لاحقًا للإشارة إلى دالة السحابة الإلكترونية هذه في إعدادات "إدارة الأحداث".
  3. يُرجى التأكّد من تطابق المنطقة مع طلبك.
  4. اضبط إعدادات المشغّل ثم احفظها.
  5. انقر فوق الزر التالي للانتقال إلى "التعليمات البرمجية" الجزء. تعذَّر تحميل مثال على إنشاء دالة Cloud.
  6. عدِّل دالة السحابة الإلكترونية. في ما يلي مثال على وقت تشغيل Node.js.
/**
* Responds to any HTTP request.
*
* @param {!express:Request} req HTTP request context.
* @param {!express:Response} res HTTP response context.
*/
exports.hello_http = (req, res) => {
 // Logging statement can be read with cmd `gcloud functions logs read {$functionName}`.
 // For more about logging, please see https://cloud.google.com/functions/docs/monitoring

 // The processor output will be stored in req.body.
 const messageString = constructMessage(req.body);

 // Send your message to operator output with res HTTP response context.
 res.status(200).send(messageString);
};

function constructMessage(data) {
 /**
  * Typically, your processor output should contains appPlatformMetadata & it's designed output.
  * For example here, if your output is of tyoe OccupancyCountingPredictionResult, you will need
  * to construct the return annotation as such. 
  */

 // access appPlatformMetat.
 const appPlatformMetadata = data.appPlatformMetadata;

 // access annotations.
 const annotations = data.annotations.map(annotation => {
  // This is a mock OccupancyCountingPredictionResult annotation.
  return {"annotation" : {"track_info": {"track_id": "12345"}}};
 });

 const events = [];
 for(const annotation of annotations) {
   events.push({
       "event_message": "Detection event",
       "payload" : {
         "description" : "object detected"
       },
       "event_id" : "track_id_12345"
     });
 }

  /**
   * Typically, your cloud function should return a string represent a JSON which has two fields:
   * "annotations" must follow the specification of the target model.
   * "events" should be of type "AppPlatformEventBody".
   */
 const messageJson = {
   "annotations": annotations,
   "events": events,
 };
 return JSON.stringify(messageJson);
}
  1. انقر على "نشر" زر نشر الدالة.

5- إنشاء موضوع نشر/اشتراك اشتراك

سنحتاج إلى تقديم موضوع النشر/الاشتراك إلى التطبيق الذي يمكن إرسال الحدث إليه. لتلقّي الفعاليات، يجب الاشتراك في خدمة "النشر/الاشتراكات" في خدمة بصرية تم إعدادها.

يمكنك الاطّلاع على المزيد من المعلومات حول موضوع النشر/الاشتراك هنا والاشتراك هنا.

إنشاء موضوع نشر/اشتراك

لإنشاء موضوع Pub/Sub، يمكنك استخدام gcloud CLI: (يجب استبدال SUBSCRIPTION_ID بالقيمة الحقيقية من الإعداد)

gcloud pubsub topics create TOPIC_ID

بدلاً من ذلك، يمكنك استخدام واجهة مستخدم النشر/الاشتراك.

إنشاء اشتراك في خدمة النشر/الاشتراك

لإنشاء اشتراك في خدمة Pub/Sub، يمكنك استخدام gcloud CLI: (يجب استبدال SUBSCRIPTION_ID وTOPIC_ID بالقيمة الحقيقية من خلال عملية الإعداد)

gcloud pubsub subscriptions create SUBSCRIPTION_ID \
    --topic=TOPIC_ID \

بدلاً من ذلك، يمكنك استخدام واجهة مستخدم النشر/الاشتراك.

6- إنشاء تطبيق

الخطوة الأولى هي إنشاء تطبيق يعالج بياناتك. يمكن اعتبار التطبيق مسارًا آليًا يربط ما يلي:

  • نقل البيانات: يتم نقل خلاصة فيديو إلى بث.
  • تحليل البيانات: يمكن إضافة نموذج الذكاء الاصطناعي (AI) (رؤية الكمبيوتر) بعد عملية النقل.
  • تخزين البيانات: يمكن تخزين نسختَين من خلاصة الفيديو (البث الأصلي والبث الذي تمت معالجته بواسطة نموذج الذكاء الاصطناعي) في مستودع وسائط.

يتم تمثيل التطبيق في وحدة تحكُّم Google Cloud في شكل رسم بياني.

إنشاء تطبيق فارغ

قبل أن تتمكن من تعبئة الرسم البياني للتطبيق، يجب أولاً إنشاء تطبيق فارغ.

أنشئ تطبيقًا في وحدة تحكُّم Google Cloud.

  1. انتقِل إلى وحدة التحكم في Google Cloud.
  2. افتح علامة التبويب التطبيقات في لوحة بيانات Vertex AI Vision.

الانتقال إلى علامة التبويب "التطبيقات"

  1. انقر على الزر إضافة إنشاء.
  2. أدخِل تطبيق "حركة المرور" كاسم للتطبيق واختَر منطقتك.
  3. انقر على إنشاء.

إضافة عُقد لمكوِّنات التطبيق

بعد إنشاء التطبيق الفارغ، يمكنك إضافة العُقد الثلاثة إلى الرسم البياني للتطبيق:

  1. عقدة النقل: مورد مصدر البيانات الذي يستوعب البيانات.
  2. عقدة المعالجة: نموذج إحصاءات الإشغال الذي يعمل على البيانات التي تم نقلها.
  3. عقدة التخزين: مستودع الوسائط الذي يخزِّن الفيديوهات التي تمّت معالجتها ويعمل كمخزن للبيانات الوصفية. تتضمّن عمليات تخزين البيانات الوصفية معلومات إحصائية حول بيانات الفيديو التي تم نقلها ومعلومات استنتاجها من خلال نماذج الذكاء الاصطناعي.

أضف عُقدًا مكونات إلى تطبيقك في وحدة التحكم.

  1. افتح علامة التبويب التطبيقات في لوحة بيانات Vertex AI Vision. الانتقال إلى علامة التبويب "التطبيقات"
  2. في خط زيارات التطبيق، اختَر عرض الرسم البياني. وسينقلك هذا إلى الرسم البياني لمسار المعالجة.

إضافة عقدة نقل بيانات

  1. لإضافة عقدة مصدر إدخال، حدِّد الخيار ساحات المشاركات في قسم الموصلات في القائمة الجانبية.
  2. في القسم المصدر ضمن قائمة بث التي تفتح، اختَر إضافة أحداث بث.
  3. في القائمة إضافة مصادر بيانات، انقر على تسجيل ساحات مشاركات جديدة وأضِف اسم بث مباشر كاسم للبث.
  4. لإضافة ساحة المشاركات إلى الرسم البياني للتطبيق، انقر على إضافة ساحات مشاركات.

إضافة عقدة معالجة بيانات

  1. لإضافة عقدة نموذج عدد الإشغال، حدِّد خيار إحصاءات الإشغال في قسم النماذج المتخصصة من القائمة الجانبية.
  2. اترك الخيارين التلقائيين الأشخاص والمركبات.
  3. إضافة خطوط في نقطة معبر الخط. استخدِم أداة الخطوط المتعددة النقاط لرسم الخطوط التي تحتاج إلى رصد السيارات أو الأشخاص الذين يغادرون أو يدخلون.
  4. ارسم المناطق النشطة لحساب الأشخاص/المركبات في تلك المنطقة.
  5. أضف إعدادات مدة الثبات لاكتشاف الازدحام في حال رسم منطقة نشطة.
  • (لا يمكن حاليًا استخدام كل من المنطقة النشطة حاليًا وموضع خطوط الطول للعرض في الوقت نفسه. استخدام ميزة واحدة فقط في كل مرة).

3acdb6f1e8474e07.png ce63449d601995e9.png

194c54d2bbcf7e8a.png

إضافة عقدة لتخزين البيانات

  1. لإضافة عقدة وجهة الناتج (التخزين)، حدِّد الخيار Vertex AI Vision's Media Warehouse في قسم الموصِّلات في القائمة الجانبية.
  2. في قائمة مستودع وسائط Vertex AI Vision's، انقر على ربط المستودع.
  3. في القائمة ربط المستودع، انقر على إنشاء مستودع جديد. قم بتسمية مستودع حركة مرور المستودع، واترك مدة TTL لمدة 14 يومًا.
  4. النقر على الزر إنشاء لإضافة المستودع

7. ضبط إدارة الأحداث

المدة 02:00

سنربط النموذج بوظيفة السحابة الإلكترونية التي تم إنشاؤها سابقًا للمعالجة اللاحقة، حيث يمكن لدالة السحابة الإلكترونية استيعاب مخرجات النموذج وإنشاء الأحداث التي تناسب احتياجاتك بدون قيود. بعد ذلك، سنضبط قناة الحدث من خلال ضبط موضوع النشر/الاشتراك الذي تم إنشاؤه مسبقًا ليكون الهدف الذي سنهدفه. بإمكانك أيضًا ضبط فاصل زمني أدنى، ما يساعد في تجنُّب تعرُّض قناة الحدث نفسها للفعالية نفسها في فترة زمنية قصيرة.

اختيار Cloud Function لإجراء المعالجة اللاحقة

  1. انقر على عقدة معالجة البيانات(إحصاءات الإشغال) على الرسم البياني للتطبيق لفتح القائمة الجانبية.
  2. اختَر "دالة Cloud" (التي يتم تحديدها من خلال اسم الدالة) في القائمة المنسدلة "ما بعد المعالجة".
  3. سيحفظ الرسم البياني للتطبيق التغييرات تلقائيًا.

تعذَّر تحميل مثال عن إعداد ما بعد المعالجة.

إعداد قناة الحدث

  1. انقر على عقدة معالجة البيانات(إحصاءات الإشغال) على الرسم البياني للتطبيق لفتح القائمة الجانبية.
  2. انقر على "إعداد إشعار الحدث" في قسم "إشعارات الأحداث". تعذَّر تحميل مثال على إشعار الحدث.
  3. اختَر موضوع النشر/الاشتراك في القائمة المنسدلة.
  4. (اختياري) اضبط الفاصل الزمني/التكرار الأدنى لنشر الحدث.

تعذَّر تحميل مثال على مربّع حوار إشعار الحدث.

8. نشر تطبيقك للاستخدام

بعد إنشاء تطبيقك الشامل الذي يضم جميع المكونات اللازمة، فإن الخطوة الأخيرة لاستخدام التطبيق هي نشره.

  1. افتح علامة التبويب التطبيقات في لوحة بيانات Vertex AI Vision. الانتقال إلى علامة التبويب "التطبيقات"
  2. اختَر عرض الرسم البياني بجانب تطبيق الزيارات في القائمة.
  3. من صفحة أداة إنشاء الرسم البياني للتطبيق، انقر على الزرّ نشر.
  4. في مربّع حوار التأكيد التالي، اختَر نشر. قد يستغرق اكتمال عملية النشر عدة دقائق. بعد انتهاء النشر، تظهر علامات اختيار خضراء بجانب العُقد. ee78bbf00e5db898.png

9. إثبات ملكية الأحداث/الرسائل في اشتراك النشر/الاشتراك

بعد نقل بيانات الفيديو إلى تطبيق المعالجة، من المفترض أن تنشئ دالة السحابة الإلكترونية أحداثًا بعد أن يُخرج نموذج إحصاءات الإشغال التعليق التوضيحي. بعد ذلك، يجب نشر هذه الأحداث كرسائل من خلال موضوع النشر/الاشتراك. التي تلقاها اشتراكك.

تفترض الخطوات التالية أن لديك اشتراك سحب.

  1. افتح قائمة "اشتراك النشر/الاشتراك" في مشروعك. للعثور على الاشتراك المناسب الانتقال إلى صفحة قائمة الاشتراكات في خدمة النشر/الاشتراك
  2. الانتقال إلى "رسالة" .
  3. انقر على "سحب" .
  4. اطّلِع على رسالتك في الجدول. حدث خطأ أثناء تحميل صورة رسالة اشتراك pub/sub

يمكنك بدلاً من ذلك التعرّف على كيفية تلقّي الرسائل بدون واجهة المستخدم. الانتقال إلى صفحة الاشتراك

10. تهانينا

تهانينا، لقد أنهيت التمرين المعملي.

إخلاء مساحة

لتجنُّب تحمُّل الرسوم المفروضة على حسابك على Google Cloud مقابل الموارد المُستخدَمة في هذا الدليل التوجيهي، يمكنك إما حذف المشروع الذي يحتوي على الموارد أو الاحتفاظ بالمشروع وحذف الموارد الفردية.

حذف المشروع

حذف موارد فردية

المراجع

https://cloud.google.com/vision-ai/docs/overview

https://cloud.google.com/vision-ai/docs/occupancy-count-tutorial

الملاحظات

يُرجى النقر هنا لتقديم ملاحظات.

استطلاع

كيف ستستخدم هذا البرنامج التعليمي؟

القراءة فقط اقرأها وأكمِل التمارين

ما مدى فائدة هذا الدرس التطبيقي حول الترميز؟

مفيدة جدًا مفيد نوعًا ما