1. 概要
Google Cloud Video Intelligence API を使用すると、デベロッパーはアプリケーションの一部として Google の動画分析テクノロジーを使用できます。
次の操作に使用できます。
- ラベル検出: 動画内の犬、花、人などのオブジェクトを検出します。
- 不適切なコンテンツの検出: 動画内のアダルト コンテンツを検出します。
- ショット変更の検出: 動画内のシーンの変化を検出します。
REST API を使用すると、ローカルまたは Google Cloud Storage に保存されている動画にコンテキスト情報でアノテーションを付けることができます。このアノテーションは、動画全体、セグメント単位、ショット単位、フレーム単位で設定できます。
この Codelab では、C# で Video Intelligence API を使用する方法に焦点を当てます。ラベル、ショット変更、不適切なコンテンツの検出のために動画を分析する方法を学びます。
学習内容
- Cloud Shell を使用する方法
- Video Intelligence API を有効にする方法
- API リクエストを認証する方法
- C# 用 Google Cloud クライアント ライブラリをインストールする方法
- 動画のラベルを分析する方法
- 動画のショット変更を分析する方法
- 不適切なコンテンツの検出のために動画を分析する方法
必要なもの
アンケート
このチュートリアルをどのように使用されますか?
C# のご利用経験はどの程度ありますか?
Google Cloud Platform サービスのご利用経験についてどのように評価されますか?
2. 設定と要件
セルフペース型の環境設定
- Google Cloud Console にログインして、プロジェクトを新規作成するか、既存のプロジェクトを再利用します。Gmail アカウントも Google Workspace アカウントもまだお持ちでない場合は、アカウントを作成してください。



- プロジェクト名は、このプロジェクトの参加者に表示される名称です。Google API では使用されない文字列です。いつでも更新できます。
- プロジェクト ID は、すべての Google Cloud プロジェクトにおいて一意でなければならず、不変です(設定後は変更できません)。Cloud コンソールでは一意の文字列が自動生成されます。通常は、この内容を意識する必要はありません。ほとんどの Codelab では、プロジェクト ID(通常は
PROJECT_IDと識別されます)を参照する必要があります。生成された ID が好みではない場合は、ランダムに別の ID を生成できます。または、ご自身で試して、利用可能かどうかを確認することもできます。このステップ以降は変更できず、プロジェクトを通して同じ ID になります。 - なお、3 つ目の値として、一部の API が使用するプロジェクト番号があります。これら 3 つの値について詳しくは、こちらのドキュメントをご覧ください。
- 次に、Cloud のリソースや API を使用するために、Cloud コンソールで課金を有効にする必要があります。この Codelab の操作をすべて行って、費用が生じたとしても、少額です。このチュートリアルの終了後に請求が発生しないようにリソースをシャットダウンするには、作成したリソースを削除するか、プロジェクトを削除します。Google Cloud の新規ユーザーは、300 米ドル分の無料トライアル プログラムをご利用いただけます。
Cloud Shell を起動する
Google Cloud はノートパソコンからリモートで操作できますが、この Codelab では、Google Cloud Shell(Cloud 上で動作するコマンドライン環境)を使用します。
Cloud Shell をアクティブにする
- Cloud Console で、[Cloud Shell をアクティブにする]
をクリックします。

Cloud Shell を初めて起動する場合は、その内容を説明する中間画面が表示されます。中間画面が表示された場合は、[続行] をクリックします。

すぐにプロビジョニングが実行され、Cloud Shell に接続されます。

この仮想マシンには、必要な開発ツールがすべて用意されています。仮想マシンは Google Cloud で稼働し、永続的なホーム ディレクトリが 5 GB 用意されているため、ネットワークのパフォーマンスと認証が大幅に向上しています。このコードラボで行う作業のほとんどはブラウザから実行できます。
Cloud Shell に接続すると、認証が完了しており、プロジェクトに各自のプロジェクト ID が設定されていることがわかります。
- Cloud Shell で次のコマンドを実行して、認証されたことを確認します。
gcloud auth list
コマンド出力
Credentialed Accounts
ACTIVE ACCOUNT
* <my_account>@<my_domain.com>
To set the active account, run:
$ gcloud config set account `ACCOUNT`
- Cloud Shell で次のコマンドを実行して、gcloud コマンドがプロジェクトを認識していることを確認します。
gcloud config list project
コマンド出力
[core] project = <PROJECT_ID>
上記のようになっていない場合は、次のコマンドで設定できます。
gcloud config set project <PROJECT_ID>
コマンド出力
Updated property [core/project].
3. Video Intelligence API を有効にする
Video Intelligence API を使用するには、API を有効にする必要があります。Cloud Shell で次のコマンドを使用して、API を有効にできます。
gcloud services enable videointelligence.googleapis.com
4. C# 用 Google Cloud Video Intelligence API クライアント ライブラリをインストールする
まず、Video Intelligence API のサンプルを実行するために使用する簡単な C# コンソール アプリケーションを作成します。
dotnet new console -n VideoIntApiDemo
アプリケーションが作成され、依存関係が解決されたことがわかります。
The template "Console Application" was created successfully.
Processing post-creation actions...
...
Restore succeeded.
次に、VideoIntApiDemo フォルダに移動します。
cd VideoIntApiDemo/
また、Google.Cloud.VideoIntelligence.V1 NuGet パッケージをプロジェクトに追加します。
dotnet add package Google.Cloud.VideoIntelligence.V1
info : Adding PackageReference for package 'Google.Cloud.VideoIntelligence.V1' into project '/home/atameldev/VideoIntApiDemo/VideoIntApiDemo.csproj'.
log : Restoring packages for /home/atameldev/VideoIntApiDemo/VideoIntApiDemo.csproj...
...
info : PackageReference for package 'Google.Cloud.VideoIntelligence.V1' version '1.0.0' added to file '/home/atameldev/VideoIntApiDemo/VideoIntApiDemo.csproj'.
これで、Video Intelligence API を使用する準備が整いました。
5. ラベル検出
ラベル分析では、ローカルまたは Google Cloud Storage に保存されている動画のラベルを検出します。このセクションでは、Google Cloud Storage に保存されている動画のラベルを分析します。
まず、Cloud Shell の右上にあるコードエディタを開きます。

VideoIntApiDemo フォルダ内の Program.cs ファイルに移動し、コードを次のコードに置き換えます。
using System;
using System.Collections.Generic;
using Google.Cloud.VideoIntelligence.V1;
namespace VideoIntApiDemo
{
class Program
{
static void Main(string[] args)
{
var client = VideoIntelligenceServiceClient.Create();
var request = new AnnotateVideoRequest
{
InputUri = "gs://cloud-samples-data/video/gbikes_dinosaur.mp4",
Features = { Feature.LabelDetection }
};
var op = client.AnnotateVideo(request).PollUntilCompleted();
foreach (var result in op.Result.AnnotationResults)
{
PrintLabels("Video", result.SegmentLabelAnnotations);
PrintLabels("Shot", result.ShotLabelAnnotations);
PrintLabels("Frame", result.FrameLabelAnnotations);
}
}
static void PrintLabels(string labelName,
IEnumerable<LabelAnnotation> labelAnnotations)
{
foreach (var annotation in labelAnnotations)
{
Console.WriteLine($"{labelName} label: {annotation.Entity.Description}");
foreach (var entity in annotation.CategoryEntities)
{
Console.WriteLine($"{labelName} label category: {entity.Description}");
}
foreach (var segment in annotation.Segments)
{
Console.Write("Segment location: ");
Console.Write(segment.Segment.StartTimeOffset);
Console.Write(":");
Console.WriteLine(segment.Segment.EndTimeOffset);
Console.WriteLine($"Confidence: {segment.Confidence}");
}
}
}
}
}
1 ~ 2 分ほど時間を取ってコードを確認し、動画にラベルが付けられている方法を確認します。
Cloud Shell に戻ってアプリを実行します。
dotnet run
Video Intelligence API がラベルを抽出するのに数秒かかりますが、最終的には次の出力が表示されます。
Video label: bicycle
Video label category: vehicle
Segment location: "0s":"42.766666s"
Confidence: 0.475821
Video label: tyrannosaurus
Video label category: dinosaur
Segment location: "0s":"42.766666s"
Confidence: 0.4222222
Video label: tree
Video label category: plant
Segment location: "0s":"42.766666s"
Confidence: 0.4231415
...
概要
このステップでは、Video Intelligence API を使用して動画内のすべてのラベルを一覧表示しました。詳しくは、ラベル検出のページをご覧ください。
6. ショット変更の検出
Video Intelligence API を使用すると、ローカルまたは Google Cloud Storage に保存されている動画内のショットの変更を検出できます。このセクションでは、Google Cloud Storage にある動画ファイルのショット変更を分析します。
ショット変更を検出するには、VideoIntApiDemo フォルダ内の Program.cs ファイルに移動し、コードを次のコードに置き換えます。
using System;
using Google.Cloud.VideoIntelligence.V1;
namespace VideoIntApiDemo
{
class Program
{
static void Main(string[] args)
{
var client = VideoIntelligenceServiceClient.Create();
var request = new AnnotateVideoRequest
{
InputUri = "gs://cloud-samples-data/video/gbikes_dinosaur.mp4",
Features = { Feature.ShotChangeDetection }
};
var op = client.AnnotateVideo(request).PollUntilCompleted();
foreach (var result in op.Result.AnnotationResults)
{
foreach (var annotation in result.ShotAnnotations)
{
Console.Out.WriteLine("Start Time Offset: {0}\tEnd Time Offset: {1}",
annotation.StartTimeOffset, annotation.EndTimeOffset);
}
}
}
}
}
コードを 1 ~ 2 分ほど確認して、ショット検出がどのように行われているかを確認します。
Cloud Shell に戻ってアプリを実行します。次の出力が表示されます。
dotnet run
次の出力が表示されます。
Start Time Offset: "0s" End Time Offset: "5.166666s"
Start Time Offset: "5.233333s" End Time Offset: "10.066666s"
Start Time Offset: "10.100s" End Time Offset: "28.133333s"
Start Time Offset: "28.166666s" End Time Offset: "42.766666s"
概要
このステップでは、Video Intelligence API を使用して、Google Cloud Storage に保存されているファイル内のショットの変更を検出しました。詳しくは、ショットの変更をご覧ください。
7. 不適切なコンテンツの検出
不適切なコンテンツの検出では、動画内のアダルト コンテンツを検出します。通常、アダルト コンテンツとは 18 歳以上を対象としたもので、ヌードや性的描写、ポルノ(漫画やアニメを含む)などを指します(ただし、これらに限定されません)。レスポンスには、バケット化された可能性の値(VERY_UNLIKELY から VERY_LIKELY まで)が含まれます。
不適切なコンテンツの検出で動画を評価すると、フレーム単位で分析が実行されます。評価されるのはビジュアル コンテンツのみです。動画の音声部分は、不適切なコンテンツのレベルが評価されません。
露骨なコンテンツを検出するには、VideoIntApiDemo フォルダ内の Program.cs ファイルに移動し、コードを次のコードに置き換えます。
using System;
using Google.Cloud.VideoIntelligence.V1;
namespace VideoIntApiDemo
{
class Program
{
static void Main(string[] args)
{
var client = VideoIntelligenceServiceClient.Create();
var request = new AnnotateVideoRequest
{
InputUri = "gs://cloud-samples-data/video/gbikes_dinosaur.mp4",
Features = { Feature.ExplicitContentDetection }
};
var op = client.AnnotateVideo(request).PollUntilCompleted();
foreach (var result in op.Result.AnnotationResults)
{
foreach (var frame in result.ExplicitAnnotation.Frames)
{
Console.WriteLine("Time Offset: {0}", frame.TimeOffset);
Console.WriteLine("Pornography Likelihood: {0}", frame.PornographyLikelihood);
Console.WriteLine();
}
}
}
}
}
コードを 1 ~ 2 分ほど確認して、不適切なコンテンツの検出がどのように行われたかを確認します。
Cloud Shell に戻ってアプリを実行します。
dotnet run
数秒かかることがありますが、最終的には次の出力が表示されます。
dotnet run
Time Offset: "0.056149s"
Pornography Likelihood: VeryUnlikely
Time Offset: "1.166841s"
Pornography Likelihood: VeryUnlikely
...
Time Offset: "41.678209s"
Pornography Likelihood: VeryUnlikely
Time Offset: "42.596413s"
Pornography Likelihood: VeryUnlikely
概要
このステップでは、Video Intelligence API を使用して動画の不適切なコンテンツを検出しました。詳しくは、露骨なコンテンツの検出をご覧ください。
8. 完了
C# を使用して Video Intelligence API を使用する方法を学習しました。
クリーンアップ
このクイックスタートで使用するリソースに対して Google Cloud Platform アカウントに課金されないようにするには:
- Cloud Platform Console に移動します。
- シャットダウンするプロジェクトを選択し、上部の [削除] をクリックします。これにより、プロジェクトの削除がスケジュールされます。
詳細
- Google Cloud Video Intelligence API: https://cloud.google.com/video-intelligence/docs/
- Google Cloud Platform での C#/.NET: https://cloud.google.com/dotnet/
- Google Cloud .NET クライアント: https://googlecloudplatform.github.io/google-cloud-dotnet/
ライセンス
この作業はクリエイティブ・コモンズの表示 2.0 汎用ライセンスにより使用許諾されています。