1. 目標
總覽
本程式碼研究室的重點是建立端對端 Vertex AI Vision 應用程式,以示範使用動作篩選功能傳送影片。在本教學課程中,我們將介紹動作篩選器設定中的不同參數:
- 動作偵測靈敏度
- 事件錄製時間長度下限
- 回溯期
- 收操時間
- 動作偵測區
課程內容
- 如何擷取影片以供串流播放
- 動態濾鏡提供的各種功能及其使用方式
- 查看 Motion Filter 統計資料的位置
- 如何根據影片調整設定
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」欄位會影響服務帳戶可在專案中存取哪些資源。您可以稍後撤銷這些角色,或授予其他角色。在實際環境中,請勿授予擁有者、編輯者或檢視者角色。請改為授予符合需求的預先定義角色或自訂角色。
- 按一下「繼續」。
- 按一下「完成」即可完成服務帳戶建立程序。請勿關閉瀏覽器視窗。您將在下一個步驟中使用此項目。
建立服務帳戶金鑰:
- 在 Google Cloud 控制台中,按一下您建立的服務帳戶電子郵件地址。
- 按一下「鍵」。
- 依序點選「新增金鑰」和「建立新的金鑰」。
- 按一下「建立」,JSON 金鑰檔案會下載至您的電腦。
- 按一下「關閉」。
- 安裝並初始化 Google Cloud CLI。
† 只有在從 Cloud Storage 值區複製影片檔案範例時,才需要這個角色。
3. 動態濾鏡
動作篩選器可擷取含有動作事件的動作和產品影片片段。使用者可以調整動作感應度、事件最短長度、回溯期、冷卻期和動作偵測區,依據自身需求設定篩選器。
動作篩選器設定
動態篩選器提供 5 種自訂設定。
- 動作靈敏度:動作的靈敏度。
- 事件最短長度:動作事件的擷取最短長度。
- 回溯期:錄影開始錄影前,系統應先偵測動作事件的時間長度。
- 等待期:在動作事件結束後,系統會執行指定持續時間的等待期。在等待期內,系統不會觸發動作事件。
- 動作偵測區:使用者設定的區域,用於指定動作偵測功能應執行的位置。(後續章節會詳細說明)
動作感應靈敏度
在 vaictl 指令中使用旗標 motion_detection_sensitivity
。
字串。預設媒體。可選擇低、中或高。
動作偵測靈敏度越高,對噪音和細微動作的反應就越敏感。我們建議將這項設定用於含有較小物體移動 (例如遠距離的人) 且光線穩定的設定。
另一方面,低感光度對光線干擾的敏感度較低。這項設定非常適合在光線干擾較多 (例如戶外環境) 的情況下使用,以及在雜訊較多時提升影片品質。由於這項設定是所有設定中最嚴格的,因此可能會忽略小物件的移動。
事件錄製時間長度下限
在 vaictl 指令中使用旗標 min_event_length_in_seconds
。
整數。預設值為 10 秒。範圍介於 0 秒到 3600 秒。
在影格中偵測到動作事件片段後,要剖析的動作事件影片最短時間長度。
回溯期
在 vaictl 指令中使用旗標 look_back_window_in_seconds
。
整數。預設為 3 秒。範圍介於 0 秒到 3600 秒。
回溯期是指在偵測到動作事件前快取的時間長度。這項功能可讓我們瞭解在偵測到動作事件前幾秒的時間內,影格中發生了什麼事。
等待期
在 vaictl 指令中使用旗標 cool_down_period_in_seconds
。
整數。預設為 300 秒。範圍從 0 秒到 3600 秒。
冷卻期是指在偵測到動作事件後,動作偵測功能會暫停多久的時間。在等待期內,系統不會執行任何運算來偵測動作。
4. 基本動作篩選器範例
Vaictl SDK 手冊
如要檢查 vaictl
手動輸入串流,請使用下列指令。
vaictl send video-file applying motion-filter -h
準備示例影片
- 您可以使用下列 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 .
準備環境變數
設定下列環境變數,即可使用提供的指令範本。
vaictl 變數
- 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
動作篩選器變數
- MOTION_SENSITIVITY:動作偵測的靈敏度。
- MIN_EVENT_LENGTH:動作事件的長度下限。
- LOOK_BACK_WINDOW:在動作事件中,從第一次偵測到動作之前,要擷取的時間長度。
- COOL_DOWN_PERIOD:擷取動作事件後,動作偵測暫停的時間範圍。
export MOTION_SENSITIVITY=<low or medium or high> export MIN_EVENT_LENGTH=<0-3600> export LOOK_BACK_WINDOW=<0-3600> export COOL_DOWN_PERIOD=<0-3600>
準備動作濾鏡指令
搭配輸入串流使用動作篩選器的方式有兩種。第一個選項是將動作事件傳送至雲端控制台中的串流。第二個選項是將動作事件傳送至本機儲存空間。
將結果傳送至 Cloud 控制台
您可以使用 vaictl 將輸出影片資料串流至雲端控制台。請先在 Cloud 控制台中啟用 Vision AI API。
註冊新的串流
- 按一下 Vertex AI Vision 左側面板中的「串流」分頁標籤。
- 按一下「註冊」
- 在「Stream name」(串流名稱) 中輸入
motion-detection-stream
- 在「region」中輸入
us-central1
- 按一下「註冊」
正在將結果傳送至訊息串
這個指令會將影片檔案串流至串流。如果使用 –loop 旗標,系統會將影片重複播放至串流中,直到你停止指令為止。我們會將這個指令做為背景工作執行,以便繼續串流。
在開頭加上 nohup
,並在結尾加上 &
,即可將其設為背景工作。
INPUT_VIDEO=street_vehicles_people.mp4 vaictl -p $PROJECT \ -l $LOCATION_ID \ -c application-cluster-0 \ --service-endpoint visionai.googleapis.com \ send video-file --file-path $INPUT_VIDEO \ applying motion-filter --motion-sensitivity=$MOTION_SENSITIVITY \ --min-event-length=$MIN_EVENT_LENGTH \ --lookback-length=$LOOK_BACK_WINDOW \ --cooldown-length=$COOL_DOWN_PERIOD \ to streams motion-detection-stream --loop
啟動 vaictl 擷取作業到資訊主頁中顯示的影片,可能需要約 100 秒的時間。
串流攝入功能可供使用後,您可以選取流量串流,在 Vertex AI Vision 資訊主頁的「串流」分頁中查看影片動態饋給。
將結果傳送至本機儲存空間
這個指令會將影片檔案串流至串流。
在開頭加上 nohup
,並在結尾加上 &
,即可將其設為背景工作。
INPUT_VIDEO=street_vehicles_people.mp4 OUTPUT_PATH=<path_to_store_motion_events_on_local_disk> nohup vaictl -p $PROJECT \ -l $LOCATION_ID \ -c application-cluster-0 \ --service-endpoint visionai.googleapis.com \ send video-file --file-path $INPUT_VIDEO \ applying motion-filter --motion-sensitivity=$MOTION_SENSITIVITY \ --min-event-length=$MIN_EVENT_LENGTH \ --lookback-length=$LOOK_BACK_WINDOW \ --cooldown-length=$COOL_DOWN_PERIOD \ to mp4file --mp4-file-path=$OUTPUT_PATH --loop
5. 動作偵測區
本節將深入探討動作偵測區的用途,以及如何設定動作偵測區。這個區域可遮蔽不感興趣區域的動作,進而改善動作偵測功能。
動作偵測區有兩種:(1) 正區,動作偵測只會在標註區域執行;(2) 負區,動作偵測會忽略標註區域中的任何動作。
區域註解
使用 vaictl 指令中的 zone_annotation
旗標輸入區域多邊形的座標。
字串。可用區註解的預設值。
可用區註解是使用者的字串輸入內容,代表影格中要隱藏或聚焦的區域。如要為區域加上註解,使用者必須指定區域中每個節點的 x 軸和 y 軸圖片座標。一個可用區必須有三個以上的節點,才能形成多邊形。一個影格可能包含多個區域。如果區域彼此重疊,兩個可用區涵蓋的區域仍會涵蓋在內。
區域註解有特定的輸入語法。
- 如要標示單一節點,請使用
:
連結圖片座標的 X 軸和 Y 軸。舉例來說,左上角的(0,0)
節點會標示為0:0
。 - 如要標示單一區域中的所有節點,請使用
;
連接節點。舉例來說,如果可用區含有(0,0)
、(100,0)
、(100,100)
和(0, 100)
節點,可用區即為0:0;100:0;100:100;0:100
。請務必將節點輸入為彼此相鄰的連接節點,順序可以是順時針或逆時針。
*四個節點的方形區域。
*三個節點的三角形區域。
- 如要在單一影格中標示多個區域,請使用
-
連接不同的區域。舉例來說,如果我們想輸入(0,0)
、(100,0)
、(100,100)
、(0,100)
和(120,120)
、(110,150)
、(200,160)
,輸入區域註解會是0:0;100:0;100:100;0:100-120:120;110:150;200:160
。
*畫面內有兩個區域。
如要從圖片取得座標,網路上有幾個工具可協助您取得座標。例如,請參閱 Wolfram - 從圖片取得座標
排除註解區
在 vaictl 指令中使用標記 exclude_annotated_zone
,設定偵測區域內或區域外的動作。
布林值。預設值為 false。
排除註解區域是使用者輸入的布林值,表示使用者是否要排除動作偵測中的註解區域。
- 如果設為
true
,標註的區域就會做為負區。系統不會偵測標記區域中的動作。
*僅在輸入區域外執行動作偵測。
- 如果設為 false,該區域就會視為正面區域,系統會將動態偵測功能集中在該區域。
*僅在輸入區域執行動作偵測。
6. 動作偵測區範例的動態濾鏡
在本例中,我們會使用前景中不斷移動的樹木做為示例。在一般動作篩選器設定中,影片只會產生一個動作事件,且該事件的時間長度與原始影片相同,因為動作篩選器會將移動樹木登錄為「在整部影片中持續移動」。不過,有了動作偵測區的協助,我們就能妥善遮蔽樹木的動作,並專注於車輛和行人的動作。
影片準備
範例影片 (gs://cloud-samples-data/vertex-ai-vision/dynamic-background-fall.mp4) 含有 www.changedetection.net 的樹木和行人。
影片來源:N. Goyette, P.-M. Jodoin, F. Porikli, J. 康拉德和 P. Ishwar, changedetection.net:新的變更偵測基準資料集,見 Proc. IEEE Workshop on Change Detection (CDW-2012) at CVPR-2012, Providence, RI, 16-21 Jun., 2012
準備環境變數
Google Cloud 專案變數。
export PROJECT_ID=<Your Google Cloud project ID> export LOCATION_ID=us-central1 export LOCAL_FILE=street_vehicles_people.mp4
基本動作篩選器設定。
export MOTION_SENSITIVITY=<low or medium or high> export MIN_EVENT_LENGTH=<0-3600> export LOOK_BACK_WINDOW=<0-3600> export COOL_DOWN_PERIOD=<0-3600>
動作偵測區域設定。
請從下方選項中選擇,查看動作偵測區的不同用途。
排除動作偵測的樹木。
export ZONE_ANNOTATION="0:0;680:0;660:70;380:320;100:150" export EXCLUDE_ANNOTATED_ZONE=true
*只會在輸入區域外執行動作偵測。
聚焦在街道上的動作偵測功能。
export ZONE_ANNOTATION="0:300;780:300;780:480;0:480" export EXCLUDE_ANNOTATED_ZONE=false
*只在輸入區域外執行動作偵測。
傳送含有動作濾鏡的影片串流
將動作事件傳送至雲端控制台
您可以使用 vaictl 將輸出影片資料串流至 Cloud 控制台。請先在 Cloud 控制台中啟用 Vision AI API。
註冊新的串流
- 按一下 Vertex AI Vision 左側面板中的「串流」分頁標籤。
- 按一下「註冊」
- 在「Stream name」(串流名稱) 中輸入
motion-detection-stream
- 在「region」中輸入
us-central1
- 按一下「註冊」
正在將結果傳送至訊息串
這個指令會將影片檔案串流至串流。如果使用 –loop 旗標,系統會將影片重複播放至串流中,直到你停止指令為止。我們會將這個指令做為背景工作執行,以便繼續串流。
在開頭加上 nohup
,並在結尾加上 &
,即可將其設為背景工作。
vaictl -p $PROJECT \ -l $LOCATION_ID \ -c application-cluster-0 \ --service-endpoint visionai.googleapis.com \ send video-file --file-path $INPUT_VIDEO \ applying motion-filter --motion-sensitivity=$MOTION_SENSITIVITY \ --min-event-length=$MIN_EVENT_LENGTH \ --lookback-length=$LOOK_BACK_WINDOW \ --cooldown-length=$COOL_DOWN_PERIOD \ --zone_annotation=ZONE_ANNOTATION \ --exclude_annotated_zone=$EXCLUDE_ANNOTATED_ZONE \ to streams motion-detection-stream --loop
啟動 vaictl 擷取作業到資訊主頁中顯示的影片,可能需要約 100 秒的時間。
串流攝入功能可供使用後,您可以選取流量串流,在 Vertex AI Vision 資訊主頁的「串流」分頁中查看影片動態饋給。
將結果傳送至本機儲存空間
這個指令會將影片檔案串流至串流。如果使用 –loop 旗標,系統會將影片重複播放至串流中,直到你停止指令為止。我們會以背景工作形式執行這項指令,以便持續串流。
在開頭加上 nohup
,在結尾加上 &
,即可將其設為背景工作。
OUTPUT_PATH=<path_to_store_motion_events> vaictl -p $PROJECT \ -l $LOCATION_ID \ -c application-cluster-0 \ --service-endpoint visionai.googleapis.com \ send video-file --file-path $INPUT_VIDEO \ applying motion-filter --motion-sensitivity=$MOTION_SENSITIVITY \ --min-event-length=$MIN_EVENT_LENGTH \ --lookback-length=$LOOK_BACK_WINDOW \ --cooldown-length=$COOL_DOWN_PERIOD \ --zone_annotation=$ZONE_ANNOTATION \ --exclude_annotated_zone=$EXCLUDE_ANNOTATED_ZONE \ to mp4file --mp4-file-path=$OUTPUT_PATH --loop
7. 恭喜
恭喜,您已完成實驗室!
清理
本教學課程需使用資源,如要避免系統向您的 Google Cloud 帳戶收取相關費用,請透過指令列使用 ctrl
+ z
結束 vaictl SDK 作業。
資源
https://cloud.google.com/vision-ai/docs/overview
https://cloud.google.com/vision-ai/docs/motion-filtering-model
https://cloud.google.com/vision-ai/docs/create-manage-streams
意見回饋