การใช้ Video Intelligence API กับ C#

1. ภาพรวม

Google Cloud Video Intelligence API ช่วยให้นักพัฒนาซอฟต์แวร์ใช้เทคโนโลยีการวิเคราะห์วิดีโอของ Google เป็นส่วนหนึ่งของแอปพลิเคชันได้

เนื่องจากนำมาใช้เพื่อทำสิ่งต่อไปนี้

REST API ช่วยให้ผู้ใช้สามารถใส่คำอธิบายประกอบในวิดีโอที่เก็บไว้ในเครื่องหรือใน Google Cloud Storage ด้วยข้อมูลบริบทของวิดีโอทั้งหมด ต่อเซกเมนต์ ต่อช็อต และต่อเฟรม

ใน Codelab นี้ คุณจะมุ่งเน้นที่การใช้ Video Intelligence API กับ C# คุณจะได้ดูวิธีวิเคราะห์วิดีโอเพื่อหาป้ายกำกับ การเปลี่ยนแปลงการถ่ายภาพ และการตรวจหาเนื้อหาที่อาจไม่เหมาะสม

สิ่งที่คุณจะได้เรียนรู้

  • วิธีใช้ Cloud Shell
  • วิธีเปิดใช้ Video Intelligence API
  • วิธีตรวจสอบสิทธิ์คำขอ API
  • วิธีติดตั้งไลบรารีของไคลเอ็นต์ Google Cloud สำหรับ C#
  • วิธีวิเคราะห์วิดีโอสำหรับป้ายกำกับ
  • วิธีวิเคราะห์วิดีโอสำหรับการเปลี่ยนฉาก
  • วิธีวิเคราะห์วิดีโอเพื่อตรวจหาเนื้อหาที่อาจไม่เหมาะสม

สิ่งที่คุณต้องมี

  • โปรเจ็กต์ Google Cloud Platform
  • เบราว์เซอร์ เช่น Chrome หรือ Firefox
  • ความคุ้นเคยกับการใช้ C#

แบบสำรวจ

คุณจะใช้บทแนะนำนี้อย่างไร

อ่านเท่านั้น อ่านและทำแบบฝึกหัด

คุณจะให้คะแนนความพึงพอใจสำหรับประสบการณ์การใช้งาน C# อย่างไร

มือใหม่ ระดับกลาง ผู้ชำนาญ

คุณจะให้คะแนนความพึงพอใจสำหรับประสบการณ์การใช้บริการ Google Cloud Platform อย่างไร

มือใหม่ ระดับกลาง ผู้ชำนาญ

2. การตั้งค่าและข้อกำหนด

การตั้งค่าสภาพแวดล้อมตามเวลาที่สะดวก

  1. ลงชื่อเข้าใช้ Google Cloud Console และสร้างโปรเจ็กต์ใหม่หรือใช้โปรเจ็กต์ที่มีอยู่ซ้ำ หากยังไม่มีบัญชี Gmail หรือ Google Workspace คุณต้องสร้างบัญชี

295004821bab6a87.png

37d264871000675d.png

96d86d3d5655cdbe.png

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

เริ่มต้น Cloud Shell

แม้ว่าคุณจะดำเนินการ Google Cloud จากระยะไกลได้จากแล็ปท็อป แต่คุณจะใช้ Google Cloud Shell ซึ่งเป็นสภาพแวดล้อมแบบบรรทัดคำสั่งที่ทำงานในระบบคลาวด์ใน Codelab นี้

เปิดใช้งาน Cloud Shell

  1. คลิกเปิดใช้งาน Cloud Shell d1264ca30785e435.png จาก Cloud Console

cb81e7c8e34bc8d.png

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

d95252b003979716.png

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

7833d5e1c5d18f54.png

เครื่องเสมือนนี้โหลดด้วยเครื่องมือการพัฒนาทั้งหมดที่จำเป็น โดยมีไดเรกทอรีหลักขนาด 5 GB ถาวรและทำงานใน Google Cloud ซึ่งช่วยเพิ่มประสิทธิภาพของเครือข่ายและการตรวจสอบสิทธิ์ได้อย่างมาก งานส่วนใหญ่ใน Codelab นี้สามารถทำได้โดยใช้เบราว์เซอร์

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

  1. เรียกใช้คำสั่งต่อไปนี้ใน 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`
  1. เรียกใช้คำสั่งต่อไปนี้ใน 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 ได้ คุณเปิดใช้ 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

คุณควรเห็นการสร้างแอปพลิเคชันและการแก้ไขทรัพยากร Dependency แล้ว

The template "Console Application" was created successfully.
Processing post-creation actions...
...
Restore succeeded.

จากนั้นไปที่โฟลเดอร์ VideoIntApiDemo

cd VideoIntApiDemo/

และเพิ่มแพ็กเกจ NuGet Google.Cloud.VideoIntelligence.V1 ลงในโปรเจ็กต์ด้วย

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:

fd3fc1303e63572.png

ไปที่ไฟล์ 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);
                }
            }
        }
    }
}

ใช้เวลา 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

เมื่อการตรวจหาเนื้อหาที่อาจไม่เหมาะสมทำการประเมินวิดีโอ ระบบจะประเมินวิดีโอแบบต่อเฟรมและจะพิจารณาเนื้อหาที่เป็นภาพเท่านั้น ไม่ได้ใช้องค์ประกอบเสียงของวิดีโอในการประเมินระดับเนื้อหาที่อาจไม่เหมาะสม

หากต้องการตรวจหาเนื้อหาที่อาจไม่เหมาะสม ให้ไปที่ไฟล์ 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
  • เลือกโครงการที่คุณต้องการปิดการทำงาน แล้วคลิก "ลบ" ที่ด้านบน: การดำเนินการนี้จะกำหนดเวลาการลบโปรเจ็กต์

ดูข้อมูลเพิ่มเติม

ใบอนุญาต

ผลงานนี้ได้รับอนุญาตภายใต้ใบอนุญาตทั่วไปครีเอทีฟคอมมอนส์แบบระบุแหล่งที่มา 2.0