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

1. الأهداف

نظرة عامة

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

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

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

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

2. قبل البدء

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

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

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

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

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

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

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

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

ابدأ بتفعيل واجهة برمجة التطبيقات Vision AI API في Cloud Console.

تسجيل بث جديد

  1. انقر على علامة تبويب "البث" في اللوحة اليمنى من Vertex AI Vision.
  2. انقر على "تسجيل".
  3. في اسم مصدر البيانات، أدخل "مصدر الزيارات"
  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 ثانية بين بدء عملية نقل البيانات وظهور الفيديو في لوحة البيانات.

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

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

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

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

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

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

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

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

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

يمكنك الاطّلاع على مزيد من المعلومات حول موضوع 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- إنشاء طلب

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

  • نقل البيانات: يتم نقل خلاصة فيديو إلى مصدر بيانات.
  • تحليل البيانات: يمكن إضافة نموذج الذكاء الاصطناعي (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 في قسم الموصّلات في القائمة الجانبية.
  2. في قائمة مستودع وسائط Vertex AI Vision's، انقر على ربط المستودع.
  3. في قائمة ربط المستودع، اختَر إنشاء مستودع جديد. قم بتسمية مستودع حركة مرور المستودع، واترك مدة TTL لمدة 14 يومًا.
  4. انقر على الزر إنشاء لإضافة المستودع.

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

المدة 02:00

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

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

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

تعذّر تحميل مثال على ضبط المعالجة اللاحقة

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

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

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

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

الملاحظات

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

استطلاع

كيف ستستخدم هذا الدليل التعليمي؟

قراءته فقط قراءته وإكمال التمارين

ما مدى فائدة هذا الدليل التعليمي حول الرموز البرمجية؟

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