1. מטרות
סקירה כללית
ב-Codelab הזה נתמקד ביצירת אפליקציית Vertex AI Vision מקצה לקצה כדי לפקח על צילומי וידאו של תנועת כלי רכב בזמן אמת. נשתמש בתכונות המובנות של המודל המיוחד שאומן מראש ניתוח נתוני תפוסה כדי לתעד את הדברים הבאים:
- ספירת מספר כלי הרכב והאנשים שחוצים כביש בקו מסוים.
- ספירת מספר כלי הרכב לאדם באזור קבוע בכביש.
- זיהוי עומסי תנועה בכל חלק של הכביש.
מה תלמדו
- איך מגדירים מכונה וירטואלית להטמעת נתונים של סרטונים לצורך סטרימינג
- איך יוצרים אפליקציה ב-Vertex AI Vision
- תכונות שונות שזמינות ב-Occupancy Analytics ואיך משתמשים בהן
- איך פורסים את האפליקציה
- איך מחפשים סרטונים במאגר המדיה של Vertex AI Vision.
- איך לקשר את הפלט ל-BigQuery, לכתוב שאילתת SQL כדי לחלץ תובנות מפלט ה-JSON של המודל ולהציג את התוצאה ב-Looker Studio בזמן אמת.
2. לפני שתתחיל
- במסוף Google Cloud, בדף לבחירת הפרויקט בוחרים פרויקט או לוחצים על create a Google Cloud project. הערה: אם אתם לא מתכננים לשמור את המשאבים שתיצרו בתהליך הזה, תוכלו ליצור פרויקט חדש במקום לבחור באחד מהפרויקטים הקיימים. בסיום התהליך תוכלו למחוק את הפרויקט ולהסיר את כל המשאבים שמשויכים אליו. כניסה לדף לבחירת הפרויקט
- הקפידו לוודא שהחיוב מופעל בפרויקט שלכם ב-Cloud. כך בודקים אם החיוב מופעל בפרויקט
- מפעילים את ממשקי ה-API של Compute Engine ו-Vision AI. הפעלת ממשקי ה-API
יצירת חשבון שירות:
- במסוף Google Cloud, נכנסים לדף יצירת חשבון שירות. כניסה לדף יצירת חשבון שירות
- בוחרים את הפרויקט הרצוי.
- כותבים שם בשדה Service account name. השדה מזהה חשבון שירות במסוף 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. הגדרת מכונה וירטואלית לסטרימינג של סרטון
לפני שיוצרים אפליקציה ב-Occupancy Analytics, צריך לרשום מקור נתונים שאפשר להשתמש בו בהמשך באפליקציה.
במדריך הזה יוצרים מכונה וירטואלית ב-Compute Engine שמארחת סרטון, ושולחים את נתוני הסרטון בסטרימינג מהמכונה הווירטואלית.
יצירת מכונה וירטואלית של Linux
השלב הראשון בשליחת סרטון ממכונת VM של Compute Engine הוא יצירת מכונת ה-VM.
- נכנסים לדף VM instances במסוף. לדף VM instances
- בוחרים פרויקט ולוחצים על המשך.
- לוחצים על Create instance.
- מציינים שם למכונה הווירטואלית. מידע נוסף זמין במאמר מוסכמות למתן שמות למשאבים.
- אופציונלי: משנים את האזור של מכונת ה-VM. מערכת Compute Engine משנה את הסדר של רשימת התחומים בכל אזור באופן אקראי, כדי לעודד שימוש בכמה תחומים.
- מאשרים את שאר אפשרויות ברירת המחדל. מידע נוסף על האפשרויות האלה זמין במאמר יצירה והפעלה של מכונה וירטואלית.
- כדי ליצור את ה-VM ולהפעיל אותה, לוחצים על Create.
הגדרת סביבת המכונה הווירטואלית
אחרי שהמכונה הווירטואלית מופעלת, אפשר להשתמש במסוף כדי להתחבר אליה באמצעות SSH מהדפדפן. לאחר מכן, אפשר להוריד את כלי שורת הפקודה vaictl כדי להטמיע את הסרטון בשידור.
יצירת חיבור SSH למכונה הווירטואלית
- נכנסים לדף VM instances במסוף. לדף VM instances
- בקטע Connect בשורה של המכונה שיצרתם, לוחצים על SSH. ייפתח חיבור SSH בחלון דפדפן חדש.

הורדת כלי שורת הפקודה vaictl
- בחלון SSH בדפדפן, מורידים את כלי שורת הפקודה של Vertex AI Vision (vaictl) באמצעות הפקודה הבאה:
wget https://github.com/google/visionai/releases/download/v0.0.4/visionai_0.0-4_amd64.deb
- מריצים את הפקודה הבאה כדי להתקין את כלי שורת הפקודה:
sudo apt install ./visionai_0.0-4_amd64.deb
- כדי לבדוק את ההתקנה, מריצים את הפקודה הבאה:
vaictl --help
4. העלאת קובץ וידאו לשידור
אחרי שמגדירים את סביבת המכונה הווירטואלית, אפשר להעתיק קובץ וידאו לדוגמה ואז להשתמש ב-vaictl כדי להזרים את נתוני הווידאו לאפליקציה לניתוח נתוני התפוסה.
השלב הראשון הוא להפעיל את Vision AI API במסוף Cloud.
רישום של שידור חדש
- בחלונית הימנית של Vertex AI Vision, לוחצים על הכרטיסייה 'סטרימינג'.
- לוחצים על 'הרשמה'.
- בשדה Stream name (שם מקור הנתונים), מזינים traffic-stream.
- בשדה region (אזור), מזינים us-central1.
- לוחצים על 'הרשמה'.
ייקח כמה דקות עד שהזרם יירשם.
העתקת סרטון לאימון המודל למכונה הווירטואלית
- בחלון SSH-in-browser (SSH בדפדפן) של מכונת ה-VM, מעתיקים סרטון לאימון המודל באמצעות הפקודה הבאה 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 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 (נוסף פיקסול).
5. יצירת אפליקציה
השלב הראשון הוא ליצור אפליקציה לעיבוד הנתונים. אפשר לחשוב על אפליקציה כעל צינור אוטומטי לעיבוד נתונים שמקשר בין הרכיבים הבאים:
- הטמעת נתונים: פיד של סרטונים מוטמע במקור נתונים.
- ניתוח נתונים: אפשר להוסיף מודל AI(ראייה ממוחשבת) אחרי ההטמעה.
- אחסון נתונים: אפשר לאחסן במחסן מדיה את שתי הגרסאות של פיד הווידאו (הסטרימינג המקורי והסטרימינג שעבר עיבוד על ידי מודל ה-AI).
במסוף Google Cloud, אפליקציה מיוצגת כתרשים.
יצירת אפליקציה ריקה
כדי לאכלס את גרף האפליקציות, צריך קודם ליצור אפליקציה ריקה.
יוצרים אפליקציה במסוף Google Cloud.
- נכנסים למסוף Google Cloud.
- פותחים את הכרטיסייה Applications (אפליקציות) בלוח הבקרה של Vertex AI Vision.
- לוחצים על הלחצן יצירה.
- מזינים traffic-app כשם האפליקציה ובוחרים את האזור.
- לוחצים על יצירה.
הוספת צמתים של רכיבי אפליקציה
אחרי שיוצרים את האפליקציה הריקה, אפשר להוסיף את שלושת הצמתים לגרף האפליקציה:
- צומת קליטה: משאב הסטרימינג שקולט נתונים שנשלחים ממכונה וירטואלית ב-Compute Engine שאתם יוצרים.
- צומת עיבוד: מודל ניתוח הנתונים של תפוסת המקום שפועל על נתונים שהועברו.
- צומת אחסון: מחסן המדיה שבו מאוחסנים סרטונים שעברו עיבוד, ומשמש גם לאחסון מטא-נתונים. מאגרי המטא-נתונים כוללים מידע אנליטי על נתוני וידאו שהועברו, ומידע שהוסק על ידי מודלים של AI.
מוסיפים צמתי רכיבים לאפליקציה במסוף.
- פותחים את הכרטיסייה Applications (אפליקציות) בלוח הבקרה של Vertex AI Vision. מעבר לכרטיסייה 'אפליקציות'
- בשורה של אפליקציית התנועה, לוחצים על הצגת תרשים. הפעולה הזו תעביר אתכם לתרשים להמחשה של פייפליין העיבוד.
הוספה של צומת להעברת נתונים
- כדי להוסיף צומת של זרם קלט, בוחרים באפשרות Streams (זרמים) בקטע Connectors (מחברים) בתפריט הצד.
- בתפריט Stream שנפתח, בקטע Source, לוחצים על Add streams.
- בתפריט הוספת סטרימינג, בוחרים באפשרות הרשמת סטרימינג חדש ומוסיפים את traffic-stream כשם הסטרימינג.
- כדי להוסיף את הזרם לתרשים האפליקציה, לוחצים על הוספת זרמים.
הוספה של צומת לעיבוד נתונים
- כדי להוסיף את הצומת של מודל ספירת התפוסה, בוחרים באפשרות ניתוח נתוני תפוסה בקטע מודלים ייעודיים בתפריט הצד.
- משאירים את ברירות המחדל אנשים וכלי רכב.
- מוסיפים קווים ב'חציית קו'. משתמשים בכלי 'קו עם כמה נקודות' כדי לשרטט את הקווים במקומות שבהם רוצים לזהות מכוניות או אנשים שנכנסים או יוצאים.
- מציירים את האזורים הפעילים כדי לספור אנשים או כלי רכב באזור הזה.
- אם מציירים אזור פעיל, אפשר להוסיף הגדרות לזמן השהייה כדי לזהות עומס.
- (בשלב הזה, אי אפשר להשתמש בו-זמנית באזור פעיל ובחציית קו. אפשר להשתמש רק בתכונה אחת בכל פעם).


הוספה של צומת לאחסון נתונים
- כדי להוסיף את צומת יעד הפלט (אחסון), בוחרים באפשרות Vertex AI Vision's Media Warehouse בקטע Connectors בתפריט הצד.
- בתפריט Vertex AI Vision's Media Warehouse, לוחצים על Connect warehouse (קישור למחסן).
- בתפריט Connect warehouse, בוחרים באפשרות Create new warehouse. נותנים לשדה השם את הערך warehouse-traffic-warehouse ומשאירים את משך ה-TTL על 14 ימים.
- לוחצים על הלחצן יצירה כדי להוסיף את המחסן.
6. חיבור הפלט לטבלת BigQuery
כשמוסיפים מחבר BigQuery לאפליקציית Vertex AI Vision, כל התוצאות של מודל האפליקציה המקושרת מוזנות לטבלת היעד.
אתם יכולים ליצור טבלה ב-BigQuery משלכם ולציין את הטבלה הזו כשאתם מוסיפים מחבר BigQuery לאפליקציה, או לאפשר לפלטפורמת האפליקציות של Vertex AI Vision ליצור את הטבלה באופן אוטומטי.
יצירת טבלה אוטומטית
אם מאפשרים לפלטפורמת האפליקציות של Vertex AI Vision ליצור את הטבלה באופן אוטומטי, אפשר לציין את האפשרות הזו כשמוסיפים את צומת המחבר של BigQuery.
אם רוצים להשתמש ביצירת טבלה אוטומטית, צריך לעמוד בתנאים הבאים לגבי מערך הנתונים והטבלה:
- מערך נתונים: השם של מערך הנתונים שנוצר באופן אוטומטי הוא visionai_dataset.
- טבלה: שם הטבלה שנוצר אוטומטית הוא visionai_dataset.APPLICATION_ID.
- טיפול בשגיאות:
- אם קיימת טבלה עם אותו שם באותו מערך נתונים, לא מתבצעת יצירה אוטומטית.
- פותחים את הכרטיסייה Applications (אפליקציות) בלוח הבקרה של Vertex AI Vision. מעבר לכרטיסייה 'אפליקציות'
- בוחרים באפשרות הצגת האפליקציה לצד שם האפליקציה מהרשימה.
- בדף של כלי בניית האפליקציות, בוחרים באפשרות BigQuery בקטע Connectors (מחברים).
- משאירים את השדה BigQuery path (נתיב BigQuery) ריק.

- בקטע מטא-נתונים של החנות מ: בוחרים רק באפשרות 'ניתוח נתוני תפוסה' ומבטלים את הסימון של מקורות נתונים.
גרף האפליקציה הסופי אמור להיראות כך:

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

8. חיפוש תוכן וידאו במחסן הנתונים
אחרי שמטמיעים נתוני וידאו באפליקציית העיבוד, אפשר לראות את נתוני הווידאו המנותחים ולחפש בנתונים על סמך מידע מניתוח נתוני התפוסה.
- פותחים את הכרטיסייה Warehouses (מחסני נתונים) בלוח הבקרה של Vertex AI Vision. כניסה לכרטיסייה Warehouses
- ברשימה, מחפשים את מחסן הנתונים traffic-warehouse ולוחצים על הצגת נכסים.
- בקטע ספירת אנשים או ספירת כלי רכב, מגדירים את הערך מינימום ל-1 ואת הערך מקסימום ל-5.
- כדי לסנן נתונים מעובדים של סרטונים שמאוחסנים ב-Media Warehouse של Vertex AI Vision, לוחצים על חיפוש.

תצוגה של נתוני סרטונים מאוחסנים שתואמים לקריטריוני החיפוש במסוף Google Cloud. קרדיט על הסרטון: Elizabeth Mavor ב- Pixabay (הקריטריונים של החיפוש חלים).
9. ניתוח הפלט בטבלת BigQuery
כניסה ל-BigQuery
בוחרים את מערך הנתונים: visionai_dataset
בוחרים את הטבלה: APPLICATION_ID (במקרה הזה traffic-app)
לוחצים על סמל האפשרויות הנוספות (שלוש הנקודות) משמאל לשם הטבלה ואז לוחצים על 'שאילתה'.
תכתוב את השאילתה הבאה
שאילתה 1: שאילתה לבדיקת מספר כלי הרכב שחוצים כל קו בכל דקה
abc.sql
—- Get list of active marked lines for each timeframe
WITH line_array AS (
SELECT
t.ingestion_time AS ingestion_time,
JSON_QUERY_ARRAY(t.annotation.stats["crossingLineCounts"]) AS lines
FROM
`PROJ_ID.visionai_dataset.APP_ID` AS t
),
—- Flatten active lines to get individual entities details
flattened AS (
SELECT
line_array.ingestion_time,
JSON_VALUE(line.annotation.id) as line_id,
JSON_QUERY_ARRAY(line["positiveDirectionCounts"]) AS entities
FROM line_array, unnest(line_array.lines) as line
)
—- Generate aggregate vehicle count per zone w.r.t time
SELECT
STRING(TIMESTAMP_TRUNC(ingestion_time, MINUTE) ) AS time, line_id,
SUM(INT64(entity["count"])) as vehicle_count
FROM
flattened, UNNEST(flattened.entities) AS entity
WHERE JSON_VALUE(entity['entity']['labelString']) = 'Vehicle'
GROUP BY time, line_id
שאילתה 2: שאילתה לבדיקת מספר כלי הרכב לדקה בכל אזור
—- Get list of active zones for each timeframe
WITH zone_array AS (
SELECT
t.ingestion_time AS ingestion_time,
JSON_QUERY_ARRAY(t.annotation.stats["activeZoneCounts"]) AS zones
FROM
`PROJ_ID.visionai_dataset.APP_ID` AS t
),
—- Flatten active zones to get individual entities details
flattened AS (
SELECT zone_array.ingestion_time, JSON_VALUE(zone.annotation.id) as zone_id,
JSON_QUERY_ARRAY(zone["counts"]) AS entities
FROM zone_array, unnest(zone_array.zones) as zone
)
—- Generate aggregate vehicle count per zone w.r.t time
SELECT
STRING(TIMESTAMP_TRUNC(ingestion_time, MINUTE) ) AS time,
zone_id,
SUM(INT64(entity["count"])) as vehicle_count
FROM flattened, UNNEST(flattened.entities) AS entity
WHERE JSON_VALUE(entity['entity']['labelString']) = 'Vehicle'
GROUP BY time, zone_id
בשאילתות שלמעלה אפשר לשנות את 'Vehicle' ל-'Person' כדי לספור אנשים.
ב-Codelab הזה יוצגו נתוני הדוגמה והוויזואליזציה רק עבור שאילתה 1. אפשר לבצע תהליך דומה עבור שאילתה 2.

לוחצים על 'ניתוח נתונים' בתפריט בצד שמאל ובוחרים באפשרות 'ניתוח נתונים באמצעות Looker Studio'.

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