فیلتر حرکت Vertex AI Vision

1. اهداف

نمای کلی

این آزمایشگاه کد روی ایجاد یک برنامه Vertex AI Vision سرتاسر برای نمایش ارسال ویدیو با ویژگی فیلتر حرکت تمرکز دارد. در این آموزش، پارامترهای مختلف در پیکربندی فیلتر حرکتی را بررسی خواهیم کرد:

  • حساسیت تشخیص حرکت
  • حداقل طول رویداد
  • پنجره نگاه به عقب
  • زمان خنک شدن
  • منطقه تشخیص حرکت

چیزی که یاد خواهید گرفت

  • نحوه جذب ویدیو برای پخش جریانی
  • ویژگی های مختلف موجود در فیلتر حرکت و نحوه استفاده از آنها
  • از کجا می توان آمار فیلتر حرکت را بررسی کرد
  • نحوه تنظیم تنظیمات بر اساس ویدیوی خود

2. قبل از شروع

  1. در کنسول Google Cloud، در صفحه انتخابگر پروژه، یک پروژه Google Cloud را انتخاب یا ایجاد کنید . توجه : اگر قصد ندارید منابعی را که ایجاد می کنید در این روش حفظ کنید، به جای انتخاب پروژه موجود، یک پروژه ایجاد کنید. پس از اتمام این مراحل، می توانید پروژه را حذف کنید و تمام منابع مرتبط با پروژه را حذف کنید. به انتخابگر پروژه بروید
  2. مطمئن شوید که صورتحساب برای پروژه Cloud شما فعال است. با نحوه بررسی فعال بودن صورت‌حساب در پروژه آشنا شوید.
  3. APIهای Compute Engine و Vision AI را فعال کنید. API ها را فعال کنید

ایجاد یک حساب خدمات:

  1. در کنسول Google Cloud، به صفحه ایجاد حساب سرویس بروید. به ایجاد حساب سرویس بروید
  2. پروژه خود را انتخاب کنید
  3. در قسمت نام حساب سرویس ، یک نام وارد کنید. کنسول Google Cloud فیلد شناسه حساب سرویس را بر اساس این نام پر می کند. در قسمت Service account description یک توضیحات را وارد کنید. به عنوان مثال، حساب سرویس برای شروع سریع.
  4. روی ایجاد و ادامه کلیک کنید.
  5. برای دسترسی به پروژه خود، نقش(های) زیر را به حساب سرویس خود بدهید: Vision AI > Vision AI Editor، Compute Engine > Compute Instance Admin (بتا)، Storage > Storage Object Viewer † . در لیست انتخاب نقش ، یک نقش را انتخاب کنید. برای نقش های اضافی، روی افزودن نقش دیگری کلیک کنید و هر نقش اضافی را اضافه کنید. توجه : فیلد Role بر منابعی که حساب سرویس شما می تواند در پروژه شما دسترسی داشته باشد تأثیر می گذارد. می‌توانید این نقش‌ها را لغو کنید یا بعداً نقش‌های دیگری را اعطا کنید. در محیط‌های تولید، نقش‌های مالک، ویرایشگر یا بیننده را اعطا نکنید. در عوض، یک نقش از پیش تعریف شده یا نقش سفارشی که نیازهای شما را برآورده می کند، اعطا کنید.
  6. روی Continue کلیک کنید.
  7. برای تکمیل ساخت حساب سرویس روی Done کلیک کنید. پنجره مرورگر خود را نبندید. در مرحله بعد از آن استفاده خواهید کرد.

یک کلید حساب کاربری ایجاد کنید:

  1. در کنسول Google Cloud، روی آدرس ایمیل حساب سرویسی که ایجاد کردید کلیک کنید.
  2. روی کلیدها کلیک کنید.
  3. روی افزودن کلید کلیک کنید و سپس روی ایجاد کلید جدید کلیک کنید.
  4. روی ایجاد کلیک کنید. یک فایل کلید JSON در رایانه شما دانلود می شود.
  5. روی Close کلیک کنید.
  6. Google Cloud CLI را نصب و مقداردهی اولیه کنید .

† نقش تنها در صورتی لازم است که یک فایل ویدئویی نمونه را از یک سطل ذخیره‌سازی ابری کپی کنید.

3. فیلتر حرکت

فیلتر حرکت بخش‌های ویدیویی از حرکت و محصول را که حاوی رویدادهای حرکتی است، ضبط می‌کند. با تنظیم حساسیت حرکت، حداقل طول رویداد، پنجره نگاه، دوره خنک شدن، و منطقه تشخیص حرکت، کاربر می تواند پایه فیلتر را بر اساس نیازهای خود پیکربندی کند.

پیکربندی فیلتر حرکت

5 پیکربندی در فیلتر حرکت برای سفارشی سازی موجود است.

  1. حساسیت حرکتی: حرکت چقدر حساس باید تحریک شود.
  2. حداقل طول رویداد: حداقل طول یک رویداد حرکتی ثبت می شود.
  3. پنجره نگاه: چه مدت باید ضبط ویدیو قبل از شناسایی یک رویداد حرکتی شروع شود.
  4. دوره خنک شدن: پس از پایان یک رویداد حرکتی، خنک‌سازی با مدت زمان مشخص اتفاق می‌افتد. در طول دوره خنک شدن، رویدادهای حرکتی فعال نمی شوند.
  5. منطقه تشخیص حرکت: منطقه پیکربندی شده توسط کاربر برای تعیین مکان تشخیص حرکت. (در بخش بعدی توضیح داده خواهد شد)

حساسیت حرکتی

در دستور vaictl از flag motion_detection_sensitivity استفاده کنید.
رشته رسانه پیش فرض می توانید از بین کم، متوسط ​​یا زیاد انتخاب کنید.

هرچه حساسیت تشخیص حرکت بیشتر باشد، حساسیت آن نسبت به نویز و حرکات کوچکتر بیشتر است. این تنظیم برای تنظیماتی که در آن اجسام متحرک کوچکتر (مانند افراد از راه دور) و روشنایی پایدار وجود دارد توصیه می شود.

از سوی دیگر، حساسیت کم نسبت به تداخل نور حساسیت کمتری دارد. این تنظیم برای مواقعی که تداخل نوری بیشتری وجود دارد، مانند محیط بیرون و برای کیفیت پایین‌تر ویدیو، جایی که ممکن است نویزهای بیشتری وجود داشته باشد، عالی است. از آنجایی که این تنظیمات تهاجمی ترین فیلتر از همه است، می تواند حرکات اجسام کوچک را نادیده بگیرد.

حداقل طول رویداد

در دستور vaictl از flag min_event_length_in_seconds استفاده کنید.
عدد صحیح پیش فرض 10 ثانیه محدوده از 0 ثانیه تا 3600 ثانیه.

حداقل مدت ویدیوهای رویداد حرکتی که پس از شناسایی یک بخش رویداد حرکتی در قاب، تجزیه می‌شوند.

پنجره نگاه

در دستور vaictl از flag look_back_window_in_seconds استفاده کنید.
عدد صحیح پیش فرض 3 ثانیه محدوده از 0 ثانیه تا 3600 ثانیه.

پنجره نگاه به مدت زمانی است که قبل از شناسایی یک رویداد حرکتی در حافظه پنهان ذخیره می شود. زمانی مفید است که ما علاقه مندیم ببینیم چند ثانیه قبل از شناسایی رویدادهای حرکتی در کادر چه اتفاقی می افتد.

دوره خنک شدن

در دستور vaictl از flag cool_down_period_in_seconds استفاده کنید.
عدد صحیح 300 ثانیه پیش فرض محدوده از 0 ثانیه تا 3600 ثانیه.

دوره خنک شدن مدت زمانی است که تشخیص حرکت پس از ثبت یک رویداد حرکتی متوقف می شود. در طول دوره خنک شدن، هیچ محاسباتی برای تشخیص حرکت انجام نخواهد شد.

4. مثال فیلتر حرکت پایه

راهنمای Vaictl SDK

برای بررسی کتابچه راهنمای vaictl برای جریان ورودی با فیلتر حرکت، از دستور زیر استفاده کنید.

vaictl send video-file applying motion-filter -h

یک ویدیوی نمونه تهیه کنید

  1. می توانید با دستور 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 .

متغیرهای محیطی را آماده کنید

برای استفاده از الگوی فرمان ارائه شده، متغیرهای محیطی زیر را تنظیم کنید.

متغیرهای vaictl

  • 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

متغیرهای فیلتر حرکت

  • MOTION_SENSITIVITY: تشخیص حرکت چقدر حساس خواهد بود.
  • MIN_EVENT_LENGTH: حداقل طول رویدادهای حرکتی.
  • LOOK_BACK_WINDOW: مدت زمان ثبت قبل از اولین حرکت در یک رویداد حرکتی.
  • COOL_DOWN_PERIOD: دوره ای که تشخیص حرکت پس از ثبت یک رویداد حرکت متوقف می شود.
export MOTION_SENSITIVITY=<low or medium or high>
export MIN_EVENT_LENGTH=<0-3600>
export LOOK_BACK_WINDOW=<0-3600>
export COOL_DOWN_PERIOD=<0-3600>

دستور فیلتر حرکت را آماده کنید

دو گزینه برای استفاده از فیلتر حرکت با جریان ورودی وجود دارد. اولین گزینه ارسال رویدادهای حرکتی به یک جریان در کنسول ابری است. گزینه دوم ارسال رویدادهای حرکتی به حافظه محلی است.

ارسال نتایج به کنسول ابری

می توانید از vaictl برای پخش جریانی داده های ویدیوی خروجی به کنسول ابری استفاده کنید. با فعال کردن Vision AI API در Cloud Console شروع کنید.

یک جریان جدید ثبت کنید

  1. روی تب streams در پانل سمت چپ Vertex AI Vision کلیک کنید.
  2. روی ثبت نام کلیک کنید
  3. در نام Stream motion-detection-stream را وارد کنید
  4. در منطقه وارد us-central1 شوید
  5. ثبت نام را کلیک کنید

ارسال نتایج به جریان

این دستور یک فایل ویدیویی را به یک جریان پخش می کند. اگر از پرچم –loop استفاده می‌کنید، ویدیو تا زمانی که دستور را متوقف نکنید، در جریان پخش می‌شود. ما این دستور را به عنوان یک کار پس‌زمینه اجرا می‌کنیم تا به جریان ادامه دهد.

nohup را در ابتدا و & در انتها اضافه کنید تا به کار پس‌زمینه تبدیل شود.

INPUT_VIDEO=street_vehicles_people.mp4

vaictl -p $PROJECT \
       -l $LOCATION_ID \
       -c application-cluster-0 \
       --service-endpoint visionai.googleapis.com \
  send video-file  --file-path $INPUT_VIDEO \
  applying motion-filter
         --motion-sensitivity=$MOTION_SENSITIVITY \
         --min-event-length=$MIN_EVENT_LENGTH \
         --lookback-length=$LOOK_BACK_WINDOW \
         --cooldown-length=$COOL_DOWN_PERIOD \
  to streams motion-detection-stream --loop

ممکن است بین شروع عملیات vaictl ingest و نمایش ویدیو در داشبورد 100 ثانیه طول بکشد.

پس از دریافت جریان، می‌توانید فید ویدیو را در برگه Streams داشبورد Vertex AI Vision با انتخاب جریان ترافیک مشاهده کنید.

به تب Streams بروید

ارسال نتایج به حافظه محلی

این دستور یک فایل ویدیویی را به یک جریان پخش می کند.

nohup را در ابتدا و & در انتها اضافه کنید تا به کار پس‌زمینه تبدیل شود.

INPUT_VIDEO=street_vehicles_people.mp4
OUTPUT_PATH=<path_to_store_motion_events_on_local_disk>

nohup vaictl -p $PROJECT \
             -l $LOCATION_ID \
             -c application-cluster-0 \
             --service-endpoint visionai.googleapis.com \
  send video-file  --file-path $INPUT_VIDEO \
  applying motion-filter
         --motion-sensitivity=$MOTION_SENSITIVITY \
         --min-event-length=$MIN_EVENT_LENGTH \
         --lookback-length=$LOOK_BACK_WINDOW \
         --cooldown-length=$COOL_DOWN_PERIOD \
  to mp4file --mp4-file-path=$OUTPUT_PATH --loop

5. منطقه تشخیص حرکت

در این بخش به استفاده از منطقه تشخیص حرکت و نحوه پیکربندی آن خواهیم پرداخت. این منطقه برای بهبود تشخیص حرکت با پوشاندن حرکتی که از مناطقی که شما علاقه‌ای ندارید، در نظر گرفته شده است.

منطقه تشخیص حرکت دو نوع دارد، (1) مناطق مثبت که در آن تشخیص حرکت فقط در ناحیه مشروح اجرا می شود. (2) مناطق منفی که در آن تشخیص حرکت هر حرکتی را در ناحیه مشروح نادیده می گیرد.

حاشیه نویسی منطقه

از flag zone_annotation در دستور vaictl برای وارد کردن مختصات برای چند ضلعی منطقه استفاده کنید.
رشته پیش فرض برای حاشیه نویسی منطقه خالی است.

حاشیه نویسی منطقه یک ورودی رشته ای از کاربر خواهد بود که مناطقی را در قاب نشان می دهد که کاربر می خواهد پنهان یا روی آنها تمرکز کند. برای حاشیه نویسی منطقه، کاربر باید مختصات تصویر محور x و y را برای هر گره در منطقه مشخص کند. یک ناحیه برای تشکیل چند ضلعی نیاز به سه یا چند گره دارد. ممکن است چندین ناحیه در یک قاب وجود داشته باشد. اگر مناطق با یکدیگر همپوشانی داشته باشند، منطقه تحت پوشش هر دو منطقه همچنان پوشیده خواهد بود.

حاشیه نویسی منطقه دارای یک دستور ورودی خاص است که باید دنبال شود.

  • برای نشان دادن یک گره، از : برای اتصال محور x و y یک هماهنگی تصویر استفاده کنید. به عنوان مثال یک گره از (0,0) در گوشه سمت چپ بالا به صورت 0:0 نشان داده می شود.
  • برای نشان دادن تمام گره ها در یک منطقه، از ; برای اتصال گره ها به عنوان مثال، برای منطقه ای با گره های (0,0) , (100,0) , (100,100) و (0, 100) منطقه به صورت 0:0;100:0;100:100;0:100 همیشه گره ها را به عنوان گره های اتصال در کنار یکدیگر وارد کنید، ترتیب می تواند در جهت عقربه های ساعت یا خلاف جهت عقربه های ساعت باشد.

منطقه تشخیص حرکت - مربع *یک منطقه مربع با چهار گره.

منطقه تشخیص حرکت - مثلث *یک ناحیه مثلثی با سه گره.

  • برای نشان دادن چندین ناحیه در یک قاب، از - برای اتصال مناطق مختلف استفاده کنید. به عنوان مثال، اگر بخواهیم هر دو (0,0) , (100,0) , (100,100) , (0,100) و (120,120) , (110,150) , (200,160) را وارد کنیم، حاشیه نویسی ناحیه ورودی 0:0;100:0;100:100;0:100-120:120;110:150;200:160 خواهد بود. 0:0;100:0;100:100;0:100-120:120;110:150;200:160 .

منطقه تشخیص حرکت - یک قاب با دو منطقه *دو ناحیه در یک قاب.

برای دریافت مختصات از تصویر، ابزارهایی به صورت آنلاین برای کمک به دریافت مختصات وجود دارد. برای مثال، Wolfram - Get Coordinates from Image را ببینید

منطقه مشروح را حذف کنید

از flag exclude_annotated_zone در دستور vaictl برای پیکربندی تشخیص حرکت در منطقه یا خارج از منطقه استفاده کنید.
بولی. پیش فرض نادرست.

Exclude Annotated Zone یک ورودی بولی از کاربر است که نشان می دهد کاربر می خواهد منطقه مشروح در تشخیص حرکت را حذف کند یا خیر.

  • اگر روی true تنظیم شود، ناحیه مشروح شده به عنوان منطقه منفی عمل می کند. حرکات در مناطق حاشیه نویسی شناسایی نمی شوند.

منطقه تشخیص حرکت - گزینه حذف * فقط تشخیص حرکت را در خارج از مناطق ورودی اجرا کنید.

  • اگر روی false تنظیم شود، منطقه به عنوان یک منطقه مثبت عمل می کند، جایی که تشخیص حرکت روی آن تمرکز می کند.

منطقه تشخیص حرکت - شامل گزینه * فقط تشخیص حرکت را در مناطق ورودی اجرا کنید.

6. فیلتر حرکت با منطقه تشخیص حرکت مثال

در این مثال، ما از ویدیویی استفاده خواهیم کرد که درختی به طور مداوم در پیش زمینه در حال حرکت است. در تنظیمات فیلتر حرکتی معمولی، ویدئو فقط یک رویداد حرکتی را تولید می‌کند که مدت زمان ویدیوی اصلی را داشته باشد، زیرا فیلتر حرکت درخت متحرک را به‌عنوان «به‌طور پیوسته در حال حرکت در کل ویدیو» ثبت می‌کند. با این حال، با کمک منطقه تشخیص حرکت، می‌توانیم به درستی حرکت درخت را بپوشانیم و روی حرکت خودروها و عابران پیاده تمرکز کنیم.

آماده سازی ویدیو

ویدیوی نمونه (gs://cloud-samples-data/vertex-ai-vision/dynamic-background-fall.mp4 ) شامل درختان و اتومبیل ها و عابران پیاده از www.changedetection.net است.

اعتبار ویدئو: N. Goyette, P.-M. Jodoin، F. Porikli، J. Konrad، و P. Ishwar، changedetection.net: مجموعه داده معیار تشخیص تغییر جدید ، در Proc. کارگاه آموزشی IEEE در مورد تشخیص تغییر (CDW-2012) در CVPR-2012، Providence، RI، 16-21 ژوئن، 2012

آماده سازی متغیر محیطی

متغیرهای پروژه ابری گوگل

export PROJECT_ID=<Your Google Cloud project ID>
export LOCATION_ID=us-central1
export LOCAL_FILE=street_vehicles_people.mp4

پیکربندی اولیه فیلتر حرکت

export MOTION_SENSITIVITY=<low or medium or high>
export MIN_EVENT_LENGTH=<0-3600>
export LOOK_BACK_WINDOW=<0-3600>
export COOL_DOWN_PERIOD=<0-3600>

پیکربندی منطقه تشخیص حرکت

از زیر انتخاب کنید تا انواع مختلف استفاده از ناحیه تشخیص حرکت را ببینید.

درخت را برای تشخیص حرکت حذف کنید.

export ZONE_ANNOTATION="0:0;680:0;660:70;380:320;100:150"
export EXCLUDE_ANNOTATED_ZONE=true

منطقه تشخیص حرکت - تشخیص حرکت را از منطقه مشروح در ویدیوی مثال حذف کنید * فقط تشخیص حرکت را در خارج از مناطق ورودی اجرا کنید.

تشخیص حرکت فوکوس در خیابان

export ZONE_ANNOTATION="0:300;780:300;780:480;0:480"
export EXCLUDE_ANNOTATED_ZONE=false

منطقه تشخیص حرکت - تشخیص حرکت را از منطقه مشروح در ویدیوی مثال اجرا کنید * فقط تشخیص حرکت را در خارج از مناطق ورودی اجرا کنید.

ارسال جریان ویدئو با فیلتر حرکت

رویدادهای حرکت را به کنسول ابری ارسال کنید

می توانید از vaictl برای پخش جریانی داده های ویدیوی خروجی به کنسول ابری استفاده کنید. با فعال کردن Vision AI API در Cloud Console شروع کنید.

یک جریان جدید ثبت کنید

  1. روی تب streams در پانل سمت چپ Vertex AI Vision کلیک کنید.
  2. روی ثبت نام کلیک کنید
  3. در نام Stream motion-detection-stream را وارد کنید
  4. در منطقه وارد us-central1 شوید
  5. ثبت نام را کلیک کنید

ارسال نتایج به جریان

این دستور یک فایل ویدیویی را به یک جریان پخش می کند. اگر از پرچم –loop استفاده می‌کنید، ویدیو تا زمانی که دستور را متوقف نکنید، در جریان پخش می‌شود. ما این دستور را به عنوان یک کار پس‌زمینه اجرا می‌کنیم تا به جریان ادامه دهد.

nohup را در ابتدا و & در انتها اضافه کنید تا به کار پس‌زمینه تبدیل شود.

vaictl -p $PROJECT \
       -l $LOCATION_ID \
       -c application-cluster-0 \
       --service-endpoint visionai.googleapis.com \
  send video-file  --file-path $INPUT_VIDEO \
  applying motion-filter
         --motion-sensitivity=$MOTION_SENSITIVITY \
         --min-event-length=$MIN_EVENT_LENGTH \
         --lookback-length=$LOOK_BACK_WINDOW \
         --cooldown-length=$COOL_DOWN_PERIOD \
         --zone_annotation=ZONE_ANNOTATION \
         --exclude_annotated_zone=$EXCLUDE_ANNOTATED_ZONE \
  to streams motion-detection-stream --loop

ممکن است بین شروع عملیات vaictl ingest و نمایش ویدیو در داشبورد 100 ثانیه طول بکشد.

پس از دریافت جریان، می‌توانید فید ویدیو را در برگه Streams داشبورد Vertex AI Vision با انتخاب جریان ترافیک مشاهده کنید.

به تب Streams بروید

ارسال نتایج به حافظه محلی

این دستور یک فایل ویدیویی را به یک جریان پخش می کند. اگر از پرچم –loop استفاده می‌کنید، ویدیو تا زمانی که دستور را متوقف نکنید، در جریان پخش می‌شود. ما این دستور را به عنوان یک کار پس‌زمینه اجرا می‌کنیم تا به جریان ادامه دهد.

nohup را در ابتدا و & در انتها اضافه کنید تا به کار پس‌زمینه تبدیل شود.

OUTPUT_PATH=<path_to_store_motion_events>

vaictl -p $PROJECT \
       -l $LOCATION_ID \
       -c application-cluster-0 \
       --service-endpoint visionai.googleapis.com \
  send video-file  --file-path $INPUT_VIDEO \
  applying motion-filter
         --motion-sensitivity=$MOTION_SENSITIVITY \
         --min-event-length=$MIN_EVENT_LENGTH \
         --lookback-length=$LOOK_BACK_WINDOW \
         --cooldown-length=$COOL_DOWN_PERIOD \
         --zone_annotation=$ZONE_ANNOTATION \
         --exclude_annotated_zone=$EXCLUDE_ANNOTATED_ZONE \
  to mp4file --mp4-file-path=$OUTPUT_PATH --loop

7. تبریک می گویم

تبریک می گویم، شما آزمایشگاه را تمام کردید!

پاک کن

برای جلوگیری از تحمیل هزینه به حساب Google Cloud خود برای منابع استفاده شده در این آموزش، عملیات vaictl SDK را از طریق خط فرمان با ctrl + z پایان دهید.

منابع

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

https://cloud.google.com/vision-ai/docs/motion-filtering-model

https://cloud.google.com/vision-ai/docs/create-manage-streams

بازخورد

برای ارائه بازخورد اینجا را کلیک کنید

نظرسنجی

چگونه از این آموزش استفاده خواهید کرد؟

فقط از طریق آن را بخوانید آن را بخوانید و تمرینات را کامل کنید

این کد لبه چقدر مفید بود؟

بسیار مفید متوسط ​​مفید