1. نظرة عامة
تتيح Google Cloud Video Intelligence API للمطوّرين استخدام تكنولوجيا تحليل الفيديو من Google كجزء من تطبيقاتهم.
ويمكن استخدامها لإجراء ما يلي:
- اكتشاف التصنيفات: يتيح لك هذا الخيار اكتشاف عناصر، مثل الكلاب والزهور والأشخاص، في الفيديو.
- رصد المحتوى الفاضح: رصد المحتوى المخصّص للبالغين في الفيديو
- رصد تغيير اللقطة: رصد تغييرات المشهد داخل الفيديو
تتيح واجهة REST API للمستخدمين إضافة تعليقات توضيحية إلى الفيديوهات المخزّنة محليًا أو في Google Cloud Storage تتضمّن معلومات سياقية على مستوى الفيديو بأكمله، ولكل مقطع، ولكل لقطة، ولكل إطار.
في هذا الدرس التطبيقي حول الترميز، ستركز على استخدام Video Intelligence API مع لغة C#. ستتعلّم كيفية تحليل الفيديوهات بحثًا عن التصنيفات وتغييرات اللقطات ورصد المحتوى الفاضح.
ما ستتعلمه
- كيفية استخدام Cloud Shell
- كيفية تفعيل واجهة برمجة التطبيقات Video Intelligence API
- كيفية مصادقة طلبات البيانات من واجهة برمجة التطبيقات
- كيفية تثبيت مكتبة برامج Google Cloud للغة C#
- كيفية تحليل الفيديوهات بحثًا عن التصنيفات
- كيفية تحليل الفيديوهات لرصد التغييرات في اللقطات
- كيفية تحليل الفيديوهات لرصد المحتوى الفاضح
المتطلبات
استطلاع الرأي
كيف ستستخدم هذا البرنامج التعليمي؟
كيف تقيّم تجربتك مع لغة C#؟
ما هو تقييمك لتجربة استخدام خدمات Google Cloud Platform؟
2. الإعداد والمتطلبات
إعداد البيئة بالسرعة التي تناسبك
- سجِّل الدخول إلى Google Cloud Console وأنشِئ مشروعًا جديدًا أو أعِد استخدام مشروع حالي. إذا لم يكن لديك حساب على Gmail أو Google Workspace، عليك إنشاء حساب.



- اسم المشروع هو الاسم المعروض للمشاركين في هذا المشروع. وهي سلسلة أحرف لا تستخدمها Google APIs. ويمكنك تعديلها في أي وقت.
- رقم تعريف المشروع هو معرّف فريد في جميع مشاريع Google Cloud ولا يمكن تغييره بعد ضبطه. تنشئ Cloud Console تلقائيًا سلسلة فريدة، ولا يهمّك عادةً ما هي. في معظم دروس البرمجة، عليك الرجوع إلى رقم تعريف مشروعك (يُشار إليه عادةً باسم
PROJECT_ID). إذا لم يعجبك رقم التعريف الذي تم إنشاؤه، يمكنك إنشاء رقم تعريف عشوائي آخر. يمكنك بدلاً من ذلك تجربة اسم مستخدم من اختيارك ومعرفة ما إذا كان متاحًا. لا يمكن تغيير هذا الخيار بعد هذه الخطوة وسيظل ساريًا طوال مدة المشروع. - للعلم، هناك قيمة ثالثة، وهي رقم المشروع، تستخدمها بعض واجهات برمجة التطبيقات. يمكنك الاطّلاع على مزيد من المعلومات عن كل هذه القيم الثلاث في المستندات.
- بعد ذلك، عليك تفعيل الفوترة في Cloud Console لاستخدام موارد/واجهات برمجة تطبيقات Cloud. لن تكلفك تجربة هذا الدرس التطبيقي حول الترميز الكثير، إن وُجدت أي تكلفة على الإطلاق. لإيقاف الموارد وتجنُّب تحمّل تكاليف تتجاوز هذا البرنامج التعليمي، يمكنك حذف الموارد التي أنشأتها أو حذف المشروع. يمكن لمستخدمي Google Cloud الجدد الاستفادة من برنامج الفترة التجريبية المجانية بقيمة 300 دولار أمريكي.
بدء Cloud Shell
على الرغم من إمكانية تشغيل Google Cloud عن بُعد من الكمبيوتر المحمول، ستستخدم في هذا الدرس العملي Google Cloud Shell، وهي بيئة سطر أوامر تعمل في السحابة الإلكترونية.
تفعيل Cloud Shell
- من Cloud Console، انقر على تفعيل Cloud Shell
.

إذا كانت هذه هي المرة الأولى التي تبدأ فيها Cloud Shell، ستظهر لك شاشة وسيطة توضّح ماهية هذه الخدمة. إذا ظهرت لك شاشة وسيطة، انقر على متابعة.

يستغرق توفير Cloud Shell والاتصال به بضع لحظات فقط.

يتم تحميل هذا الجهاز الافتراضي بجميع أدوات التطوير اللازمة. توفّر هذه الخدمة دليلًا رئيسيًا دائمًا بسعة 5 غيغابايت وتعمل في Google Cloud، ما يؤدي إلى تحسين أداء الشبكة والمصادقة بشكل كبير. يمكن إنجاز معظم عملك في هذا الدرس التطبيقي حول الترميز، إن لم يكن كله، باستخدام متصفح.
بعد الاتصال بـ 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].
3- تفعيل Video Intelligence API
قبل أن تتمكّن من بدء استخدام Video Intelligence 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/
وأضِف حزمة 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'.
أنت الآن جاهز لاستخدام Video Intelligence API.
5- اكتشاف التصنيفات
تكتشف ميزة "تحليل التصنيفات" التصنيفات في فيديو مخزَّن محليًا أو في Google Cloud Storage. في هذا القسم، ستعمل على تحليل فيديو بحثًا عن تصنيفات مخزّنة في Google Cloud Storage.
أولاً، افتح أداة تعديل الرموز من أعلى يسار 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. يمكنك الاطّلاع على مزيد من المعلومات في صفحة التعرّف على الملصقات.
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. مزيد من المعلومات حول تغييرات Shot
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.
- اختَر المشروع الذي تريد إيقافه، ثم انقر على "حذف" في أعلى الصفحة: يؤدي ذلك إلى تحديد موعد لحذف المشروع.
مزيد من المعلومات
- Google Cloud Video Intelligence API: https://cloud.google.com/video-intelligence/docs/
- C#/.NET على Google Cloud Platform: https://cloud.google.com/dotnet/
- برنامج Google Cloud .NET: https://googlecloudplatform.github.io/google-cloud-dotnet/
الترخيص
يخضع هذا العمل لترخيص المشاع الإبداعي مع نسب العمل إلى مؤلفه 2.0 Generic License.