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 サービスのご利用経験についてどのように評価されますか?
<ph type="x-smartling-placeholder">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 のプロビジョニングと接続に少し時間がかかる程度です。
この仮想マシンには、必要なすべての開発ツールが読み込まれます。5 GB の永続的なホーム ディレクトリが用意されており、Google Cloud で稼働するため、ネットワークのパフォーマンスと認証が大幅に向上しています。この Codelab での作業のほとんどはブラウザを使って行うことができます。
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 を有効にする必要があります。この API を有効にするには、Cloud Shell で次のコマンドを使用します。
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 コンソールに移動します。
- シャットダウンするプロジェクトを選択し、[削除] をクリックしますプロジェクトの削除がスケジュールされます。
詳細
- 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 汎用ライセンスにより使用許諾されています。