הפעלת פלט של שידור חי

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

באופן כללי, מגדירים את האפליקציה כך שתאחסן את פלט המודל בGoogle Cloud מחסן נתונים כמו Media Warehouse של Vertex AI Vision או BigQuery. אחרי שהנתונים מאוחסנים באחד ממחסני הנתונים האלה, אפשר להשתמש בהם למשימות ניתוח אופליין שמבוססות על גרף האפליקציה שלכם. עם זאת, אפשר גם לקבל את הפלט של המודל בסטרימינג בשידור חי. אפשר להגדיר ש-Vertex AI Vision יעביר את הפלט של המודל למשאב של סטרימינג, ואפשר להשתמש בכלי של שורת הפקודה (vaictl) או ב-Vertex AI Vision API כדי לצרוך את הפלט בזמן אמת.

נניח שיש לכם גרף של אפליקציה עם שלושה צמתים:

  1. צומת מקור הנתונים 'מקור נתונים' (input-stream)
  2. צומת העיבוד 'ספירת תפוסה' (occupancy-count)
  3. צומת היעד של פלט האפליקציה 'מאגר מדיה' (warehouse)

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

הגדרת אפליקציית API:

אפליקציה לדוגמה: הגדרה במסוף Cloud
{
  "applicationConfigs": {
    "nodes": [
        {
          "displayName": "Input Stream",
          "name": "input-stream",
          "processor": "builtin:stream-input"
        },
        {
          "displayName": "Occupancy Count",
          "name": "occupancy-count",
          "nodeConfig": {
            "occupancyCountConfig": {
              "enablePeopleCounting": true,
              "enableVehicleCounting": true
            }
          },
          "parents": [
            {
              "parentNode": "input-stream"
            }
          ],
          "processor": "builtin:occupancy-count"
        },
        {
          "displayName": "Media Warehouse",
          "name": "warehouse",
          "nodeConfig": {
            "mediaWarehouseConfig": {
              "corpus": "projects/PROJECT_ID/locations/LOCATION_ID/corpora/CORPUS_ID",
              "ttl": "86400s"
            }
          },
          "parents": [
            {
              "parentNode": "input-stream"
            },
            {
              "parentNode": "occupancy-count"
            }
          ],
          "processor": "builtin:media-warehouse"
        }
    ]
  }
}

הפעלת פלט של סטרימינג (Google Cloud מסוף)

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

המסוף

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

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

  2. בוחרים באפשרות הצגת הגרף לצד שם האפליקציה מהרשימה.

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

  4. בתפריט האפשרויות של Deploy application שנפתח, בוחרים באפשרות Enable output streaming.

    פריסת תפריט האפליקציות במסוף

  5. בתפריט הנפתח המתאים Model(s) (מודלים), בוחרים את המודלים שרוצים להפעיל עבורם את הפלט של הסטרימינג .

  6. לוחצים על פריסה.

הפעלת פלט של סטרימינג (API)

עדכון צומת האפליקציה

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

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

REST

בדוגמה הזו נעשה שימוש בשיטה projects.locations.applications.patch. הבקשה הזו מעדכנת את הגדרת האפליקציה של ה-API מהאפליקציה לדוגמה הקודמת, כך שהצומת occupancy-count ישלח הערות פלט לסטרימינג של Vertex AI Vision. ההתנהגות הזו מופעלת על ידי השדה output_all_output_channels_to_stream.

לפני שמשתמשים בנתוני הבקשה, צריך להחליף את הנתונים הבאים:

ה-method של ה-HTTP וכתובת ה-URL:

PATCH https://visionai.googleapis.com/v1/projects/PROJECT_NUMBER/locations/LOCATION_ID/applications/APPLICATION_ID

גוף בקשת JSON:

{
  "applicationConfigs": {
    "nodes": [
        {
          "displayName": "Input Stream",
          "name": "input-stream",
          "processor": "builtin:stream-input"
        },
        {
          "displayName": "Occupancy Count",
          "name": "occupancy-count",
          "nodeConfig": {
            "occupancyCountConfig": {
              "enablePeopleCounting": true,
              "enableVehicleCounting": true
            }
          },
          "parents": [
            {
              "parentNode": "input-stream"
            }
          ],
          "processor": "builtin:occupancy-count",
          "output_all_output_channels_to_stream": true
        }
    ]
  }
}

כדי לשלוח את הבקשה עליכם לבחור אחת מהאפשרויות הבאות:

curl

שומרים את גוף הבקשה בקובץ בשם request.json ומריצים את הפקודה הבאה:

curl -X PATCH \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json; charset=utf-8" \
-d @request.json \
"https://visionai.googleapis.com/v1/projects/PROJECT_NUMBER/locations/LOCATION_ID/applications/APPLICATION_ID"

PowerShell

שומרים את גוף הבקשה בקובץ בשם request.json ומריצים את הפקודה הבאה:

$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }

Invoke-WebRequest `
-Method PATCH `
-Headers $headers `
-ContentType: "application/json; charset=utf-8" `
-InFile request.json `
-Uri "https://visionai.googleapis.com/v1/projects/PROJECT_NUMBER/locations/LOCATION_ID/applications/APPLICATION_ID" | Select-Object -Expand Content
אם פעולת העדכון מסתיימת, הפעולה מחזירה סטטוס 200 OK ללא שגיאה, והשירות מעדכן את משאב האפליקציה בהתאם.

עדכון מופע האפליקציה

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

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

צריך ליצור משאב של זרם שהצומת שולח אליו פלט

לפני ששולחים את הבקשה הבאה.

REST

בדוגמה הזו נשתמש בשיטה projects.locations.applications.updateApplicationInstances. הבקשה הזו משתמשת בהגדרת האפליקציה המעודכנת של ה-API מהאפליקציה לדוגמה הקודמת. הפקודה הקודמת לעדכון הגדירה את הצומת occupancy-count כך שיוכל לשלוח הערות פלט לשידור של Vertex AI Vision. הפקודה הזו מעדכנת את מופע האפליקציה כדי לשלוח את הנתונים מהצומת של היצרן occupancy-count למשאב קיים של זרם.

לפני שמשתמשים בנתוני הבקשה, צריך להחליף את הנתונים הבאים:

  • PROJECT: מזהה הפרויקט או מספר הפרויקט ב- Google Cloud.
  • LOCATION_ID: האזור שבו אתם משתמשים ב-Vertex AI Vision. לדוגמה: us-central1, ‏ europe-west4. אזורים זמינים
  • APPLICATION_ID: המזהה של אפליקציית היעד.
  • inputResources: משאב הקלט (או המשאבים) של מופע האפליקציה הנוכחי. זהו מערך של אובייקטים שמכילים את השדות הבאים:
    • consumerNode: השם של צומת הגרף שמקבל את משאב הקלט.
    • inputResource: שם המשאב המלא של הקלט.
  • outputResources.outputResource: משאב stream שאליו רוצים להוציא את נתוני האפליקציה.
  • outputResources.producerNode: השם של צומת הפקת הפלט של האפליקציה. בדוגמה הזו, זהו צומת הניתוח, occupancy-count.
  • INSTANCE_ID: המזהה של מופע האפליקציה.

ה-method של ה-HTTP וכתובת ה-URL:

POST https://visionai.googleapis.com/v1/projects/PROJECT_NUMBER/locations/LOCATION_ID/applications/APPLICATION_ID:updateApplicationInstances

גוף בקשת JSON:

{
  "applicationInstances": [
    {
      "instance": {
        "inputResources": [
          {
            "consumerNode": "input-stream",
            "inputResource": "projects/PROJECT_NUMBER/locations/LOCATION_ID/clusters/application-cluster-0/streams/INPUT_STREAM_ID"
          }
        ],
        "outputResources":[
          {
            "outputResource": "projects/PROJECT_NUMBER/locations/LOCATION_ID/clusters/application-cluster-0/streams/OUTPUT_STREAM_ID",
            "producerNode": "occupancy-count"
          }
        ]
      },
      "instanceId": INSTANCE_ID
    }
  ]
}

כדי לשלוח את הבקשה עליכם לבחור אחת מהאפשרויות הבאות:

curl

שומרים את גוף הבקשה בקובץ בשם request.json ומריצים את הפקודה הבאה:

curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json; charset=utf-8" \
-d @request.json \
"https://visionai.googleapis.com/v1/projects/PROJECT_NUMBER/locations/LOCATION_ID/applications/APPLICATION_ID:updateApplicationInstances"

PowerShell

שומרים את גוף הבקשה בקובץ בשם request.json ומריצים את הפקודה הבאה:

$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }

Invoke-WebRequest `
-Method POST `
-Headers $headers `
-ContentType: "application/json; charset=utf-8" `
-InFile request.json `
-Uri "https://visionai.googleapis.com/v1/projects/PROJECT_NUMBER/locations/LOCATION_ID/applications/APPLICATION_ID:updateApplicationInstances" | Select-Object -Expand Content
אם פעולת העדכון מסתיימת, הפעולה מחזירה סטטוס 200 OK ללא שגיאה, והשירות מעדכן את מופע האפליקציה בהתאם.