Vertex AI Vision 動態濾鏡

1. 目標

總覽

本程式碼研究室著重於建立端對端 Vertex AI Vision 應用程式,並示範利用動作篩選功能傳送影片。本教學課程將逐一介紹動作篩選器設定中的各個參數:

  • 動作偵測靈敏度
  • 事件長度下限
  • 回溯期
  • 等待期
  • 動作偵測區

課程內容

  • 如何擷取要串流的影片
  • 動態濾鏡提供的各種功能及其使用方式
  • 如何查看動態濾鏡的統計資料
  • 如何根據影片調整設定

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. 動態濾鏡

動態濾鏡可擷取含有動作事件的動作和影片片段。藉由調整動作靈敏度、事件長度下限、回溯期、等待期和動作偵測區域,使用者可以根據個人需求設定篩選器。

動作篩選器設定

動作篩選器提供 5 種可自訂的設定。

  1. 動作靈敏度:動作的靈敏度。
  2. 事件長度下限:擷取動作事件的最短長度。
  3. 回溯期:影片開始錄影多久後會偵測到動作事件。
  4. 等待期:在動作事件結束後,系統會執行指定持續時間的等待期。在等待期內,系統不會觸發動作事件。
  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

準備影片樣本

  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 .

準備環境變數

在下方設定環境變數,即可使用提供的指令範本。

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 控制台中的串流。第二個選項是將動作事件傳送至本機儲存空間。

將結果傳送至 Cloud 控制台

您可以使用 vaictl 將輸出影片資料串流至 Cloud 控制台。請先在 Cloud 控制台中啟用 Vision AI API。

註冊新的串流

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

正在將結果傳送至訊息串

這個指令會將影片檔案串流至串流。如果使用 –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.Konrad 和 P.Ishwar,changedetection.net:新的變更偵測基準資料集。IEEE Workshop on Change Detection (CDW-2012), at CVPR-2012,Providence, RI 16-21 6 月 16-21 日,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

動作偵測區:在註解區執行動作偵測 (影片範例) *只會在輸入區域外執行動作偵測。

傳送含有動作濾鏡的影片串流

將動作事件傳送至 Cloud 控制台

您可以使用 vaictl 將輸出影片資料串流至 Cloud 控制台。請先在 Cloud 控制台中啟用 Vision AI API。

註冊新的串流

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

正在將結果傳送至訊息串

這個指令會將影片檔案串流至串流。如果使用 –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

意見回饋

按這裡提供意見

問卷調查

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

僅供閱讀 閱讀並完成練習

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

很實用 還算實用