۱. اهداف
نمای کلی
این آزمایشگاه کد بر ایجاد یک برنامه Vertex AI Vision به صورت سرتاسری برای ارسال رویدادها با ویژگی مدیریت رویدادها تمرکز خواهد کرد. ما از ویژگیهای داخلی مدل تخصصی از پیش آموزش دیده Occupancy analytics برای تولید رویدادها بر اساس ثبت موارد زیر استفاده خواهیم کرد:
- تعداد وسایل نقلیه و افرادی که از یک خط مشخص از جاده عبور میکنند را بشمارید.
- تعداد وسایل نقلیه/افراد را در هر منطقه ثابتی از جاده بشمارید.
- تشخیص ازدحام در هر قسمت از جاده.
آنچه یاد خواهید گرفت
- نحوه دریافت ویدیوها برای پخش آنلاین
- نحوه ایجاد یک برنامه در Vertex AI Vision
- ویژگیهای مختلف موجود در Occupancy Analytics و نحوه استفاده از آنها
- نحوه استقرار برنامه
- نحوه جستجوی ویدیوها در فضای ذخیرهسازی شما در انبار رسانه Vertex AI Vision.
- چگونه یک تابع ابری ایجاد کنیم که دادههای مدل Occupancy Analytics را پردازش کند.
- نحوه ایجاد یک موضوع عمومی/زیرموضوعی و اشتراک.
- نحوه تنظیم مدیریت رویداد برای ارسال رویدادها از طریق Pub/Sub Topic.
۲. قبل از شروع
- در کنسول گوگل کلود، در صفحه انتخاب پروژه، یک پروژه گوگل کلود را انتخاب یا ایجاد کنید . توجه : اگر قصد ندارید منابعی را که در این روش ایجاد میکنید، نگه دارید، به جای انتخاب یک پروژه موجود، یک پروژه ایجاد کنید. پس از اتمام این مراحل، میتوانید پروژه را حذف کنید و تمام منابع مرتبط با پروژه را حذف کنید. به انتخاب پروژه بروید
- مطمئن شوید که صورتحساب برای پروژه ابری شما فعال است. یاد بگیرید که چگونه بررسی کنید که آیا صورتحساب در یک پروژه فعال است یا خیر .
- فعال کردن رابطهای برنامهنویسی کاربردی موتور محاسباتی و هوش مصنوعی بینایی.
ایجاد حساب کاربری سرویس:
- در کنسول گوگل کلود، به صفحه ایجاد حساب کاربری سرویس بروید. به بخش ایجاد حساب کاربری سرویس بروید
- پروژه خود را انتخاب کنید.
- در فیلد نام حساب سرویس ، یک نام وارد کنید. کنسول گوگل کلود فیلد شناسه حساب سرویس را بر اساس این نام پر میکند. در فیلد توضیحات حساب سرویس ، توضیحی وارد کنید. به عنوان مثال، حساب سرویس برای شروع سریع.
- روی ایجاد کلیک کنید و ادامه دهید .
- برای دسترسی به پروژه خود، نقش(های) زیر را به حساب سرویس خود اعطا کنید: Vision AI > Vision AI Editor, Compute Engine > Compute Instance Admin (beta), Storage > Storage Object Viewer † . در لیست انتخاب نقش ، یک نقش را انتخاب کنید. برای نقشهای اضافی، روی افزودن نقش دیگر کلیک کنید و هر نقش اضافی را اضافه کنید. توجه : فیلد نقش بر منابعی که حساب سرویس شما میتواند در پروژه شما به آنها دسترسی داشته باشد، تأثیر میگذارد. میتوانید این نقشها را لغو کنید یا بعداً نقشهای اضافی اعطا کنید. در محیطهای تولید، نقشهای مالک، ویرایشگر یا بیننده را اعطا نکنید. در عوض، یک نقش از پیش تعریف شده یا نقش سفارشی که نیازهای شما را برآورده میکند، اعطا کنید.
- روی ادامه کلیک کنید.
- برای پایان ایجاد حساب کاربری سرویس، روی «انجام شد» کلیک کنید. پنجره مرورگر خود را نبندید. در مرحله بعدی از آن استفاده خواهید کرد.
ایجاد کلید حساب سرویس:
- در کنسول گوگل کلود، روی آدرس ایمیل حساب سرویسی که ایجاد کردهاید کلیک کنید.
- روی کلیدها کلیک کنید.
- روی افزودن کلید کلیک کنید و سپس روی ایجاد کلید جدید کلیک کنید.
- روی ایجاد کلیک کنید. یک فایل کلید JSON در رایانه شما دانلود میشود.
- روی بستن کلیک کنید.
- رابط خط فرمان گوگل کلود (Google Cloud CLI) را نصب و راهاندازی کنید .
† این نقش فقط در صورتی مورد نیاز است که یک فایل ویدیویی نمونه را از یک فضای ذخیرهسازی ابری کپی کنید.
۳. دریافت یک فایل ویدیویی برای پخش آنلاین
شما میتوانید از vaictl برای پخش دادههای ویدیویی به برنامه تجزیه و تحلیل حضور خود استفاده کنید.
با فعال کردن رابط برنامهنویسی کاربردی هوش مصنوعی بینایی (Vision AI API) در کنسول ابری (Cloud Console) شروع کنید.
ثبت جریان جدید
- روی تب Streams در پنل سمت چپ Vertex AI Vision کلیک کنید.
- روی ثبت نام کلیک کنید
- در قسمت نام جریان، عبارت 'traffic-stream' را وارد کنید.
- در قسمت region، عبارت 'us-central1' را وارد کنید.
- ثبت نام کلیک کنید
ثبت نام در استریم چند دقیقه طول خواهد کشید.
تهیه نمونه ویدیو
- شما میتوانید یک ویدیوی نمونه را با دستور 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. برای اطلاعات بیشتر، به Cloud locations مراجعه کنید.
- فایل محلی: نام فایل ویدیویی محلی. برای مثال، 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
- این دستور یک فایل ویدیویی را به یک جریان (stream) استریم میکند. اگر از آپشن –loop استفاده کنید، ویدیو تا زمانی که دستور را متوقف کنید، در جریان (stream) به صورت حلقهای (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 &
ممکن است بین شروع عملیات دریافت پیام vaictl و نمایش ویدیو در داشبورد حدود ۱۰۰ ثانیه طول بکشد.
پس از اینکه دریافت جریان در دسترس قرار گرفت، میتوانید با انتخاب جریان ترافیک، فید ویدیو را در تب جریانها در داشبورد Vertex AI Vision مشاهده کنید.
نمای زنده از ویدیویی که در حال ورود به استریم در کنسول گوگل کلود است. منبع ویدیو: الیزابت ماور در Pixabay ( پیکسلیشن اضافه شد ).
۴. یک تابع ابری ایجاد کنید
ما به یک تابع ابری نیاز داریم تا دادههای مدل را تجزیه و تحلیل کند و رویدادهایی تولید کند که بعداً از طریق کانال رویداد ارسال شوند.
میتوانید اطلاعات بیشتری در مورد عملکرد ابر (Cloud Function) را اینجا کسب کنید
یک تابع ابری ایجاد کنید که به مدل شما گوش دهد
- به صفحه ایجاد رابط کاربری Cloud Function بروید.
- نام تابع را تنظیم کنید، که بعداً برای ارجاع به این تابع ابری در تنظیمات مدیریت رویداد استفاده خواهد شد.
- مطمئن شوید که منطقه با درخواست شما مطابقت دارد.
- تنظیمات تریگر را تنظیم کرده و سپس ذخیره کنید.
- برای رفتن به بخش «کد»، روی دکمه بعدی کلیک کنید.

- تابع ابری خود را ویرایش کنید. در اینجا مثالی با زمان اجرای 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);
}
- برای استقرار تابع، روی دکمهی «استقرار» کلیک کنید.
۵. ایجاد موضوع عمومی/زیرموضوعی و اشتراک
ما باید یک موضوع Pub/Sub به برنامه ارائه دهیم که بتواند رویداد را به آن ارسال کند. برای دریافت رویدادها، یک اشتراک Pub/Sub باید در optic پیکربندی شده مشترک شود.
میتوانید درباره موضوع Pub/Sub اینجا و اشتراک اینجا بیشتر بدانید.
ایجاد یک موضوع عمومی/زیرموضوع
برای ایجاد یک موضوع Pub/Sub، میتوانید از gcloud CLI استفاده کنید: (شما باید SUBSCRIPTION_ID را با مقدار واقعی از تنظیمات خود جایگزین کنید)
gcloud pubsub topics create TOPIC_ID
به عنوان یک روش جایگزین، میتوانید از رابط کاربری Pub/Sub استفاده کنید.
ایجاد یک اشتراک در پاب/سابسکرایب
برای ایجاد اشتراک Pub/Sub، میتوانید از gcloud CLI استفاده کنید: (شما باید SUBSCRIPTION_ID و TOPIC_ID را با مقدار واقعی از تنظیمات خود جایگزین کنید)
gcloud pubsub subscriptions create SUBSCRIPTION_ID \
--topic=TOPIC_ID \
به عنوان یک روش جایگزین، میتوانید از رابط کاربری Pub/Sub استفاده کنید.
۶. یک برنامه کاربردی ایجاد کنید
اولین قدم ایجاد یک برنامه است که دادههای شما را پردازش کند. یک برنامه را میتوان به عنوان یک خط لوله خودکار در نظر گرفت که موارد زیر را به هم متصل میکند:
- دریافت داده : یک فید ویدیویی به یک جریان داده ارسال میشود.
- تجزیه و تحلیل دادهها : یک مدل هوش مصنوعی (بینایی رایانهای) میتواند پس از مصرف اضافه شود.
- ذخیرهسازی دادهها : دو نسخه از فید ویدیویی (جریان اصلی و جریان پردازششده توسط مدل هوش مصنوعی) میتوانند در یک انبار رسانه ذخیره شوند.
در کنسول گوگل کلود، یک برنامه به صورت یک گراف نمایش داده میشود.
ایجاد یک برنامه خالی
قبل از اینکه بتوانید نمودار برنامه را پر کنید، ابتدا باید یک برنامه خالی ایجاد کنید.
یک برنامه در کنسول Google Cloud ایجاد کنید.
- به کنسول گوگل کلود بروید.
- تب برنامهها را در داشبورد Vertex AI Vision باز کنید.
- روی دکمهی افزودن ایجاد کلیک کنید.
- به عنوان نام برنامه، عبارت traffic-app را وارد کنید و منطقه خود را انتخاب کنید.
- روی ایجاد کلیک کنید.
اضافه کردن گرههای کامپوننت برنامه
بعد از اینکه برنامه خالی را ایجاد کردید، میتوانید سه گره را به گراف برنامه اضافه کنید:
- گره مصرف : منبع جریانی که دادهها را مصرف میکند.
- گره پردازش : مدل تحلیل اشغال که بر اساس دادههای دریافتی عمل میکند.
- گره ذخیرهسازی : انبار رسانهای که ویدیوهای پردازششده را ذخیره میکند و به عنوان یک مخزن فراداده عمل میکند. مخازن فراداده شامل اطلاعات تحلیلی در مورد دادههای ویدیویی دریافتشده و اطلاعات استنباطشده توسط مدلهای هوش مصنوعی هستند.
گرههای کامپوننت را در کنسول به برنامه خود اضافه کنید.
- برگه برنامهها را از داشبورد Vertex AI Vision باز کنید. به برگه برنامهها بروید
- در خط traffic-app، گزینه View graph را انتخاب کنید. این گزینه شما را به تجسم نمودار خط لوله پردازش میبرد.
یک گره دریافت داده اضافه کنید
- برای افزودن یک گره جریان ورودی، گزینه Streams را در بخش Connectors از منوی کناری انتخاب کنید.
- در بخش منبع (Source) از منوی استریم (Stream) که باز میشود، گزینهی «افزودن استریمها» (Add streams) را انتخاب کنید.
- در منوی افزودن جریانها ، گزینه ثبت جریانهای جدید را انتخاب کنید و عبارت traffic-stream را به عنوان نام جریان اضافه کنید.
- برای افزودن جریان به نمودار برنامه، روی «افزودن جریانها» کلیک کنید.
افزودن یک گره پردازش داده
- برای افزودن گره مدل شمارش اشغال، گزینه تحلیل اشغال را در بخش مدلهای تخصصی از منوی کناری انتخاب کنید.
- گزینههای پیشفرض «افراد» و «وسایل نقلیه» را رها کنید.
- خطوط را در محل عبور خط اضافه کنید. از ابزار خط چند نقطهای برای رسم خطوطی که نیاز به تشخیص ورود یا خروج ماشینها یا افراد دارید، استفاده کنید.
- مناطق فعال را برای شمارش افراد/وسایل نقلیه در آن منطقه رسم کنید.
- تنظیماتی برای زمان توقف اضافه کنید تا در صورت ترسیم یک منطقه فعال، ازدحام تشخیص داده شود.
- (در حال حاضر، هر دو ویژگی عبور از خط و منطقه فعال به طور همزمان پشتیبانی نمیشوند. فقط از یکی از این ویژگیها در یک زمان استفاده کنید.)



افزودن یک گره ذخیرهسازی داده
- برای افزودن گره مقصد خروجی (ذخیرهسازی)، گزینه انبار رسانه Vertex AI Vision را در بخش Connectors از منوی کناری انتخاب کنید.
- در منوی انبار رسانه Vertex AI Vision ، روی اتصال انبار کلیک کنید.
- در منوی «اتصال انبار» ، «ایجاد انبار جدید» را انتخاب کنید. نام انبار را «ترافیک-انبار» بگذارید و مدت زمان TTL را روی ۱۴ روز بگذارید.
- برای افزودن انبار، روی دکمهی «ایجاد» کلیک کنید.
۷. پیکربندی مدیریت رویداد
مدت زمان ۰۲:۰۰
ما مدل را برای پردازش پس از تولید به تابع ابری (Cloud Function) قبلی متصل میکنیم، جایی که تابع ابری میتواند آزادانه خروجی مدل را دریافت کرده و رویدادهایی متناسب با نیاز شما ایجاد کند. سپس کانال رویداد را با پیکربندی Pub/Sub Topic که قبلاً ایجاد شده است به عنوان هدف، پیکربندی میکنیم. همچنین میتوانید یک بازه زمانی حداقلی تنظیم کنید که به جلوگیری از پر شدن کانال رویداد شما توسط همان رویداد در مدت زمان کوتاه کمک میکند.
انتخاب تابع ابری برای پسپردازش
- برای باز کردن منوی کناری، روی گره پردازش داده ( تحلیل اشغال ) در نمودار برنامه خود کلیک کنید.
- تابع ابری خود را (که با نام تابع آن مشخص شده است) در منوی کشویی پس از پردازش انتخاب کنید.
- نمودار برنامه به طور خودکار تغییرات شما را ذخیره میکند.

پیکربندی کانال رویداد
- برای باز کردن منوی کناری، روی گره پردازش داده ( تحلیل اشغال ) در نمودار برنامه خود کلیک کنید.
- در بخش اعلان رویداد، روی «تنظیم اعلان رویداد» کلیک کنید.

- موضوع میخانه/زیرموضوع خود را از منوی کشویی انتخاب کنید.
- (اختیاری) حداقل فاصله/فرکانس انتشار رویداد را تنظیم کنید.

۸. برنامه خود را برای استفاده مستقر کنید
بعد از اینکه برنامهی خود را به همراه تمام اجزای لازم ساختید، آخرین مرحله برای استفاده از برنامه، استقرار آن است.
- برگه برنامهها را از داشبورد Vertex AI Vision باز کنید. به برگه برنامهها بروید
- گزینه «مشاهده نمودار» را در کنار برنامه ترافیک در لیست انتخاب کنید.
- از صفحه سازنده نمودار برنامه، روی دکمه Deploy کلیک کنید.
- در پنجره تأیید زیر، گزینه Deploy را انتخاب کنید. عملیات استقرار ممکن است چند دقیقه طول بکشد. پس از اتمام استقرار، علامتهای سبز رنگ در کنار گرهها ظاهر میشوند.

۹. رویدادها/پیامها را در اشتراک Pub/Sub تأیید کنید
پس از اینکه دادههای ویدیویی را به برنامه پردازش خود وارد کردید، تابع ابری باید رویدادهایی را ایجاد کند که مدل تحلیل حضور، حاشیهنویسی را خروجی میدهد. سپس این رویدادها باید به عنوان پیام از طریق موضوع Pub/Sub شما منتشر شده و توسط اشتراک شما دریافت شوند.
مراحل زیر با فرض داشتن اشتراک pull انجام میشوند.
- لیست اشتراکهای Pub/Sub را در پروژه خود باز کنید و اشتراک مربوطه را پیدا کنید. به صفحه لیست اشتراکهای Pub/Sub بروید
- به برگه «پیام» بروید.
- روی دکمه "کشیدن" کلیک کنید.
- پیام خود را در جدول مشاهده کنید.

همچنین میتوانید نحوه دریافت پیام بدون رابط کاربری را بیاموزید. به صفحه اشتراک بروید
۱۰. تبریک
تبریک میگویم، آزمایشگاه را تمام کردید!
تمیز کردن
برای جلوگیری از تحمیل هزینه به حساب گوگل کلود خود برای منابع استفاده شده در این آموزش، یا پروژهای که شامل منابع است را حذف کنید، یا پروژه را نگه دارید و منابع تکی را حذف کنید.
پروژه را حذف کنید
حذف منابع تکی
منابع
https://cloud.google.com/vision-ai/docs/overview
https://cloud.google.com/vision-ai/docs/occupancy-count-tutorial
بازخورد
برای ارائه بازخورد اینجا کلیک کنید