שימוש ב-Video Intelligence API עם C#

1. סקירה כללית

Google Cloud Video Intelligence API מאפשר למפתחים להשתמש בטכנולוגיה של Google לניתוח סרטונים כחלק מהאפליקציות שלהם.

אפשר להשתמש בה כדי:

ה-API ל-REST מאפשר למשתמשים להוסיף הערות לסרטונים ששמורים באופן מקומי או ב-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 ויוצרים פרויקט חדש או עושים שימוש חוזר בפרויקט קיים. אם אין לכם עדיין חשבון Gmail או חשבון Google Workspace, עליכם ליצור חשבון.

295004821bab6a87.png

37d264871000675d.png

96d86d3d5655cdbe.png

  • Project name הוא השם המוצג של המשתתפים בפרויקט. זו מחרוזת תווים שלא משמשת את Google APIs. תמיד אפשר לעדכן.
  • Project ID הוא ייחודי בכל הפרויקטים ב-Google Cloud ואי אפשר לשנות אותו (אי אפשר לשנות אותו אחרי שמגדירים אותו). מסוף Cloud יוצר מחרוזת ייחודית באופן אוטומטי; בדרך כלל לא מעניין אותך מה זה. ברוב ה-codelabs תצטרכו להפנות למזהה הפרויקט שלכם (בדרך כלל מזוהה כ-PROJECT_ID). אם המזהה שנוצר לא מוצא חן בעיניכם, אתם יכולים ליצור מזהה אקראי אחר. לחלופין, אפשר לנסות שם משלך ולראות אם הוא זמין. לא ניתן לשנות אותו אחרי השלב הזה, והוא נשאר למשך הפרויקט.
  • לידיעתך, יש ערך שלישי, Project Number, שבו משתמשים בחלק מממשקי ה-API. מידע נוסף על כל שלושת הערכים האלה זמין במסמכי התיעוד.
  1. בשלב הבא צריך להפעיל את החיוב במסוף Cloud כדי להשתמש במשאבים או בממשקי API של Cloud. מעבר ב-Codelab הזה לא יעלה הרבה כסף, אם בכלל. כדי להשבית משאבים ולא לצבור חיובים מעבר למדריך הזה, אתם יכולים למחוק את המשאבים שיצרתם או למחוק את הפרויקט. משתמשים חדשים ב-Google Cloud זכאים להשתתף בתוכנית תקופת ניסיון בחינם בשווי 1,200 ש"ח.

הפעלת Cloud Shell

אומנם אפשר להפעיל את Google Cloud מרחוק מהמחשב הנייד, אבל ב-Codelab הזה משתמשים ב-Google Cloud Shell, סביבת שורת הפקודה שפועלת ב-Cloud.

הפעלת Cloud Shell

  1. במסוף Cloud, לוחצים על Activate Cloud Shell d1264ca30785e435.png.

cb81e7c8e34bc8d.png

אם זו הפעם הראשונה שאתם מפעילים את Cloud Shell, יוצג לכם מסך ביניים שמתוארת בו. אם הוצג לכם מסך ביניים, לוחצים על המשך.

d95252b003979716.png

ההקצאה וההתחברות ל-Cloud Shell נמשכת כמה דקות.

7833d5e1c5d18f54.png

במכונה הווירטואלית הזו נמצאים כל כלי הפיתוח הדרושים. יש בה ספריית בית בנפח מתמיד של 5GB והיא פועלת ב-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

לפני שמתחילים להשתמש ב-Video Intelligence API, צריך להפעיל את ה-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/

ומוסיפים את חבילת 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. זיהוי תוויות (Label Detection)

ניתוח התוויות מזהה תוויות בסרטון שמאוחסנות באופן מקומי או ב-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);
                }
            }
        }
    }
}

הקדישו דקה או שתיים כדי ללמוד את הקוד ולראות איך מתבצע זיהוי השוט.

בחזרה ב-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 Console.
  • בוחרים את הפרויקט שרוצים להשבית ולוחצים על Delete (מחיקה). למעלה: מתזמנת את מחיקת הפרויקט.

מידע נוסף

רישיון

היצירה הזו בשימוש ברישיון Creative Commons Attribution 2.0 גנרי.