1. מטרות
סקירה כללית
ה-Codelab הזה מתמקד ביצירת אפליקציה מקצה לקצה של Vertex AI Vision, שמדגים שליחת סרטונים עם תכונה של סינון תנועה. במדריך הזה נסביר על הפרמטרים השונים בהגדרת מסנן התנועה:
- רגישות זיהוי תנועה
- משך האירוע המינימלי
- חלון מבט לאחור
- זמן צינון
- אזור זיהוי תנועה
מה תלמדו
- איך מטמיעים סרטונים בסטרימינג
- תכונות שונות הזמינות ב'מסנן תנועה' ואיך להשתמש בהן
- איפה בודקים את הנתונים הסטטיסטיים של פילטר התנועה
- איך משנים את ההגדרה בהתאם לסרטון
2. לפני שתתחיל
- במסוף Google Cloud, בדף בורר הפרויקטים, בוחרים או יוצרים פרויקט ב-Google Cloud. הערה: אם אתם לא מתכננים לשמור את המשאבים שאתם יוצרים בתהליך, צריך ליצור פרויקט במקום לבחור פרויקט קיים. לאחר השלמת השלבים האלה, תוכלו למחוק את הפרויקט ולהסיר את כל המשאבים שמשויכים לפרויקט. מעבר אל בורר הפרויקטים
- הקפידו לוודא שהחיוב מופעל בפרויקט שלכם ב-Cloud. איך בודקים אם החיוב מופעל בפרויקט
- הפעלת ממשקי ה-API של Compute Engine ו-Vision AI. הפעלת ממשקי ה-API
יוצרים חשבון שירות:
- במסוף Google Cloud, נכנסים לדף Create service account. מעבר לדף Create service account
- בוחרים את הפרויקט הרצוי.
- כותבים שם בשדה Service account name. השדה Service account ID ימולא במסוף Google Cloud בהתאם לשם הזה. מזינים תיאור בשדה Service account description. לדוגמה, 'חשבון שירות' במדריך למתחילים.
- לוחצים על יצירה והמשך.
- כדי לספק גישה לפרויקט, מקצים לחשבון השירות את התפקידים הבאים: Vision AI > Vision AI Editor, Compute Engine > אדמין מכונות של Compute (בטא), אחסון > צפייה באובייקט אחסון † . בוחרים תפקיד מהרשימה Select a role. כדי להוסיף תפקידים, לוחצים על Add another role ומוסיפים את כולם. הערה: השדה Role קובע לאילו משאבים בפרויקט לחשבון השירות תהיה גישה. אתם יכולים לבטל את התפקידים האלה או להוסיף עוד תפקידים מאוחר יותר. בסביבות ייצור אין להקצות את התפקידים 'בעלים', 'עריכה' או 'צפייה', אלא תפקיד מוגדר מראש או תפקיד בהתאמה אישית שתואם לצרכים שלכם.
- לוחצים על המשך.
- לוחצים על Done כדי לסיים ליצור את חשבון השירות. חשוב לא לסגור את חלון הדפדפן. תשתמשו בה בשלב הבא.
יוצרים מפתח לחשבון השירות:
- במסוף Google Cloud, לוחצים על כתובת האימייל של חשבון השירות שיצרתם.
- לוחצים על Keys.
- לוחצים על Add key ואז על Create new key.
- לוחצים על Create. למחשב שלכם תתבצע הורדה של קובץ JSON עם המפתח.
- לוחצים על סגירה.
- מתקינים ומאתחלים את ה-CLI של Google Cloud.
1 התפקיד נדרש רק אם מעתיקים קובץ וידאו לדוגמה מקטגוריה של Cloud Storage.
3. פילטר תנועה
פילטר תנועה מתעד קטעי וידאו של תנועה ושל מוצרים שמכילים אירועי תנועה. המשתמשים יכולים להגדיר את בסיס המסנן לפי הצרכים שלהם באמצעות שינוי הרגישות לתנועה, משך האירוע המינימלי, חלון המבט לאחור, תקופת הצינון ואזור זיהוי התנועה.
הגדרת מסנן התנועה
יש 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
הכנת סרטון לדוגמה
- אפשר להעתיק סרטון לדוגמה באמצעות הפקודה 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.
- סימון – לולאה: אופציונלי. הפעלת נתונים של קבצים בלופ כדי לדמות סטרימינג.
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 Console. האפשרות השנייה היא לשלוח את אירועי התנועה לאחסון המקומי.
שליחת התוצאות למסוף Cloud
אפשר להשתמש ב-vaictl כדי לשדר את נתוני הפלט של הווידאו למסוף Cloud. כדי להתחיל, מפעילים את Vision AI API במסוף Cloud.
רישום שידור חדש
- לוחצים על הכרטיסייה 'שידורים' בחלונית השמאלית של Vertex AI Vision.
- לוחצים על 'הרשמה'
- בשם מקור הנתונים, מזינים
motion-detection-stream
. - באזור, צריך להזין
us-central1
- רישום קליקים
התוצאות נשלחות לשידור
הפקודה הזו משדרת קובץ וידאו בסטרימינג. אם משתמשים בדגל -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.
הערך של 'החרגת אזור עם הערות' הוא קלט בוליאני מהמשתמש, שמציין אם המשתמש רוצה להחריג את האזור עם הערות בזיהוי התנועה.
- אם המדיניות מוגדרת לערך
true
, האזור עם ההערות יפעל כאזור שלילי. לא יזוהו תנועות באזורים עם ההערות.
*יש להפעיל זיהוי תנועה רק מחוץ לאזורי הקלט.
- אם המדיניות מוגדרת כ-False, האזור ישמש כטווח חיובי, שבו זיהוי התנועה יתמקד.
*יש להפעיל זיהוי תנועה רק בתחומי הקלט.
6. דוגמה למסנן תנועה עם אזור זיהוי תנועה
בדוגמה הזו נשתמש בסרטון עם עץ שזז בחזית כל הזמן. בהגדרת מסנן תנועה רגילה, הסרטון יפיק רק אירוע תנועה אחד שמכיל את משך הזמן של הסרטון המקורי, משום שמסנן התנועה רושם את העץ שנע כ"נע באופן קבוע לאורך כל הסרטון". עם זאת, בעזרת אזור זיהוי התנועה אנחנו יכולים להסוות כראוי את התנועה מהעץ ולהתמקד בתנועה של מכוניות והולכי רגל.
הכנת סרטון
הסרטון לדוגמה (gs://cloud-Sample-data/vertex-ai-vision/dynamic-background-fall.mp4 ) מכיל עצים, מכוניות והולכי רגל מהאתר www.changedetection.net.
הקרדיטים של הסרטון: N. Goyette, P.-M. ג'ודוין, פ. Porikli, J. קונראד ופ. Ishwar, changedetection.net: מערך נתונים חדש של בנצ'מרק לזיהוי שינויים, ב-Proc. IEEE Workshop on Change Detection (CDW-2012) ב-CVPR-2012, פרובידנס, RI, 16-21 ביוני, 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 כדי לשדר את נתוני הפלט של הווידאו למסוף Cloud. כדי להתחיל, מפעילים את Vision AI API במסוף Cloud.
רישום שידור חדש
- לוחצים על הכרטיסייה 'שידורים' בחלונית השמאלית של Vertex AI Vision.
- לוחצים על 'הרשמה'
- בשם מקור הנתונים, מזינים
motion-detection-stream
. - באזור, צריך להזין
us-central1
- רישום קליקים
התוצאות נשלחות לשידור
הפקודה הזו משדרת קובץ וידאו בסטרימינג. אם משתמשים בדגל -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, על ידי בחירה של עדכוני התנועה.
שליחת התוצאות לאחסון המקומי
הפקודה הזו משדרת קובץ וידאו בסטרימינג. אם משתמשים בדגל -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
משוב