1. ภาพรวม
Google Cloud Video Intelligence API ช่วยให้นักพัฒนาแอปใช้เทคโนโลยีการวิเคราะห์วิดีโอของ Google เป็นส่วนหนึ่งของแอปพลิเคชันได้
โดยสามารถใช้เพื่อทำสิ่งต่อไปนี้
- การตรวจหาป้ายกำกับ: ตรวจหาออบเจ็กต์ เช่น สุนัข ดอกไม้ มนุษย์ ในวิดีโอ
- การตรวจหาเนื้อหาที่ไม่เหมาะสม: ตรวจหาเนื้อหาสำหรับผู้ใหญ่ภายในวิดีโอ
- การตรวจหาการเปลี่ยนฉาก: ตรวจหาการเปลี่ยนฉากภายในวิดีโอ
REST API ช่วยให้ผู้ใช้สามารถใส่คำอธิบายประกอบวิดีโอที่จัดเก็บไว้ในเครื่องหรือใน Google Cloud Storage พร้อมข้อมูลตามบริบทในระดับวิดีโอทั้งเรื่อง ต่อส่วน ต่อช็อต และต่อเฟรม
ในโค้ดแล็บนี้ คุณจะมุ่งเน้นการใช้ Video Intelligence API กับ C# คุณจะได้เรียนรู้วิธีวิเคราะห์วิดีโอเพื่อหาป้ายกำกับ การเปลี่ยนฉาก และการตรวจหาเนื้อหาที่อาจไม่เหมาะสม
สิ่งที่คุณจะได้เรียนรู้
- วิธีใช้ Cloud Shell
- วิธีเปิดใช้ Video Intelligence API
- วิธีตรวจสอบสิทธิ์คำขอ API
- วิธีติดตั้งไลบรารีของไคลเอ็นต์ Google Cloud สำหรับ C#
- วิธีวิเคราะห์วิดีโอเพื่อหาป้ายกำกับ
- วิธีวิเคราะห์วิดีโอเพื่อหาการเปลี่ยนแปลงช็อต
- วิธีวิเคราะห์วิดีโอเพื่อตรวจหาเนื้อหาที่อาจไม่เหมาะสม
สิ่งที่คุณต้องมี
แบบสำรวจ
คุณจะใช้บทแนะนำนี้อย่างไร
คุณจะให้คะแนนประสบการณ์การใช้งาน C# เท่าใด
คุณจะให้คะแนนประสบการณ์การใช้บริการ Google Cloud Platform เท่าใด
2. การตั้งค่าและข้อกำหนด
การตั้งค่าสภาพแวดล้อมแบบเรียนรู้ด้วยตนเอง
- ลงชื่อเข้าใช้ Google Cloud Console แล้วสร้างโปรเจ็กต์ใหม่หรือใช้โปรเจ็กต์ที่มีอยู่ซ้ำ หากยังไม่มีบัญชี Gmail หรือ Google Workspace คุณต้องสร้างบัญชี



- ชื่อโปรเจ็กต์คือชื่อที่แสดงสำหรับผู้เข้าร่วมโปรเจ็กต์นี้ ซึ่งเป็นสตริงอักขระที่ Google APIs ไม่ได้ใช้ คุณอัปเดตได้ทุกเมื่อ
- รหัสโปรเจ็กต์จะไม่ซ้ำกันในโปรเจ็กต์ Google Cloud ทั้งหมดและเปลี่ยนแปลงไม่ได้ (เปลี่ยนไม่ได้หลังจากตั้งค่าแล้ว) Cloud Console จะสร้างสตริงที่ไม่ซ้ำกันโดยอัตโนมัติ ซึ่งโดยปกติแล้วคุณไม่จำเป็นต้องสนใจว่าสตริงนั้นคืออะไร ใน Codelab ส่วนใหญ่ คุณจะต้องอ้างอิงรหัสโปรเจ็กต์ (โดยทั่วไปจะระบุเป็น
PROJECT_ID) หากไม่ชอบรหัสที่สร้างขึ้น คุณอาจสร้างรหัสแบบสุ่มอีกรหัสหนึ่งได้ หรือคุณอาจลองใช้ชื่อของคุณเองและดูว่ามีชื่อนั้นหรือไม่ คุณจะเปลี่ยนแปลงรหัสนี้หลังจากขั้นตอนนี้ไม่ได้ และรหัสจะคงอยู่ตลอดระยะเวลาของโปรเจ็กต์ - โปรดทราบว่ายังมีค่าที่ 3 ซึ่งคือหมายเลขโปรเจ็กต์ที่ API บางตัวใช้ ดูข้อมูลเพิ่มเติมเกี่ยวกับค่าทั้ง 3 นี้ได้ในเอกสารประกอบ
- จากนั้นคุณจะต้องเปิดใช้การเรียกเก็บเงินใน Cloud Console เพื่อใช้ทรัพยากร/API ของ Cloud การทำตาม Codelab นี้จะไม่มีค่าใช้จ่ายมากนัก หรืออาจไม่มีค่าใช้จ่ายเลย หากต้องการปิดทรัพยากรเพื่อหลีกเลี่ยงการเรียกเก็บเงินนอกเหนือจากบทแนะนำนี้ คุณสามารถลบทรัพยากรที่สร้างขึ้นหรือลบโปรเจ็กต์ได้ ผู้ใช้ Google Cloud รายใหม่มีสิทธิ์เข้าร่วมโปรแกรมช่วงทดลองใช้ฟรีมูลค่า$300 USD
เริ่มต้น Cloud Shell
แม้ว่าคุณจะใช้งาน Google Cloud จากระยะไกลจากแล็ปท็อปได้ แต่ใน Codelab นี้คุณจะใช้ Google Cloud Shell ซึ่งเป็นสภาพแวดล้อมบรรทัดคำสั่งที่ทำงานในระบบคลาวด์
เปิดใช้งาน Cloud Shell
- จาก Cloud Console ให้คลิกเปิดใช้งาน Cloud Shell


หากคุณเริ่มใช้ Cloud Shell เป็นครั้งแรก คุณจะเห็นหน้าจอระดับกลางที่อธิบายว่า Cloud Shell คืออะไร หากเห็นหน้าจอระดับกลาง ให้คลิกต่อไป

การจัดสรรและเชื่อมต่อกับ Cloud Shell จะใช้เวลาไม่นาน

เครื่องเสมือนนี้โหลดเครื่องมือพัฒนาซอฟต์แวร์ทั้งหมดที่จำเป็นไว้แล้ว โดยมีไดเรกทอรีหลักแบบถาวรขนาด 5 GB และทำงานใน Google Cloud ซึ่งช่วยเพิ่มประสิทธิภาพเครือข่ายและการตรวจสอบสิทธิ์ได้อย่างมาก คุณสามารถทำงานส่วนใหญ่หรือทั้งหมดในโค้ดแล็บนี้ได้ด้วยเบราว์เซอร์
เมื่อเชื่อมต่อกับ Cloud Shell แล้ว คุณควรเห็นว่าคุณได้รับการตรวจสอบสิทธิ์และระบบได้ตั้งค่าโปรเจ็กต์เป็นรหัสโปรเจ็กต์ของคุณ
- เรียกใช้คำสั่งต่อไปนี้ใน 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
gcloud services enable videointelligence.googleapis.com
4. ติดตั้งไลบรารีของไคลเอ็นต์ Google Cloud Video Intelligence API สำหรับ C#
ก่อนอื่น ให้สร้างแอปพลิเคชันคอนโซล 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 โดยทำดังนี้

ไปที่ไฟล์ Program.cs ในโฟลเดอร์ VideoIntApiDemo แล้วแทนที่โค้ดด้วยโค้ดต่อไปนี้
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
หากต้องการตรวจหาการเปลี่ยนช็อต ให้ไปที่ไฟล์ Program.cs ในโฟลเดอร์ VideoIntApiDemo แล้วแทนที่โค้ดด้วยโค้ดต่อไปนี้
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
เมื่อการตรวจหาเนื้อหาโจ่งแจ้งประเมินวิดีโอ ระบบจะประเมินทีละเฟรมและพิจารณาเฉพาะเนื้อหาภาพ ระบบจะไม่ใช้ส่วนประกอบเสียงของวิดีโอในการประเมินระดับเนื้อหาโจ่งแจ้ง
หากต้องการตรวจหาเนื้อหาโจ่งแจ้ง ให้ไปที่ไฟล์ Program.cs ในโฟลเดอร์ VideoIntApiDemo แล้วแทนที่โค้ดด้วยโค้ดต่อไปนี้
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. ยินดีด้วย
คุณได้เรียนรู้วิธีใช้ Video Intelligence API โดยใช้ C# แล้ว
ล้างข้อมูล
เพื่อเลี่ยงไม่ให้เกิดการเรียกเก็บเงินกับบัญชี Google Cloud Platform สำหรับทรัพยากรที่ใช้ในการเริ่มต้นอย่างรวดเร็วนี้ ควรทำดังนี้
- ไปที่คอนโซล Cloud Platform
- เลือกโปรเจ็กต์ที่ต้องการปิด แล้วคลิก "ลบ" ที่ด้านบน ซึ่งจะเป็นการกำหนดเวลาให้ลบโปรเจ็กต์
ดูข้อมูลเพิ่มเติม
- Google Cloud Video Intelligence API: https://cloud.google.com/video-intelligence/docs/
- C#/.NET ใน Google Cloud Platform: https://cloud.google.com/dotnet/
- ไคลเอ็นต์ .NET ของ Google Cloud: https://googlecloudplatform.github.io/google-cloud-dotnet/
ใบอนุญาต
ผลงานนี้ได้รับอนุญาตภายใต้สัญญาอนุญาตครีเอทีฟคอมมอนส์สำหรับยอมรับสิทธิของผู้สร้าง (Creative Commons Attribution License) 2.0 แบบทั่วไป