פילטר תנועה של Vertex AI Vision

1. מטרות

סקירה כללית

ב-Codelab הזה נתמקד ביצירת אפליקציית Vertex AI Vision מקצה לקצה כדי להדגים שליחת סרטונים עם תכונת סינון התנועה. במדריך הזה נסביר על הפרמטרים השונים בהגדרת מסנן התנועה:

  • רגישות לזיהוי תנועה
  • משך אירוע מינימלי
  • חלון מבט לאחור
  • זמן צינון
  • אזור זיהוי תנועה

מה תלמדו

  • איך להטמיע סרטונים לסטרימינג
  • התכונות השונות שזמינות במסנן התנועה ואיך משתמשים בהן
  • איפה אפשר לבדוק את הנתונים הסטטיסטיים של מסנן התנועה
  • איך משנים את ההגדרה בהתאם לסרטון

2. לפני שתתחיל

  1. במסוף Google Cloud, בדף לבחירת הפרויקט בוחרים פרויקט או לוחצים על create a Google Cloud project. הערה: אם אתם לא מתכננים לשמור את המשאבים שתיצרו בתהליך הזה, תוכלו ליצור פרויקט חדש במקום לבחור באחד מהפרויקטים הקיימים. בסיום התהליך תוכלו למחוק את הפרויקט ולהסיר את כל המשאבים שמשויכים אליו. כניסה לדף לבחירת הפרויקט
  2. הקפידו לוודא שהחיוב מופעל בפרויקט שלכם ב-Cloud. כך בודקים אם החיוב מופעל בפרויקט
  3. מפעילים את ממשקי ה-API של Compute Engine ו-Vision AI. הפעלת ממשקי ה-API

יצירת חשבון שירות:

  1. במסוף Google Cloud, נכנסים לדף יצירת חשבון שירות. כניסה לדף יצירת חשבון שירות
  2. בוחרים את הפרויקט הרצוי.
  3. כותבים שם בשדה Service account name. השדה מזהה חשבון שירות במסוף Google Cloud יאוכלס בהתאם לשם הזה. בשדה תיאור חשבון שירות, מזינים תיאור. לדוגמה, חשבון שירות להפעלה מהירה.
  4. לוחצים על יצירה והמשך.
  5. כדי לתת גישה לפרויקט, מקצים לחשבון השירות את התפקידים הבאים: Vision AI > Vision AI Editor, Compute Engine > אדמין מכונות של Compute (בטא), Storage > Storage Object Viewer † . בוחרים תפקיד מהרשימה Select a role. כדי להוסיף עוד תפקידים, לוחצים על Add another role ומוסיפים אותם אחד אחרי השני. הערה: השדה Role קובע לאילו משאבים בפרויקט לחשבון השירות תהיה גישה. אתם יכולים לבטל את התפקידים האלה או להוסיף עוד תפקידים מאוחר יותר. בסביבות ייצור אין להקצות את התפקידים 'בעלים', 'עריכה' או 'צפייה'. במקום זאת, צריך להקצות תפקיד מוגדר מראש או תפקיד בהתאמה אישית שמתאימים לצרכים שלכם.
  6. לוחצים על המשך.
  7. לוחצים על Done כדי לסיים ליצור את חשבון השירות. חשוב לא לסגור את חלון הדפדפן. תשתמשו בו בשלב הבא.

יוצרים מפתח לחשבון שירות:

  1. במסוף Google Cloud, לוחצים על כתובת האימייל של חשבון השירות שנוצר.
  2. לוחצים על Keys.
  3. לוחצים על Add key ואז על Create new key.
  4. לוחצים על Create. למחשב שלכם תתבצע הורדה של קובץ JSON עם המפתח.
  5. לוחצים על סגירה.
  6. מתקינים ומפעילים את Google Cloud CLI.

‫† התפקיד נדרש רק אם מעתיקים קובץ סרטון לאימון המודל מקטגוריה של Cloud Storage.

3. מסנן תנועה

מסנן התנועה מתעד תנועה וקטעי וידאו של מוצרים שמכילים אירועי תנועה. המשתמשים יכולים להגדיר את המסנן לפי הצרכים שלהם באמצעות שינוי הרגישות לתנועה, האורך המינימלי של האירוע, חלון מבט לאחור, תקופת הצינון ואזור זיהוי התנועה.

הגדרה של מסנן התנועה

יש 5 הגדרות שזמינות במסנן התנועה להתאמה אישית.

  1. רגישות לתנועה: רמת הרגישות שצריכה להיות כדי שהתנועה תפעיל את המצלמה.
  2. משך האירוע המינימלי: משך הזמן המינימלי שבו יתועד אירוע תנועה.
  3. חלון המבט לאחור: כמה זמן לפני זיהוי אירוע תנועה הסרטון צריך להתחיל להקליט.
  4. תקופת צינון: אחרי שאירוע תנועה מסתיים, תתחיל תקופת צינון למשך הזמן שצוין. במהלך תקופת ההמתנה, לא יופעלו אירועי תנועה.
  5. אזור לזיהוי תנועה: אזור שהמשתמש מגדיר כדי לציין איפה יופעל זיהוי התנועה. (הסבר מפורט יופיע בקטע הבא)

רגישות לתנועה

משתמשים בדגל motion_detection_sensitivity בפקודת vaictl.
מחרוזת. ברירת המחדל של אמצעי ההגעה. אפשר לבחור בין נמוכה, בינונית או גבוהה.

ככל שהרגישות לזיהוי תנועה גבוהה יותר, כך היא רגישה יותר לרעשים ולתנועות קטנות. ההגדרה הזו מומלצת להגדרות שבהן יש עצמים קטנים יותר בתנועה (כמו אנשים מרחוק) ותאורה יציבה.

לעומת זאת, רגישות נמוכה פחות רגישה להפרעות תאורה. ההגדרה הזו מתאימה במיוחד למקרים שבהם יש הפרעות תאורה רבות, כמו בסביבה חיצונית, ולאיכות וידאו נמוכה יותר שבה יכול להיות שיש יותר רעשים. ההגדרה הזו היא הסינון הכי אגרסיבי מכולן, ולכן יכול להיות שהיא תתעלם מתנועות של אובייקטים קטנים.

משך אירוע מינימלי

משתמשים בדגל min_event_length_in_seconds בפקודת vaictl.
מספר שלם. ברירת המחדל היא 10 שניות. הטווח הוא בין 0 שניות ל-3,600 שניות.

משך הזמן המינימלי של סרטונים של אירועי תנועה שינותחו אחרי שזוהה פלח אירועים של תנועה בפריים.

חלון מבט לאחור

משתמשים בדגל look_back_window_in_seconds בפקודת vaictl.
מספר שלם. ברירת המחדל היא 3 שניות. הטווח הוא בין 0 שניות ל-3,600 שניות.

חלון המבט לאחור הוא משך הזמן שבו הנתונים נשמרים במטמון לפני שמתגלה אירוע תנועה. התכונה הזו שימושית כשרוצים לראות מה קורה בפריים כמה שניות לפני שמזוהים אירועי תנועה.

תקופת הצינון

משתמשים בדגל cool_down_period_in_seconds בפקודת vaictl.
מספר שלם. ברירת המחדל היא 300 שניות. הטווח הוא בין 0 שניות ל-3,600 שניות.

תקופת הצינון היא משך הזמן שבו זיהוי התנועה יושהה אחרי שתנועה תזוהה. במהלך תקופת הצינון, לא יופעל חישוב כדי לזהות תנועה.

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.
  • ‫–loop flag: אופציונלי. הנתונים בקובץ חוזרים על עצמם בלולאה כדי לדמות סטרימינג.
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>

הכנת פקודה לסינון תנועה

יש שתי אפשרויות לשימוש במסנן התנועה עם זרם קלט. האפשרות הראשונה היא לשלוח את אירועי התנועה לזרם במסוף Cloud. האפשרות השנייה היא לשלוח את אירועי התנועה לאחסון מקומי.

שליחת תוצאות ל-Cloud Console

אפשר להשתמש ב-vaictl כדי להזרים את נתוני הפלט של הסרטון למסוף Cloud. השלב הראשון הוא להפעיל את Vision AI API במסוף Cloud.

רישום שידור חדש

  1. בחלונית הימנית של Vertex AI Vision, לוחצים על הכרטיסייה Click streams (זרמי קליקים).
  2. לוחצים על 'הרשמה'.
  3. בשדה 'שם מקור הנתונים' מזינים 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

יכול להיות שיחלפו כ-100 שניות בין תחילת פעולת ההזנה של vaictl לבין הופעת הסרטון בלוח הבקרה.

אחרי שההטמעה של השידור תהיה זמינה, תוכלו לראות את פיד הווידאו בכרטיסייה 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) אזורים שליליים שבהם זיהוי התנועה מתעלם מכל תנועה באזור המסומן.

הערה על אזור

משתמשים בדגל 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.

אזור לזיהוי תנועה – פריים עם שני אזורים*שני אזורים בתוך מסגרת.

כדי לקבל קואורדינטות מתמונה, יש באינטרנט כמה כלים שיכולים לעזור. לדוגמה, אפשר לעיין במאמר Wolfram - Get Coordinates from Image

החרגה של אזור עם הערות

משתמשים בדגל exclude_annotated_zone בפקודה vaictl כדי להגדיר זיהוי תנועה באזור או מחוץ לאזור.
בוליאני. ברירת המחדל היא false.

ההגדרה 'החרגת אזור עם הערות' היא קלט בוליאני מהמשתמש, שמציין אם המשתמש רוצה להחריג את האזור עם ההערות בזיהוי תנועה או לא.

  • אם הערך הוא 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, and P. ‪Ishwar, changedetection.net: A new change detection benchmark dataset, in Proc. IEEE Workshop on Change Detection (CDW-2012) at CVPR-2012, Providence, RI, 16-21 Jun., 2012

הכנה של משתני סביבה

משתני פרויקט בענן של Google.

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

אזור לזיהוי תנועה – הפעלת זיהוי תנועה מהאזור שסומן בסרטון לדוגמה *הפעלת זיהוי תנועה רק מחוץ לאזורי הקלט.

שליחת סטרימינג של וידאו עם מסנן תנועה

שליחת אירועי התנועה למסוף Cloud

אפשר להשתמש ב-vaictl כדי להזרים את נתוני הפלט של הסרטון למסוף Cloud. השלב הראשון הוא להפעיל את Vision AI API במסוף Cloud.

רישום שידור חדש

  1. בחלונית הימנית של Vertex AI Vision, לוחצים על הכרטיסייה Click streams (זרמי קליקים).
  2. לוחצים על 'הרשמה'.
  3. בשדה 'שם מקור הנתונים' מזינים 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

יכול להיות שיחלפו כ-100 שניות בין תחילת פעולת ההזנה של vaictl לבין הופעת הסרטון בלוח הבקרה.

אחרי שההטמעה של השידור תהיה זמינה, תוכלו לראות את פיד הווידאו בכרטיסייה 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. מזל טוב

כל הכבוד, סיימתם את ה-Lab.

פינוי נפח

כדי להימנע מחיובים בחשבון 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

משוב

כאן לוחצים כדי לשלוח משוב

סקר

איך תשתמשו במדריך הזה?

רק קוראים את המידע קוראים את המידע ומבצעים את התרגילים

עד כמה ה-codelab הזה היה שימושי?

מועיל במידה רבה מועיל במידה בינונית