تطبيق Vertex AI Vision لرصد الزيارات

1. الأهداف

نظرة عامة

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

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

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

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

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- إعداد جهاز افتراضي لبث الفيديو المباشر

قبل إنشاء تطبيق في "إحصاءات الإشغال"، عليك تسجيل بث يمكن للتطبيق استخدامه لاحقًا.

في هذا البرنامج التعليمي، يمكنك إنشاء مثيل جهاز افتراضي في Compute Engine يستضيف فيديو، وإرسال بيانات بث الفيديو المباشر من الجهاز الافتراضي.

إنشاء جهاز افتراضي يعمل بنظام التشغيل Linux

إنّ الخطوة الأولى لإرسال الفيديو من مثيل جهاز افتراضي في Compute Engine هي إنشاء مثيل الجهاز الافتراضي.

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

إعداد بيئة الجهاز الافتراضي

بعد بدء تشغيل الجهاز الافتراضي، يمكنك استخدام وحدة التحكّم لإدخال بروتوكول النقل الآمن (SSH) في الجهاز الافتراضي من المتصفّح. بعد ذلك، يمكنك تنزيل أداة سطر الأوامر vaictl لنقل الفيديو إلى بثّك.

إنشاء اتصال SSH بجهازك الافتراضي

  1. في وحدة التحكّم، انتقِل إلى صفحة مثيلات VM. الانتقال إلى مثيلات الأجهزة الافتراضية
  2. في القسم Connect (اتصال) في سطر المثيل الذي أنشأته، انقر على SSH. يؤدي هذا إلى فتح اتصال SSH في نافذة متصفح جديدة. خيار SSH في واجهة المستخدم

تنزيل أداة سطر أوامر vaictl

  1. في نافذة بروتوكول النقل الآمن للملفات (SSH) في المتصفّح، نزِّل أداة سطر أوامر Vertex AI Vision (vaictl) باستخدام الأمر التالي:
wget https://github.com/google/visionai/releases/download/v0.0.4/visionai_0.0-4_amd64.deb
  1. ثبِّت أداة سطر الأوامر من خلال تشغيل الأمر التالي:
sudo apt install ./visionai_0.0-4_amd64.deb
  1. يمكنك اختبار التثبيت من خلال تنفيذ الأمر التالي:
vaictl --help

4. نقل ملف فيديو للبث

بعد إعداد بيئة الجهاز الافتراضي (VM)، يمكنك نسخ نموذج لملف فيديو ثم استخدام vaictl لبث بيانات الفيديو إلى تطبيق إحصاءات الإشغال.

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

تسجيل بث جديد

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

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

نسخ نموذج فيديو إلى جهازك الافتراضي

  1. في نافذة SSH-in-browser في جهازك الافتراضي، انسخ فيديو نموذجيًا باستخدام الأمر 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 (تمت إضافة وحدات البكسل).

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

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

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

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

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

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

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

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

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

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

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

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

  1. عقدة النقل: مورد مصدر البيانات الذي يستوعب البيانات المُرسَلة من مثيل جهاز افتراضي في Compute Engine تنشئه
  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. النقر على الزر إنشاء لإضافة المستودع

6- ربط الإخراج بجدول BigQuery

عند إضافة موصِّل BigQuery إلى تطبيق Vertex AI Vision، سيتم نقل جميع نتائج طُرز التطبيقات المرتبطة إلى الجدول المستهدَف.

يمكنك إمّا إنشاء جدول BigQuery وتحديد ذلك الجدول عند إضافة موصِّل BigQuery إلى التطبيق، أو السماح لمنصة تطبيق Vertex AI Vision بإنشاء الجدول تلقائيًا.

إنشاء الجداول تلقائيًا

في حال السماح لمنصة تطبيق Vertex AI Vision بإنشاء الجدول تلقائيًا، يمكنك تحديد هذا الخيار عند إضافة عقدة موصِّل BigQuery.

تنطبق شروط الجدول ومجموعة البيانات التالية إذا كنت تريد استخدام إنشاء الجداول تلقائيًا:

  • مجموعة البيانات: اسم مجموعة البيانات التي تم إنشاؤها تلقائيًا هو visionai_dataset.
  • الجدول: اسم الجدول الذي يتم إنشاؤه تلقائيًا هو visionai_dataset.APPLICATION_ID.
  • خطأ أثناء المعالجة:
  • في حال توفُّر جدول يحمل الاسم نفسه ضمن مجموعة البيانات نفسها، لا يتم إنشاء الجدول تلقائيًا.
  1. افتح علامة التبويب التطبيقات في لوحة بيانات Vertex AI Vision. الانتقال إلى علامة التبويب "التطبيقات"
  2. اختَر عرض التطبيق بجانب اسم تطبيقك من القائمة.
  3. في صفحة أداة إنشاء التطبيقات، اختَر BigQuery من قسم الموصلات.
  4. اترك حقل مسار BigQuery فارغًا. ee0b67d4ab2263d.png
  5. في البيانات الوصفية للمتجر من: اختَر فقط "إحصاءات الإشغال" وأزِل العلامة من المربّع بجانب ساحات المشاركات.

يُفترض أن يبدو الرسم البياني النهائي للتطبيق على النحو التالي:

1787242465fd6da7.png

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

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

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

8. البحث عن محتوى الفيديو في مستودع التخزين

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

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

e636361b19738c8d.png

طريقة عرض بيانات الفيديو المخزَّنة التي تتطابق مع معايير البحث في Google Cloud Console. من تصوير الفيديو: "إليزابيث مافور" على Pixabay (تم تطبيق معايير البحث).

9. تحليل الإخراج في جدول BigQuery

الانتقال إلى BigQuery

حدد مجموعة البيانات: visionai_dataset

اختَر الجدول: APPLICATION_ID (في هذه الحالة، تطبيق الزيارات)

انقر فوق النقاط الثلاث يمين اسم الجدول وانقر فوق "Query" (استعلام)

كتابة الاستعلام التالي

طلب البحث 1: طلب بحث للتحقّق من عدد المركبات التي تتجاوز كل خط في الدقيقة

abc.sql

—- Get list of active marked lines for each timeframe
WITH line_array AS (
  SELECT
  t.ingestion_time AS ingestion_time,
  JSON_QUERY_ARRAY(t.annotation.stats["crossingLineCounts"]) AS lines
  FROM
  `PROJ_ID.visionai_dataset.APP_ID` AS t
),
—- Flatten active lines to get individual entities details
flattened AS (
  SELECT
  line_array.ingestion_time,
  JSON_VALUE(line.annotation.id) as line_id,
  JSON_QUERY_ARRAY(line["positiveDirectionCounts"]) AS entities
  FROM line_array, unnest(line_array.lines) as line
 )
—- Generate aggregate vehicle count per zone w.r.t time 
SELECT
  STRING(TIMESTAMP_TRUNC(ingestion_time, MINUTE) ) AS time, line_id,
  SUM(INT64(entity["count"])) as vehicle_count
FROM
  flattened, UNNEST(flattened.entities) AS entity
WHERE JSON_VALUE(entity['entity']['labelString']) = 'Vehicle'
GROUP BY time, line_id

الطلب 2: طلب بحث للتحقق من عدد المركبات في الدقيقة في كل منطقة

—- Get list of active zones for each timeframe
WITH zone_array AS (
     SELECT
     t.ingestion_time AS ingestion_time,
     JSON_QUERY_ARRAY(t.annotation.stats["activeZoneCounts"]) AS zones
     FROM
     `PROJ_ID.visionai_dataset.APP_ID` AS t
),
—- Flatten active zones to get individual entities details
flattened AS (
   SELECT zone_array.ingestion_time, JSON_VALUE(zone.annotation.id) as zone_id,
         JSON_QUERY_ARRAY(zone["counts"]) AS entities
   FROM zone_array, unnest(zone_array.zones) as zone
 )
—- Generate aggregate vehicle count per zone w.r.t time 
SELECT 
STRING(TIMESTAMP_TRUNC(ingestion_time, MINUTE) ) AS time, 
zone_id,
SUM(INT64(entity["count"])) as vehicle_count
FROM flattened, UNNEST(flattened.entities) AS entity
WHERE JSON_VALUE(entity['entity']['labelString']) = 'Vehicle'
GROUP BY time, zone_id

في الاستعلامات أعلاه، يمكنك تغيير "مركبة" إلى "الشخص" لحساب عدد الأشخاص.

سيعرض هذا الدرس التطبيقي حول الترميز نموذج البيانات والتمثيل المرئي لـ Query1 فقط. يمكنك اتباع عملية مماثلة لـ Query2.

e6fd891f3a46246.png

انقر على "استكشاف البيانات" في القائمة الجانبية اليسرى واختَر "استكشاف" باستخدام Looker Studio.

9e737ddb4d0d25b6.png

في "السمة" "إضافة الوقت" وتغيير تهيئة الوقت إلى "تاريخ ووقت". في "بُعد التصنيف التفصيلي" أضف line_id. b5da9704ccd8db.png

يوضح الرسم البياني أعلاه عدد المركبات/الأشخاص الذين يعبرون كل خط في الدقيقة.

يشير الشريطان الأزرق الداكن والأزرق الفاتح إلى معرفي الخطوط المختلفين.

10. تهانينا

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

إخلاء مساحة

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

حذف المشروع

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

المراجع

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

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

الملاحظات

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

استطلاع

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

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

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

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