1. الأهداف
نظرة عامة
ستركّز تجربة البرمجة هذه على إنشاء تطبيق Vertex AI Vision متكامل لمراقبة لقطات فيديو لحركة المرور في الوقت الفعلي. سنستخدم الميزات المضمّنة في نموذج تحليلات الإشغال المتخصّص المُدرَّب مسبقًا لتسجيل ما يلي:
- حساب عدد المركبات والأشخاص الذين يعبرون طريقًا عند خط معيّن
- احتساب عدد المركبات أو الأشخاص في أي منطقة ثابتة من الطريق
- رصد الازدحام في أي جزء من الطريق
ما ستتعلمه
- كيفية إعداد جهاز افتراضي لاستيعاب الفيديوهات لبثها
- كيفية إنشاء تطبيق في Vertex AI Vision
- الميزات المختلفة المتوفّرة في "إحصاءات الإشغال" وكيفية استخدامها
- كيفية نشر التطبيق
- كيفية البحث عن فيديوهات في مستودع الوسائط في Vertex AI Vision
- كيفية ربط الناتج بأداة BigQuery وكتابة طلب SQL لاستخراج الإحصاءات من ناتج json الخاص بالنموذج وعرض النتيجة في Looker Studio في الوقت الفعلي
2. قبل البدء
- في وحدة تحكّم Google Cloud، في صفحة اختيار المشروع، اختَر مشروع Google Cloud أو أنشِئ مشروعًا. ملاحظة: إذا كنت لا تخطّط للاحتفاظ بالموارد التي تنشئها في هذا الإجراء، أنشئ مشروعًا بدلاً من اختيار مشروع حالي. بعد الانتهاء من هذه الخطوات، يمكنك حذف المشروع وإزالة جميع الموارد المرتبطة به. الانتقال إلى أداة اختيار المشاريع
- تأكَّد من تفعيل الفوترة لمشروعك على Cloud. تعرَّف على كيفية التحقّق مما إذا كانت الفوترة مفعَّلة في مشروع.
- فعِّل واجهتَي برمجة التطبيقات Compute Engine API وVision AI API. تفعيل واجهات برمجة التطبيقات
إنشاء حساب خدمة:
- في Google Cloud Console، انتقِل إلى صفحة إنشاء حساب خدمة. الانتقال إلى "إنشاء حساب خدمة"
- اختَر مشروعك.
- في حقل اسم حساب الخدمة، أدخِل اسمًا. تعبئ وحدة تحكّم Google Cloud الحقل معرّف حساب الخدمة استنادًا إلى هذا الاسم. في حقل وصف حساب الخدمة، أدخِل وصفًا. على سبيل المثال، حساب خدمة للبدء السريع.
- انقر على إنشاء ومتابعة.
- لمنح إذن الوصول إلى مشروعك، امنح حساب الخدمة الأدوار التالية: Vision AI > Vision AI Editor وCompute Engine > Compute Instance Admin (إصدار تجريبي) وStorage > Storage Object Viewer † . في قائمة اختيار دور، اختَر دورًا. لإضافة أدوار أخرى، انقر على إضافة دور آخر وأضِف كل دور إضافي. ملاحظة: يؤثّر حقل الدور في الموارد التي يمكن لحساب الخدمة الوصول إليها في مشروعك. يمكنك إبطال هذه الأدوار أو منح أدوار إضافية في وقت لاحق. في بيئات الإنتاج، لا تمنح أدوار "المالك" أو "المحرّر" أو "المشاهد". بدلاً من ذلك، يمكنك منح دور محدّد مسبقًا أو دور مخصّص يلبي احتياجاتك.
- انقر على متابعة.
- انقر على تم للانتهاء من إنشاء حساب الخدمة. لا تغلق نافذة المتصفح. ستستخدمه في الخطوة التالية.
إنشاء مفتاح حساب خدمة:
- في Google Cloud Console، انقر على عنوان البريد الإلكتروني لحساب الخدمة الذي أنشأته.
- انقر على المفاتيح.
- انقر على إضافة مفتاح، ثمّ انقر على إنشاء مفتاح جديد.
- انقر على إنشاء. يتم تنزيل ملف مفتاح JSON على جهاز الكمبيوتر.
- انقر على إغلاق (Close).
- ثبِّت وفعِّل واجهة سطر الأوامر (CLI) في Google Cloud.
† يجب توفّر الدور فقط إذا كنت ستنسخ ملف فيديو نموذجيًا من حزمة Cloud Storage.
3. إعداد جهاز افتراضي (VM) لبث الفيديو المباشر
قبل إنشاء تطبيق في "إحصاءات الإشغال"، يجب تسجيل مصدر بيانات يمكن للتطبيق استخدامه لاحقًا.
في هذا الدليل التوجيهي، ستنشئ مثيلاً لجهاز Compute Engine الظاهري يستضيف بث فيديو مباشر، وسترسل بيانات بث الفيديو المباشر من الجهاز الظاهري.
إنشاء جهاز Linux افتراضي (VM)
تتمثّل الخطوة الأولى في إرسال الفيديو من مثيل جهاز Compute Engine الافتراضي في إنشاء مثيل الجهاز الافتراضي.
- في وحدة التحكّم، انتقِل إلى صفحة مثيلات الجهاز الافتراضي. الانتقال إلى "الأجهزة الافتراضية"
- اختَر مشروعك وانقر على متابعة.
- انقر على إنشاء مثيل.
- حدِّد اسمًا لجهازك الظاهري. لمزيد من المعلومات، يُرجى الاطّلاع على اصطلاح تسمية الموارد.
- اختياري: غيِّر المنطقة لهذه الآلة الافتراضية. تُرتّب خدمة Compute Engine قائمة المناطق عشوائيًا ضمن كل منطقة لتشجيع الاستخدام في مناطق متعددة.
- اقبل الخيارات التلقائية المتبقية. لمزيد من المعلومات حول هذه الخيارات، يُرجى الاطّلاع على إنشاء آلة افتراضية وبدء تشغيلها.
- لإنشاء الجهاز الافتراضي وبدء تشغيله، انقر على إنشاء.
إعداد بيئة الجهاز الافتراضي
بعد بدء تشغيل الجهاز الافتراضي، يمكنك استخدام وحدة التحكّم لتنفيذ عملية SSH في الجهاز الافتراضي من المتصفّح. بعد ذلك، يمكنك تنزيل أداة سطر الأوامر vaictl لنقل الفيديو إلى البث.
إنشاء اتصال SSH بالجهاز الافتراضي
- في وحدة التحكّم، انتقِل إلى صفحة مثيلات الجهاز الافتراضي. الانتقال إلى "الأجهزة الافتراضية"
- في قسم ربط (Connect) في سطر الجهاز الافتراضي الذي أنشأته، انقر على SSH. يؤدي ذلك إلى فتح اتصال SSH في نافذة متصفّح جديدة.

تنزيل أداة سطر الأوامر vaictl
- في نافذة SSH في المتصفّح، نزِّل أداة سطر الأوامر Vertex AI Vision (vaictl) باستخدام الأمر التالي:
wget https://github.com/google/visionai/releases/download/v0.0.4/visionai_0.0-4_amd64.deb
- ثبِّت أداة سطر الأوامر من خلال تنفيذ الأمر التالي:
sudo apt install ./visionai_0.0-4_amd64.deb
- يمكنك اختبار عملية التثبيت من خلال تنفيذ الأمر التالي:
vaictl --help
4. إدخال ملف فيديو لبثه
بعد إعداد بيئة الجهاز الافتراضي، يمكنك نسخ ملف فيديو نموذجي ثم استخدام vaictl لبث بيانات الفيديو إلى تطبيق إحصاءات الإشغال.
ابدأ بتفعيل Vision AI API في Cloud Console
تسجيل بث جديد
- انقر على علامة التبويب "مصادر البث" في اللوحة اليمنى من Vertex AI Vision.
- انقر على "تسجيل".
- في "اسم مصدر البيانات" (Stream name)، أدخِل traffic-stream.
- في حقل المنطقة، أدخِل us-central1.
- انقر على "تسجيل".
سيستغرق تسجيل البث بضع دقائق.
نسخ فيديو نموذجي إلى جهازك الافتراضي
- في نافذة بروتوكول النقل الآمن (SSH) في المتصفّح الخاصة بجهازك الافتراضي (VM)، انسخ فيديو نموذجيًا باستخدام الأمر 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 .
بثّ الفيديو من الجهاز الافتراضي واستيعاب البيانات في البث
- لإرسال ملف الفيديو المحلي هذا إلى دفق إدخال التطبيق، استخدِم الأمر التالي. يجب استبدال المتغيرات التالية:
- 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
- يبثّ هذا الأمر ملف فيديو إلى بث. إذا استخدمت العلامة –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 (تمت إضافة تأثير التقطيع).
5. إنشاء تطبيق
الخطوة الأولى هي إنشاء تطبيق يعالج بياناتك. يمكن اعتبار التطبيق مسارًا آليًا يربط بين ما يلي:
- نقل البيانات: يتم نقل خلاصة فيديو إلى مصدر بيانات.
- تحليل البيانات: يمكن إضافة نموذج الذكاء الاصطناعي(الرؤية الحاسوبية) بعد عملية الاستيعاب.
- تخزين البيانات: يمكن تخزين النسختَين من خلاصة الفيديو (البث الأصلي والبث الذي يعالجه نموذج الذكاء الاصطناعي) في مستودع وسائط.
في Google Cloud Console، يتم تمثيل التطبيق كرسم بياني.
إنشاء تطبيق فارغ
قبل أن تتمكّن من ملء الرسم البياني للتطبيق، عليك أولاً إنشاء تطبيق فارغ.
أنشِئ تطبيقًا في Google Cloud Console.
- انتقِل إلى وحدة تحكّم Google Cloud.
- افتح علامة التبويب التطبيقات في لوحة بيانات Vertex AI Vision.
الانتقال إلى علامة التبويب "التطبيقات"
- انقر على زر الإضافة إنشاء.
- أدخِل traffic-app كاسم للتطبيق واختَر منطقتك.
- انقر على إنشاء.
إضافة عُقد لمكوّنات التطبيق
بعد إنشاء التطبيق الفارغ، يمكنك إضافة العُقد الثلاث إلى الرسم البياني للتطبيق:
- عقدة الاستيعاب: مورد البث الذي يستوعب البيانات المُرسَلة من مثيل جهاز افتراضي (VM) على Compute Engine تنشئه.
- عقدة المعالجة: نموذج إحصاءات الإشغال الذي يعمل على البيانات التي تمّت إضافتها.
- عقدة التخزين: مستودع الوسائط الذي يخزِّن الفيديوهات المعالَجة ويعمل كمخزن للبيانات الوصفية. تتضمّن مستودعات البيانات الوصفية معلومات إحصائية حول بيانات الفيديو التي تمّت إضافتها، ومعلومات مستنتجة من نماذج الذكاء الاصطناعي.
أضِف عُقد المكوّنات إلى تطبيقك في وحدة التحكّم.
- افتح علامة التبويب التطبيقات في لوحة بيانات Vertex AI Vision. الانتقال إلى علامة التبويب "التطبيقات"
- في سطر "الزيارات والتطبيق"، انقر على عرض الرسم البياني. سيتم توجيهك إلى التمثيل المرئي للرسم البياني لخط أنابيب المعالجة.
إضافة عقدة لنقل البيانات
- لإضافة عقدة لتدفق الإدخال، انقر على الخيار عمليات البث في قسم الموصلات من القائمة الجانبية.
- في قسم المصدر ضمن قائمة البث التي تفتح، انقر على إضافة قنوات بث.
- في قائمة إضافة قنوات، اختَر تسجيل قنوات جديدة وأضِف traffic-stream كاسم القناة.
- لإضافة البث إلى الرسم البياني للتطبيق، انقر على إضافة عمليات البث.
إضافة عقدة لمعالجة البيانات
- لإضافة عقدة نموذج عدد الأشخاص، انقر على خيار إحصاءات عدد الأشخاص في قسم النماذج المتخصّصة من القائمة الجانبية.
- اترك الخيارَين التلقائيَين أشخاص ومركبات محدَّدَين.
- إضافة خطوط في "عبور الخط" استخدِم أداة الخطوط المتعددة النقاط لرسم الخطوط في الأماكن التي تريد فيها رصد السيارات أو الأشخاص الذين يغادرون أو يدخلون.
- ارسم المناطق النشطة لاحتساب عدد الأشخاص/المركبات في تلك المنطقة.
- أضِف إعدادات مدة التوقف لرصد الازدحام في حال رسم منطقة نشطة.
- (لا تتوفّر حاليًا إمكانية تفعيل كلّ من المنطقة النشطة وعبور الخط في الوقت نفسه. استخدام ميزة واحدة فقط في كل مرة)


إضافة عقدة تخزين بيانات
- لإضافة عقدة وجهة الإخراج (التخزين)، اختَر خيار مستودع الوسائط في Vertex AI Vision في قسم الموصلات من القائمة الجانبية.
- في قائمة مستودع الوسائط في Vertex AI Vision، انقر على ربط المستودع.
- في قائمة ربط مستودع بيانات، اختَر إنشاء مستودع بيانات جديد. أطلِق على مستودع البيانات اسم warehouse-traffic، واترك مدة البقاء (TTL) عند 14 يومًا.
- انقر على الزر إنشاء لإضافة المستودع.
6. ربط الناتج بجدول BigQuery
عند إضافة موصّل BigQuery إلى تطبيق Vertex AI Vision، سيتم استيعاب جميع نواتج نماذج التطبيقات المرتبطة في الجدول المستهدف.
يمكنك إما إنشاء جدول BigQuery الخاص بك وتحديد هذا الجدول عند إضافة أداة ربط BigQuery إلى التطبيق، أو السماح لمنصة تطبيق Vertex AI Vision بإنشاء الجدول تلقائيًا.
إنشاء الجداول تلقائيًا
إذا سمحت لمنصة تطبيقات Vertex AI Vision بإنشاء الجدول تلقائيًا، يمكنك تحديد هذا الخيار عند إضافة عقدة موصّل BigQuery.
تنطبق شروط مجموعة البيانات والجدول التالية إذا كنت تريد استخدام ميزة إنشاء الجداول تلقائيًا:
- مجموعة البيانات: اسم مجموعة البيانات التي يتم إنشاؤها تلقائيًا هو visionai_dataset.
- الجدول: اسم الجدول الذي يتم إنشاؤه تلقائيًا هو visionai_dataset.APPLICATION_ID.
- معالجة الأخطاء:
- إذا كان الجدول الذي يحمل الاسم نفسه ضِمن مجموعة البيانات نفسها متوفّرًا، لن يتم إنشاؤه تلقائيًا.
- افتح علامة التبويب التطبيقات في لوحة بيانات Vertex AI Vision. الانتقال إلى علامة التبويب "التطبيقات"
- انقر على عرض التطبيق بجانب اسم تطبيقك من القائمة.
- في صفحة "أداة إنشاء التطبيقات"، اختَر BigQuery من قسم الموصّلات.
- اترك حقل مسار BigQuery فارغًا.

- في تخزين البيانات الوصفية من:، اختَر "إحصاءات الإشغال" فقط وأزِل العلامة من مربّع الاختيار الخاص بمصادر البيانات.
من المفترض أن يظهر الرسم البياني النهائي للتطبيق على النحو التالي:

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

8. البحث عن محتوى الفيديو في مستودع التخزين
بعد نقل بيانات الفيديو إلى تطبيق المعالجة، يمكنك الاطّلاع على بيانات الفيديو التي تم تحليلها والبحث في البيانات استنادًا إلى معلومات إحصاءات الإشغال.
- افتح علامة التبويب المستودعات في لوحة بيانات Vertex AI Vision. الانتقال إلى علامة التبويب "المستودعات"
- ابحث عن مستودع traffic-warehouse في القائمة، ثم انقر على عرض مواد العرض.
- في قسم عدد الأشخاص أو عدد المركبات، اضبط قيمة الحدّ الأدنى على 1 وقيمة الحدّ الأقصى على 5.
- لفلترة بيانات الفيديو المعالَجة والمخزَّنة في "مستودع الوسائط" في Vertex AI Vision، انقر على بحث.

عرض لبيانات الفيديو المخزّنة التي تطابق معايير البحث في "وحدة تحكّم Google Cloud" تم الحصول على الفيديو من إليزابيث مافور على Pixabay (تم تطبيق معايير البحث).
9- تحليل الناتج في جدول BigQuery
الانتقال إلى BigQuery
اختَر مجموعة البيانات: visionai_dataset
اختَر الجدول: APPLICATION_ID (في هذه الحالة traffic-app)
انقر على النقاط الثلاث على يسار اسم الجدول، ثم انقر على "طلب بحث".
اكتب طلب البحث التالي
Query1: طلب بحث للتحقّق من عدد المركبات التي تعبر كل خط في الدقيقة
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
Query2: طلب البحث للتحقّق من عدد المركبات في الدقيقة في كل منطقة
—- 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.

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

في لوحة "السمة" (dimension)، أضِف الوقت وغيِّر إعدادات الوقت إلى "التاريخ والوقت" (date-time). في "سمة التقسيم"، أضِف line_id. 
يعرض الرسم البياني أعلاه عدد المركبات أو الأشخاص الذين يعبرون كل خط في الدقيقة.
تشير الأشرطة الزرقاء الداكنة والفاتحة إلى معرّفَي الخطَّين المختلفَين.
10. تهانينا
تهانينا، لقد أكملت الدرس التطبيقي.
تنظيف
لتجنُّب تحمّل رسوم في حسابك على Google Cloud مقابل الموارد المستخدَمة في هذا البرنامج التعليمي، احذف المشروع الذي يحتوي على الموارد أو احتفظ بالمشروع واحذف الموارد الفردية.
حذف المشروع
حذف مراجع فردية
المراجع
https://cloud.google.com/vision-ai/docs/overview
https://cloud.google.com/vision-ai/docs/occupancy-count-tutorial
الملاحظات