1. מטרות
סקירה כללית
ה-Codelab הזה יתמקד ביצירת אפליקציה של Vertex AI Vision מקצה לקצה כדי לעקוב אחרי קטעי וידאו של תנועה בזמן אמת. אנחנו נשתמש בתכונות המובנות של ניתוח נתוני תפוסה לפי המודל המיוחד שעבר אימון כדי להתמקד בנושאים הבאים:
- ספירת מספר כלי הרכב והאנשים שחצו כביש בקו מסוים.
- ספירת כלי הרכב/האדם בכל אזור קבוע בכביש.
- זיהוי עומס תנועה בחלק כלשהו בכביש.
מה תלמדו
- איך מגדירים מכונה וירטואלית להטמעת סרטונים לשידור
- איך יוצרים אפליקציה ב-Vertex AI Vision
- התכונות השונות הזמינות בניתוח נתוני התפוסה ואופן השימוש בהן
- איך לפרוס את האפליקציה
- איך מחפשים סרטונים במחסן המדיה של Vertex AI Vision.
- איך מחברים את הפלט ל-BigQuery, כותבים שאילתת SQL כדי לחלץ תובנות מפלט ה-JSON של המודל ומציגים את התוצאה ב-Looker Studio בזמן אמת.
2. לפני שתתחיל
- במסוף Google Cloud, בדף לבחירת הפרויקט בוחרים פרויקט או לוחצים על create a Google Cloud project. הערה: אם אתם לא מתכננים לשמור את המשאבים שתיצרו בתהליך הזה, תוכלו ליצור פרויקט חדש במקום לבחור באחד מהפרויקטים הקיימים. לאחר השלמת השלבים האלה, תוכלו למחוק את הפרויקט ולהסיר את כל המשאבים שמשויכים לפרויקט. מעבר אל בורר הפרויקטים
- הקפידו לוודא שהחיוב מופעל בפרויקט שלכם ב-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 Instance Admin (בטא), Storage > Storage Object Viewer † . בוחרים תפקיד מהרשימה Select a role. כדי להוסיף עוד תפקידים, לוחצים על Add another role ומוסיפים אותם אחד אחרי השני. הערה: השדה Role קובע לאילו משאבים בפרויקט לחשבון השירות תהיה גישה. אתם יכולים לבטל את התפקידים האלה או להוסיף עוד תפקידים מאוחר יותר. בסביבות ייצור אין להקצות את התפקידים 'בעלים', 'עריכה' או 'צפייה'. במקום זאת, צריך להקצות תפקיד מוגדר מראש או תפקיד בהתאמה אישית שתואם לצרכים שלכם.
- לוחצים על המשך.
- לוחצים על Done כדי לסיים ליצור את חשבון השירות. חשוב לא לסגור את חלון הדפדפן. תשתמשו בה בשלב הבא.
יוצרים מפתח לחשבון השירות:
- במסוף Google Cloud, לוחצים על כתובת האימייל של חשבון השירות שיצרתם.
- לוחצים על Keys.
- לוחצים על Add key ואז על Create new key.
- לוחצים על Create. למחשב שלכם תתבצע הורדה של קובץ JSON עם המפתח.
- לוחצים על סגירה.
- מתקינים ומפעילים את ה-CLI של Google Cloud.
† התפקיד הזה נדרש רק אם מעתיקים קובץ וידאו לדוגמה מקטגוריה של Cloud Storage.
3. הגדרת מכונה וירטואלית לשידור וידאו
לפני שיוצרים אפליקציה ב-Occupancy Analytics, צריך לרשום מקור נתונים שאפשר יהיה להשתמש בו מאוחר יותר באפליקציה.
במדריך הזה תלמדו ליצור מכונה וירטואלית ב-Compute Engine שמארחת סרטון, ולשלוח את נתוני הסטרימינג של הסרטון מהמכונה הווירטואלית.
יצירת מכונה וירטואלית של Linux
השלב הראשון בשליחת וידאו ממכונת VM של Compute Engine הוא יצירת מכונת ה-VM.
- נכנסים לדף VM instances במסוף. כניסה לדף VM instances
- בוחרים את הפרויקט ולוחצים על Continue.
- לוחצים על Create instance.
- נותנים שם למכונה הווירטואלית. מידע נוסף זמין במאמר נוהל למתן שמות למשאבים.
- אופציונלי: משנים את התחום של המכונה הווירטואלית הזו. מערכת Compute Engine ממינת באופן אקראי את רשימת האזורים בכל אזור כדי לעודד שימוש במספר תחומים.
- מאשרים את שאר אפשרויות ברירת המחדל. מידע נוסף על האפשרויות האלה זמין במאמר יצירה והפעלה של מכונה וירטואלית.
- כדי ליצור את המכונה הווירטואלית ולהפעיל אותה, לוחצים על Create.
הגדרת סביבת ה-VM
אחרי שהמכונה הווירטואלית מופעלת, אפשר להשתמש במסוף כדי להתחבר ל-SSH מהדפדפן למכונה הווירטואלית. לאחר מכן, תוכלו להוריד את כלי שורת הפקודה vaictl כדי להטמיע וידאו בסטרימינג.
יצירת חיבור SSH למכונה הווירטואלית
- נכנסים לדף VM instances במסוף. לדף VM instances
- בקטע Connect בשורה של המכונה שיצרתם, לוחצים על SSH. ייפתח חיבור SSH בחלון דפדפן חדש.
להורדת כלי שורת הפקודה vaictl
- בחלון SSH-in-browser, מורידים את כלי שורת הפקודה 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. הטמעת קובץ וידאו לשידור בסטרימינג
אחרי שמגדירים את סביבת ה-VM, אפשר להעתיק קובץ וידאו לדוגמה ואז להשתמש ב-vaictl כדי להעביר את נתוני הסרטון בסטרימינג לאפליקציית ניתוח נתוני התפוסה.
מתחילים בהפעלת Vision AI API במסוף Cloud
רישום של שידור חדש
- לוחצים על הכרטיסייה 'מקורות נתונים' בחלונית הימנית של Vertex AI Vision.
- לוחצים על 'הרשמה'.
- בשדה 'שם מקור הנתונים', מזינים 'traffic-stream'.
- בשדה Region מזינים 'us-central1'
- לוחצים על 'רישום'.
ההרשמה לשידור תימשך כמה דקות.
העתקת סרטון לדוגמה ל-VM
- בחלון SSH-in-browser של המכונה הווירטואלית, מעתיקים סרטון לדוגמה באמצעות הפקודה הבאה 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, הסרטון יוצג בלופ בסטרימינג עד להפסקת הפקודה. אנחנו נפעיל את הפקודה הזו כמשימת רקע כדי שהשידור ימשיך להיות פעיל גם אחרי שה-VM מתנתקת.
- ( צריך להוסיף את הפקודה '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 שניות בין תחילת פעולת הטמעת הנתונים ב-vaictl לבין הופעת הסרטון במרכז הבקרה.
אחרי שהטמעת הנתונים מהסטרימינג תהיה זמינה, תוכלו לראות את פיד הסרטונים בכרטיסייה Streams (סטרימינג) בלוח הבקרה של Vertex AI Vision, על ידי בחירת הסטרימינג traffic-stream.
תצוגה של סרטון שמתבצעת הטמעתו בסטרימינג במסוף Google Cloud. קרדיט על הסרטון: Elizabeth Mavor ב-Pixabay (נוסף פיקסלים).
5. יצירת אפליקציה
השלב הראשון הוא ליצור אפליקציה שתعالج את הנתונים שלכם. אפשר לחשוב על אפליקציה כצינור אוטומטי לעיבוד נתונים שמחבר בין הגורמים הבאים:
- הטמעת נתונים: הטמעת פיד וידאו מוטמעת בשידור.
- ניתוח נתונים: אפשר להוסיף מודל AI(ראיית מחשב) אחרי הטמעת הנתונים.
- אחסון נתונים: אפשר לאחסן את שתי הגרסאות של פיד הווידאו (השידור המקורי והשידור שעבר עיבוד על ידי מודל ה-AI) במחסן מדיה.
במסוף Google Cloud, אפליקציה מיוצגת כתרשים.
יצירת אפליקציה ריקה
כדי שאפשר יהיה לאכלס את תרשים האפליקציה, קודם צריך ליצור אפליקציה ריקה.
יוצרים אפליקציה במסוף Google Cloud.
- נכנסים למסוף של Google Cloud.
- פותחים את הכרטיסייה Applications בלוח הבקרה של Vertex AI Vision.
- לוחצים על הלחצן Create (יצירה).
- מזינים את שם האפליקציה traffic-app ובוחרים את האזור.
- לוחצים על יצירה.
הוספת צמתים של רכיבי אפליקציה
אחרי שיוצרים את האפליקציה הריקה, אפשר להוסיף את שלושת הצמתים לתרשים האפליקציה:
- צומת הטמעה: משאב הסטרימינג שמטמיע נתונים שנשלחים ממכונת VM ב-Compute Engine שאתם יוצרים.
- צומת עיבוד: מודל ניתוח נתוני התפוסה שפועל על נתונים שצורפו.
- צומת אחסון: מחסן המדיה שבו מאוחסנים סרטונים שעברו עיבוד, ומשמש גם כמאגר מטא-נתונים. מאגרי המטא-נתונים כוללים מידע אנליטי על נתוני הסרטונים שצורפו, ומידע שנגזר על ידי מודלים של 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 יום.
- לוחצים על הלחצן Create (יצירה) כדי להוסיף את המחסן.
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. כניסה לכרטיסייה 'אפליקציות'
- בוחרים באפשרות הצגת האפליקציה לצד שם האפליקציה מהרשימה.
- בדף ה-Application Builder, בוחרים באפשרות BigQuery בקטע Connectors.
- משאירים את השדה BigQuery path (נתיב BigQuery).
- בקטע store metadata from: (אחסון המטא-נתונים של החנות מ:), בוחרים רק באפשרות 'occupancy Analytics' (ניתוח נתוני תפוסה) ומבטלים את הסימון של 'streams' (מקורות נתונים).
תרשים האפליקציה הסופי אמור להיראות כך:
7. פריסת האפליקציה לשימוש
אחרי שיוצרים אפליקציה מקצה לקצה שכוללת את כל הרכיבים הדרושים, השלב האחרון בשימוש באפליקציה הוא לפרוס אותה.
- פותחים את הכרטיסייה Applications בלוח הבקרה של Vertex AI Vision. עוברים לכרטיסייה 'אפליקציות'.
- בוחרים באפשרות הצגת תרשים לצד האפליקציה לניהול תנועת גולשים ברשימה.
- בדף של הכלי ליצירת תרשימי אפליקציות, לוחצים על הלחצן פריסה.
- בתיבת הדו-שיח לאישור שמופיעה, בוחרים באפשרות פריסה. פעולת הפריסה עשויה להימשך כמה דקות. בסיום הפריסה, יופיעו סימני וי ירוקים לצד הצמתים.
8. חיפוש תוכן וידאו במחסן האחסון
אחרי שמטמיעים נתוני וידאו באפליקציית העיבוד, אפשר להציג נתוני וידאו שעברו ניתוח ולחפש את הנתונים על סמך נתוני ניתוח תנועת אנשים.
- פותחים את הכרטיסייה Warehouses במרכז הבקרה של Vertex AI Vision. כניסה לכרטיסייה 'מחסנים'
- מחפשים את מחסן התנועה (מחסן) ברשימה ולוחצים על הצגת נכסים.
- בקטע מספר אנשים או מספר רכבים, מגדירים את הערך המינימלי ל-1 ואת הערך המקסימלי ל-5.
- כדי לסנן נתוני וידאו שעברו עיבוד וששמורים במחסן המדיה של Vertex AI Vision, לוחצים על חיפוש.
תצוגה של נתוני וידאו שמאוחסנים ועומדים בקריטריונים לחיפוש במסוף Google Cloud. קרדיט על הסרטון: Elizabeth Mavor ב-Pixabay (הוחלה קריטריון חיפוש).
9. ניתוח הפלט בטבלה של BigQuery
כניסה ל-BigQuery
בוחרים את מערך הנתונים: visionai_dataset
בוחרים את הטבלה: APPLICATION_ID (במקרה הזה traffic-app)
לוחצים על שלוש הנקודות ישירות לשם הטבלה ולוחצים על Query
תכתוב את השאילתה הבאה
שאילתה 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
בשאילתות שלמעלה, אפשר לשנות את 'כלי רכב' ל'אדם' כדי לספור אנשים.
בקודלאב הזה יוצגו הנתונים לדוגמה והתצוגה החזותית של שאילתה 1 בלבד. אפשר לבצע את אותו תהליך גם עבור Query2.
לוחצים על 'ניתוח נתונים' בתפריט הימני ובוחרים באפשרות 'ניתוח באמצעות 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
משוב