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

1. الأهداف

نظرة عامة

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

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

ما ستتعلمه

  • كيفية استيعاب الفيديوهات لبثها
  • كيفية إنشاء تطبيق في Vertex AI Vision
  • الميزات المختلفة المتوفّرة في "إحصاءات الإشغال" وكيفية استخدامها
  • كيفية نشر التطبيق
  • كيفية البحث عن فيديوهات في مستودع الوسائط في Vertex AI Vision
  • كيفية إنشاء Cloud Function تعالج بيانات نموذج Occupancy Analytics
  • كيفية إنشاء موضوع واشتراك في Pub/Sub
  • كيفية إعداد إدارة الأحداث لإرسال الأحداث من خلال موضوع Pub/Sub

2. قبل البدء

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

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

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

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

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

† يجب توفّر الدور فقط إذا كنت ستنسخ ملف فيديو نموذجيًا من حزمة Cloud Storage.

3. إدخال ملف فيديو لبثه

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

ابدأ بتفعيل Vision AI API في Cloud Console

تسجيل بث جديد

  1. انقر على علامة التبويب "مصادر البث" في اللوحة اليمنى من Vertex AI Vision.
  2. انقر على "تسجيل".
  3. في "اسم مصدر البيانات" (Stream name)، أدخِل traffic-stream.
  4. في الحقل "المنطقة" (region)، أدخِل us-central1.
  5. انقر على "تسجيل".

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

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

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

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

  1. لإرسال ملف الفيديو المحلي هذا إلى دفق إدخال التطبيق، استخدِم الأمر التالي. يجب استبدال المتغيرات التالية:
  • 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
export LOCAL_FILE=street_vehicles_people.mp4
  1. يبثّ هذا الأمر ملف فيديو إلى بث. إذا استخدمت العلامة ‎–loop، سيتم تكرار الفيديو في البث إلى أن توقف الأمر. سننفّذ هذا الأمر كعملية في الخلفية لكي يستمر البث.
  • ( أضِف nohup في البداية و"&" في النهاية لجعلها مهمة تعمل في الخلفية)
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 ثانية بين بدء عملية الاستيعاب vaictl وظهور الفيديو في لوحة البيانات.

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

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

عرض فيديو مباشر يتم بثّه في واجهة المستخدمعرض مباشر للفيديو الذي يتم استيعابه في البث في Google Cloud Console مصدر الفيديو: إليزابيث مافور على Pixabay (تمت إضافة تأثير التقطيع).

4. إنشاء دالة Cloud

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

يمكنك الاطّلاع على مزيد من المعلومات عن Cloud Function هنا.

إنشاء دالة Cloud Function تستمع إلى النموذج

  1. انتقِل إلى صفحة إنشاء واجهة مستخدم Cloud Functions.
  2. اضبط اسم الدالة الذي سيتم استخدامه لاحقًا للإشارة إلى هذه الدالة السحابية في إعدادات "إدارة الأحداث".
  3. تأكَّد من أنّ المنطقة تتطابق مع طلبك.
  4. اضبط إعدادات المشغّل ثم احفظها.
  5. انقر على زر "التالي" للانتقال إلى قسم "الرمز". تعذّر تحميل مثال إنشاء Cloud Function
  6. عدِّل دالة Cloud. في ما يلي مثال على وقت التشغيل 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

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

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

إنشاء موضوع Pub/Sub

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

gcloud pubsub topics create TOPIC_ID

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

إنشاء اشتراك في Pub/Sub

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

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

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

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

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

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

في Google Cloud Console، يتم تمثيل التطبيق كرسم بياني.

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

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

أنشِئ تطبيقًا في Google Cloud Console.

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

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

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

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

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

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

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

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

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

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

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

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

3acdb6f1e8474e07.png ce63449d601995e9.png

194c54d2bbcf7e8a.png

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

  1. لإضافة عقدة وجهة الإخراج (التخزين)، اختَر خيار مستودع الوسائط في Vertex AI Vision في قسم الموصلات من القائمة الجانبية.
  2. في قائمة مستودع الوسائط في Vertex AI Vision، انقر على ربط المستودع.
  3. في قائمة ربط مستودع بيانات، اختَر إنشاء مستودع بيانات جديد. أطلِق على مستودع البيانات اسم traffic-warehouse، واترك مدة البقاء (TTL) عند 14 يومًا.
  4. انقر على الزر إنشاء لإضافة المستودع.

7. ضبط "إدارة الفعاليات"

المدة 02:00

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

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

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

تعذّر تحميل مثال على إعداد المعالجة اللاحقة

ضبط قناة الأحداث

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

تعذّر تحميل مثال لمربّع حوار &quot;إشعار الحدث&quot;

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

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

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

9- التحقّق من الأحداث/الرسائل في اشتراك Pub/Sub

بعد استيعاب بيانات الفيديو في تطبيق المعالجة، من المفترض أن تنشئ Cloud Function أحداثًا بمجرد أن يخرج نموذج إحصاءات الإشغال تعليقًا توضيحيًا. بعد ذلك، يجب نشر هذه الأحداث كرسائل من خلال موضوع Pub/Sub (النشر/الاشتراك) وتلقّيها من خلال اشتراكك.

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

  1. افتح قائمة "اشتراكات Pub/Sub" في مشروعك وابحث عن الاشتراك المناسب. الانتقال إلى صفحة قائمة اشتراكات Pub/Sub
  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

الملاحظات

انقر هنا لتقديم ملاحظات

استطلاع الرأي

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

قراءة المحتوى فقط قراءة المحتوى وإكمال التمارين

ما مدى استفادتك من هذا الدرس العملي؟

مفيدة جدًا مفيدة إلى حدٍّ ما