1. מטרות
סקירה כללית
ה-Codelab הזה יתמקד ביצירה של אפליקציית Vertex AI Vision מקצה לקצה לשליחת אירועים עם תכונה של ניהול אירועים. אנחנו נשתמש בתכונות המובנות של המודל המיוחד ניתוח תפוסה שעבר הכשרה מראש, כדי ליצור אירועים על סמך הנתונים הבאים:
- ספירת מספר כלי הרכב והאנשים שחצו כביש בקו מסוים.
- ספירת כלי הרכב/האדם בכל אזור קבוע בכביש.
- זיהוי עומסים בכל חלק של הכביש.
מה תלמדו
- איך מעלים סרטונים לסטרימינג
- איך יוצרים אפליקציה ב-Vertex AI Vision
- התכונות השונות הזמינות בניתוח נתוני התפוסה ואופן השימוש בהן
- איך לפרוס את האפליקציה
- איך מחפשים סרטונים באחסון שלכם ב-Vertex AI Vision's Media Warehouse.
- איך יוצרים פונקציה של Cloud Functions שמעבדת את נתוני המודל של ניתוח תפוסה.
- איך יוצרים נושא Pub/Sub ומינוי.
- איך מגדירים ניהול אירועים לשליחת אירועים דרך נושא Pub/Sub.
2. לפני שתתחיל
- במסוף Google Cloud, בדף בורר הפרויקטים, בוחרים או יוצרים פרויקט ב-Google Cloud. הערה: אם אתם לא מתכננים לשמור את המשאבים שאתם יוצרים בתהליך, צריך ליצור פרויקט במקום לבחור פרויקט קיים. בסיום התהליך תוכלו למחוק את הפרויקט ולהסיר את כל המשאבים הקשורים אליו. מעבר אל בורר הפרויקטים
- הקפידו לוודא שהחיוב מופעל בפרויקט שלכם ב-Cloud. כך בודקים אם החיוב מופעל בפרויקט
- מפעילים את ממשקי ה-API של Compute Engine ו-Vision AI. הפעלת ממשקי ה-API
יוצרים חשבון שירות:
- נכנסים לדף Create service account במסוף Google Cloud. כניסה לדף 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.
† התפקיד הזה נדרש רק אם מעתיקים קובץ וידאו לדוגמה מקטגוריה של Cloud Storage.
3. הטמעת קובץ וידאו בסטרימינג
אפשר להשתמש ב-vaictl כדי לשדר את נתוני הסרטון לאפליקציה לניתוח התפוסה.
מתחילים בהפעלת Vision AI API במסוף Cloud
רישום של שידור חדש
- לוחצים על הכרטיסייה 'מקורות נתונים' בחלונית הימנית של Vertex AI Vision.
- לוחצים על 'הרשמה'
- בשדה 'שם מקור הנתונים', מזינים 'traffic-stream'.
- באזור, צריך להזין '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. מידע נוסף זמין במאמר מיקומים ב-Cloud.
- LOCAL_FILE: שם הקובץ של קובץ וידאו מקומי. לדוגמה, street_vehicles_people.mp4.
- הדגל –loop: אופציונלי. נתוני קובץ בלופ כדי לדמות סטרימינג.
export PROJECT_ID=<Your Google Cloud project ID> export LOCATION_ID=us-central1 export LOCAL_FILE=street_vehicles_people.mp4
- הפקודה הזו משדרת קובץ וידאו בסטרימינג. אם משתמשים בדגל -loop, הסרטון מועבר בלופ לשידור של הסרטון עד שמפסיקים את הפקודה. נפעיל את הפקודה הזו כמשימה ברקע כדי שההעברה תמשיך.
- ( צריך להוסיף את הפקודה 'noh' בהתחלה ו-'&' בסוף כדי שהמשימה תפעל ברקע)
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 שניות בין ההתחלה של פעולת הטמעת הנתונים של לפחות רגע לבין הצגת הסרטון במרכז השליטה.
אחרי שהטמעת הנתונים של השידור תהיה זמינה, תוכלו לראות את פיד הווידאו בכרטיסייה Streams במרכז הבקרה של Vertex AI Vision, על ידי בחירה של עדכוני התנועה.
תצוגה של סרטון שמתבצעת הטמעתו בסטרימינג במסוף Google Cloud. קרדיט על הסרטון: Elizabeth Mavor ב-Pixabay (נוסף פיקסלים).
4. יצירת פונקציה של Cloud Functions
אנחנו צריכים פונקציה של Cloud Functions כדי לעכל את הנתונים של המודל וליצור אירועים שיישלחו מאוחר יותר דרך ערוץ האירועים.
כאן תוכלו לקרוא מידע נוסף על Cloud Functions.
יצירת פונקציה של Cloud Functions שמאזינים למודל
- עוברים אל דף היצירה של ממשק המשתמש של Cloud Functions.
- מגדירים את שם הפונקציה. בהמשך, המערכת תשתמש בפונקציה של 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. כניסה לכרטיסייה 'אפליקציות'
- בשורה traffic-app, בוחרים באפשרות View graph. תועברו לתצוגה הגרפי של צינור עיבוד הנתונים.
הוספת צומת הטמעת נתונים
- כדי להוסיף צומת של מקור נתונים, בוחרים באפשרות Streams בקטע Connectors בתפריט הצדדי.
- בקטע מקור בתפריט סטרימינג שנפתח, בוחרים באפשרות הוספת מקורות נתונים.
- בתפריט הוספת מקורות נתונים, בוחרים באפשרות רישום שידורים חדשים ומוסיפים 'מקור נתונים' בתור השם של מקור הנתונים.
- כדי להוסיף את הסטרימינג לתרשים האפליקציה, לוחצים על הוספת סטרימינג.
הוספת צומת לעיבוד נתונים
- כדי להוסיף את הצומת של מודל מספר התפוסה, בוחרים באפשרות ניתוח תפוסה בקטע מודלים מיוחדים בתפריט הצד.
- משאירים את אפשרויות ברירת המחדל אנשים וכלי רכב.
- מוסיפים קווים בקטע 'חציית קו'. משתמשים בכלי הקו עם כמה נקודות כדי לצייר את הקווים שבהם רוצים לזהות מכוניות או אנשים שיוצאים או נכנסים.
- מציירים את האזורים הפעילים כדי לספור אנשים או כלי רכב באזור הזה.
- אפשר להוסיף הגדרות לזמן שהייה כדי לזהות עומס אם משורטט אזור פעיל.
- (בשלב זה אין תמיכה בו-זמנית באירועים של יציאה מתחום פעיל ואירועים של חציית קו. אפשר להשתמש רק בתכונה אחת בכל פעם).
הוספת צומת של מאגר נתונים
- כדי להוסיף את הצומת של יעד הפלט (אחסון), בוחרים באפשרות 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 לעיבוד לאחרי אירוע
- לוחצים על הצומת של עיבוד הנתונים(ניתוח נתוני תפוסה) בתרשים האפליקציה כדי לפתוח את התפריט הצדדי.
- בוחרים את הפונקציה של Cloud Functions (שמזוהה לפי שם הפונקציה שלה) בתפריט הנפתח Post-processing.
- השינויים שתבצעו בתרשים האפליקציה יישמרו באופן אוטומטי.
הגדרת ערוץ אירועים
- לוחצים על הצומת של עיבוד הנתונים(ניתוח נתוני תפוסה) בתרשים האפליקציה כדי לפתוח את התפריט הצדדי.
- לוחצים על 'הגדרת התראה על אירוע' בקטע 'התראות על אירוע'.
- בוחרים את נושא ה-Pub/Sub בתפריט הנפתח.
- (אופציונלי) מגדירים את מרווח הזמן או התדירות המינימליים לפרסום האירועים.
8. פריסה של האפליקציה לשימוש
אחרי שיוצרים את האפליקציה מקצה לקצה עם כל הרכיבים הנדרשים, השלב האחרון בשימוש באפליקציה הוא לפרוס אותה.
- פותחים את הכרטיסייה Applications בלוח הבקרה של Vertex AI Vision. כניסה לכרטיסייה 'אפליקציות'
- בוחרים באפשרות הצגת תרשים לצד האפליקציה לניהול תנועת גולשים ברשימה.
- בדף של הכלי ליצירת תרשימי אפליקציות, לוחצים על הלחצן פריסה.
- בתיבת הדו-שיח לאישור שמופיעה, בוחרים באפשרות פריסה. פעולת הפריסה עשויה להימשך כמה דקות. בסיום הפריסה, יופיעו סימני וי ירוקים לצד הצמתים.
9. אימות אירועים או הודעות במינוי ל-Pub/Sub
אחרי הטמעת נתוני הווידאו באפליקציית העיבוד, Cloud Function אמור ליצור אירועים ברגע שהמודל לניתוח נתוני התפוסה ייצור הערה. לאחר מכן, האירועים האלה אמורים להתפרסם כהודעות דרך נושא Pub/Sub שלכם ולהתקבל על ידי המינוי שלכם.
השלבים הבאים מבוססים על ההנחה שיש לכם מינוי משיכה.
- פותחים את רשימת המינויים של 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
משוב