1. מטרות
סקירה כללית
ב-codelab הזה נתמקד ביצירה של אפליקציית Vertex AI Vision מקצה לקצה כדי לשלוח אירועים באמצעות התכונה לניהול אירועים. נשתמש בתכונות המובְנות של המודל המיוחד שאומן מראש Occupancy analytics כדי ליצור אירועים על סמך תיעוד של הדברים הבאים:
- ספירת מספר כלי הרכב והאנשים שחוצים כביש בקו מסוים.
- ספירת מספר כלי הרכב לאדם באזור קבוע בכביש.
- זיהוי עומסי תנועה בכל חלק של הכביש.
מה תלמדו
- איך להטמיע סרטונים לסטרימינג
- איך יוצרים אפליקציה ב-Vertex AI Vision
- תכונות שונות שזמינות ב-Occupancy Analytics ואיך משתמשים בהן
- איך פורסים את האפליקציה
- איך מחפשים סרטונים במאגר המדיה של Vertex AI Vision.
- איך יוצרים פונקציה ב-Cloud Functions לעיבוד נתונים של מודל Occupancy Analytics.
- איך יוצרים נושא ומינוי ב-Pub/Sub.
- איך מגדירים ניהול אירועים כדי לשלוח אירועים דרך נושא Pub/Sub.
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. העלאת קובץ וידאו לסטרימינג
אפשר להשתמש ב-vaictl כדי להזרים את נתוני הווידאו לאפליקציה לניתוח נתוני תפוסה.
השלב הראשון הוא להפעיל את Vision AI API במסוף Cloud.
רישום של שידור חדש
- בחלונית הימנית של Vertex AI Vision, לוחצים על הכרטיסייה 'סטרימינג'.
- לוחצים על 'הרשמה'.
- בשדה Stream name (שם מקור הנתונים), מזינים traffic-stream.
- בשדה region (אזור), מזינים us-central1.
- לוחצים על 'הרשמה'.
ייקח כמה דקות עד שהזרם יירשם.
הכנת סרטון לאימון המודל
- אפשר להעתיק סרטון לאימון המודל באמצעות הפקודה הבאה של 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 .
הטמעת נתונים בסטרים
- כדי לשלוח את קובץ הווידאו המקומי הזה לזרם הקלט של האפליקציה, משתמשים בפקודה הבאה. צריך להחליף את המשתנים הבאים:
- 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 export LOCAL_FILE=street_vehicles_people.mp4
- הפקודה הזו משדרת קובץ וידאו לשידור. אם משתמשים בדגל –loop, הסרטון יופעל בלולאה בסטרימינג עד שמפסיקים את הפקודה. נריץ את הפקודה הזו כעבודת רקע כדי שהסטרימינג יימשך.
- ( מוסיפים nohup בהתחלה ו-& בסוף כדי להפוך את הפקודה למשימה ברקע)
nohup vaictl -p $PROJECT_ID \
-l $LOCATION_ID \
-c application-cluster-0 \
--service-endpoint visionai.googleapis.com \
send video-file to streams 'traffic-stream' --file-path $LOCAL_FILE --loop &
יכול להיות שיעברו כ-100 שניות בין התחלת פעולת ההעברה של vaictl לבין הופעת הסרטון בלוח הבקרה.
אחרי שההטמעה של השידור תהיה זמינה, תוכלו לראות את פיד הווידאו בכרטיסייה Streams (שידורים) בלוח הבקרה של Vertex AI Vision. לשם כך, צריך לבחור את השידור של תנועת התנועה.
צפייה בשידור חי של סרטון שמועבר לסטרימינג במסוף Google Cloud. קרדיט על הסרטון: Elizabeth Mavor ב- Pixabay (נוסף פיקסול).
4. יצירת פונקציה של Cloud Functions
נצטרך פונקציה של Cloud Functions כדי לעבד את נתוני המודל וליצור אירועים שיישלחו בהמשך דרך ערוץ האירועים.
יצירת פונקציה של Cloud Functions שמאזינה למודל
- עוברים אל דף היצירה של ממשק המשתמש של Cloud Function.
- מגדירים את שם הפונקציה, שבהמשך ישמש להתייחסות לפונקציה הזו של Cloud Functions בהגדרות של ניהול אירועים.
- חשוב לוודא שהאזור תואם לאפליקציה.
- משנים את הגדרות הטריגר ושומרים אותן.
- לוחצים על הלחצן 'הבא' כדי לעבור לחלק 'קוד'.

- עורכים את הפונקציה ב-Cloud Functions. דוגמה לשימוש בסביבת זמן ריצה של Node.js.
/**
* Responds to any HTTP request.
*
* @param {!express:Request} req HTTP request context.
* @param {!express:Response} res HTTP response context.
*/
exports.hello_http = (req, res) => {
// Logging statement can be read with cmd `gcloud functions logs read {$functionName}`.
// For more about logging, please see https://cloud.google.com/functions/docs/monitoring
// The processor output will be stored in req.body.
const messageString = constructMessage(req.body);
// Send your message to operator output with res HTTP response context.
res.status(200).send(messageString);
};
function constructMessage(data) {
/**
* Typically, your processor output should contains appPlatformMetadata & it's designed output.
* For example here, if your output is of tyoe OccupancyCountingPredictionResult, you will need
* to construct the return annotation as such.
*/
// access appPlatformMetat.
const appPlatformMetadata = data.appPlatformMetadata;
// access annotations.
const annotations = data.annotations.map(annotation => {
// This is a mock OccupancyCountingPredictionResult annotation.
return {"annotation" : {"track_info": {"track_id": "12345"}}};
});
const events = [];
for(const annotation of annotations) {
events.push({
"event_message": "Detection event",
"payload" : {
"description" : "object detected"
},
"event_id" : "track_id_12345"
});
}
/**
* Typically, your cloud function should return a string represent a JSON which has two fields:
* "annotations" must follow the specification of the target model.
* "events" should be of type "AppPlatformEventBody".
*/
const messageJson = {
"annotations": annotations,
"events": events,
};
return JSON.stringify(messageJson);
}
- לוחצים על הלחצן Deploy (פריסה) כדי לפרוס את הפונקציה.
5. יצירת נושא ומינוי ב-Pub/Sub
נצטרך לספק לאפליקציה נושא Pub/Sub שאליו היא יכולה לשלוח את האירוע. כדי לקבל את האירועים, צריך להירשם למינוי ב-Pub/Sub כדי לקבל את הנתונים שהוגדרו.
מידע נוסף על נושא Pub/Sub זמין כאן ועל מינוי כאן.
יצירת נושא Pub/Sub
כדי ליצור נושא ב-Pub/Sub, אפשר להשתמש ב-CLI של gcloud: (צריך להחליף את SUBSCRIPTION_ID בערך אמיתי מההגדרה שלכם)
gcloud pubsub topics create TOPIC_ID
אפשר גם להשתמש בממשק המשתמש של Pub/Sub.
יצירת מינוי ל-Pub/Sub
כדי ליצור מינוי ל-Pub/Sub, אפשר להשתמש ב-CLI של gcloud: (צריך להחליף את SUBSCRIPTION_ID ו-TOPIC_ID בערכים אמיתיים מההגדרה שלכם)
gcloud pubsub subscriptions create SUBSCRIPTION_ID \
--topic=TOPIC_ID \
אפשר גם להשתמש בממשק המשתמש של Pub/Sub.
6. יצירת אפליקציה
השלב הראשון הוא ליצור אפליקציה לעיבוד הנתונים. אפשר לחשוב על אפליקציה כעל צינור אוטומטי לעיבוד נתונים שמקשר בין הרכיבים הבאים:
- הטמעת נתונים: פיד של סרטונים מוטמע במקור נתונים.
- ניתוח נתונים: אפשר להוסיף מודל AI(ראייה ממוחשבת) אחרי ההטמעה.
- אחסון נתונים: אפשר לאחסן את שתי הגרסאות של פיד הווידאו (הסטרימינג המקורי והסטרימינג שעבר עיבוד על ידי מודל ה-AI) במחסן מדיה.
במסוף Google Cloud, אפליקציה מיוצגת כתרשים.
יצירת אפליקציה ריקה
כדי לאכלס את גרף האפליקציות, צריך קודם ליצור אפליקציה ריקה.
יוצרים אפליקציה במסוף Google Cloud.
- נכנסים למסוף Google Cloud.
- פותחים את הכרטיסייה Applications (אפליקציות) בלוח הבקרה של Vertex AI Vision.
- לוחצים על הלחצן יצירה.
- מזינים traffic-app כשם האפליקציה ובוחרים את האזור.
- לוחצים על יצירה.
הוספת צמתים של רכיבי אפליקציה
אחרי שיוצרים את האפליקציה הריקה, אפשר להוסיף את שלושת הצמתים לגרף האפליקציה:
- צומת הטמעה: משאב הסטרימינג שמטמיע נתונים.
- צומת עיבוד: מודל ניתוח הנתונים של תפוסת המקום שפועל על נתונים שהועברו.
- צומת אחסון: מחסן המדיה שבו מאוחסנים סרטונים שעברו עיבוד, ומשמש כמאגר מטא-נתונים. מאגרי המטא-נתונים כוללים מידע אנליטי על נתוני וידאו שהועברו, ומידע שהוסק על ידי מודלים של AI.
מוסיפים צמתי רכיבים לאפליקציה במסוף.
- פותחים את הכרטיסייה Applications (אפליקציות) בלוח הבקרה של Vertex AI Vision. מעבר לכרטיסייה 'אפליקציות'
- בשורה של האפליקציה שבה רוצים לראות את התנועה, לוחצים על הצגת תרשים. הפעולה הזו תעביר אתכם להמחשה הגרפית של צינור העיבוד.
הוספה של צומת להעברת נתונים
- כדי להוסיף צומת של זרם קלט, בוחרים באפשרות Streams (זרמים) בקטע Connectors (מחברים) בתפריט הצד.
- בתפריט Stream שנפתח, בקטע Source, לוחצים על Add streams.
- בתפריט Add streams (הוספת זרמים), בוחרים באפשרות Register new streams (רישום זרמים חדשים) ומוסיפים את traffic-stream כשם הזרם.
- כדי להוסיף את הזרם לתרשים האפליקציה, לוחצים על הוספת זרמים.
הוספה של צומת לעיבוד נתונים
- כדי להוסיף את הצומת של מודל ספירת התפוסה, בוחרים באפשרות ניתוח נתוני תפוסה בקטע מודלים ייעודיים בתפריט הצד.
- משאירים את ברירות המחדל אנשים וכלי רכב.
- מוסיפים קווים ב'חציית קו'. משתמשים בכלי 'קו עם כמה נקודות' כדי לשרטט את הקווים במקומות שבהם רוצים לזהות מכוניות או אנשים שנכנסים או יוצאים.
- מציירים את האזורים הפעילים כדי לספור אנשים או כלי רכב באזור הזה.
- אם מציירים אזור פעיל, אפשר להוסיף הגדרות לזמן השהייה כדי לזהות עומס.
- (בשלב הזה, אי אפשר להשתמש בו-זמנית באזור פעיל ובחציית קו. אפשר להשתמש רק בתכונה אחת בכל פעם).


הוספה של צומת לאחסון נתונים
- כדי להוסיף את צומת יעד הפלט (אחסון), בוחרים באפשרות Vertex AI Vision's Media Warehouse בקטע Connectors בתפריט הצד.
- בתפריט Vertex AI Vision's Media Warehouse, לוחצים על Connect warehouse (קישור למחסן).
- בתפריט Connect warehouse, בוחרים באפשרות Create new warehouse. נותנים שם למחסן traffic-warehouse ומשאירים את משך ה-TTL על 14 ימים.
- לוחצים על הלחצן יצירה כדי להוסיף את המחסן.
7. הגדרת ניהול אירועים
משך 02:00
נקשר את המודל לפונקציה ב-Cloud Functions שנוצרה קודם לעיבוד שאחרי, שבו הפונקציה ב-Cloud Functions יכולה לעבד את הפלט של המודל באופן חופשי וליצור אירועים שמתאימים לצרכים שלכם. לאחר מכן נגדיר את ערוץ האירועים על ידי הגדרת נושא Pub/Sub שנוצר קודם כיעד שלנו. אפשר גם להגדיר מרווח מינימלי, שיעזור למנוע הצפה של ערוץ האירועים באותו אירוע בפרק זמן קצר.
בחירת פונקציית Cloud Functions לעיבוד שאחרי ההמרה
- לוחצים על צומת עיבוד הנתונים(ניתוח נתוני תפוסה) בתרשים האפליקציה כדי לפתוח את התפריט הצדדי.
- בתפריט הנפתח Post-processing (עיבוד אחרי), בוחרים את הפונקציה ב-Cloud Functions (מזוהה לפי שם הפונקציה).
- השינויים בגרף האפליקציות יישמרו אוטומטית.

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

- בתפריט הנפתח בוחרים את נושא ה-Pub/Sub.
- (אופציונלי) מגדירים את המרווח או התדירות המינימליים לפרסום אירועים.

8. פריסת האפליקציה לשימוש
אחרי שיוצרים את האפליקציה מקצה לקצה עם כל הרכיבים הנדרשים, השלב האחרון בשימוש באפליקציה הוא פריסה שלה.
- פותחים את הכרטיסייה Applications (אפליקציות) בלוח הבקרה של Vertex AI Vision. מעבר לכרטיסייה 'אפליקציות'
- ברשימה, לצד אפליקציית התנועה, לוחצים על הצגת התרשים.
- בדף של הכלי ליצירת גרף של אפליקציות, לוחצים על הלחצן Deploy (פריסה).
- בתיבת הדו-שיח לאישור שמופיעה, בוחרים באפשרות פריסה. יכול להיות שייקח כמה דקות עד שהפריסה תושלם. אחרי שהפריסה מסתיימת, מופיעים סימני וי ירוקים לצד הצמתים.

9. אימות אירועים או הודעות במינוי ל-Pub/Sub
אחרי שמטמיעים נתוני וידאו באפליקציית העיבוד, פונקציה של Cloud Functions צריכה ליצור אירועים ברגע שהמודל של ניתוח התפוסה מוציא הערה. לאחר מכן, האירועים האלה אמורים להתפרסם כהודעות דרך נושא ה-Pub/Sub שלכם ולהתקבל במינוי שלכם.
השלבים הבאים מניחים שיש לכם מינוי מסוג pull.
- פותחים את רשימת המינויים ב-Pub/Sub בפרויקט ומוצאים את המינוי המתאים. מעבר לדף רשימת המינויים ל-Pub/Sub
- עוברים לכרטיסייה 'הודעה'.
- לוחצים על הלחצן 'משיכה'.
- ההודעה תופיע בטבלה.

אפשר גם לקרוא איך לקבל הודעות בלי ממשק משתמש. לדף המינוי
10. מזל טוב
כל הכבוד, סיימתם את ה-Lab.
פינוי נפח
כדי להימנע מחיובים בחשבון Google Cloud בגלל השימוש במשאבים שנעשה במסגרת המדריך הזה, אפשר למחוק את הפרויקט שמכיל את המשאבים, או להשאיר את הפרויקט ולמחוק את המשאבים בנפרד.
מחיקת הפרויקט
מחיקת משאבים בודדים
מקורות מידע
https://cloud.google.com/vision-ai/docs/overview
https://cloud.google.com/vision-ai/docs/occupancy-count-tutorial
משוב