פילטר תנועה של 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. נכנסים לדף Create service account במסוף Google Cloud. כניסה לדף Create service account
  2. בוחרים את הפרויקט הרצוי.
  3. כותבים שם בשדה Service account name. השדה Service account ID במסוף Google Cloud יאוכלס בהתאם לשם הזה. מזינים תיאור בשדה Service account description. לדוגמה, חשבון שירות למדריך למתחילים.
  4. לוחצים על יצירה והמשך.
  5. כדי לתת גישה לפרויקט, מקצים לחשבון השירות את התפקידים הבאים: Vision AI‏ > Vision AI Editor, ‏ Compute Engine‏ > Compute Instance Admin (בטא), ‏ 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. מתקינים ומפעילים את ה-CLI של Google Cloud.

† התפקיד הזה נדרש רק אם מעתיקים קובץ וידאו לדוגמה מקטגוריה של 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-Sample-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: אופציונלי. נתוני קובץ בלופ כדי לדמות סטרימינג.
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

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

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

  1. לוחצים על הכרטיסייה 'שידורים' בחלונית השמאלית של Vertex AI Vision.
  2. לוחצים על 'הרשמה'.
  3. בשדה 'שם מקור הנתונים', מזינים motion-detection-stream
  4. בשדה region מזינים 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 שניות בין ההתחלה של פעולת הטמעת הנתונים של לפחות רגע לבין הצגת הסרטון במרכז השליטה.

אחרי שהטמעת הנתונים של השידור תהיה זמינה, תוכלו לראות את פיד הווידאו בכרטיסייה Streams במרכז הבקרה של Vertex AI Vision, על ידי בחירה של עדכוני התנועה.

כניסה לכרטיסייה 'עדכונים'

שליחת התוצאות לאחסון המקומי

הפקודה הזו משדרת קובץ וידאו בסטרימינג.

מוסיפים 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 – אחזור קואורדינטות מתמונה

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

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

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

  • אם הערך מוגדר כ-true, האזור עם ההערה יפעל כאזור שלילי. תנועות באזורים עם ההערות לא יזוהו.

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

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

אזור זיהוי תנועה – כולל אפשרות *יש להפעיל זיהוי תנועה רק בתחומי הקלט.

6. דוגמה למסנן תנועה עם אזור זיהוי תנועה

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

הכנת הסרטון

סרטון הדוגמה (gs://cloud-samples-data/vertex-ai-vision/dynamic-background-fall.mp4) מכיל עצים, מכוניות ופedestrians מ-www.changedetection.net.

קרדיט על הסרטון: N. Goyette, P.-M. Jodoin, F. Porikli, J. Konrad ו-P. Ishwar, changedetection.net: A new change notification benchmark dataset (מערך נתונים חדש לזיהוי שינויים בנצ'מרק), ב-Proc. IEEE Workshop on Change Detection (CDW-2012) at CVPR-2012, Providence, RI, 16-21 Jun., 2012

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

משתני פרויקט ב-Google Cloud.

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 כדי להעביר את נתוני הסרטון של הפלט בסטרימינג למסוף הענן. בשלב הראשון, מפעילים את Vision AI API במסוף Cloud.

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

  1. לוחצים על הכרטיסייה 'שידורים' בחלונית השמאלית של Vertex AI Vision.
  2. לוחצים על 'הרשמה'.
  3. בשדה 'שם מקור הנתונים', מזינים motion-detection-stream
  4. בשדה region מזינים 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 שניות בין ההתחלה של פעולת הטמעת הנתונים של לפחות רגע לבין הצגת הסרטון במרכז השליטה.

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

מועיל מאוד מועיל במידה מסוימת