۱. مرور کلی
رابط برنامهنویسی کاربردی هوش ویدیویی گوگل کلود (Google Cloud Video Intelligence API) به توسعهدهندگان اجازه میدهد تا از فناوری تحلیل ویدیوی گوگل به عنوان بخشی از برنامههای خود استفاده کنند.
میتوان از آن برای انجام موارد زیر استفاده کرد:
- تشخیص برچسب : تشخیص اشیاء، مانند سگ، گل، انسان، در ویدیو.
- تشخیص محتوای صریح : تشخیص محتوای بزرگسالان در یک ویدیو.
- تشخیص تغییر نما : تغییرات صحنه را در ویدیو تشخیص میدهد.
رابط برنامهنویسی کاربردی REST به کاربران این امکان را میدهد که ویدیوهای ذخیرهشده بهصورت محلی یا در فضای ذخیرهسازی ابری گوگل را با اطلاعات زمینهای در سطح کل ویدیو، در هر بخش، در هر نما و در هر فریم، حاشیهنویسی کنند.
در این آزمایشگاه کد، شما بر استفاده از رابط برنامهنویسی کاربردی هوش ویدیویی (Video Intelligence API) با سیشارپ تمرکز خواهید کرد. یاد خواهید گرفت که چگونه ویدیوها را برای برچسبها، تغییرات شات و تشخیص محتوای صریح تجزیه و تحلیل کنید.
آنچه یاد خواهید گرفت
- نحوه استفاده از پوسته ابری
- نحوه فعال کردن API هوش ویدیویی
- نحوه احراز هویت درخواستهای API
- نحوه نصب کتابخانه کلاینت گوگل کلود برای سی شارپ
- نحوه تجزیه و تحلیل ویدیوها برای یافتن برچسبها
- نحوه تجزیه و تحلیل ویدیوها برای تغییرات نماها
- نحوه تجزیه و تحلیل ویدیوها برای تشخیص محتوای صریح
آنچه نیاز دارید
نظرسنجی
چگونه از این آموزش استفاده خواهید کرد؟
تجربه خود را با C# چگونه ارزیابی میکنید؟
تجربه خود را در استفاده از خدمات پلتفرم ابری گوگل چگونه ارزیابی میکنید؟
۲. تنظیمات و الزامات
تنظیم محیط خودتنظیم
- وارد کنسول گوگل کلود شوید و یک پروژه جدید ایجاد کنید یا از یک پروژه موجود دوباره استفاده کنید. اگر از قبل حساب جیمیل یا گوگل ورک اسپیس ندارید، باید یکی ایجاد کنید .



- نام پروژه، نام نمایشی برای شرکتکنندگان این پروژه است. این یک رشته کاراکتری است که توسط APIهای گوگل استفاده نمیشود. شما همیشه میتوانید آن را بهروزرسانی کنید.
- شناسه پروژه در تمام پروژههای گوگل کلود منحصر به فرد است و تغییرناپذیر است (پس از تنظیم، قابل تغییر نیست). کنسول کلود به طور خودکار یک رشته منحصر به فرد تولید میکند؛ معمولاً برای شما مهم نیست که چه باشد. در اکثر آزمایشگاههای کد، باید شناسه پروژه خود را (که معمولاً با عنوان
PROJECT_IDشناخته میشود) ارجاع دهید. اگر شناسه تولید شده را دوست ندارید، میتوانید یک شناسه تصادفی دیگر ایجاد کنید. به عنوان یک جایگزین، میتوانید شناسه خودتان را امتحان کنید و ببینید که آیا در دسترس است یا خیر. پس از این مرحله قابل تغییر نیست و در طول پروژه باقی میماند. - برای اطلاع شما، یک مقدار سوم، شماره پروژه ، وجود دارد که برخی از APIها از آن استفاده میکنند. برای کسب اطلاعات بیشتر در مورد هر سه این مقادیر، به مستندات مراجعه کنید.
- در مرحله بعد، برای استفاده از منابع/API های ابری، باید پرداخت صورتحساب را در کنسول ابری فعال کنید . اجرای این آزمایشگاه کد هزینه زیادی نخواهد داشت، اگر اصلاً هزینهای داشته باشد. برای خاموش کردن منابع به منظور جلوگیری از پرداخت صورتحساب پس از این آموزش، میتوانید منابعی را که ایجاد کردهاید یا پروژه را حذف کنید. کاربران جدید Google Cloud واجد شرایط برنامه آزمایشی رایگان ۳۰۰ دلاری هستند.
شروع پوسته ابری
اگرچه میتوان از راه دور و از طریق لپتاپ، گوگل کلود را مدیریت کرد، اما در این آزمایشگاه کد، از گوگل کلود شل ، یک محیط خط فرمان که در فضای ابری اجرا میشود، استفاده خواهید کرد.
فعال کردن پوسته ابری
- از کنسول ابری، روی فعال کردن پوسته ابری کلیک کنید
.

اگر این اولین باری است که Cloud Shell را اجرا میکنید، یک صفحه میانی برای توضیح آن به شما نمایش داده میشود. اگر با یک صفحه میانی مواجه شدید، روی ادامه کلیک کنید.

آمادهسازی و اتصال به Cloud Shell فقط چند لحظه طول میکشد.

این ماشین مجازی مجهز به تمام ابزارهای توسعه مورد نیاز است. این ماشین یک دایرکتوری خانگی پایدار ۵ گیگابایتی ارائه میدهد و در فضای ابری گوگل اجرا میشود که عملکرد شبکه و احراز هویت را تا حد زیادی افزایش میدهد. بخش عمدهای از کار شما در این آزمایشگاه کد، اگر نگوییم همه، را میتوان با یک مرورگر انجام داد.
پس از اتصال به Cloud Shell، باید ببینید که احراز هویت شدهاید و پروژه روی شناسه پروژه شما تنظیم شده است.
- برای تأیید احراز هویت، دستور زیر را در 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`
- دستور زیر را در Cloud Shell اجرا کنید تا تأیید کنید که دستور gcloud از پروژه شما اطلاع دارد:
gcloud config list project
خروجی دستور
[core] project = <PROJECT_ID>
اگر اینطور نیست، میتوانید با این دستور آن را تنظیم کنید:
gcloud config set project <PROJECT_ID>
خروجی دستور
Updated property [core/project].
۳. فعال کردن رابط برنامهنویسی کاربردی هوش ویدیویی
قبل از اینکه بتوانید از Video Intelligence API استفاده کنید، باید آن را فعال کنید. میتوانید با استفاده از دستور زیر در Cloud Shell، API را فعال کنید:
gcloud services enable videointelligence.googleapis.com
۴. کتابخانه کلاینت Google Cloud Video Intelligence API را برای C# نصب کنید.
ابتدا، یک برنامه کنسول ساده C# ایجاد کنید که برای اجرای نمونههای 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'.
حالا، شما آماده استفاده از رابط برنامهنویسی کاربردی هوش ویدیویی هستید!
۵. تشخیص برچسب
تجزیه و تحلیل برچسب، برچسبهای موجود در یک ویدیو را که به صورت محلی یا در فضای ذخیرهسازی ابری گوگل ذخیره شده است، شناسایی میکند. در این بخش، شما یک ویدیو را برای برچسبهای ذخیره شده در فضای ذخیرهسازی ابری گوگل تجزیه و تحلیل خواهید کرد.
ابتدا، ویرایشگر کد را از سمت راست بالای Cloud Shell باز کنید:

به فایل 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 فهرست کنید. میتوانید اطلاعات بیشتر را در صفحه تشخیص برچسب مطالعه کنید.
۶. تشخیص تغییر شات
شما میتوانید از API هوش ویدیویی (Video Intelligence API) برای تشخیص تغییرات شات در یک ویدیو که به صورت محلی یا در فضای ابری گوگل ذخیره شده است، استفاده کنید. در این بخش، شما تجزیه و تحلیل ویدیو را برای تغییرات شات روی فایلی که در فضای ابری گوگل قرار دارد، انجام خواهید داد.
برای تشخیص تغییرات شات، به فایل 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"
خلاصه
در این مرحله، شما توانستید از API هوش ویدیویی برای تشخیص تغییرات شات در فایلی که در فضای ابری گوگل ذخیره شده است، استفاده کنید. درباره تغییرات شات بیشتر بخوانید.
۷. تشخیص محتوای صریح
تشخیص محتوای صریح، محتوای بزرگسالان را در یک ویدیو تشخیص میدهد. محتوای بزرگسالان، محتوایی است که عموماً برای افراد ۱۸ سال به بالا مناسب است، از جمله برهنگی، فعالیتهای جنسی و پورنوگرافی (از جمله کارتون یا انیمه). پاسخ شامل یک مقدار احتمال از بسیار بعید تا بسیار بعید است.
وقتی تشخیص محتوای صریح یک ویدیو را ارزیابی میکند، این کار را بر اساس هر فریم انجام میدهد و فقط محتوای بصری را در نظر میگیرد. از مؤلفه صوتی ویدیو برای ارزیابی سطح محتوای صریح استفاده نمیشود.
برای تشخیص محتوای صریح، به فایل 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، تشخیص محتوای صریح را روی یک ویدیو انجام دهید. درباره تشخیص محتوای صریح بیشتر بخوانید.
۸. تبریک میگویم!
شما یاد گرفتید که چگونه از Video Intelligence API با استفاده از سی شارپ استفاده کنید!
تمیز کردن
برای جلوگیری از تحمیل هزینه به حساب پلتفرم گوگل کلود خود برای منابع استفاده شده در این راهنمای سریع:
- به کنسول پلتفرم ابری بروید.
- پروژهای را که میخواهید خاموش کنید انتخاب کنید، سپس روی «حذف» در بالا کلیک کنید: این کار پروژه را برای حذف زمانبندی میکند.
اطلاعات بیشتر
- رابط برنامهنویسی کاربردی هوش ویدیویی گوگل کلود: https://cloud.google.com/video-intelligence/docs/
- سی شارپ/.NET روی پلتفرم ابری گوگل: https://cloud.google.com/dotnet/
- کلاینت گوگل کلود داتنت: https://googlecloudplatform.github.io/google-cloud-dotnet/
مجوز
این اثر تحت مجوز عمومی Creative Commons Attribution 2.0 منتشر شده است.