1. מטרות
סקירה כללית
ה-Codelab הזה מתמקד ביצירת אפליקציית Vertex AI Vision מקצה לקצה כדי להדגים שליחת סרטונים עם תכונת סינון התנועה. במדריך הזה נסביר על הפרמטרים השונים בהגדרת מסנן התנועה:
- רגישות לזיהוי תנועה
- משך אירוע מינימלי
- חלון מבט לאחור
- זמן צינון
- אזור זיהוי תנועה
מה תלמדו
- איך להטמיע סרטונים לסטרימינג
- התכונות השונות שזמינות במסנן התנועה ואיך משתמשים בהן
- איפה אפשר לבדוק את הנתונים הסטטיסטיים של מסנן התנועה
- איך משנים את ההגדרה בהתאם לסרטון
2. לפני שתתחיל
- במסוף Google Cloud, בדף לבחירת הפרויקט בוחרים פרויקט בענן או לוחצים על create a Google Cloud project. הערה: אם אתם לא מתכננים לשמור את המשאבים שתיצרו בתהליך הזה, תוכלו ליצור פרויקט חדש במקום לבחור באחד מהפרויקטים הקיימים. בסיום התהליך תוכלו למחוק את הפרויקט ולהסיר את כל המשאבים שמשויכים אליו. כניסה לדף לבחירת הפרויקט
- הקפידו לוודא שהחיוב מופעל בפרויקט שלכם ב-Cloud. כך בודקים אם החיוב מופעל בפרויקט
- מפעילים את ממשקי ה-API של Compute Engine ו-Vision AI. הפעלת ממשקי ה-API
יצירת חשבון שירות:
- במסוף Google Cloud, נכנסים לדף יצירת חשבון שירות. מעבר אל יצירת חשבון שירות
- בוחרים את הפרויקט הרצוי.
- כותבים שם בשדה Service account name. השדה Service account ID במסוף Google Cloud יאוכלס בהתאם לשם הזה. כותבים תיאור בשדה תיאור חשבון השירות. לדוגמה, חשבון שירות להפעלה מהירה.
- לוחצים על יצירה והמשך.
- כדי לספק גישה לפרויקט, יש להעניק את התפקידים הבאים לחשבון השירות: Vision AI > Vision AI Editor, Compute Engine > אדמין מכונות של Compute (בטא), Storage > Storage Object Viewer † . בוחרים תפקיד מהרשימה Select a role. כדי להוסיף עוד תפקידים, לוחצים על Add another role ומוסיפים אותם אחד אחרי השני. הערה: השדה Role קובע לאילו משאבים בפרויקט לחשבון השירות תהיה גישה. אתם יכולים לבטל את התפקידים האלה או להוסיף עוד תפקידים מאוחר יותר. בסביבות ייצור לא מקצים את התפקידים 'בעלים', 'עריכה' או 'צפייה'. במקום זאת, צריך להקצות תפקיד מוגדר מראש או תפקיד בהתאמה אישית שמתאימים לצרכים שלכם.
- לוחצים על המשך.
- לוחצים על Done כדי לסיים ליצור את חשבון השירות. חשוב לא לסגור את חלון הדפדפן. תשתמשו בו בשלב הבא.
יוצרים מפתח לחשבון שירות:
- במסוף Google Cloud, לוחצים על כתובת האימייל של חשבון השירות שנוצר.
- לוחצים על Keys.
- לוחצים על Add key ואז על Create new key.
- לוחצים על Create. למחשב שלכם תתבצע הורדה של קובץ JSON עם המפתח.
- לוחצים על סגירה.
- מתקינים ומפעילים את Google Cloud CLI.
† התפקיד נדרש רק אם מעתיקים קובץ סרטון לאימון המודל מקטגוריה של 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-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. מידע נוסף זמין במאמר מיקומים בענן.
- 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.
רישום שידור חדש
- בחלונית הימנית של Vertex AI Vision, לוחצים על הכרטיסייה Click streams (זרמי קליקים).
- לוחצים על 'הרשמה'.
- בשדה 'שם מקור הנתונים' מזינים
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 שניות בין התחלת פעולת ההעברה של vaictl לבין הופעת הסרטון בלוח הבקרה.
אחרי שההטמעה של השידור תהיה זמינה, תוכלו לראות את פיד הווידאו בכרטיסייה 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 - 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. קונרד ו-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 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, לוחצים על הכרטיסייה Click streams (זרמי קליקים).
- לוחצים על 'הרשמה'.
- בשדה 'שם מקור הנתונים' מזינים
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 שניות בין התחלת פעולת ההעברה של vaictl לבין הופעת הסרטון בלוח הבקרה.
אחרי שההטמעה של השידור תהיה זמינה, תוכלו לראות את פיד הווידאו בכרטיסייה 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 בגלל השימוש במשאבים שנעשה במסגרת המדריך הזה, צריך להפסיק את הפעולה של 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
משוב