1. نظرة عامة
تتيح Google Cloud Video Intelligence API للمطوّرين استخدام تكنولوجيا تحليل الفيديو من Google كجزء من تطبيقاتهم.
ويمكن استخدامها لإجراء ما يلي:
- رصد التصنيفات: يمكنك رصد الأدوات، مثل كلب أو زهرة أو إنسان، في الفيديو.
- رصد المحتوى الفاضح: يمكنك رصد المحتوى المخصّص للبالغين في الفيديو.
- رصد التغييرات في اللقطة: يمكنك من خلال هذا الخيار رصد التغييرات في المشاهد في الفيديو.
تتيح واجهة برمجة تطبيقات REST للمستخدمين إضافة تعليقات توضيحية إلى الفيديوهات المخزَّنة محليًا أو في 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/
وإضافة حزمة 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- اكتشاف التصنيفات
يرصد تحليل التصنيفات تصنيفات فيديو تم تخزينه محليًا أو في 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. يمكنك قراءة المزيد في صفحة اكتشاف التصنيفات.
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.
- اختَر المشروع الذي تريد إيقافه، ثم انقر على "حذف". في الجزء العلوي: يؤدي هذا إلى تحديد موعد المشروع للحذف.
مزيد من المعلومات
- واجهة 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 مع نسب العمل إلى مؤلف عام.