שימוש ב-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

  • שם הפרויקט הוא השם המוצג של הפרויקט הזה למשתתפים. זו מחרוזת תווים שלא נמצאת בשימוש ב-Google APIs. תמיד אפשר לעדכן את המיקום.
  • מזהה הפרויקט הוא ייחודי לכל הפרויקטים ב-Google Cloud ואי אפשר לשנות אותו אחרי שהוא מוגדר. מסוף Cloud יוצר באופן אוטומטי מחרוזת ייחודית, ובדרך כלל לא צריך לדעת מה היא. ברוב ה-Codelabs, תצטרכו להפנות למזהה הפרויקט (בדרך כלל מסומן כ-PROJECT_ID). אם אתם לא אוהבים את המזהה שנוצר, אתם יכולים ליצור מזהה אקראי אחר. אפשר גם לנסות שם משתמש משלכם ולבדוק אם הוא זמין. אי אפשר לשנות את ההגדרה הזו אחרי השלב הזה, והיא תישאר לאורך הפרויקט.
  • לידיעתכם, יש ערך שלישי, מספר פרויקט, שחלק מממשקי ה-API משתמשים בו. במאמרי העזרה מפורט מידע נוסף על שלושת הערכים האלה.
  1. בשלב הבא, תצטרכו להפעיל את החיוב במסוף Cloud כדי להשתמש במשאבי Cloud או בממשקי API של Cloud. השלמת ה-codelab הזה לא תעלה לכם הרבה, אם בכלל. כדי להשבית את המשאבים ולמנוע חיובים נוספים אחרי שתסיימו את המדריך הזה, תוכלו למחוק את המשאבים שיצרתם או למחוק את הפרויקט. משתמשים חדשים ב-Google Cloud זכאים לתוכנית תקופת ניסיון בחינם בשווי 300$.

מפעילים את Cloud Shell

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

הפעלת Cloud Shell

  1. ב-Cloud Console, לוחצים על 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.
  • בוחרים את הפרויקט שרוצים לסגור ולוחצים על 'מחיקה' בחלק העליון. הפעולה הזו מתזמנת את הפרויקט למחיקה.

מידע נוסף

רישיון

עבודה זו מורשית תחת רישיון Creative Commons שמותנה בייחוס 2.0 כללי.