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:
- Wykrywanie etykiet: wykrywanie obiektów w filmie, np. psa, kwiatu czy człowieka.
- Wykrywanie treści dla dorosłych: wykrywanie treści dla dorosłych w filmie.
- Wykrywanie zmian ujęć: wykrywanie zmian scen w filmie.
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
Ankieta
Jak zamierzasz korzystać z tego samouczka?
Jak oceniasz swoje doświadczenie z językiem C#?
Jak oceniasz korzystanie z usług Google Cloud Platform?
2. Konfiguracja i wymagania
Samodzielne konfigurowanie środowiska
- 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ć.



- 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.
- 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
- W konsoli Cloud kliknij Aktywuj Cloud Shell
.

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.

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

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

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
- Google Cloud Video Intelligence API: https://cloud.google.com/video-intelligence/docs/
- C#/.NET na Google Cloud Platform: https://cloud.google.com/dotnet/
- Klient Google Cloud .NET: https://googlecloudplatform.github.io/google-cloud-dotnet/
Licencja
To zadanie jest licencjonowane na podstawie ogólnej licencji Creative Commons Attribution 2.0.