אפליקציית Vertex AI Vision למעקב אחר תעבורת נתונים

1. מטרות

סקירה כללית

ב-Codelab הזה תתמקדו ביצירת אפליקציית Vertex AI Vision מקצה לקצה כדי לנטר צילומי וידאו של תנועת כלי רכב בזמן אמת. נשתמש בתכונות המובנות של המודל המיוחד שאומן מראש ניתוח נתוני תפוסה כדי לתעד את הדברים הבאים:

  • ספירת מספר כלי הרכב והאנשים שחוצים כביש בקו מסוים.
  • ספירת מספר כלי הרכב לאדם באזור קבוע בכביש.
  • זיהוי עומסי תנועה בכל חלק של הכביש.

מה תלמדו

  • איך מגדירים מכונה וירטואלית להעברה של סרטונים לצורך סטרימינג
  • איך יוצרים אפליקציה ב-Vertex AI Vision
  • תכונות שונות שזמינות ב-Occupancy Analytics ואיך משתמשים בהן
  • איך פורסים את האפליקציה
  • איך מחפשים סרטונים במאגר המדיה של Vertex AI Vision.
  • איך לקשר את הפלט ל-BigQuery, לכתוב שאילתת SQL כדי לחלץ תובנות מפלט ה-JSON של המודל ולהציג את התוצאה ב-Looker Studio בזמן אמת.

2. לפני שתתחיל

  1. במסוף Google Cloud, בדף לבחירת הפרויקט בוחרים פרויקט בענן או לוחצים על create a Google Cloud project. הערה: אם אתם לא מתכננים לשמור את המשאבים שתיצרו בתהליך הזה, תוכלו ליצור פרויקט חדש במקום לבחור באחד מהפרויקטים הקיימים. בסיום התהליך תוכלו למחוק את הפרויקט ולהסיר את כל המשאבים שמשויכים אליו. כניסה לדף לבחירת הפרויקט
  2. הקפידו לוודא שהחיוב מופעל בפרויקט שלכם ב-Cloud. כך בודקים אם החיוב מופעל בפרויקט
  3. מפעילים את ממשקי ה-API של Compute Engine ו-Vision AI. הפעלת ממשקי ה-API

יצירת חשבון שירות:

  1. במסוף Google Cloud, נכנסים לדף יצירת חשבון שירות. מעבר אל יצירת חשבון שירות
  2. בוחרים את הפרויקט הרצוי.
  3. כותבים שם בשדה Service account name. השדה Service account ID במסוף Google Cloud יאוכלס בהתאם לשם הזה. כותבים תיאור בשדה תיאור חשבון השירות. לדוגמה, חשבון שירות להפעלה מהירה.
  4. לוחצים על יצירה והמשך.
  5. כדי לספק גישה לפרויקט, יש להעניק את התפקידים הבאים לחשבון השירות: Vision AI > Vision AI Editor, Compute Engine > אדמין מכונות של Compute (בטא), Storage > Storage Object Viewer † . בוחרים תפקיד מהרשימה Select a role. כדי להוסיף עוד תפקידים, לוחצים על Add another role ומוסיפים אותם אחד אחרי השני. הערה: השדה Role קובע לאילו משאבים בפרויקט לחשבון השירות תהיה גישה. אתם יכולים לבטל את התפקידים האלה או להוסיף עוד תפקידים מאוחר יותר. בסביבות ייצור לא מקצים את התפקידים 'בעלים', 'עריכה' או 'צפייה'. במקום זאת, צריך להקצות תפקיד מוגדר מראש או תפקיד בהתאמה אישית שמתאימים לצרכים שלכם.
  6. לוחצים על המשך.
  7. לוחצים על Done כדי לסיים ליצור את חשבון השירות. חשוב לא לסגור את חלון הדפדפן. תשתמשו בו בשלב הבא.

יוצרים מפתח לחשבון שירות:

  1. במסוף Google Cloud, לוחצים על כתובת האימייל של חשבון השירות שנוצר.
  2. לוחצים על Keys.
  3. לוחצים על Add key ואז על Create new key.
  4. לוחצים על Create. למחשב שלכם תתבצע הורדה של קובץ JSON עם המפתח.
  5. לוחצים על סגירה.
  6. מתקינים ומפעילים את Google Cloud CLI.

‫† התפקיד נדרש רק אם מעתיקים קובץ סרטון לאימון המודל מקטגוריה של Cloud Storage.

3. הגדרת מכונה וירטואלית לסטרימינג של סרטון

לפני שיוצרים אפליקציה ב-Occupancy Analytics, צריך לרשום מקור נתונים שאפשר להשתמש בו בהמשך באפליקציה.

במדריך הזה יוצרים מכונה וירטואלית ב-Compute Engine שמארחת סרטון, ושולחים את נתוני הווידאו בסטרימינג מהמכונה הווירטואלית.

יצירת מכונה וירטואלית של Linux

השלב הראשון בשליחת סרטון ממכונה וירטואלית של Compute Engine הוא יצירת המכונה הווירטואלית.

  1. נכנסים לדף VM instances במסוף. כניסה לדף VM instances
  2. בוחרים פרויקט ולוחצים על המשך.
  3. לוחצים על Create instance.
  4. מציינים שם למכונה הווירטואלית. מידע נוסף זמין במאמר מוסכמות למתן שמות למשאבים.
  5. אופציונלי: משנים את האזור של מכונת ה-VM. מערכת Compute Engine משנה את הסדר של רשימת האזורים בכל אזור באופן אקראי, כדי לעודד שימוש בכמה אזורים.
  6. מאשרים את שאר אפשרויות ברירת המחדל. מידע נוסף על האפשרויות האלה זמין במאמר יצירה והפעלה של מכונה וירטואלית.
  7. כדי ליצור את המכונה הווירטואלית ולהפעיל אותה, לוחצים על Create.

הגדרת סביבת המכונה הווירטואלית

אחרי שהמכונה הווירטואלית מופעלת, אפשר להשתמש במסוף כדי להתחבר אליה באמצעות SSH מהדפדפן. לאחר מכן, תוכלו להוריד את כלי שורת הפקודה vaictl כדי להטמיע את הסרטון בשידור.

יצירת חיבור SSH למכונה הווירטואלית

  1. נכנסים לדף VM instances במסוף. כניסה לדף VM instances
  2. בקטע Connect בשורה של המכונה שיצרתם, לוחצים על SSH. ייפתח חיבור SSH בחלון דפדפן חדש. אפשרות ה-SSH בממשק המשתמש

הורדת כלי שורת הפקודה vaictl

  1. בחלון SSH בדפדפן, מורידים את כלי שורת הפקודה של Vertex AI Vision ‏ (vaictl) באמצעות הפקודה הבאה:
wget https://github.com/google/visionai/releases/download/v0.0.4/visionai_0.0-4_amd64.deb
  1. מריצים את הפקודה הבאה כדי להתקין את כלי שורת הפקודה:
sudo apt install ./visionai_0.0-4_amd64.deb
  1. כדי לבדוק את ההתקנה, מריצים את הפקודה הבאה:
vaictl --help

4. העלאת קובץ וידאו לסטרימינג

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

השלב הראשון הוא להפעיל את Vision AI API במסוף Cloud.

רישום של שידור חדש

  1. בחלונית הימנית של Vertex AI Vision, לוחצים על הכרטיסייה 'סטרימינג'.
  2. לוחצים על 'הרשמה'.
  3. בשדה Stream name (שם מקור הנתונים), מזינים traffic-stream.
  4. בשדה region (אזור), מזינים us-central1.
  5. לוחצים על 'הרשמה'.

ייקח כמה דקות עד שהזרם יירשם.

העתקת סרטון לאימון המודל למכונה הווירטואלית

  1. בחלון 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 .

שידור וידאו ממכונה וירטואלית והוספת נתונים לשידור

  1. כדי לשלוח את קובץ הווידאו המקומי הזה לזרם הקלט של האפליקציה, משתמשים בפקודה הבאה. צריך להחליף את המשתנים הבאים:
  • 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
  1. הפקודה הזו משדרת קובץ וידאו לשידור. אם משתמשים בדגל ‎–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. לשם כך, צריך לבחור את השידור של תנועת התנועה.

עוברים לכרטיסייה Streams

תצוגה של וידאו בשידור חי שמועבר בסטרימינג בממשק המשתמשצפייה בשידור חי של סרטון שמועבר לסטרימינג במסוף Google Cloud. קרדיט על הסרטון: Elizabeth Mavor ב- Pixabay (נוסף פיקסול).

5. יצירת אפליקציה

השלב הראשון הוא ליצור אפליקציה לעיבוד הנתונים. אפשר לחשוב על אפליקציה כעל צינור אוטומטי לעיבוד נתונים שמקשר בין הרכיבים הבאים:

  • הטמעת נתונים: פיד של סרטונים מוטמע במקור נתונים.
  • ניתוח נתונים: אפשר להוסיף מודל AI(ראייה ממוחשבת) אחרי ההטמעה.
  • אחסון נתונים: אפשר לאחסן את שתי הגרסאות של פיד הווידאו (הסטרימינג המקורי והסטרימינג שעבר עיבוד על ידי מודל ה-AI) במחסן מדיה.

במסוף Google Cloud, אפליקציה מיוצגת כתרשים.

יצירת אפליקציה ריקה

כדי לאכלס את גרף האפליקציות, צריך קודם ליצור אפליקציה ריקה.

יוצרים אפליקציה במסוף Google Cloud.

  1. נכנסים למסוף Google Cloud.
  2. פותחים את הכרטיסייה Applications (אפליקציות) בלוח הבקרה של Vertex AI Vision.

מעבר לכרטיסייה 'אפליקציות'

  1. לוחצים על הלחצן יצירה.
  2. מזינים traffic-app כשם האפליקציה ובוחרים את האזור.
  3. לוחצים על יצירה.

הוספת צמתים של רכיבי אפליקציה

אחרי שיוצרים את האפליקציה הריקה, אפשר להוסיף את שלושת הצמתים לגרף האפליקציה:

  1. צומת קליטה: משאב הנתונים שקולט נתונים שנשלחים ממכונה וירטואלית ב-Compute Engine שאתם יוצרים.
  2. צומת עיבוד: מודל ניתוח הנתונים של תפוסת המקום שפועל על נתונים שהועברו.
  3. צומת אחסון: מחסן המדיה שבו מאוחסנים סרטונים שעברו עיבוד, ומשמש כמאגר מטא-נתונים. מאגרי המטא-נתונים כוללים מידע אנליטי על נתוני וידאו שהועברו, ומידע שהוסק על ידי מודלים של AI.

מוסיפים צמתי רכיבים לאפליקציה במסוף.

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

הוספה של צומת להעברת נתונים

  1. כדי להוסיף צומת של זרם קלט, בוחרים באפשרות Streams (זרמים) בקטע Connectors (מחברים) בתפריט הצד.
  2. בתפריט Stream שנפתח, בקטע Source, לוחצים על Add streams.
  3. בתפריט Add streams (הוספת זרמים), בוחרים באפשרות Register new streams (רישום זרמים חדשים) ומוסיפים את traffic-stream כשם הזרם.
  4. כדי להוסיף את הזרם לתרשים האפליקציה, לוחצים על הוספת זרמים.

הוספה של צומת לעיבוד נתונים

  1. כדי להוסיף את הצומת של מודל ספירת התפוסה, בוחרים באפשרות ניתוח נתוני תפוסה בקטע מודלים ייעודיים בתפריט הצד.
  2. משאירים את ברירות המחדל אנשים וכלי רכב.
  3. מוסיפים קווים ב'חציית קו'. משתמשים בכלי 'קו עם כמה נקודות' כדי לשרטט את הקווים במקומות שבהם רוצים לזהות מכוניות או אנשים שנכנסים או יוצאים.
  4. מציירים את האזורים הפעילים כדי לספור אנשים או כלי רכב באזור הזה.
  5. אם מציירים אזור פעיל, אפשר להוסיף הגדרות לזמן השהייה כדי לזהות עומס.
  • (בשלב הזה, אי אפשר להשתמש בו-זמנית באזור פעיל ובחציית קו. אפשר להשתמש רק בתכונה אחת בכל פעם).

3acdb6f1e8474e07.png ce63449d601995e9.png

194c54d2bbcf7e8a.png

הוספה של צומת לאחסון נתונים

  1. כדי להוסיף את צומת יעד הפלט (אחסון), בוחרים באפשרות Vertex AI Vision's Media Warehouse בקטע Connectors בתפריט הצד.
  2. בתפריט Vertex AI Vision's Media Warehouse, לוחצים על Connect warehouse (קישור למחסן).
  3. בתפריט Connect warehouse, בוחרים באפשרות Create new warehouse. נותנים שם למחסן traffic-warehouse ומשאירים את משך ה-TTL על 14 ימים.
  4. לוחצים על הלחצן יצירה כדי להוסיף את המחסן.

6. חיבור הפלט לטבלת BigQuery

כשמוסיפים מחבר BigQuery לאפליקציית Vertex AI Vision, כל התוצאות של מודל האפליקציה המקושרת מוזנות לטבלת היעד.

אתם יכולים ליצור טבלה ב-BigQuery משלכם ולציין את הטבלה כשאתם מוסיפים מחבר BigQuery לאפליקציה, או לאפשר לפלטפורמת האפליקציות של Vertex AI Vision ליצור את הטבלה באופן אוטומטי.

יצירת טבלה אוטומטית

אם מאפשרים לפלטפורמת האפליקציות של Vertex AI Vision ליצור את הטבלה באופן אוטומטי, אפשר לציין את האפשרות הזו כשמוסיפים את צומת המחבר של BigQuery.

אם רוצים להשתמש ביצירת טבלה אוטומטית, צריך לעמוד בתנאים הבאים לגבי מערך הנתונים והטבלה:

  • מערך נתונים: השם של מערך הנתונים שנוצר באופן אוטומטי הוא visionai_dataset.
  • טבלה: שם הטבלה שנוצר אוטומטית הוא visionai_dataset.APPLICATION_ID.
  • טיפול בשגיאות:
  • אם קיימת טבלה עם אותו שם באותו מערך נתונים, לא מתבצעת יצירה אוטומטית.
  1. פותחים את הכרטיסייה Applications (אפליקציות) בלוח הבקרה של Vertex AI Vision. מעבר לכרטיסייה 'אפליקציות'
  2. בוחרים באפשרות הצגת האפליקציה לצד שם האפליקציה מהרשימה.
  3. בדף של כלי בניית האפליקציות, בוחרים באפשרות BigQuery בקטע Connectors (מחברים).
  4. משאירים את השדה BigQuery path (נתיב BigQuery) ריק. ee0b67d4ab2263d.png
  5. בקטע מטא-נתונים של החנות מ: בוחרים רק באפשרות 'ניתוח נתוני תפוסה' ומבטלים את הסימון של מקורות נתונים.

גרף האפליקציה הסופי אמור להיראות כך:

1787242465fd6da7.png

7. פריסת האפליקציה לשימוש

אחרי שיוצרים את האפליקציה מקצה לקצה עם כל הרכיבים הנדרשים, השלב האחרון בשימוש באפליקציה הוא פריסה שלה.

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

8. חיפוש תוכן וידאו במחסן האחסון

אחרי שמטמיעים נתוני וידאו באפליקציית העיבוד, אפשר לראות את נתוני הווידאו המנותחים ולחפש בנתונים על סמך מידע מניתוח נתוני התפוסה.

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

e636361b19738c8d.png

תצוגה של נתוני וידאו מאוחסנים שתואמים לקריטריוני החיפוש ב-מסוף 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.

e6fd891f3a46246.png

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

9e737ddb4d0d25b6.png

בחלונית 'מאפיין', מוסיפים זמן ומשנים את הגדרת הזמן לתאריך ושעה. בקטע 'מאפיין פירוט', מוסיפים את line_id. b5da9704ccd8db.png

בתרשים שלמעלה מוצג מספר כלי הרכב או האנשים שחוצים כל קו בדקה.

הפסים הכחולים הכהים והבהירים מציינים את שני מזהי הקו השונים.

10. מזל טוב

כל הכבוד, סיימתם את ה-Lab.

פינוי נפח

כדי להימנע מחיובים בחשבון Google Cloud בגלל השימוש במשאבים שנעשה במסגרת המדריך הזה, אפשר למחוק את הפרויקט שמכיל את המשאבים, או להשאיר את הפרויקט ולמחוק את המשאבים בנפרד.

מחיקת הפרויקט

מחיקת משאבים בודדים

מקורות מידע

https://cloud.google.com/vision-ai/docs/overview

https://cloud.google.com/vision-ai/docs/occupancy-count-tutorial

משוב

כאן אפשר לשלוח משוב

סקר

איך תשתמש במדריך הזה?

רק לקרוא לקרוא ולבצע את התרגילים

עד כמה ה-codelab הזה היה שימושי?

מועיל במידה רבה מועיל במידה בינונית