1. 目標
總覽
本程式碼研究室著重於建立端對端 Vertex AI Vision 應用程式,以監控即時交通影像。我們會使用預先訓練的「入住率分析」專用模型內建功能,擷取下列資訊:
- 計算在特定線上穿越道路的車輛和人數。
- 計算道路上任何固定區域的車輛/人數。
- 偵測道路任何部分的壅塞情況。
課程內容
- 如何設定 VM 來擷取影片以供串流
- 如何在 Vertex AI Vision 中建立應用程式
- 入住率分析提供的不同功能及使用方式
- 如何部署應用程式
- 瞭解如何搜尋儲存在 Vertex AI Vision 媒體倉儲中的影片。
- 如何將輸出內容連結至 BigQuery、編寫 SQL 查詢,從模型的 JSON 輸出內容擷取洞察資料,並即時在 Looker Studio 中以視覺化方式呈現結果。
2. 事前準備
- 在 Google Cloud 控制台的專案選擇器頁面中,選取或建立 Google Cloud 專案。注意:如果您不打算保留在這項程序中建立的資源,請建立新專案,而不要選取現有專案。完成這些步驟後,您就可以刪除專案,並移除與該專案相關聯的所有資源。前往專案選取器
- 確認 Cloud 專案已啟用計費功能。瞭解如何檢查專案是否已啟用計費功能。
- 啟用 Compute Engine 和 Vision AI API。啟用 API
建立服務帳戶:
- 前往 Google Cloud 控制台中的「Create service account」(建立服務帳戶) 頁面。前往「建立服務帳戶」
- 選取專案。
- 在「Service account name」(服務帳戶名稱) 欄位中輸入名稱。Google Cloud 控制台會根據這個名稱填入「Service account ID」(服務帳戶 ID) 欄位。在「Service account description」(服務帳戶說明) 欄位中輸入說明。例如:快速入門導覽課程的服務帳戶。
- 按一下 [建立並繼續]。
- 如要提供專案存取權,請將下列角色授予服務帳戶:Vision AI > Vision AI 編輯者、Compute Engine > Compute 執行個體管理員 (Beta 版)、Storage > Storage 物件檢視者 †。在「Select a role」(選取角色) 清單中,選取角色。如要新增其他角色,請按一下「新增其他角色」,然後新增其他角色。注意:「Role」(角色) 欄位會影響服務帳戶在專案中可存取的資源。日後可以撤銷這些角色或授予其他角色。在正式環境中,請勿授予「擁有者」、「編輯者」或「檢視者」角色。而是根據需求,授予預先定義角色或自訂角色。
- 按一下「繼續」。
- 按一下「Done」(完成),即完成建立服務帳戶。請勿關閉瀏覽器視窗,後續步驟會用到。
建立服務帳戶金鑰:
- 在 Google Cloud 控制台中,點按您建立的服務帳戶電子郵件地址。
- 點按「Keys」(金鑰)。
- 依序點按「Add key」(新增金鑰) 和「Create new key」(建立新的金鑰)。
- 按一下「建立」,系統會將 JSON 金鑰檔案下載至您的電腦。
- 點選「關閉」。
- 安裝並初始化 Google Cloud CLI。
† 如果要從 Cloud Storage bucket 複製範例影片檔,才需要這個角色。
3. 設定 VM 來串流影片
在 Occupancy Analytics 中建立應用程式之前,您必須先註冊串流,供應用程式日後使用。
在本教學課程中,您將建立代管影片的 Compute Engine VM 執行個體,並從該 VM 傳送串流影片資料。
建立 Linux VM
從 Compute Engine VM 執行個體傳送影片的第一步是建立 VM 執行個體。
- 前往控制台的「VM instances」(VM 執行個體) 頁面。前往 VM 執行個體
- 選取您的專案並點選 [繼續]。
- 點選「建立執行個體」。
- 指定 VM 的「Name」(名稱)。詳情請參閱「資源命名慣例」。
- 選用:變更這個 VM 的「Zone」(區域)。Compute Engine 會隨機排列每個地區內的區域清單,以鼓勵跨多個區域使用。
- 接受其餘預設選項。如要進一步瞭解這些選項,請參閱「建立及啟動 VM」。
- 如要建立並啟動 VM,請按一下 [Create] (建立)。
設定 VM 環境
VM 啟動後,您可以使用控制台,從瀏覽器透過 SSH 連線至 VM。接著,您可以下載 vaictl 指令列工具,將影片擷取到串流中。
與 VM 建立 SSH 連線
- 前往控制台的「VM instances」(VM 執行個體) 頁面。前往 VM 執行個體
- 在您建立的執行個體行中,按一下「連線」區段的「SSH」。系統會在新的瀏覽器視窗中開啟 SSH 連線。

下載 vaictl 指令列工具
- 在直接透過瀏覽器進行 SSH 連線視窗中,使用下列指令下載 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 將影片資料串流至入住率分析應用程式。
首先,請在 Cloud 控制台中啟用 Vision AI API
註冊新的串流
- 按一下 Vertex AI Vision 左側面板中的「串流」分頁標籤。
- 按一下「註冊」
- 在「串流名稱」中輸入「traffic-stream」
- 在區域中輸入「us-central1」
- 按一下「註冊」
系統需要幾分鐘才能完成註冊。
將範例影片複製到 VM
- 在 VM 的「直接透過瀏覽器進行 SSH 連線」視窗中,使用下列 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 .
從 VM 串流影片,並將資料擷取到串流中
- 如要將這個本機影片檔案傳送至應用程式輸入串流,請使用下列指令。您必須進行下列變數替換:
- 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 旗標,影片會循環播放到串流中,直到你停止指令為止。我們會以背景工作形式執行這項指令,即使 VM 中斷連線,串流也會繼續。
- ( 在開頭加上 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 &
開始 vaictl 擷取作業後,影片可能需要約 100 秒才會顯示在資訊主頁。
串流擷取功能上線後,選取流量串流,即可在 Vertex AI Vision 資訊主頁的「串流」分頁中查看影片動態消息。
在 Google Cloud 控制台中,即時查看影片擷取至串流的狀態。影片來源: Elizabeth Mavor (已加入像素化效果),取自 Pixabay。
5. 建立應用程式
首先,請建立處理資料的應用程式。應用程式可視為自動化管道,可連結下列項目:
- 資料擷取:影片動態饋給會擷取至串流。
- 資料分析:擷取資料後,即可加入 AI(電腦視覺) 模型。
- 資料儲存:影片動態饋給的兩個版本 (原始串流和 AI 模型處理的串流) 可以儲存在媒體倉儲中。
在 Google Cloud 控制台中,應用程式會以圖表表示。
建立空白的應用程式
您必須先建立空白應用程式,才能填入應用程式圖表。
在 Google Cloud 控制台中建立應用程式。
- 前往 Google Cloud 控制台。
- 開啟 Vertex AI Vision 資訊主頁的「應用程式」分頁。
- 按一下「建立」按鈕。
- 輸入 traffic-app 做為應用程式名稱,然後選擇區域。
- 按一下「Create」(建立)。
新增應用程式元件節點
建立空白應用程式後,即可將三個節點新增至應用程式圖表:
- 擷取節點:串流資源,用於擷取您建立的 Compute Engine VM 執行個體傳送的資料。
- 處理節點:根據擷取資料運作的入住率分析模型。
- 儲存節點:媒體倉儲,用於儲存處理過的影片,並做為中繼資料儲存空間。中繼資料儲存空間包括擷取的影片資料分析資訊,以及 AI 模型推斷的資訊。
在管理中心將元件節點新增至應用程式。
- 開啟 Vertex AI Vision 資訊主頁的「應用程式」分頁。前往「應用程式」分頁
- 在流量應用程式行中,選取「查看圖表」。系統會將您導向處理管道的圖表視覺化畫面。
新增資料擷取節點
- 如要新增輸入串流節點,請在側邊選單的「Connectors」(連接器) 區段中選取「Streams」(串流) 選項。
- 在隨即開啟的「串流」選單中,選取「來源」部分的「新增串流」。
- 在「新增串流」選單中,選擇「註冊新串流」,並將 traffic-stream 新增為串流名稱。
- 如要將串流新增至應用程式圖表,請按一下「新增串流」。
新增資料處理節點
- 如要新增入住人數計數模型節點,請在側邊選單的「Specialized models」(專業模型) 區段中,選取「occupancy analytics」(入住人數分析) 選項。
- 保留預設選取的「人物」和「車輛」。
- 在「線條交叉」中新增線條。使用多點線條工具繪製線條,偵測車輛或人員進出。
- 繪製活動區,計算該區域內的人數/車輛數。
- 如果繪製了活動區,請新增停留時間設定,偵測擁擠情況。
- (目前系統不支援同時啟用活動區和越線偵測。一次只能使用一項功能)。


新增資料儲存節點
- 如要新增輸出目的地 (儲存空間) 節點,請在側邊選單的「Connectors」(連接器) 區段中選取「Vertex AI Vision's Media Warehouse」(Vertex AI Vision 的媒體倉儲) 選項。
- 在「Vertex AI Vision 的媒體倉儲」選單中,按一下「連結倉儲」。
- 在「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。
- 錯誤處理:
- 如果同一個資料集下已有同名資料表,系統就不會自動建立資料表。
- 開啟 Vertex AI Vision 資訊主頁的「應用程式」分頁。前往「應用程式」分頁
- 從清單中選取應用程式名稱旁的「查看應用程式」。
- 在應用程式建構工具頁面中,從「連接器」部分選取「BigQuery」。
- 將「BigQuery 路徑」欄位留空。

- 在「儲存中繼資料來源:」中,只選取「車輛乘載人數分析」,並取消勾選串流。
最終的應用程式圖表應如下所示:

7. 部署應用程式以供使用
使用所有必要元件建構端對端應用程式後,最後一個步驟就是部署應用程式。
- 開啟 Vertex AI Vision 資訊主頁的「應用程式」分頁。前往「應用程式」分頁
- 在清單中,選取流量應用程式旁的「查看圖表」。
- 在應用程式圖表建構工具頁面中,按一下「部署」按鈕。
- 在隨即顯示的確認對話方塊中,選取「Deploy」。部署作業可能需要幾分鐘才能完成。部署作業完成後,節點旁會顯示綠色勾號。

8. 在儲存倉儲中搜尋影片內容
將影片資料擷取至處理應用程式後,即可查看分析結果,並根據入住率分析資訊搜尋資料。
- 開啟 Vertex AI Vision 資訊主頁的「倉庫」分頁。前往「倉庫」分頁
- 在清單中找出流量倉庫,然後點選「查看資產」。
- 在「人數」或「車輛數」部分,將「最小值」設為 1,並將「最大值」設為 5。
- 如要篩選儲存在 Vertex AI Vision Media Warehouse 中的已處理影片資料,請按一下「搜尋」。

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」,以計算人數。
本程式碼研究室只會顯示 Query1 的範例資料和視覺化效果。您可以對 Query2 執行類似程序。

按一下右側選單中的「探索資料」,然後選取「透過 Looker Studio 探索」

在「維度」窗格中新增時間,並將時間設定變更為日期時間。在「細分維度」中新增 line_id。
上圖顯示每分鐘通過各條線的車輛/人數。
深藍色和淺藍色長條分別代表兩個不同的行 ID。
10. 恭喜
恭喜,您已完成實驗室!
清理
如要避免系統向您的 Google Cloud 帳戶收取本教學課程所用資源的費用,請刪除含有相關資源的專案,或者保留專案但刪除個別資源。
刪除專案
刪除個別資源
資源
https://cloud.google.com/vision-ai/docs/overview
https://cloud.google.com/vision-ai/docs/occupancy-count-tutorial
意見回饋