1. اهداف
نمای کلی
این کد لبه روی ایجاد یک برنامه Vertex AI Vision به صورت سرتاسری برای نظارت بر فیلمهای ویدیویی ترافیک در زمان واقعی تمرکز خواهد کرد. ما از ویژگی های داخلی تحلیل اشغال مدل تخصصی از پیش آموزش دیده برای ثبت موارد زیر استفاده خواهیم کرد:
- تعداد وسایل نقلیه و افرادی که از یک جاده در یک خط معین عبور می کنند را بشمارید.
- تعداد وسایل نقلیه/نفر در هر منطقه ثابت جاده را بشمارید.
- تشخیص ازدحام در هر قسمت از جاده
چیزی که یاد خواهید گرفت
- چگونه یک VM را برای جذب ویدیوها برای پخش جریانی تنظیم کنیم
- نحوه ایجاد اپلیکیشن در Vertex AI Vision
- ویژگی های مختلف موجود در Occupancy Analytics و نحوه استفاده از آنها
- نحوه استقرار برنامه
- نحوه جستجوی ویدیوها در انبار رسانه Vertex AI Vision.
- نحوه اتصال خروجی به BigQuery، نوشتن پرس و جوی SQL برای استخراج بینش از خروجی json مدل و تجسم نتیجه در استودیو Looker به صورت بلادرنگ.
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. یک VM برای پخش ویدئو راه اندازی کنید
قبل از ایجاد یک برنامه در Occupancy Analytics، باید جریانی را ثبت کنید که بعداً توسط برنامه قابل استفاده باشد.
در این آموزش شما یک نمونه ماشین مجازی ماشین محاسباتی ایجاد میکنید که میزبان یک ویدیو است، و آن دادههای ویدیوی جریانی را از VM ارسال میکنید.
یک VM لینوکس ایجاد کنید
اولین گام در ارسال ویدیو از یک نمونه ماشین مجازی کامپیوتری، ایجاد نمونه VM است.
- در کنسول، به صفحه نمونه های VM بروید. به نمونه های VM بروید
- پروژه خود را انتخاب کنید و روی Continue کلیک کنید.
- روی ایجاد نمونه کلیک کنید.
- یک نام برای VM خود تعیین کنید. برای اطلاعات بیشتر، به قرارداد نامگذاری منابع مراجعه کنید.
- اختیاری: Zone را برای این VM تغییر دهید. Compute Engine لیستی از مناطق را در هر منطقه تصادفی می کند تا استفاده در چندین منطقه را تشویق کند.
- گزینه های پیش فرض باقی مانده را بپذیرید. برای اطلاعات بیشتر در مورد این گزینه ها، به ایجاد و راه اندازی یک VM مراجعه کنید.
- برای ایجاد و راه اندازی VM، روی ایجاد کلیک کنید.
محیط VM را تنظیم کنید
پس از شروع VM، می توانید از کنسول خود برای SSH در VM از مرورگر خود استفاده کنید. سپس، میتوانید ابزار خط فرمان vaictl را دانلود کنید تا ویدیو را در جریان خود وارد کنید.
یک اتصال SSH به VM خود برقرار کنید
- در کنسول، به صفحه نمونه های VM بروید. به نمونه های VM بروید
- در بخش اتصال از خط نمونه ای که ایجاد کردید، روی SSH کلیک کنید. این یک اتصال SSH را در یک پنجره مرورگر جدید باز می کند.
ابزار خط فرمان vaictl را دانلود کنید
- در پنجره SSH-in-browser ، ابزار خط فرمان 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. یک فایل ویدیویی را برای پخش جریانی دریافت کنید
پس از راهاندازی محیط VM، میتوانید یک فایل ویدیوی نمونه را کپی کنید و سپس از vaictl برای پخش جریانی دادههای ویدیو در برنامه تجزیه و تحلیل اشغال خود استفاده کنید.
با فعال کردن Vision AI API در Cloud Console شروع کنید
یک جریان جدید ثبت کنید
- روی تب streams در پنل سمت چپ Vertex AI Vision کلیک کنید.
- روی ثبت نام کلیک کنید
- در نام جریان «traffic-stream» را وارد کنید
- در منطقه "us-central1" را وارد کنید
- ثبت نام را کلیک کنید
استریم چند دقیقه طول می کشد تا ثبت شود.
یک نمونه ویدئو را در ماشین مجازی خود کپی کنید
- در پنجره SSH-in-Browser برای 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 .
ویدیو را از VM پخش کنید و داده ها را در جریان خود وارد کنید
- برای ارسال این فایل ویدیویی محلی به جریان ورودی برنامه، از دستور زیر استفاده کنید. شما باید متغیرهای زیر را جایگزین کنید:
- 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 استفاده میکنید، ویدیو تا زمانی که دستور را متوقف نکنید، در جریان پخش میشود. ما این دستور را بهعنوان یک کار پسزمینه اجرا میکنیم تا حتی پس از قطع شدن VM همچنان جریان داشته باشد.
- (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 ( پیکسل سازی اضافه شد ).
5. یک برنامه ایجاد کنید
اولین قدم ایجاد اپلیکیشنی است که داده های شما را پردازش می کند. یک برنامه را می توان به عنوان یک خط لوله خودکار در نظر گرفت که موارد زیر را به هم متصل می کند:
- جذب داده : یک فید ویدیویی در یک جریان وارد میشود.
- تجزیه و تحلیل داده ها : یک مدل 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 کلیک کنید تا انبار اضافه شود.
6. خروجی را به جدول BigQuery وصل کنید
هنگامی که یک رابط BigQuery را به برنامه Vertex AI Vision خود اضافه می کنید، همه خروجی های مدل برنامه متصل به جدول هدف وارد می شوند.
میتوانید جدول BigQuery خود را ایجاد کنید و زمانی که یک رابط BigQuery را به برنامه اضافه میکنید، آن جدول را مشخص کنید یا به پلتفرم برنامه Vertex AI Vision اجازه دهید به طور خودکار جدول را ایجاد کند.
ایجاد جدول به صورت خودکار
اگر به پلتفرم برنامه Vertex AI Vision اجازه دهید به طور خودکار جدول را ایجاد کند، می توانید این گزینه را هنگام اضافه کردن گره اتصال BigQuery مشخص کنید.
اگر میخواهید از ایجاد جدول خودکار استفاده کنید، مجموعه داده و شرایط جدول زیر اعمال میشود:
- مجموعه داده: نام مجموعه داده ایجاد شده به طور خودکار visionai_dataset است.
- جدول: نام جدول ایجاد شده به طور خودکار visionai_dataset.APPLICATION_ID است.
- رسیدگی به خطا:
- اگر جدولی با همان نام تحت مجموعه داده یکسان وجود داشته باشد، ایجاد خودکار اتفاق نمی افتد.
- تب Applications داشبورد Vertex AI Vision را باز کنید. به تب Applications بروید
- مشاهده برنامه در کنار نام برنامه خود را از لیست انتخاب کنید.
- در صفحه سازنده برنامه ، BigQuery را از بخش Connectors انتخاب کنید.
- فیلد مسیر BigQuery را خالی بگذارید.
- در فراداده فروشگاه از: فقط «Analytics اشغال» را انتخاب کنید و علامت جریانها را بردارید.
نمودار نهایی برنامه باید به شکل زیر باشد:
7. برنامه خود را برای استفاده مستقر کنید
بعد از اینکه برنامه سرتاسر خود را با تمام اجزای لازم ساختید، آخرین مرحله برای استفاده از برنامه، استقرار آن است.
- تب Applications داشبورد Vertex AI Vision را باز کنید. به تب Applications بروید
- مشاهده نمودار را در کنار برنامه ترافیک برنامه در لیست انتخاب کنید.
- از صفحه سازنده نمودار برنامه، روی دکمه Deploy کلیک کنید.
- در گفتگوی تأیید زیر، Deploy را انتخاب کنید. عملیات استقرار ممکن است چند دقیقه طول بکشد تا کامل شود. پس از اتمام استقرار، تیک سبز رنگ در کنار گره ها ظاهر می شود.
8. محتوای ویدیویی را در انبار ذخیره سازی جستجو کنید
بعد از اینکه دادههای ویدیویی را در برنامه پردازشی خود وارد کردید، میتوانید دادههای ویدیوی تحلیلشده را مشاهده کنید و دادهها را براساس اطلاعات تجزیه و تحلیل اشغال جستجو کنید.
- تب Warehouses داشبورد Vertex AI Vision را باز کنید. به برگه انبارها بروید
- انبار ترافیک- انبار را در لیست پیدا کنید و روی مشاهده دارایی ها کلیک کنید.
- در قسمت People count یا Vehicle count مقدار حداقل را 1 و حداکثر مقدار را 5 قرار دهید.
- برای فیلتر کردن دادههای ویدیوی پردازش شده ذخیره شده در انبار رسانه Vertex AI Vision، روی جستجو کلیک کنید.
نمایی از داده های ویدئویی ذخیره شده که با معیارهای جستجو در کنسول Google Cloud مطابقت دارد. اعتبار ویدیو: الیزابت ماور در Pixabay ( معیارهای جستجو اعمال شد ).
9. خروجی را در جدول BigQuery تجزیه و تحلیل کنید
به BigQuery بروید
مجموعه داده را انتخاب کنید: visionai_dataset
جدول را انتخاب کنید: APPLICATION_ID شما (در این مورد برنامه ترافیک)
روی سه نقطه از سمت راست به نام جدول کلیک کنید و روی Query کلیک کنید
پرس و جو زیر را بنویسید
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 دنبال کنید.
در منوی سمت راست روی Explore Data کلیک کنید و explore with Looker Studio را انتخاب کنید
در قسمت "dimension" زمان را اضافه کنید و پیکربندی زمان را به تاریخ-زمان تغییر دهید. در "بُعد شکست" line_id را اضافه کنید.
نمودار بالا تعداد وسایل نقلیه/فردی که از هر خط در دقیقه عبور می کنند را نشان می دهد.
نوارهای آبی تیره و آبی روشن دو خط شناسه متفاوت را نشان می دهند.
10. تبریک می گویم
تبریک می گویم، شما آزمایشگاه را تمام کردید!
تمیز کردن
برای جلوگیری از تحمیل هزینه به حساب Google Cloud خود برای منابع استفاده شده در این آموزش، یا پروژه حاوی منابع را حذف کنید یا پروژه را نگه دارید و منابع فردی را حذف کنید.
پروژه را حذف کنید
منابع فردی را حذف کنید
منابع
https://cloud.google.com/vision-ai/docs/overview
https://cloud.google.com/vision-ai/docs/occupancy-count-tutorial
بازخورد
برای ارائه بازخورد اینجا را کلیک کنید