C 'de sakıncalı malzeme için video içeriğini analiz etme

Bu makalede, .NET için Content moderator SDK 'yı kullanmaya başlamanıza yardımcı olacak bilgiler ve kod örnekleri, yetişkinlere yönelik içerik ve video içeriğini taramak

Azure aboneliğiniz yoksa başlamadan önce ücretsiz bir hesap oluşturun.

Önkoşullar

Azure kaynakları ayarlama

Content Moderator video denetleme özelliği, Azure Media Services (AMS) içinde ücretsiz bir genel önizleme medyası işlemcisi olarak sunulmaktadır. Azure Media Services, video içeriğini depolamaya ve akışa yönelik özel bir Azure hizmetidir.

Azure Media Services hesabı oluşturma

AMS 'ye abone olmak ve ilişkili bir Azure depolama hesabı oluşturmak için Azure Media Services hesabı oluşturma bölümündeki yönergeleri izleyin. Bu depolama hesabında, yeni bir BLOB depolama kapsayıcısı oluşturun.

Azure Active Directory uygulaması oluşturma

Azure portal yeni AMS aboneliğinize gidin ve Yan menüden API erişimi ' ni seçin. Hizmet sorumlusu ile Azure Media Services Bağlan' ı seçin. REST API uç noktası alanındaki değeri aklınızda edin; Buna daha sonra ihtiyacınız olacak.

Azure AD uygulaması bölümünde Yeni oluştur ' u SEÇIN ve yeni Azure AD uygulama kaydınızı adlandırın (örneğin, "VideoModADApp"). Kaydet ' e tıklayın ve uygulama yapılandırıldıktan sonra birkaç dakika bekleyin. Ardından, yeni uygulama kaydınızı sayfanın Azure AD uygulaması bölümünde görmeniz gerekir.

Uygulama kaydınızı seçin ve altındaki Uygulamayı Yönet düğmesine tıklayın. Uygulama kimliği alanındaki değeri aklınızda edin; Buna daha sonra ihtiyacınız olacak. Ayarlar > anahtarlar' ı seçin ve yeni anahtar için bir açıklama girin (örneğin, "videomodkey"). Kaydet' e tıklayın ve ardından yeni anahtar değerine dikkat edin. Bu dizeyi kopyalayın ve güvenli bir yere kaydedin.

Yukarıdaki işlemin daha kapsamlı bir yolu için bkz. Azure AD kimlik doğrulamasıyla çalışmaya başlama.

Bunu yaptıktan sonra, video denetlemesi medya işlemcisini iki farklı yolla kullanabilirsiniz.

Azure Media Services Gezginini Kullanma

Azure Media Services gezgin, AMS için Kullanıcı dostu bir ön uçta bulunur. AMS hesabınıza gözatıp videoları karşıya yüklemeyi ve Content Moderator medya işlemcisi ile içerik taramayı sağlamak için bu uygulamayı kullanın. Dosyayı GitHub'dan indirip yükleyin veya daha fazla bilgi Için Azure Media Services Gezgini blog gönderisine bakın.

Content Moderator ile gezgin Azure Media Services

Visual Studio projesini oluşturma

  1. Visual Studio 'da yeni bir konsol uygulaması (.NET Framework) projesi oluşturun ve bunu videodenetlemesi olarak adlandırın.
  2. Çözümünüzde başka projeler de varsa, tek başlangıç projesi olarak bunu seçin.
  3. Gereken NuGet paketlerini alın. Çözüm Gezgini'nde projenize sağ tıklayın ve NuGet Paketlerini Yönet'i seçin; ardından aşağıdaki projeleri bulun ve yükleyin:
    • windowsazure. mediaservices
    • windowsazure. mediaservices. Extensions

Video denetleme kodu ekle

Ardından, temel bir içerik moderasyonu senaryosu uygulamak için kodu bu kılavuzdan kopyalayıp projenize yapıştıracaksınız.

Programı deyimler kullanarak güncelleştirme

Aşağıdaki using deyimlerini Program.cs dosyanızın en üstüne ekleyin.

using System;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.WindowsAzure.MediaServices.Client;
using System.IO;
using System.Threading;
using Microsoft.WindowsAzure.Storage.Blob;
using Microsoft.WindowsAzure.Storage;
using Microsoft.WindowsAzure.Storage.Auth;
using System.Collections.Generic;

Kaynak başvurularını ayarlama

Aşağıdaki statik alanları program. cs içindeki Program sınıfına ekleyin. Bu alanlar, AMS aboneliğinize bağlanmak için gereken bilgileri tutar. Bunları yukarıdaki adımlarda aldığınız değerlerle birlikte doldurabilirsiniz. CLIENT_IDAzure AD uygulamanızın uygulama kimliği değeri olduğunu ve CLIENT_SECRET Bu uygulama Için oluşturduğunuz "videomodkey" değerinin olduğunu unutmayın.

// declare constants and globals
private static CloudMediaContext _context = null;
private static CloudStorageAccount _StorageAccount = null;

// Azure Media Services (AMS) associated Storage Account, Key, and the Container that has 
// a list of Blobs to be processed.
static string STORAGE_NAME = "YOUR AMS ASSOCIATED BLOB STORAGE NAME";
static string STORAGE_KEY = "YOUR AMS ASSOCIATED BLOB STORAGE KEY";
static string STORAGE_CONTAINER_NAME = "YOUR BLOB CONTAINER FOR VIDEO FILES";

private static StorageCredentials _StorageCredentials = null;

// Azure Media Services authentication. 
private const string AZURE_AD_TENANT_NAME = "microsoft.onmicrosoft.com";
private const string CLIENT_ID = "YOUR CLIENT ID";
private const string CLIENT_SECRET = "YOUR CLIENT SECRET";

// REST API endpoint, for example "https://accountname.restv2.westcentralus.media.azure.net/API".      
private const string REST_API_ENDPOINT = "YOUR API ENDPOINT";

// Content Moderator Media Processor Nam
private const string MEDIA_PROCESSOR = "Azure Media Content Moderator";

// Input and Output files in the current directory of the executable
private const string INPUT_FILE = "VIDEO FILE NAME";
private const string OUTPUT_FOLDER = "";

// JSON settings file
private static readonly string CONTENT_MODERATOR_PRESET_FILE = "preset.json";

Yerel bir video dosyası (en basit durum) kullanmak istiyorsanız, projeye ekleyin ve INPUT_FILE değerini değer olarak girin (göreli yollar yürütme dizinine göre değişir).

Ayrıca, geçerli dizindeki dosyasında preset.js oluşturmanız ve bir sürüm numarası belirtmek için kullanmanız gerekir. Örnek:

{
    "version": "2.0"
}

Giriş video (ler) i Yükle

Program sınıfının Main yöntemi bir Azure Medya bağlamı ve ardından bir Azure depolama bağlamı oluşturur (videolarınızın BLOB depolama alanında olması durumunda). Kalan kod, bir Azure depolama kapsayıcısı içindeki yerel bir klasörden, Blobun veya birden çok blobdan bir videoyu tarar. Diğer kod satırlarına açıklama ekleyerek tüm seçenekleri deneyebilirsiniz.

// Create Azure Media Context
CreateMediaContext();

// Create Storage Context
CreateStorageContext();

// Use a file as the input.
IAsset asset = CreateAssetfromFile();

// -- OR ---

// Or a blob as the input
// IAsset asset = CreateAssetfromBlob((CloudBlockBlob)GetBlobsList().First());

// Then submit the asset to Content Moderator
RunContentModeratorJob(asset);

//-- OR ----

// Just run the content moderator on all blobs in a list (from a Blob Container)
// RunContentModeratorJobOnBlobs();

Azure Medya bağlamı oluşturma

Program sınıfına aşağıdaki yöntemi ekleyin. Bu, AMS ile iletişime izin vermek için AMS kimlik bilgilerinizi kullanır.

// Creates a media context from azure credentials
static void CreateMediaContext()
{
    // Get Azure AD credentials
    var tokenCredentials = new AzureAdTokenCredentials(AZURE_AD_TENANT_NAME,
        new AzureAdClientSymmetricKey(CLIENT_ID, CLIENT_SECRET),
        AzureEnvironments.AzureCloudEnvironment);

    // Initialize an Azure AD token
    var tokenProvider = new AzureAdTokenProvider(tokenCredentials);

    // Create a media context
    _context = new CloudMediaContext(new Uri(REST_API_ENDPOINT), tokenProvider);
}

Azure depolama bağlamı oluşturmak için kod ekleme

Program sınıfına aşağıdaki yöntemi ekleyin. Blob depolamaya erişmek için depolama kimlik bilgilerinizle oluşturulan depolama bağlamını kullanırsınız.

// Creates a storage context from the AMS associated storage name and key
static void CreateStorageContext()
{
    // Get a reference to the storage account associated with a Media Services account. 
    if (_StorageCredentials == null)
    {
        _StorageCredentials = new StorageCredentials(STORAGE_NAME, STORAGE_KEY);
    }
    _StorageAccount = new CloudStorageAccount(_StorageCredentials, false);
}

Yerel dosya ve BLOB 'dan Azure Medya varlıkları oluşturmak için kodu ekleyin

Content Moderator medya işlemcisi, işleri Azure Media Services platformu içindeki varlıklar üzerinde çalıştırır. Bu yöntemler, varlıkları yerel bir dosyadan veya ilişkili bir Blobun oluşturur.

// Creates an Azure Media Services Asset from the video file
static IAsset CreateAssetfromFile()
{
    return _context.Assets.CreateFromFile(INPUT_FILE, AssetCreationOptions.None); ;
}

// Creates an Azure Media Services asset from your blog storage
static IAsset CreateAssetfromBlob(CloudBlockBlob Blob)
{
    // Create asset from the FIRST blob in the list and return it
    return _context.Assets.CreateFromBlob(Blob, _StorageCredentials, AssetCreationOptions.None);
}

Bir kapsayıcı içindeki bir video koleksiyonunu (blob olarak) taramak için kodu ekleyin

// Runs the Content Moderator Job on all Blobs in a given container name
static void RunContentModeratorJobOnBlobs()
{
    // Get the reference to the list of Blobs. See the following method.
    var blobList = GetBlobsList();

    // Iterate over the Blob list items or work on specific ones as needed
    foreach (var sourceBlob in blobList)
    {
        // Create an Asset
        IAsset asset = _context.Assets.CreateFromBlob((CloudBlockBlob)sourceBlob,
                            _StorageCredentials, AssetCreationOptions.None);
        asset.Update();

        // Submit to Content Moderator
        RunContentModeratorJob(asset);
    }
}

// Get all blobs in your container
static IEnumerable<IListBlobItem> GetBlobsList()
{
    // Get a reference to the Container within the Storage Account
    // that has the files (blobs) for moderation
    CloudBlobClient CloudBlobClient = _StorageAccount.CreateCloudBlobClient();
    CloudBlobContainer MediaBlobContainer = CloudBlobClient.GetContainerReference(STORAGE_CONTAINER_NAME);

    // Get the reference to the list of Blobs 
    var blobList = MediaBlobContainer.ListBlobs();
    return blobList;
}

Content Moderator Işini çalıştırmak için yöntemini ekleyin

// Run the Content Moderator job on the designated Asset from local file or blob storage
static void RunContentModeratorJob(IAsset asset)
{
    // Grab the presets
    string configuration = File.ReadAllText(CONTENT_MODERATOR_PRESET_FILE);

    // grab instance of Azure Media Content Moderator MP
    IMediaProcessor mp = _context.MediaProcessors.GetLatestMediaProcessorByName(MEDIA_PROCESSOR);

    // create Job with Content Moderator task
    IJob job = _context.Jobs.Create(String.Format("Content Moderator {0}",
            asset.AssetFiles.First() + "_" + Guid.NewGuid()));

    ITask contentModeratorTask = job.Tasks.AddNew("Adult and racy classifier task",
            mp, configuration,
            TaskOptions.None);
    contentModeratorTask.InputAssets.Add(asset);
    contentModeratorTask.OutputAssets.AddNew("Adult and racy classifier output",
        AssetCreationOptions.None);

    job.Submit();


    // Create progress printing and querying tasks
    Task progressPrintTask = new Task(() =>
    {
        IJob jobQuery = null;
        do
        {
            var progressContext = _context;
            jobQuery = progressContext.Jobs
            .Where(j => j.Id == job.Id)
                .First();
                Console.WriteLine(string.Format("{0}\t{1}",
                DateTime.Now,
                jobQuery.State));
                Thread.Sleep(10000);
            }
            while (jobQuery.State != JobState.Finished &&
            jobQuery.State != JobState.Error &&
            jobQuery.State != JobState.Canceled);
    });
    progressPrintTask.Start();

    Task progressJobTask = job.GetExecutionProgressTask(
    CancellationToken.None);
    progressJobTask.Wait();

    // If job state is Error, the event handling 
    // method for job progress should log errors.  Here we check 
    // for error state and exit if needed.
    if (job.State == JobState.Error)
    {
        ErrorDetail error = job.Tasks.First().ErrorDetails.First();
        Console.WriteLine(string.Format("Error: {0}. {1}",
        error.Code,
        error.Message));
    }

    DownloadAsset(job.OutputMediaAssets.First(), OUTPUT_FOLDER);
}

Yardımcı işlevler ekleme

Bu yöntemler, Azure Media Services varlıklarından Content Moderator çıkış dosyasını (JSON) indirir ve programın çalışan bir durumu konsola kaydetmesini sağlamak için denetleme işinin durumunu izlemeye yardımcı olur.

static void DownloadAsset(IAsset asset, string outputDirectory)
{
    foreach (IAssetFile file in asset.AssetFiles)
    {
        file.Download(Path.Combine(outputDirectory, file.Name));
    }
}

// event handler for Job State
static void StateChanged(object sender, JobStateChangedEventArgs e)
{
    Console.WriteLine("Job state changed event:");
    Console.WriteLine("  Previous state: " + e.PreviousState);
    Console.WriteLine("  Current state: " + e.CurrentState);
    switch (e.CurrentState)
    {
        case JobState.Finished:
            Console.WriteLine();
            Console.WriteLine("Job finished.");
            break;
        case JobState.Canceling:
        case JobState.Queued:
        case JobState.Scheduled:
        case JobState.Processing:
            Console.WriteLine("Please wait...\n");
            break;
        case JobState.Canceled:
            Console.WriteLine("Job is canceled.\n");
            break;
        case JobState.Error:
            Console.WriteLine("Job failed.\n");
            break;
        default:
            break;
    }
}

Programı çalıştırma ve çıktıyı gözden geçirme

Içerik denetleme işi tamamlandıktan sonra JSON yanıtını çözümleyin. Şu öğelerden oluşur:

  • Video bilgileri Özeti
  • "Parçalar" olarak anlık görüntüleri
  • " (= True veya false)" adlı "Olaylar" olarak, yetişkin ve kcy puanlarını temel alan ana çerçeveler
  • Başlangıç, süre, TotalDuration ve zaman damgası "ticks" dir. Sayıyı saniye cinsinden almak için zaman ölçeğinde ayırın.

Not

  • adultScore belirli durumlarda cinsel açık veya yetişkin olarak değerlendirilen içeriğin olası varlığını ve tahmin Puanını temsil eder.
  • racyScore belirli durumlarda cinsel veya kötü bir şekilde düşünüldüksel olabilecek içeriğin olası varlığını ve tahmin Puanını temsil eder.
  • adultScore ve racyScore 0 ile 1 arasındadır. Puan arttıkça, modelin daha yüksek olması kategorinin uygulanabilir olabileceğini tahmin edilir. Bu önizleme el ile kodlanmış sonuçlar yerine istatistiksel bir modeli kullanır. Her kategorinin gereksinimlerinize göre nasıl hizalanacağını öğrenmek için kendi içeriklerinizi test etmenizi öneririz.
  • reviewRecommended , iç puan eşiklerine bağlı olarak doğru ya da yanlış şeklindedir. Müşteriler, bu değerin kullanılıp kullanılmayacağını ya da içerik ilkelerine bağlı olarak özel eşiklere karar vermesini değerlendirmelidir.
{
"version": 2,
"timescale": 90000,
"offset": 0,
"framerate": 50,
"width": 1280,
"height": 720,
"totalDuration": 18696321,
"fragments": [
{
    "start": 0,
    "duration": 18000
},
{
    "start": 18000,
    "duration": 3600,
    "interval": 3600,
    "events": [
    [
        {
        "reviewRecommended": false,
        "adultScore": 0.00001,
        "racyScore": 0.03077,
        "index": 5,
        "timestamp": 18000,
        "shotIndex": 0
        }
    ]
    ]
},
{
    "start": 18386372,
    "duration": 119149,
    "interval": 119149,
    "events": [
    [
        {
        "reviewRecommended": true,
        "adultScore": 0.00000,
        "racyScore": 0.91902,
        "index": 5085,
        "timestamp": 18386372,
        "shotIndex": 62
        }
    ]
    ]
}
]
}

Sonraki adımlar

Denetleme çıktıınızdan video İncelemeleri oluşturmayı öğrenin.

.NET için bu ve diğer Content Moderator hızlı başlangıçlara yönelik Visual Studio çözümünü indirin .