1. 目標
概要
この Codelab では、エンドツーエンドの Vertex AI Vision アプリケーションの作成に焦点を当て、モーション フィルタリング機能を使用した動画の送信のデモを行います。このチュートリアルでは、モーション フィルタ設定の各種パラメータについて説明します。
- モーション検知の感度
- アクティビティの最小時間
- ルックバック ウィンドウ
- クールダウン時間
- モーション検知ゾーン
学習内容
- ストリーミング用の動画を取り込む方法
- モーション フィルタで利用できる各種機能と使用方法
- モーション フィルタの統計情報の確認場所
- 動画に合わせて設定を調整する方法
2. 始める前に
- Google Cloud コンソールの [プロジェクト セレクタ] ページで、Google Cloud プロジェクトを選択または作成します。注: この手順で作成するリソースをそのまま保持する予定でない場合、既存のプロジェクトを選択するのではなく、新しいプロジェクトを作成してください。チュートリアルの終了後にそのプロジェクトを削除すれば、プロジェクトに関連するすべてのリソースを削除できます。プロジェクト セレクタに移動
- Cloud プロジェクトに対して課金が有効になっていることを確認します。詳しくは、プロジェクトで課金が有効になっているかどうかを確認する方法をご覧ください。
- Compute Engine API と Vision AI API を有効にします。API を有効にする
サービス アカウントを作成します。
- Google Cloud コンソールで [サービス アカウントの作成] ページに移動します。[サービス アカウントの作成] に移動
- プロジェクトを選択します。
- [サービス アカウント名] フィールドに名前を入力します。Google Cloud コンソールでは、この名前に基づいて [サービス アカウント ID] フィールドに値が設定されます。[サービス アカウントの説明] フィールドに説明を入力します。(クイックスタート用のサービス アカウントなど)。
- [作成して続行] をクリックします。
- プロジェクトへのアクセス権を付与するには、サービス アカウントに次のロールを付与します。Vision AI >Vision AI 編集者、Compute Engine >Compute インスタンス管理者(ベータ版)、ストレージ >Storage オブジェクト閲覧者 † .[ロールを選択] リストで、ロールを選択します。ロールを追加するには、[別のロールを追加] をクリックして各ロールを追加します。注: [ロール] フィールドは、サービス アカウントがプロジェクト内のどのリソースにアクセスできるかに影響します。これらのロールは後で取り消すことも、追加のロールを付与することもできます。本番環境では、オーナー、編集者、閲覧者のロールを付与しないでください。代わりに、ニーズに合わせて事前定義ロールまたはカスタムロールを付与します。
- [続行] をクリックします。
- [完了] をクリックして、サービス アカウントの作成を完了します。ブラウザ ウィンドウは閉じないでください。次のステップでこれを使用します。
サービス アカウント キーを作成します。
- Google Cloud コンソールで、作成したサービス アカウントのメールアドレスをクリックします。
- [キー] をクリックします。
- [鍵を追加]、[新しい鍵を作成] の順にクリックします。
- [作成] をクリックします。JSON キーファイルがパソコンにダウンロードされます。
- [閉じる] をクリックします。
- Google Cloud CLI をインストールして初期化します。
† ロールは、Cloud Storage バケットからサンプル動画ファイルをコピーする場合にのみ必要です。
3. モーションフィルタ
モーション フィルタは、モーション イベントを含むモーション セグメントと商品動画セグメントをキャプチャします。モーションに対する感度、最小アクティビティ時間、ルックバック ウィンドウ、クールダウン期間、モーション検知ゾーンを調整することで、必要に応じてフィルタベースを設定できます。
モーション フィルタの設定
モーション フィルタではカスタマイズ用に 5 つの設定を利用できます。
- モーションに対する感度: モーションをトリガーする感度。
- 最小アクティビティ時間: モーション イベントがキャプチャされる最小時間です。
- ルックバック ウィンドウ: モーション アクティビティが検出されるまでに動画の録画を開始するまでの時間。
- クールダウン期間: モーション イベントが終了すると、指定した期間のクールダウンが行われます。クールダウン期間中、モーション イベントはトリガーされません。
- モーション検知ゾーン: モーション検知を実行するゾーンをユーザーが設定したゾーンです。(この後のセクションで詳しく説明します)
動きに対する感度
vaictl コマンドでフラグ motion_detection_sensitivity
を使用します。
文字列。デフォルトのメディアです。低、中、高から選択できます。
モーション検知の感度が高いほど、ノイズに敏感になり、動きが小さくなります。この設定は、動くものが小さい環境(遠くの人物など)や、光が安定している設定におすすめします。
一方、感度が低いと、光の干渉の影響を受けにくくなります。この設定は、屋外など照明の干渉が多い場合や、雑音が多い低画質の場合に便利です。この設定は最も積極的なフィルタリングであるため、小さな被写体の動きが無視される可能性があります。
アクティビティの最小時間
vaictl コマンドでフラグ min_event_length_in_seconds
を使用します。
整数。デフォルトは 10 秒です。値の範囲は 0 ~ 3,600 秒です。
フレーム内でモーション イベント セグメントが検出されると解析されるモーション イベント動画の最小時間。
ルックバック ウィンドウ
vaictl コマンドでフラグ look_back_window_in_seconds
を使用します。
整数。デフォルトは 3 秒です。値の範囲は 0 ~ 3,600 秒です。
ルックバック ウィンドウは、モーション イベントが検出されるまでのキャッシュに保存された期間です。これは、モーション イベントが検出される数秒前にフレーム内で何が起きているかを確認したい場合に便利です。
クールダウン期間
vaictl コマンドでフラグ cool_down_period_in_seconds
を使用します。
整数。デフォルトは 300 秒です。値の範囲は 0 ~ 3,600 秒です。
クールダウン期間は、モーション イベントがキャプチャされた後にモーション検知を一時停止する時間です。クールダウン期間中は、動きを検出するための演算は行われません。
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 など)。詳細については、クラウドのロケーションをご覧ください。
- 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>
モーション フィルタの準備コマンド
入力ストリームでモーション フィルタを使用する方法は 2 つあります。1 つ目の方法は、Cloud コンソールでモーション イベントをストリームに送信する方法です。2 つ目のオプションは、モーション イベントをローカル ストレージに送信する方法です。
Cloud コンソールに結果を送信する
vaictl を使用して、出力動画データを Cloud コンソールにストリーミングできます。まず、Cloud コンソールで Vision AI API を有効にします。
新しいストリームを登録する
- Vertex AI Vision の左側のパネルにある [ストリーム] タブをクリックします。
- [Register] をクリックします。
- ストリーム名に「
motion-detection-stream
」と入力します。 - リージョンに「
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. モーション検知ゾーン
このセクションでは、モーション検知ゾーンの使用方法と設定方法について説明します。このゾーンは、関心のない領域からの動きを隠すことでモーション検知の精度を向上させることを目的としています。
モーション検出ゾーンには 2 つのタイプがあります。(1)ポジティブ ゾーンでは、アノテーションが付けられたエリアでのみモーション検出が実行されます。(2)ネガティブ ゾーン。モーション検出によってアノテーションされた領域の動きが無視されます。
ゾーンのアノテーション
vaictl コマンドでフラグ zone_annotation
を使用して、ゾーンのポリゴンの座標を入力します。
文字列。ゾーン アノテーションのデフォルトは空です。
ゾーン アノテーションはユーザーが入力する文字列であり、ユーザーが非表示にする、またはフォーカスするフレーム内のゾーンを示します。ゾーンにアノテーションを付けるには、ゾーン内の各ノードの x と y 軸の画像座標を指定する必要があります。ポリゴンを形成するには、ゾーンに 3 つ以上のノードが必要です。1 つのフレームに複数のゾーンが存在することがあります。ゾーンが互いに重なっている場合でも、両方のゾーンでカバーされる領域がカバーされます。
ゾーン アノテーションには、後に続く特定の入力構文があります。
- 単一のノードを示すには、
:
を使用して画像調整の x 軸と y 軸を接続します。たとえば、左上の(0,0)
ノードは0:0
と表されます。 - 1 つのゾーン内のすべてのノードを指定するには、
;
を使用してノードを接続します。たとえば、(0,0)
、(100,0)
、(100,100)
、(0, 100)
のノードがあるゾーンの場合、そのゾーンは0:0;100:0;100:100;0:100
と表示されます。ノードは常に、隣り合うノードとして入力します。時計回りでも反時計回りでも構いません。
*4 つのノードがある正方形のゾーン。
*3 つのノードがある三角形のゾーン。
- 1 つのフレームで複数のゾーンを示すには、
-
を使用して異なるゾーンを接続します。たとえば、(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
になります。
*フレーム内に 2 つのエリア。
画像から座標を取得する場合、オンライン ツールで座標を取得することができます。例については、Wolfram - 画像から座標を取得するをご覧ください。
アノテーション付きゾーンを除外する
vaictl コマンドでフラグ exclude_annotated_zone
を使用して、ゾーン内またはゾーン外でのモーションの検出を構成します。
ブール値。デフォルト: false。
[アノテーション付きゾーンの除外] は、ユーザーがモーション検知でアノテーション付きゾーンを除外するかどうかを示すブール値の入力です。
true
に設定すると、アノテーション付きゾーンはネガティブゾーンとして機能します。アノテーションを付けたゾーン内の動きは検出されません。
*モーション検知は、入力ゾーンの外部でのみ実行します。
- false に設定した場合、このゾーンはポジティブ ゾーンとして機能し、モーション検出でフォーカスされます。
*モーション検知は、入力ゾーンでのみ実行します。
6. モーション検知ゾーンを使用したモーション フィルタの例
この例では、例として前景で常に動く木の動画を使用します。通常のモーション フィルタ設定では、元の動画と同じ長さのモーション イベントが 1 つしか生成されません。これは、モーション フィルタによって、動くツリーが「動画全体を一定に動いている」ものとして登録されるためです。しかし、モーション検知ゾーンを利用すれば、木の動きを適切に隠して、車や歩行者の動きにフォーカスすることができます。
動画の準備
サンプル動画(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: A new change detected benchmark dataset、Proc.IEEE Workshop on Change Detection (CDW-2012) at CVPR-2012,Providence, RI, 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 を有効にします。
新しいストリームを登録する
- Vertex AI Vision の左側のパネルにある [ストリーム] タブをクリックします。
- [Register] をクリックします。
- ストリーム名に「
motion-detection-stream
」と入力します。 - リージョンに「
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
フィードバック
フィードバックを送信するには、こちらをクリックしてください。