1. 總覽
Google Cloud Video Intelligence API 可讓開發人員在應用程式中使用 Google 影片分析技術。
適用於以下情況:
REST API 可讓使用者為儲存在本機或 Google Cloud Storage 的影片加上註解,註解可按照整部影片、每個片段、每個鏡頭及每個影格的層級提供背景資訊。
在本程式碼研究室中,您將專注於搭配 C# 使用 Video Intelligence API。您將學習如何分析影片中是否有標籤、鏡頭轉換和煽情露骨內容偵測。
課程內容
- 如何使用 Cloud Shell
- 如何啟用 Video Intelligence API
- 如何驗證 API 要求
- 如何安裝 C# 適用的 Google Cloud 用戶端程式庫
- 如何分析影片中的標籤
- 如何分析影片中的鏡頭轉換
- 如何分析影片以偵測煽情露骨內容
軟硬體需求
問卷調查
您會如何使用這個教學課程?
針對 C# 的使用體驗,您會給予什麼評價?
根據您使用 Google Cloud Platform 服務的經驗,您會給予什麼評價?
2. 設定和需求
自修環境設定
- 登入 Google Cloud 控制台,建立新專案或重複使用現有專案。如果您還沒有 Gmail 或 Google Workspace 帳戶,請先建立帳戶。
- 「專案名稱」是這項專案參與者的顯示名稱。這是 Google API 未使用的字元字串。您可以隨時更新付款方式。
- 所有 Google Cloud 專案的專案 ID 均不得重複,而且設定後即無法變更。Cloud 控制台會自動產生一個不重複的字串。但通常是在乎它何在在大部分的程式碼研究室中,您必須參照專案 ID (通常為
PROJECT_ID
)。如果您對產生的 ID 不滿意,可以隨機產生一個 ID。或者,您也可以自行嘗試,看看是否支援。在這個步驟後,這個名稱即無法變更,而且在專案期間內仍會保持有效。 - 資訊中的第三個值是專案編號,部分 API 會使用這個編號。如要進一步瞭解這三個值,請參閱說明文件。
- 接下來,您需要在 Cloud 控制台中啟用計費功能,才能使用 Cloud 資源/API。執行本程式碼研究室不會產生任何費用 (如果有的話)。如要關閉資源,以免產生本教學課程結束後產生的費用,您可以刪除自己建立的資源或刪除專案。新使用者符合 $300 美元免費試用計畫的資格。
啟動 Cloud Shell
雖然 Google Cloud 可以從筆記型電腦遠端操作,但在本程式碼研究室中,您將使用 Google Cloud Shell,這是一種在 Cloud 中執行的指令列環境。
啟用 Cloud Shell
- 在 Cloud 控制台中,按一下「啟用 Cloud Shell」圖示 。
如果您是第一次啟動 Cloud Shell,系統會顯示中繼畫面,說明這項服務的內容。如果系統顯示中繼畫面,請按一下「繼續」。
佈建並連線至 Cloud Shell 只需幾分鐘的時間。
這個虛擬機器已載入所有必要的開發工具。提供永久的 5 GB 主目錄,而且在 Google Cloud 中運作,大幅提高網路效能和驗證能力。在本程式碼研究室中,您的大部分作業都可透過瀏覽器完成。
連線至 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
您必須先啟用 API,才能開始使用 Video Intelligence API。您可以在 Cloud Shell 中使用下列指令啟用 API:
gcloud services enable videointelligence.googleapis.com
4. 安裝 C# 適用的 Google Cloud Video Intelligence API 用戶端程式庫
首先,請建立簡易的 C# 主控台應用程式,供您用於執行 Video Intelligence API 範例:
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}");
}
}
}
}
}
請花一兩分鐘研究課程代碼,看看影片如何加上標籤*。*
返回 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);
}
}
}
}
}
花一兩分鐘研究這些程式碼,看看如何執行鏡頭偵測。
返回 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();
}
}
}
}
}
花一兩分鐘研究程式碼,瞭解煽情露骨內容偵測的執行情況*。*
返回 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/
授權
這項內容採用的是創用 CC 姓名標示 2.0 通用授權。