提供事件管理功能的 Vertex AI Vision 人數分析應用程式

1. 目標

總覽

本程式碼研究室著重於建立端對端 Vertex AI Vision 應用程式,以便透過事件管理功能傳送事件。我們會使用預先訓練的專業模型「入座率分析」內建的功能,根據擷取下列項目產生的事件:

  • 計算特定路線的車輛和行人的數量。
  • 計算道路任何固定區域的車輛/人數。
  • 偵測道路任一區域的壅塞情形。

課程內容

  • 如何擷取要串流的影片
  • 如何在 Vertex AI Vision 中建立應用程式
  • 入座率分析提供的各種功能及使用方式
  • 如何部署應用程式
  • 如何在儲存空間的 Vertex AI Vision 媒體倉儲中搜尋影片。
  • 如何建立可處理職業分析模型資料的 Cloud 函式。
  • 如何建立 Pub/Sub 主題與訂閱項目中的所有進階功能!
  • 如何設定事件管理功能,透過 Pub/Sub 主題傳送事件。

2. 事前準備

  1. 在 Google Cloud 控制台的專案選取器頁面中,選取或建立 Google Cloud 專案注意事項:如果您不打算保留您在這項程序中建立的資源,請建立專案,而不要選取現有專案。完成這些步驟後,您就可以刪除專案,並移除相關聯的所有資源。前往專案選取器
  2. 確認 Cloud 專案已啟用計費功能。瞭解如何檢查專案是否已啟用帳單功能
  3. 啟用 Compute Engine 和 Vision AI API。啟用 API

建立服務帳戶:

  1. 前往 Google Cloud 控制台中的「建立服務帳戶」頁面。前往「建立服務帳戶」頁面
  2. 選取專案。
  3. 在「服務帳戶名稱」欄位中輸入名稱。Google Cloud 控制台會根據這個名稱填入「服務帳戶 ID」欄位。在「服務帳戶說明」欄位中輸入說明。例如快速入門導覽課程的服務帳戶。
  4. 按一下 [建立並繼續]
  5. 如要提供專案存取權,請將下列角色授予服務帳戶:Vision AI >Vision AI 編輯者、Compute Engine >Compute 執行個體管理員 (Beta 版),儲存空間 >Storage 物件檢視者 †。在「請選擇角色」清單中,選取角色。如需其他角色,請按一下「Add another role」(新增其他角色),然後新增其他角色。注意:「角色」欄位會影響服務帳戶可在專案中存取的資源。您日後可以撤銷這些角色或授予其他角色。在正式環境中,請勿授予「擁有者」、「編輯者」或「檢視者」角色。請改為授予符合您需求的預先定義角色自訂角色
  6. 按一下「繼續」
  7. 按一下「完成」即可完成服務帳戶建立程序。請勿關閉瀏覽器視窗。您會在下一個步驟中用到。

建立服務帳戶金鑰:

  1. 在 Google Cloud 控制台中,按一下您建立的服務帳戶的電子郵件地址。
  2. 按一下「鍵」
  3. 按一下「新增金鑰」,然後點選「建立新的金鑰」
  4. 按一下「建立」,系統會將 JSON 金鑰檔案下載至您的電腦。
  5. 按一下「關閉」
  6. 安裝初始化 Google Cloud CLI。

† 從 Cloud Storage 值區複製範例影片檔案時,才需要角色。

3. 擷取要串流的影片檔案

你可以使用 vaictl 將影片資料串流至入住人數分析應用程式。

請先在 Cloud 控制台中啟用 Vision AI API

註冊新的串流

  1. 在 Vertex AI Vision 的左側面板中,按一下「串流」分頁標籤。
  2. 按一下「註冊」
  3. 在串流名稱中輸入「traffic-stream」
  4. 在區域中,輸入「us-central1」
  5. 點擊註冊

串流會在幾分鐘內登錄。

準備影片樣本

  1. 您可以使用下列 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 專案 ID。
  • LOCATION_ID:您的地區 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
  1. 這個指令會將影片檔案串流至串流。如果使用 –loop 標記,影片會在串流中循環播放,直到您停止指令為止。我們會將這個指令做為背景工作執行,以便繼續串流。
  • ( 在開頭加上無名詞,並在結尾加上「&」即可做為背景工作)
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 &

啟動 vaictl 擷取作業到資訊主頁中顯示的影片,可能需要約 100 秒的時間。

系統提供串流擷取後,選取流量串流,即可在 Vertex AI Vision 資訊主頁的「串流」分頁中查看視訊動態饋給。

前往「訊息串」分頁

透過 UI 查看即時影像即時檢視畫面:系統將影片擷取至 Google Cloud 控制台中的串流。影片來源: PixabayElizabeth Mavor (已新增像素)。

4. 建立 Cloud 函式

您需要 Cloud 函式來摘要模型的資料,並產生稍後透過事件管道傳送的事件。

如要進一步瞭解 Cloud 函式,請參閱這篇文章

建立可監聽模型的 Cloud 函式

  1. 前往 Cloud 函式 UI 建立頁面
  2. 設定函式名稱,稍後在「事件管理」設定中會參照這個 Cloud 函式。
  3. 請確保區域與您的應用程式相符。
  4. 調整後儲存觸發條件設定。
  5. 點選下一個按鈕即可前往「程式碼」部分。無法載入 Cloud 函式建立範例
  6. 編輯 Cloud 函式。以下是使用 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);
}
  1. 按一下「部署」部署函式的按鈕。

5. 建立 Pub/Sub 主題和訂閱項目

您必須提供要接收事件的 Pub/Sub 主題。如要接收事件,Pub/Sub 訂閱項目必須訂閱已設定的 Optic。

如要進一步瞭解 Pub/Sub 主題,請按這裡;如要訂閱,請按這裡

建立 Pub/Sub 主題

如要建立 Pub/Sub 主題,可以使用 gcloud CLI:(請將 SUBSCRIPTION_ID 替換成設定的實際值)

gcloud pubsub topics create TOPIC_ID

或者,您也可以使用 Pub/Sub UI

建立 Pub/Sub 訂閱項目

如要建立 Pub/Sub 訂閱項目,可以使用 gcloud CLI:(請將 SUBSCRIPTION_ID 和 TOPIC_ID 替換成設定的實際值)

gcloud pubsub subscriptions create SUBSCRIPTION_ID \
    --topic=TOPIC_ID \

或者,您也可以使用 Pub/Sub UI

6. 建立應用程式

第一步是建立處理資料的應用程式。應用程式可視為連結以下項目的自動化管道:

  • 資料擷取:影片動態饋給會擷取至串流中。
  • 資料分析:可在擷取完成後新增 AI(Computer Vision) 模型。
  • 資料儲存:兩種版本的影片動態饋給 (原始串流和 AI 模型處理的串流) 可儲存在媒體倉儲中。

在 Google Cloud 控制台中,應用程式會以圖表表示。

建立空白應用程式

您必須先建立空白的應用程式,才能填入應用程式圖表。

在 Google Cloud 控制台中建立應用程式。

  1. 前往 Google Cloud 控制台
  2. 開啟 Vertex AI Vision 資訊主頁的「Applications」分頁。

前往「應用程式」分頁

  1. 按一下新增「建立」按鈕。
  2. 輸入 traffic-app 做為應用程式名稱,然後選擇您的地區。
  3. 按一下「建立」

新增應用程式元件節點

建立空白應用程式後,您可以將這三個節點新增至應用程式圖表:

  1. 擷取節點:擷取資料的串流資源。
  2. 處理節點:處理已擷取資料的車輛乘載人數分析模型。
  3. 儲存空間節點:儲存已處理影片,並做為中繼資料儲存庫的媒體倉儲。中繼資料儲存項目包括已擷取影片資料的數據分析資訊,以及 AI 模型推測的資訊。

在控制台中新增元件節點。

  1. 開啟 Vertex AI Vision 資訊主頁的「Applications」分頁。前往「應用程式」分頁
  2. 在流量應用程式列中,選取「查看圖表」。系統會將您帶往處理管道的視覺化圖表。

新增資料擷取節點

  1. 如要新增輸入串流節點,請在側邊選單的「Connectors」(連接器) 部分中選取「Streams」(串流) 選項。
  2. 在隨即開啟的「串流」選單的「來源」部分,選取「新增串流」
  3. 在「新增串流」選單中,選擇「註冊新串流」,然後將流量串流新增為串流名稱。
  4. 如要將串流新增至應用程式圖表,請按一下「新增串流」

新增資料處理節點

  1. 如要新增入住人數模型節點,請在側邊選單的「Specialized Model」(特殊化模型) 部分中,選取「車輛乘載人數分析」選項。
  2. 保留預設選項「People」和「Vehicles」
  3. 在線條交會處加入線條。使用多點線條工具繪製需要偵測車輛或使用者離開/進站的路段。
  4. 繪製活動區,計算該區間內的人群/車輛。
  5. 新增停留時間設定,以便在繪製活動區域時偵測壅塞。
  • (目前您無法同時支援活動可用區和跨線。一次只能使用一項功能)。

3acdb6f1e8474e07.png ce63449d601995e9.png

194c54d2bbcf7e8a.png

新增資料儲存節點

  1. 如要新增輸出目的地 (儲存空間) 節點,請在側邊選單的「Connectors」部分中,選取「Vertex AI Vision's Media Warehouse」選項。
  2. 在「Vertex AI Vision 的媒體倉儲」選單中,按一下「連結倉儲」
  3. 在「連結倉儲」選單中,選取「建立新的倉儲」。為倉儲流量倉庫命名,並將存留時間保留為 14 天。
  4. 按一下「Create」(建立) 按鈕來新增倉儲。

7. 設定事件管理

時間長度 02:00

我們會將模型連結至先前建立的 Cloud 函式進行後續處理,讓 Cloud 函式自由擷取模型輸出內容,並產生符合需求的事件。接著,我們會將先前建立的 Pub/Sub 主題設為目標,設定事件管道。你也可以設定最短時間間隔,避免活動頻道在短時間內因同一事件淹水。

選取後續處理的 Cloud 函式

  1. 在應用程式圖表中,按一下資料處理節點(佔用人數分析) 即可開啟側邊選單。
  2. 在「處理後」下拉式選單中選取您的 Cloud 函式 (以函式名稱識別)。
  3. 應用程式圖表會自動儲存變更。

無法載入「後續處理設定」範例

設定事件管道

  1. 在應用程式圖表中,按一下資料處理節點(佔用人數分析) 即可開啟側邊選單。
  2. 按一下「設定活動通知」「活動通知」部分。無法載入事件通知範例
  3. 在下拉式選單中選取 Pub/Sub 主題。
  4. (選用) 設定事件發布的最短間隔/頻率。

無法載入「事件通知」對話方塊範例

8. 部署應用程式以供使用

在您建構完所有必要元件的端對端應用程式後,使用應用程式的最後一個步驟是部署應用程式。

  1. 開啟 Vertex AI Vision 資訊主頁的「Applications」分頁。前往「應用程式」分頁
  2. 在清單中,選取流量應用程式旁邊的「查看圖表」
  3. 從應用程式圖表建構工具頁面中,按一下「部署」按鈕。
  4. 在接下來的確認對話方塊中,選取「部署」。部署作業可能需要幾分鐘才能完成。部署完成後,節點旁邊會顯示綠色勾號。ee78bbf00e5db898.png

9. 驗證 Pub/Sub 訂閱項目中的事件/訊息

將影片資料擷取至處理應用程式後,Cloud Function 會在車輛乘載分析模型輸出註解後產生事件。接著,這些事件應透過 Pub/Sub 主題發布為訊息,與

下列步驟假設您有提取訂閱項目。

  1. 開啟專案的 Pub/Sub 訂閱項目清單,並尋找相應的訂閱項目。前往 Pub/Sub 訂閱項目清單頁面
  2. 前往「訊息」頁面分頁。
  3. 按一下「提取」按鈕。
  4. 在表格中查看訊息。載入 Pub/Sub 訂閱訊息圖片時發生錯誤

您也可以瞭解如何在沒有使用者介面的情況下接收訊息。前往訂閱頁面

10. 恭喜

恭喜,您完成了研究室!

清理

如要避免系統向您的 Google Cloud 帳戶收取本教學課程所用資源的費用,請刪除含有相關資源的專案,或者保留專案但刪除個別資源。

刪除專案

刪除個別資源

資源

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

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

意見回饋

按這裡提供意見

問卷調查

您會如何使用這個教學課程?

僅供閱讀 閱讀並完成練習

本程式碼研究室有多實用?

很實用 還算實用