1. اهداف
نمای کلی
این کد لبه روی ایجاد یک برنامه Vertex AI Vision سرتاسر برای ارسال رویدادها با ویژگی مدیریت رویدادها تمرکز خواهد کرد. ما از ویژگی های داخلی تحلیل اشغال مدل تخصصی از پیش آموزش دیده برای ایجاد رویدادها بر اساس ثبت موارد زیر استفاده خواهیم کرد:
- تعداد وسایل نقلیه و افرادی که از یک جاده در یک خط معین عبور می کنند را بشمارید.
- تعداد وسایل نقلیه/نفر در هر منطقه ثابت جاده را بشمارید.
- تشخیص ازدحام در هر قسمت از جاده
چیزی که یاد خواهید گرفت
- نحوه جذب ویدیو برای پخش جریانی
- نحوه ایجاد اپلیکیشن در Vertex AI Vision
- ویژگی های مختلف موجود در Occupancy Analytics و نحوه استفاده از آنها
- نحوه استقرار برنامه
- نحوه جستجوی ویدیوها در انبار رسانه Vertex AI Vision.
- نحوه ایجاد یک تابع ابری که دادههای مدل تحلیل اشغال را پردازش میکند.
- نحوه ایجاد موضوع و اشتراک Pub/Sub.
- نحوه راه اندازی مدیریت رویداد برای ارسال رویدادها از طریق Pub/Sub Topic.
2. قبل از شروع
- در کنسول Google Cloud، در صفحه انتخابگر پروژه، یک پروژه Google Cloud را انتخاب یا ایجاد کنید . توجه : اگر قصد ندارید منابعی را که ایجاد می کنید در این روش حفظ کنید، به جای انتخاب پروژه موجود، یک پروژه ایجاد کنید. پس از اتمام این مراحل، می توانید پروژه را حذف کنید و تمام منابع مرتبط با پروژه را حذف کنید. به انتخابگر پروژه بروید
- مطمئن شوید که صورتحساب برای پروژه Cloud شما فعال است. با نحوه بررسی فعال بودن صورتحساب در پروژه آشنا شوید.
- APIهای Compute Engine و Vision AI را فعال کنید. API ها را فعال کنید
ایجاد یک حساب خدمات:
- در کنسول Google Cloud، به صفحه ایجاد حساب سرویس بروید. به ایجاد حساب سرویس بروید
- پروژه خود را انتخاب کنید
- در قسمت نام حساب سرویس ، یک نام وارد کنید. کنسول Google Cloud فیلد شناسه حساب سرویس را بر اساس این نام پر می کند. در قسمت Service account description یک توضیحات را وارد کنید. به عنوان مثال، حساب سرویس برای شروع سریع.
- روی ایجاد و ادامه کلیک کنید.
- برای دسترسی به پروژه خود، نقش(های) زیر را به حساب سرویس خود بدهید: Vision AI > Vision AI Editor، Compute Engine > Compute Instance Admin (بتا)، Storage > Storage Object Viewer † . در لیست انتخاب نقش ، یک نقش را انتخاب کنید. برای نقش های اضافی، روی افزودن نقش دیگری کلیک کنید و هر نقش اضافی را اضافه کنید. توجه : فیلد Role بر منابعی که حساب سرویس شما می تواند در پروژه شما دسترسی داشته باشد تأثیر می گذارد. میتوانید این نقشها را لغو کنید یا بعداً نقشهای دیگری را اعطا کنید. در محیطهای تولید، نقشهای مالک، ویرایشگر یا بیننده را اعطا نکنید. در عوض، یک نقش از پیش تعریف شده یا نقش سفارشی که نیازهای شما را برآورده می کند، اعطا کنید.
- روی Continue کلیک کنید.
- برای تکمیل ساخت حساب سرویس روی Done کلیک کنید. پنجره مرورگر خود را نبندید. در مرحله بعد از آن استفاده خواهید کرد.
یک کلید حساب کاربری ایجاد کنید:
- در کنسول Google Cloud، روی آدرس ایمیل حساب سرویسی که ایجاد کردید کلیک کنید.
- روی کلیدها کلیک کنید.
- روی افزودن کلید کلیک کنید و سپس روی ایجاد کلید جدید کلیک کنید.
- روی ایجاد کلیک کنید. یک فایل کلید JSON در رایانه شما دانلود می شود.
- روی Close کلیک کنید.
- Google Cloud CLI را نصب و مقداردهی اولیه کنید .
† نقش تنها در صورتی لازم است که یک فایل ویدئویی نمونه را از یک سطل ذخیرهسازی ابری کپی کنید.
3. یک فایل ویدئویی را برای پخش جریانی دریافت کنید
میتوانید از vaictl برای پخش جریانی دادههای ویدیویی در برنامه تجزیه و تحلیل اشغال خود استفاده کنید.
با فعال کردن Vision AI API در Cloud Console شروع کنید
یک جریان جدید ثبت کنید
- روی تب streams در پنل سمت چپ Vertex AI Vision کلیک کنید.
- روی ثبت نام کلیک کنید
- در نام جریان «traffic-stream» را وارد کنید
- در منطقه "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 را ببینید.
- LOCAL_FILE: نام فایل یک فایل ویدئویی محلی. برای مثال street_vehicles_people.mp4.
- پرچم حلقه: اختیاری. حلقه داده های فایل را برای شبیه سازی جریان.
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 &
ممکن است بین شروع عملیات vaictl ingest و نمایش ویدیو در داشبورد 100 ثانیه طول بکشد.
پس از دریافت جریان، میتوانید فید ویدیو را در برگه Streams داشبورد Vertex AI Vision با انتخاب جریان ترافیک مشاهده کنید.
نمای زنده ویدیویی که وارد جریان در کنسول Google Cloud می شود. اعتبار ویدیو: الیزابت ماور در Pixabay ( پیکسل سازی اضافه شد ).
4. یک تابع ابری ایجاد کنید
برای هضم دادههای مدل و ایجاد رویدادهایی که بعداً از طریق کانال رویداد ارسال میشوند، به یک تابع ابری نیاز داریم.
در اینجا می توانید اطلاعات بیشتری در مورد Cloud Function کسب کنید
یک Cloud Function ایجاد کنید که به مدل شما گوش می دهد
- به صفحه ایجاد رابط کاربری Cloud Function بروید.
- نام تابع را تنظیم کنید، که بعداً برای ارجاع به این تابع Cloud در تنظیمات مدیریت رویداد استفاده خواهد شد.
- مطمئن شوید که منطقه با برنامه شما مطابقت دارد.
- تنظیم کنید سپس تنظیمات ماشه را ذخیره کنید.
- روی دکمه next کلیک کنید تا به قسمت "کد" بروید.
- عملکرد ابری خود را ویرایش کنید. در اینجا یک مثال با زمان اجرا 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);
}
- برای استقرار عملکرد روی دکمه "استقرار" کلیک کنید.
5. موضوع و اشتراک Pub/Sub را ایجاد کنید
ما باید یک موضوع Pub/Sub را به برنامه ارائه دهیم که بتواند رویداد را برای آن ارسال کند. برای دریافت رویدادها، یک اشتراک Pub/Sub باید در اپتیک پیکربندی شده مشترک شود.
میتوانید درباره موضوع Pub/Sub در اینجا و اشتراک در اینجا اطلاعات بیشتری کسب کنید.
ایجاد یک میخانه / موضوع فرعی
برای ایجاد یک موضوع Pub/Sub، میتوانید از gcloud CLI استفاده کنید: (شما باید SUBSCRIPTION_ID را با مقدار واقعی از تنظیمات خود جایگزین کنید)
gcloud pubsub topics create TOPIC_ID
همچنین می توانید از Pub/Sub UI استفاده کنید
ایجاد اشتراک میخانه/اشتراک
برای ایجاد اشتراک Pub/Sub، میتوانید از gcloud CLI استفاده کنید: (شما باید SUBSCRIPTION_ID و TOPIC_ID را با مقدار واقعی از راهاندازی خود جایگزین کنید)
gcloud pubsub subscriptions create SUBSCRIPTION_ID \ --topic=TOPIC_ID \
همچنین می توانید از Pub/Sub UI استفاده کنید
6. یک برنامه ایجاد کنید
اولین قدم ایجاد اپلیکیشنی است که داده های شما را پردازش می کند. یک برنامه را می توان به عنوان یک خط لوله خودکار در نظر گرفت که موارد زیر را به هم متصل می کند:
- جذب داده : یک فید ویدیویی در یک جریان وارد میشود.
- تجزیه و تحلیل داده ها : یک مدل AI (Computer Vision) را می توان پس از مصرف اضافه کرد.
- ذخیره سازی داده ها : دو نسخه فید ویدیو (جریان اصلی و جریان پردازش شده توسط مدل هوش مصنوعی) را می توان در یک انبار رسانه ذخیره کرد.
در کنسول Google Cloud یک برنامه به صورت نمودار نمایش داده می شود.
یک برنامه خالی ایجاد کنید
قبل از اینکه بتوانید نمودار برنامه را پر کنید، ابتدا باید یک برنامه خالی ایجاد کنید.
یک برنامه در کنسول Google Cloud ایجاد کنید.
- به کنسول Google Cloud بروید.
- تب Applications داشبورد Vertex AI Vision را باز کنید.
- روی دکمه add Create کلیک کنید.
- ترافیک-app را به عنوان نام برنامه وارد کنید و منطقه خود را انتخاب کنید.
- روی ایجاد کلیک کنید.
گره های مؤلفه برنامه را اضافه کنید
پس از ایجاد برنامه خالی، می توانید سه گره را به نمودار برنامه اضافه کنید:
- Ingestion node : منبع جریانی که داده ها را جذب می کند.
- گره پردازش : مدل تجزیه و تحلیل اشغال که بر روی داده های دریافت شده عمل می کند.
- Storage Node : انبار رسانه ای که ویدیوهای پردازش شده را ذخیره می کند و به عنوان ذخیره ابرداده عمل می کند. ذخیرههای ابرداده شامل اطلاعات تحلیلی در مورد دادههای ویدیویی جذب شده و اطلاعات استنتاج شده توسط مدلهای هوش مصنوعی است.
گره های مؤلفه را به برنامه خود در کنسول اضافه کنید.
- تب Applications داشبورد Vertex AI Vision را باز کنید. به تب Applications بروید
- در خط برنامه ترافیک، مشاهده نمودار را انتخاب کنید. این شما را به تجسم نمودار خط لوله پردازش می برد.
یک گره انتقال داده اضافه کنید
- برای افزودن گره جریان ورودی، گزینه Streams را در قسمت Connectors منوی کناری انتخاب کنید.
- در بخش منبع از منوی جریانی که باز میشود، افزودن جریانها را انتخاب کنید.
- در منوی افزودن جریانها ، ثبت جریانهای جدید را انتخاب کنید و جریان ترافیک را به عنوان نام جریان اضافه کنید.
- برای افزودن جریان به نمودار برنامه، روی افزودن جریانها کلیک کنید.
یک گره پردازش داده اضافه کنید
- برای افزودن گره مدل شمارش اشغال، در منوی کناری قسمت Specialized models، گزینه occupancy analytics را انتخاب کنید.
- انتخاب های پیش فرض افراد و وسایل نقلیه را رها کنید.
- اضافه کردن خطوط در خط عبور. از ابزار چند نقطهای برای ترسیم خطوطی استفاده کنید که باید ماشینها یا افرادی را که در حال خروج یا ورود هستند تشخیص دهید.
- مناطق فعال را برای شمارش افراد/وسایل نقلیه در آن منطقه بکشید.
- برای تشخیص تراکم در صورت ترسیم منطقه فعال، تنظیمات زمان ماندن را اضافه کنید.
- (در حال حاضر منطقه فعال و خط عبور هر دو به طور همزمان پشتیبانی نمی شوند. فقط از یک ویژگی در یک زمان استفاده کنید.)
یک گره ذخیره سازی داده اضافه کنید
- برای افزودن گره مقصد خروجی (ذخیره)، گزینه Vertex AI Vision's Media Warehouse را در قسمت Connectors منوی کناری انتخاب کنید.
- در منوی Media Warehouse Vertex AI Vision ، روی Connect warehouse کلیک کنید.
- در منوی Connect warehouse ، ایجاد انبار جدید را انتخاب کنید. ترافیک انبار را نامگذاری کنید و مدت زمان TTL را 14 روز بگذارید.
- روی دکمه Create کلیک کنید تا انبار اضافه شود.
7. مدیریت رویداد را پیکربندی کنید
مدت زمان 02:00
ما مدل را برای پردازش پس از پردازش به Cloud Function ایجاد شده قبلی متصل می کنیم، جایی که تابع Cloud می تواند آزادانه خروجی مدل را هضم کند و رویدادهایی را مطابق با نیاز شما ایجاد کند. سپس کانال رویداد را با پیکربندی موضوع Pub/Sub که قبلا ایجاد شده بود به عنوان هدف خود پیکربندی میکنیم. همچنین می توانید حداقل فاصله زمانی را تنظیم کنید، که به جلوگیری از غرق شدن کانال رویداد شما توسط همان رویداد در مدت زمان کوتاه کمک می کند.
برای پردازش پس از پردازش، Cloud Function را انتخاب کنید
- روی گره پردازش داده ( تجزیه و تحلیل اشغال ) در نمودار برنامه خود کلیک کنید تا منوی کناری باز شود.
- تابع Cloud خود را (که با نام عملکرد آن مشخص می شود) در کشویی Post-processing انتخاب کنید.
- نمودار برنامه به طور خودکار تغییرات شما را ذخیره می کند.
پیکربندی کانال رویداد
- روی گره پردازش داده ( تجزیه و تحلیل اشغال ) در نمودار برنامه خود کلیک کنید تا منوی کناری باز شود.
- روی «تنظیم اعلان رویداد» در بخش اعلان رویداد کلیک کنید.
- در منوی کشویی Pub/Sub Topic خود را انتخاب کنید.
- (اختیاری) حداقل فاصله / فرکانس را برای انتشار رویداد تنظیم کنید.
8. برنامه خود را برای استفاده مستقر کنید
بعد از اینکه برنامه سرتاسر خود را با تمام اجزای لازم ساختید، آخرین مرحله برای استفاده از برنامه، استقرار آن است.
- تب Applications داشبورد Vertex AI Vision را باز کنید. به تب Applications بروید
- مشاهده نمودار را در کنار برنامه ترافیک برنامه در لیست انتخاب کنید.
- از صفحه سازنده نمودار برنامه، روی دکمه Deploy کلیک کنید.
- در گفتگوی تأیید زیر، Deploy را انتخاب کنید. عملیات استقرار ممکن است چند دقیقه طول بکشد تا کامل شود. پس از اتمام استقرار، تیک سبز رنگ در کنار گره ها ظاهر می شود.
9. بررسی رویدادها/پیام ها در اشتراک Pub/Sub
پس از اینکه دادههای ویدیویی را در برنامه پردازشی خود وارد کردید، پس از خروجیبندی مدل تجزیه و تحلیل اشغال، عملکرد Cloud باید رویدادها را ایجاد کند. سپس آن رویدادها باید به عنوان پیام از طریق موضوع Pub/Sub شما منتشر شوند و توسط اشتراک شما دریافت شوند.
مراحل زیر با این فرض است که شما یک اشتراک کششی دارید.
- فهرست اشتراک Pub/Sub را در پروژه خود باز کنید و اشتراک مربوطه را پیدا کنید. به صفحه فهرست اشتراک Pub/Sub بروید
- به تب "پیام" بروید.
- بر روی دکمه "کشیدن" کلیک کنید.
- پیام خود را در جدول مشاهده کنید.
همچنین میتوانید نحوه دریافت پیام بدون رابط کاربری را یاد بگیرید. به صفحه اشتراک بروید
10. تبریک می گویم
تبریک می گویم، شما آزمایشگاه را تمام کردید!
پاک کن
برای جلوگیری از تحمیل هزینه به حساب Google Cloud خود برای منابع استفاده شده در این آموزش، یا پروژه حاوی منابع را حذف کنید یا پروژه را نگه دارید و منابع فردی را حذف کنید.
پروژه را حذف کنید
منابع فردی را حذف کنید
منابع
https://cloud.google.com/vision-ai/docs/overview
https://cloud.google.com/vision-ai/docs/occupancy-count-tutorial
بازخورد
برای ارائه بازخورد اینجا را کلیک کنید