1. 目標
總覽
本程式碼實驗室將著重於端對端建立 Vertex AI Vision 應用程式,透過事件管理功能傳送事件。我們會使用預先訓練的專門模型「Occupancy analytics」內建功能,根據以下擷取的內容產生事件:
- 計算特定路線的車輛和行人的數量。
- 計算道路任何固定區域的車輛/人數。
- 偵測道路任何路段的壅塞情形。
課程內容
- 如何擷取影片以供串流播放
- 如何在 Vertex AI Vision 中建立應用程式
- 可用於「入住率分析」的不同功能及其使用方式
- 如何部署應用程式
- 如何在 Vertex AI Vision 的媒體倉儲中搜尋影片。
- 如何建立可處理占用率分析模型資料的雲端函式。
- 如何建立 Pub/Sub 主題與訂閱。
- 如何設定事件管理功能,透過 Pub/Sub 主題傳送事件。
2. 事前準備
- 在 Google Cloud 控制台的專案選取器頁面中,選取或建立 Google Cloud 專案。注意:如果您不打算保留在這項程序中建立的資源,請建立新專案,不要選取現有專案。這樣在完成這些步驟後,您就可以刪除專案,並移除與該專案相關聯的所有資源。前往專案選取器
- 確認 Cloud 專案已啟用計費功能。瞭解如何檢查專案是否已啟用計費功能。
- 啟用 Compute Engine 和 Vision AI API。啟用 API
建立服務帳戶:
- 前往 Google Cloud 控制台的「Create service account」(建立服務帳戶) 頁面。前往「Create service account」(建立服務帳戶)
- 選取專案。
- 在「Service account name」(服務帳戶名稱) 欄位中輸入名稱。Google Cloud 控制台會根據這個名稱填入「服務帳戶 ID」欄位。在「服務帳戶說明」欄位中輸入說明。例如快速入門導覽課程的服務帳戶。
- 按一下 [建立並繼續]。
- 如要提供專案存取權,請將下列角色授予服務帳戶:Vision AI > Vision AI 編輯者、Compute Engine > Compute 執行個體管理員 (Beta 版)、Storage > Storage 物件檢視者 †。在「請選擇角色」清單中,選取所需角色。如要新增其他角色,請按一下「新增其他角色」,然後新增各個角色。注意:「Role」欄位會影響服務帳戶可在專案中存取哪些資源。您日後可以撤銷這些角色或授予其他角色。在實際環境中,請勿授予擁有者、編輯者或檢視者角色。請改為授予符合需求的預先定義角色或自訂角色。
- 按一下「繼續」。
- 按一下「Done」,即完成建立服務帳戶。請勿關閉瀏覽器視窗。您將在下一個步驟中使用此項目。
建立服務帳戶金鑰:
- 在 Google Cloud 控制台中,按一下您建立的服務帳戶的電子郵件地址。
- 按一下「Keys」。
- 依序點選「新增金鑰」和「建立新的金鑰」。
- 按一下「建立」,JSON 金鑰檔案會下載至您的電腦。
- 按一下「關閉」。
- 安裝並初始化 Google Cloud CLI。
† 只有在從 Cloud Storage 值區複製影片檔案範例時,才需要這個角色。
3. 擷取用於串流的影片檔案
您可以使用 vaictl 將影像資料串流至入住率分析應用程式。
請先在 Cloud 控制台中啟用 Vision AI API
註冊新的串流
- 按一下 Vertex AI Vision 左側面板中的「串流」分頁標籤。
- 按一下「註冊」
- 在「串流名稱」中輸入「traffic-stream」
- 在「region」(區域) 中輸入「us-central1」
- 按一下「註冊」
串流需要幾分鐘才能註冊。
準備示例影片
- 您可以使用下列 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 專案 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
- 這個指令會將影片檔案串流至串流。如果使用 –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 資訊主頁的「串流」分頁中查看影片動態饋給。
在 Google Cloud 控制台中,即時查看攝入串流的影片。影片來源:Pixabay 上的 Elizabeth Mavor (已加入模糊處理)。
4. 建立 Cloud 函式
我們需要 Cloud 函式來消化模型的資料,並產生稍後透過事件管道傳送的事件。
如要進一步瞭解 Cloud 函式,請參閱這篇文章
建立可監聽模型的 Cloud 函式
- 前往 Cloud 函式 UI 建立頁面。
- 設定函式名稱,這個名稱會在稍後用於在事件管理設定中參照這個 Cloud 函式。
- 確認區域與應用程式相符。
- 調整並儲存觸發條件設定。
- 按一下下一個按鈕,前往「code」部分。
- 編輯 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);
}
- 按一下「Deploy」(部署) 按鈕,即可部署函式。
5. 建立 Pub/Sub 主題和訂閱項目
我們需要為應用程式提供 Pub/Sub 主題,以便應用程式將事件傳送至該主題。如要接收事件,Pub/Sub 訂閱項目必須訂閱已設定的光學裝置。
如要進一步瞭解 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(電腦視覺) 模型。
- 資料儲存空間:兩個版本的影片動態饋給 (原始串流和 AI 模型處理的串流) 可儲存在媒體倉儲中。
在 Google Cloud 控制台中,應用程式會以圖表表示。
建立空白的應用程式
您必須先建立空白的應用程式,才能填入應用程式圖表。
在 Google Cloud 控制台中建立應用程式。
- 前往 Google Cloud 控制台。
- 開啟 Vertex AI Vision 資訊主頁的「應用程式」分頁。
- 按一下新增「建立」按鈕。
- 輸入「traffic-app」做為應用程式名稱,並選擇區域。
- 按一下「建立」。
新增應用程式元件節點
建立空白應用程式後,您可以將這三個節點新增至應用程式圖表:
- 擷取節點:擷取資料的串流資源。
- 處理節點:負責處理攝入資料的占用率分析模型。
- 儲存節點:儲存經過處理的影片,並做為中繼資料儲存空間的媒體倉儲。中繼資料儲存庫包含擷取的影片資料分析資訊,以及 AI 模型推斷的資訊。
在控制台中新增元件節點。
- 開啟 Vertex AI Vision 資訊主頁的「應用程式」分頁。前往「應用程式」分頁
- 在流量應用程式列中,選取「查看圖表」。這會帶您前往處理管道的圖表視覺化畫面。
新增資料匯入節點
- 如要新增輸入串流節點,請在側邊選單的「Connectors」(連接器) 區段中選取「Streams」(串流) 選項。
- 在隨即開啟的「串流」選單的「來源」部分,選取「新增串流」。
- 在「Add streams」選單中,選擇「Register new streams」,然後將 traffic-stream 新增為串流名稱。
- 如要將串流新增至應用程式圖表,請按一下「新增串流」。
新增資料處理節點
- 如要新增入住人數模型節點,請在側邊選單的「Specialized models」(專用模型) 區段中,選取「occupancy analytics」(入住人數分析) 選項。
- 保留預設選項「人物」和「車輛」。
- 在線條交會處加入線條。使用多點線條工具,在需要偵測車輛或人員進出的地方繪製線條。
- 繪製活動區,以便計算該區域內的人數/車輛數量。
- 新增停留時間設定,在繪製活動區時偵測壅塞情形。
- (目前不支援同時偵測到活動區和範圍線。一次只能使用一項功能)。
新增資料儲存節點
- 如要新增輸出目的地 (儲存空間) 節點,請在側邊選單的「Connectors」(連接器) 區段中選取「Vertex AI Vision's Media Warehouse」(Vertex AI Vision 的媒體倉儲) 選項。
- 在 Vertex AI Vision 的媒體倉儲選單中,按一下「Connect warehouse」(連結倉儲)。
- 在「連結倉儲」選單中,選取「建立新的倉儲」。將倉儲命名為 traffic-warehouse,並將 TTL 持續時間保留 14 天。
- 按一下「Create」(建立) 按鈕來新增倉儲。
7. 設定事件管理
時間長度:02:00
我們會將模型連結至先前建立的 Cloud 函式進行後續處理,讓 Cloud 函式自由擷取模型輸出內容,並產生符合需求的事件。接著,我們會將先前建立的 Pub/Sub 主題設為目標,藉此設定事件管道。您也可以設定最小間隔,避免事件管道在短時間內遭到相同事件淹沒。
選取用於後續處理的 Cloud 函式
- 按一下應用程式圖表中的資料處理節點(occupancy analytics),開啟側邊選單。
- 在「後置處理」下拉式選單中選取 Cloud 函式 (以函式名稱識別)。
- 應用程式圖表會自動儲存變更。
設定事件管道
- 按一下應用程式圖表中的資料處理節點(occupancy analytics),開啟側邊選單。
- 按一下「活動通知」部分中的「設定活動通知」。
- 在下拉式選單中選取 Pub/Sub 主題。
- (選用) 設定事件發布作業的最小間隔/頻率。
8. 部署應用程式以供使用
在您建構完所有必要元件的端對端應用程式後,使用應用程式的最後一個步驟是部署應用程式。
- 開啟 Vertex AI Vision 資訊主頁的「應用程式」分頁。前往「應用程式」分頁
- 在清單中,選取「traffic-app」應用程式旁的「查看圖表」。
- 從應用程式圖表建構工具頁面中,按一下「部署」按鈕。
- 在接下來的確認對話方塊中,選取「部署」。部署作業可能需要幾分鐘才能完成。部署完成後,節點旁會顯示綠色勾號。
9. 驗證 Pub/Sub 訂閱項目中的事件/訊息
將影片資料擷取至處理應用程式後,Cloud 函式應在占用率分析模型輸出註解時產生事件。接著,這些事件應透過 Pub/Sub 主題發布為訊息,並由訂閱項目接收。
下列步驟假設您已訂閱拉取內容。
- 開啟專案的 Pub/Sub 訂閱清單,並找出對應的訂閱項目。前往 Pub/Sub 訂閱項目清單頁面
- 前往「訊息」分頁。
- 按一下「pull」按鈕。
- 在表格中查看訊息。
或者,您也可以瞭解如何在沒有 UI 的情況下接收訊息。前往訂閱頁面
10. 恭喜
恭喜,您已完成實驗室!
清理
如要避免系統向您的 Google Cloud 帳戶收取本教學課程所用資源的費用,請刪除含有相關資源的專案,或者保留專案但刪除個別資源。
刪除專案
刪除個別資源
資源
https://cloud.google.com/vision-ai/docs/overview
https://cloud.google.com/vision-ai/docs/occupancy-count-tutorial
意見回饋