Korzystanie z interfejsu Video Intelligence API w języku C#

1. Przegląd

Interfejs Google Cloud Video Intelligence API umożliwia deweloperom korzystanie z technologii analizy wideo Google w ramach ich aplikacji.

Można jej używać do:

Interfejs API REST umożliwia użytkownikom dodawanie adnotacji do filmów przechowywanych lokalnie lub w Google Cloud Storage z informacjami kontekstowymi na poziomie całego filmu, poszczególnych segmentów, ujęć i klatek.

W tym module skupisz się na korzystaniu z interfejsu Video Intelligence API w języku C#. Dowiesz się, jak analizować filmy pod kątem etykiet, zmian ujęć i wykrywania treści dla dorosłych.

Czego się nauczysz

  • Jak korzystać z Cloud Shell
  • Jak włączyć interfejs Video Intelligence API
  • Uwierzytelnianie żądań do interfejsu API
  • Instalowanie biblioteki klienta Google Cloud dla C#
  • Jak analizować filmy pod kątem etykiet
  • Jak analizować filmy pod kątem zmian ujęć
  • Analizowanie filmów pod kątem wykrywania treści dla dorosłych

Czego potrzebujesz

  • Projekt Google Cloud Platform
  • przeglądarka, np. Chrome lub Firefox;
  • znajomość języka C#,

Ankieta

Jak zamierzasz korzystać z tego samouczka?

Tylko przeczytaj Przeczytaj i wykonaj ćwiczenia

Jak oceniasz swoje doświadczenie z językiem C#?

Początkujący Średnio zaawansowany Zaawansowany

Jak oceniasz korzystanie z usług Google Cloud Platform?

Początkujący Średnio zaawansowany Zaawansowany

2. Konfiguracja i wymagania

Samodzielne konfigurowanie środowiska

  1. Zaloguj się w konsoli Google Cloud i utwórz nowy projekt lub użyj istniejącego. Jeśli nie masz jeszcze konta Gmail ani Google Workspace, musisz je utworzyć.

295004821bab6a87.png

37d264871000675d.png

96d86d3d5655cdbe.png

  • Nazwa projektu to wyświetlana nazwa uczestników tego projektu. Jest to ciąg znaków, który nie jest używany przez interfejsy API Google. Zawsze możesz ją zaktualizować.
  • Identyfikator projektu jest unikalny we wszystkich projektach Google Cloud i nie można go zmienić po ustawieniu. Konsola Cloud automatycznie generuje unikalny ciąg znaków. Zwykle nie musisz się tym przejmować. W większości ćwiczeń z programowania musisz odwoływać się do identyfikatora projektu (zwykle oznaczanego jako PROJECT_ID). Jeśli wygenerowany identyfikator Ci się nie podoba, możesz wygenerować inny losowy identyfikator. Możesz też spróbować własnej nazwy i sprawdzić, czy jest dostępna. Po tym kroku nie można go zmienić i pozostaje on taki przez cały czas trwania projektu.
  • Warto wiedzieć, że istnieje trzecia wartość, numer projektu, której używają niektóre interfejsy API. Więcej informacji o tych 3 wartościach znajdziesz w dokumentacji.
  1. Następnie musisz włączyć płatności w konsoli Cloud, aby korzystać z zasobów i interfejsów API Google Cloud. Wykonanie tego laboratorium nie będzie kosztować dużo, a może nawet nic. Aby wyłączyć zasoby i uniknąć naliczania opłat po zakończeniu tego samouczka, możesz usunąć utworzone zasoby lub projekt. Nowi użytkownicy Google Cloud mogą skorzystać z bezpłatnego okresu próbnego, w którym mają do dyspozycji środki w wysokości 300 USD.

Uruchamianie Cloud Shell

Z Google Cloud można korzystać zdalnie na laptopie, ale w tym module praktycznym będziesz używać Google Cloud Shell, czyli środowiska wiersza poleceń działającego w chmurze.

Aktywowanie Cloud Shell

  1. W konsoli Cloud kliknij Aktywuj Cloud Shell d1264ca30785e435.png.

cb81e7c8e34bc8d.png

Jeśli uruchamiasz Cloud Shell po raz pierwszy, zobaczysz ekran pośredni z opisem tego środowiska. Jeśli pojawił się ekran pośredni, kliknij Dalej.

d95252b003979716.png

Uzyskanie dostępu do środowiska Cloud Shell i połączenie się z nim powinno zająć tylko kilka chwil.

7833d5e1c5d18f54.png

Ta maszyna wirtualna zawiera wszystkie potrzebne narzędzia dla programistów. Zawiera również stały katalog domowy o pojemności 5 GB i działa w Google Cloud, co znacznie zwiększa wydajność sieci i usprawnia proces uwierzytelniania. Większość zadań w tym module, a być może wszystkie, możesz wykonać w przeglądarce.

Po połączeniu z Cloud Shell zobaczysz, że uwierzytelnianie zostało już przeprowadzone, a projekt jest już ustawiony na Twój identyfikator projektu.

  1. Aby potwierdzić, że uwierzytelnianie zostało przeprowadzone, uruchom w Cloud Shell to polecenie:
gcloud auth list

Wynik polecenia

 Credentialed Accounts
ACTIVE  ACCOUNT
*       <my_account>@<my_domain.com>

To set the active account, run:
    $ gcloud config set account `ACCOUNT`
  1. Aby potwierdzić, że polecenie gcloud zna Twój projekt, uruchom w Cloud Shell to polecenie:
gcloud config list project

Wynik polecenia

[core]
project = <PROJECT_ID>

Jeśli nie, możesz go ustawić za pomocą tego polecenia:

gcloud config set project <PROJECT_ID>

Wynik polecenia

Updated property [core/project].

3. Włączanie interfejsu Video Intelligence API

Aby zacząć korzystać z interfejsu Video Intelligence API, musisz go włączyć. Aby włączyć interfejs API, użyj w Cloud Shell tego polecenia:

gcloud services enable videointelligence.googleapis.com

4. Instalowanie biblioteki klienta interfejsu Google Cloud Video Intelligence API dla języka C#

Najpierw utwórz prostą aplikację konsolową w C#, której będziesz używać do uruchamiania przykładów interfejsu Video Intelligence API:

dotnet new console -n VideoIntApiDemo

Powinna pojawić się utworzona aplikacja i rozwiązane zależności:

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

Następnie otwórz folder VideoIntApiDemo:

cd VideoIntApiDemo/

Dodaj do projektu pakiet 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'.

Możesz już korzystać z Video Intelligence API.

5. wykrywanie etykiet

Analiza etykiet wykrywa etykiety w filmie przechowywanym lokalnie lub w Google Cloud Storage. W tej sekcji przeanalizujesz film pod kątem etykiet przechowywanych w Google Cloud Storage.

Najpierw otwórz edytor kodu w prawym górnym rogu Cloud Shell:

fd3fc1303e63572.png

Otwórz plik Program.cs w folderze VideoIntApiDemo i zastąp kod tym kodem:

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}");
                }
            }
        }
    }
}

Poświęć chwilę na zapoznanie się z kodem i sprawdź, jak wideo jest oznaczane*.

Wróć do Cloud Shell i uruchom aplikację:

dotnet run

Wyodrębnienie etykiet przez interfejs Video Intelligence API trwa kilka sekund, ale w końcu powinny się wyświetlić te dane wyjściowe:

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
...

Podsumowanie

W tym kroku udało Ci się wyświetlić listę wszystkich etykiet w filmie za pomocą interfejsu Video Intelligence API. Więcej informacji znajdziesz na stronie Wykrywanie etykiet.

6. Wykrywanie zmian ujęć

Za pomocą interfejsu Video Intelligence API możesz wykrywać zmiany ujęć w filmie przechowywanym lokalnie lub w Google Cloud Storage. W tej sekcji przeprowadzisz analizę wideo pod kątem zmian ujęć w pliku znajdującym się w Google Cloud Storage.

Aby wykryć zmiany ujęć, otwórz plik Program.cs w folderze VideoIntApiDemo i zastąp kod tym kodem:

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);
                }
            }
        }
    }
}

Poświęć chwilę na przeanalizowanie kodu i sprawdzenie, jak działa wykrywanie strzałów.

Wróć do Cloud Shell i uruchom aplikację. Powinny wyświetlić się te dane wyjściowe:

dotnet run

Powinny się wyświetlić te dane wyjściowe:

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"

Podsumowanie

W tym kroku udało Ci się użyć interfejsu Video Intelligence API do wykrywania zmian ujęć w pliku przechowywanym w Google Cloud Storage. Więcej informacji o zmianach ujęć

7. Wykrywanie treści dla dorosłych

Wykrywanie treści o charakterze jednoznacznie seksualnym wykrywa treści dla dorosłych w filmie. Treści dla dorosłych to treści zasadniczo odpowiednie dla osób w wieku co najmniej 18 lat, w tym m.in. nagość, aktywność seksualna i pornografia (w tym kreskówki i anime). Odpowiedź zawiera wartość prawdopodobieństwa w postaci przedziału, od VERY_UNLIKELY do VERY_LIKELY.

Gdy funkcja wykrywania treści dla pełnoletnich ocenia film, robi to na podstawie poszczególnych klatek i bierze pod uwagę tylko treści wizualne. Komponent audio filmu nie jest używany do oceny poziomu treści o charakterze jednoznacznie seksualnym.

Aby wykrywać treści dla dorosłych, otwórz plik Program.cs w folderze VideoIntApiDemo i zastąp kod tym kodem:

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();
                }
            }
        }
    }
}

Poświęć chwilę na zapoznanie się z kodem i sprawdź, jak przeprowadzono wykrywanie treści o charakterze jednoznacznie erotycznym*.

Wróć do Cloud Shell i uruchom aplikację:

dotnet run

Może to potrwać kilka sekund, ale w końcu powinny się wyświetlić te dane wyjściowe:

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

Podsumowanie

W tym kroku udało Ci się wykryć wulgarne treści w filmie za pomocą interfejsu Video Intelligence API. Dowiedz się więcej o wykrywaniu treści dla dorosłych.

8. Gratulacje!

Dowiedziałeś się, jak korzystać z Video Intelligence API za pomocą języka C#.

Czyszczenie danych

Oto kroki, które musisz wykonać, aby uniknąć obciążenia konta Google Cloud Platform opłatami za zasoby zużyte podczas krótkiego wprowadzenia:

  • Otwórz konsolę Cloud Platform.
  • Wybierz projekt, który chcesz zamknąć, a następnie kliknij „Usuń” u góry. Spowoduje to zaplanowanie usunięcia projektu.

Więcej informacji

Licencja

To zadanie jest licencjonowane na podstawie ogólnej licencji Creative Commons Attribution 2.0.