Quickstart: Utilize a biblioteca de clientes do Moderador de ConteúdoQuickstart: Use the Content Moderator client library

Começa com a biblioteca de clientes do Content Moderador para .NET.Get started with the Content Moderator client library for .NET. Siga estes passos para instalar a embalagem e experimente o código de exemplo para tarefas básicas.Follow these steps to install the package and try out the example code for basic tasks. Content Moderador é um serviço cognitivo que verifica conteúdo de texto, imagem e vídeo para material potencialmente ofensivo, arriscado ou indesejável.Content Moderator is a cognitive service that checks text, image, and video content for material that is potentially offensive, risky, or otherwise undesirable. Quando este tipo de material é encontrado, o serviço aplica etiquetas adequadas (sinalizadores) ao conteúdo.When such material is found, the service applies appropriate labels (flags) to the content. A sua aplicação pode então lidar com conteúdo sinalizado para cumprir as normas ou manter o ambiente pretendido para os utilizadores.Your app can then handle flagged content to comply with regulations or maintain the intended environment for users.

Utilize a biblioteca de clientes Content Moderador para .NET para:Use the Content Moderator client library for .NET to:

Documentação de referência | Código fonte da biblioteca | Pacote (NuGet) | AmostrasReference documentation | Library source code | Package (NuGet) | Samples

Pré-requisitosPrerequisites

ConfiguraçãoSetting up

Criar um recurso Azure moderador de conteúdoCreate a Content Moderator Azure resource

Os Serviços Cognitivos Azure são representados por recursos Azure que subscreve.Azure Cognitive Services are represented by Azure resources that you subscribe to. Crie um recurso para Moderador de Conteúdo utilizando o portal Azure ou O CLI Azure na sua máquina local.Create a resource for Content Moderator using the Azure portal or Azure CLI on your local machine. Também pode:You can also:

Depois de obter uma chave do seu recurso, crie variáveis ambientais para o URL chave e ponto final, nomeado CONTENT_MODERATOR_SUBSCRIPTION_KEY CONTENT_MODERATOR_ENDPOINT e, respectivamente.After you get a key from your resource, create environment variables for the key and endpoint URL, named CONTENT_MODERATOR_SUBSCRIPTION_KEY and CONTENT_MODERATOR_ENDPOINT, respectively.

Criar uma nova aplicação C#Create a new C# application

Crie uma nova aplicação .NET Core no seu editor de texto preferido ou IDE.Create a new .NET Core application in your preferred text editor or IDE.

Numa janela de consola (como cmd, PowerShell ou Bash), utilize o dotnet new comando para criar uma nova aplicação de consola com o nome content-moderator-quickstart .In a console window (such as cmd, PowerShell, or Bash), use the dotnet new command to create a new console app with the name content-moderator-quickstart. Este comando cria um projeto simples "Hello World" C# com um único ficheiro de origem: Program.cs.This command creates a simple "Hello World" C# project with a single source file: Program.cs.

dotnet new console -n content-moderator-quickstart

Mude o seu diretório para a pasta de aplicações recém-criada.Change your directory to the newly created app folder. Pode construir a aplicação com:You can build the application with:

dotnet build

A saída de construção não deve conter avisos ou erros.The build output should contain no warnings or errors.

...
Build succeeded.
 0 Warning(s)
 0 Error(s)
...

A partir do diretório do projeto, abra o ficheiro Program.cs no seu editor preferido ou IDE.From the project directory, open the Program.cs file in your preferred editor or IDE. Adicione as seguintes instruções using:Add the following using statements:

using Microsoft.Azure.CognitiveServices.ContentModerator;
using Microsoft.Azure.CognitiveServices.ContentModerator.Models;
using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using System.IO;
using System.Text;
using System.Threading;

Na classe Programa, crie variáveis para a localização do ponto final do seu recurso e chave como variáveis ambientais.In the Program class, create variables for your resource's endpoint location and key as environment variables.

// Your Content Moderator subscription key is found in your Azure portal resource on the 'Keys' page. Add to your environment variables.
private static readonly string SubscriptionKey = Environment.GetEnvironmentVariable("CONTENT_MODERATOR_SUBSCRIPTION_KEY");
// Base endpoint URL. Add this to your environment variables. Found on 'Overview' page in Azure resource. For example: https://westus.api.cognitive.microsoft.com
private static readonly string Endpoint = Environment.GetEnvironmentVariable("CONTENT_MODERATOR_ENDPOINT");

Nota

Se criou as variáveis ambientais depois de ter lançado a aplicação, terá de fechar e reabrir o editor, o IDE ou a shell que a executa para aceder às variáveis.If you created the environment variables after you launched the application, you will need to close and reopen the editor, IDE, or shell running it to access the variables.

Instalar a biblioteca do clienteInstall the client library

Dentro do diretório de aplicações, instale a biblioteca de clientes Content Moderador para .NET com o seguinte comando:Within the application directory, install the Content Moderator client library for .NET with the following command:

dotnet add package Microsoft.Azure.CognitiveServices.ContentModerator --version 2.0.0

Se estiver a utilizar o Visual Studio IDE, a biblioteca do cliente está disponível como um pacote NuGet transferível.If you're using the Visual Studio IDE, the client library is available as a downloadable NuGet package.

Modelo de objetoObject model

As seguintes aulas lidam com algumas das principais características da biblioteca de clientes Content Moderador .NET.The following classes handle some of the major features of the Content Moderator .NET client library.

NomeName DescriçãoDescription
ContentModeratorClientContentModeratorClient Esta classe é necessária para todas as funcionalidades do Moderador de Conteúdo.This class is needed for all Content Moderator functionality. Você instantanea-o com as suas informações de subscrição, e você usá-lo para produzir instâncias de outras classes.You instantiate it with your subscription information, and you use it to produce instances of other classes.
Imagem DedesederaçãoImageModeration Esta classe fornece a funcionalidade de análise de imagens para conteúdo adulto, informações pessoais ou rostos humanos.This class provides the functionality for analyzing images for adult content, personal information, or human faces.
TextModerationTextModeration Esta classe fornece a funcionalidade de análise de texto para linguagem, profanação, erros e informações pessoais.This class provides the functionality for analyzing text for language, profanity, errors, and personal information.
RevisõesReviews Esta classe fornece a funcionalidade das APIs de revisão, incluindo os métodos para criar empregos, fluxos de trabalho personalizados e avaliações humanas.This class provides the functionality of the Review APIs, including the methods for creating jobs, custom workflows, and human reviews.

Exemplos de códigoCode examples

Estes snippets de código mostram-lhe como fazer as seguintes tarefas com a biblioteca de clientes do Moderador de Conteúdo para .NET:These code snippets show you how to do the following tasks with the Content Moderator client library for .NET:

Autenticar o clienteAuthenticate the client

Num novo método, instantâneas objetos do cliente com o seu ponto final e chave.In a new method, instantiate client objects with your endpoint and key. Não precisa de um cliente diferente para cada cenário, mas pode ajudar a manter o seu código organizado.You don't need a different client for every scenario, but it can help keep your code organized.

// Create an image review client
ContentModeratorClient clientImage = Authenticate(SubscriptionKey, Endpoint);
// Create a text review client
ContentModeratorClient clientText = Authenticate(SubscriptionKey, Endpoint);
// Create a human reviews client
ContentModeratorClient clientReviews = Authenticate(SubscriptionKey, Endpoint);

Texto moderadoModerate text

O código que se segue utiliza um cliente Moderador de Conteúdo para analisar um conjunto de textos e imprimir os resultados na consola.The following code uses a Content Moderator client to analyze a body of text and print the results to the console. Na raiz da sua classe Program, defina os ficheiros de entrada e saída:In the root of your Program class, define input and output files:

// TEXT MODERATION
// Name of the file that contains text
private static readonly string TextFile = "TextFile.txt";
// The name of the file to contain the output from the evaluation.
private static string TextOutputFile = "TextModerationOutput.txt";

Em seguida, na raiz do seu projeto e adicione um arquivo TextFile.txt.Then at the root of your project and add a TextFile.txt file. Adicione o seu próprio texto a este ficheiro ou use o seguinte texto de amostra:Add your own text to this file, or use the following sample text:

Is this a grabage email abcdef@abcd.com, phone: 4255550111, IP: 255.255.255.255, 1234 Main Boulevard, Panapolis WA 96555.
Crap is the profanity here. Is this information PII? phone 4255550111

Adicione o seguinte método de chamada ao seu Main método:Add the following method call to your Main method:

// Moderate text from text in a file
ModerateText(clientText, TextFile, TextOutputFile);

Em seguida, defina o método de moderação de texto em algum lugar na sua classe programa:Then define the text moderation method somewhere in your Program class:

/*
 * TEXT MODERATION
 * This example moderates text from file.
 */
public static void ModerateText(ContentModeratorClient client, string inputFile, string outputFile)
{
    Console.WriteLine("--------------------------------------------------------------");
    Console.WriteLine();
    Console.WriteLine("TEXT MODERATION");
    Console.WriteLine();
    // Load the input text.
    string text = File.ReadAllText(inputFile);

    // Remove carriage returns
    text = text.Replace(Environment.NewLine, " ");
    // Convert string to a byte[], then into a stream (for parameter in ScreenText()).
    byte[] textBytes = Encoding.UTF8.GetBytes(text);
    MemoryStream stream = new MemoryStream(textBytes);

    Console.WriteLine("Screening {0}...", inputFile);
    // Format text

    // Save the moderation results to a file.
    using (StreamWriter outputWriter = new StreamWriter(outputFile, false))
    {
        using (client)
        {
            // Screen the input text: check for profanity, classify the text into three categories,
            // do autocorrect text, and check for personally identifying information (PII)
            outputWriter.WriteLine("Autocorrect typos, check for matching terms, PII, and classify.");

            // Moderate the text
            var screenResult = client.TextModeration.ScreenText("text/plain", stream, "eng", true, true, null, true);
            outputWriter.WriteLine(JsonConvert.SerializeObject(screenResult, Formatting.Indented));
        }

        outputWriter.Flush();
        outputWriter.Close();
    }

    Console.WriteLine("Results written to {0}", outputFile);
    Console.WriteLine();
}

Imagens moderadasModerate images

O código que se segue utiliza um cliente Moderador de Conteúdo, juntamente com um objeto ImageModeration, para analisar imagens remotas para conteúdo adulto e picante.The following code uses a Content Moderator client, along with an ImageModeration object, to analyze remote images for adult and racy content.

Nota

Também pode analisar o conteúdo de uma imagem local.You can also analyze the content of a local image. Consulte a documentação de referência para métodos e operações que funcionam com imagens locais.See the reference documentation for methods and operations that work with local images.

Obtenha imagens de amostraGet sample images

Defina os seus ficheiros de entrada e saída:Define your input and output files:

// IMAGE MODERATION
//The name of the file that contains the image URLs to evaluate.
private static readonly string ImageUrlFile = "ImageFiles.txt";
// The name of the file to contain the output from the evaluation.
private static string ImageOutputFile = "ImageModerationOutput.json";

Em seguida, crie o ficheiro de entrada, *ImageFiles.txt, *na raiz do seu projeto.Then create the input file, ImageFiles.txt, at the root of your project. Neste ficheiro, adiciona-se os URLs de imagens para analisar — um URL em cada linha.In this file, you add the URLs of images to analyze—one URL on each line. Pode utilizar as seguintes imagens de amostra:You can use the following sample images:

https://moderatorsampleimages.blob.core.windows.net/samples/sample2.jpg
https://moderatorsampleimages.blob.core.windows.net/samples/sample5.png

Passe os seus ficheiros de entrada e saída para a seguinte chamada de método no Main método.Pass your input and output files into the following method call in the Main method. Definirá este método mais tarde.You'll define this method at a later step.

// Moderate images from list of image URLs
ModerateImages(clientImage, ImageUrlFile, ImageOutputFile);

Definir classe de ajudanteDefine helper class

Adicione a seguinte definição de classe dentro da classe Programa.Add the following class definition within the Program class. Esta classe interior lidará com os resultados da moderação da imagem.This inner class will handle image moderation results.

// Contains the image moderation results for an image, 
// including text and face detection results.
public class EvaluationData
{
    // The URL of the evaluated image.
    public string ImageUrl;

    // The image moderation results.
    public Evaluate ImageModeration;

    // The text detection results.
    public OCR TextDetection;

    // The face detection results;
    public FoundFaces FaceDetection;
}

Definir o método de moderação de imagemDefine the image moderation method

O método a seguir itera através dos URLs de imagem num ficheiro de texto, cria uma instância DeR de Avaliação e analisa a imagem para conteúdo adulto/picante, texto e rostos humanos.The following method iterates through the image URLs in a text file, creates an EvaluationData instance, and analyzes the image for adult/racy content, text, and human faces. Em seguida, adiciona a instância Final DeData de Avaliação a uma lista e escreve a lista completa de dados devolvidos à consola.Then it adds the final EvaluationData instance to a list and writes the complete list of returned data to the console.

Iterate através de URLs de imagemIterate through image URLs

/*
 * IMAGE MODERATION
 * This example moderates images from URLs.
 */
public static void ModerateImages(ContentModeratorClient client, string urlFile, string outputFile)
{
    Console.WriteLine("--------------------------------------------------------------");
    Console.WriteLine();
    Console.WriteLine("IMAGE MODERATION");
    Console.WriteLine();
    // Create an object to store the image moderation results.
    List<EvaluationData> evaluationData = new List<EvaluationData>();

    using (client)
    {
        // Read image URLs from the input file and evaluate each one.
        using (StreamReader inputReader = new StreamReader(urlFile))
        {
            while (!inputReader.EndOfStream)
            {
                string line = inputReader.ReadLine().Trim();
                if (line != String.Empty)
                {
                    Console.WriteLine("Evaluating {0}...", Path.GetFileName(line));
                    var imageUrl = new BodyModel("URL", line.Trim());

Analisar conteúdoAnalyze content

Para obter mais informações sobre os atributos de imagem para os quais o Moderador de Conteúdo é exibido, consulte o guia de conceitos de moderação de imagem.For more information on the image attributes that Content Moderator screens for, see the Image moderation concepts guide.

            var imageData = new EvaluationData
            {
                ImageUrl = imageUrl.Value,

                // Evaluate for adult and racy content.
                ImageModeration =
                client.ImageModeration.EvaluateUrlInput("application/json", imageUrl, true)
            };
            Thread.Sleep(1000);

            // Detect and extract text.
            imageData.TextDetection =
                client.ImageModeration.OCRUrlInput("eng", "application/json", imageUrl, true);
            Thread.Sleep(1000);

            // Detect faces.
            imageData.FaceDetection =
                client.ImageModeration.FindFacesUrlInput("application/json", imageUrl, true);
            Thread.Sleep(1000);

            // Add results to Evaluation object
            evaluationData.Add(imageData);
        }
    }
}

Escreva resultados de moderação para arquivarWrite moderation results to file

        // Save the moderation results to a file.
        using (StreamWriter outputWriter = new StreamWriter(outputFile, false))
        {
            outputWriter.WriteLine(JsonConvert.SerializeObject(
                evaluationData, Formatting.Indented));

            outputWriter.Flush();
            outputWriter.Close();
        }
        Console.WriteLine();
        Console.WriteLine("Image moderation results written to output file: " + outputFile);
        Console.WriteLine();
    }
}

Criar uma análiseCreate a review

Pode utilizar a biblioteca de clientes Content Moderador .NET para alimentar conteúdos na ferramenta 'Revisão', para que os moderadores humanos possam revê-lo.You can use the Content Moderator .NET client library to feed content into the Review tool so that human moderators can review it. Para saber mais sobre a ferramenta Review, consulte o guia conceptual da ferramenta Review.To learn more about the Review tool, see the Review tool conceptual guide.

O método nesta secção utiliza a classe Reviews para criar uma revisão, recuperar o seu ID e verificar os seus detalhes depois de receber a entrada humana através do portal web da ferramenta Review.The method in this section uses the Reviews class to create a review, retrieve its ID, and check its details after receiving human input through the Review tool's web portal. Regista toda esta informação num ficheiro de texto de saída.It logs all of this information in an output text file. Ligue para o método a partir do seu Main método:Call the method from your Main method:

// Create image reviews for human reviewers
CreateReviews(clientReviews, IMAGE_URLS_FOR_REVIEW, TEAM_NAME, ReviewsEndpoint);

Obtenha imagens de amostraGet sample images

Declare a seguinte matriz na raiz da sua aula de Programa.Declare the following array at the root of your Program class. Esta variável refere uma imagem de amostra para usar para criar a revisão.This variable references a sample image to use to create the review.

// The list of URLs of the images to create review jobs for.
private static readonly string[] IMAGE_URLS_FOR_REVIEW = new string[] { "https://moderatorsampleimages.blob.core.windows.net/samples/sample5.png" };

Obtenha credenciais de revisãoGet review credentials

Inscreva-se na ferramenta 'Revisão' e recupere o nome da sua equipa.Sign in to the Review tool and retrieve your team name. Em seguida, atribua-o à variável apropriada na classe Programa.Then assign it to the appropriate variable in the Program class. Opcionalmente, pode configurar um ponto final de chamada para receber atualizações sobre a atividade da revisão.Optionally, you can set up a callback endpoint to receive updates on the activity of the review.

// The name of the team to assign the review to. Must be the team name used to create your Content Moderator website account. 
// If you do not yet have an account, follow this: https://docs.microsoft.com/en-us/azure/cognitive-services/content-moderator/quick-start
// Select the gear symbol (settings)-->Credentials to retrieve it. Your team name is the Id associated with your subscription.
private static readonly string TEAM_NAME = Environment.GetEnvironmentVariable("CONTENT_MODERATOR_TEAM_NAME");
// The callback endpoint for completed human reviews. Add to your environment variables. 
// For example: https://westus.api.cognitive.microsoft.com/contentmoderator/review/v1.0
// As reviewers complete reviews, results are sent using an HTTP POST request.
private static readonly string ReviewsEndpoint = Environment.GetEnvironmentVariable("CONTENT_MODERATOR_REVIEWS_ENDPOINT");

Definir classe de ajudanteDefine helper class

Adicione a seguinte definição de classe dentro da sua classe Program.Add the following class definition within your Program class. Esta classe será usada para representar uma única instância de revisão que é submetida à ferramenta Review.This class will be used to represent a single review instance that is submitted to the Review tool.

// Associates the review ID (assigned by the service) to the internal.
public class ReviewItem
{
    // The media type for the item to review. 
    public string Type;
    // The URL of the item to review.
    public string Url;
    // The internal content ID for the item to review.
    public string ContentId;
    // The ID that the service assigned to the review.
    public string ReviewId;
}

Definir método de ajudaDefine helper method

Adicione o seguinte método à classe Programa.Add the following method to the Program class. Este método escreverá os resultados das consultas de revisão no ficheiro de texto de saída.This method will write the results of review queries to the output text file.

// Helper function that writes a message to the log file, and optionally to the console.
// If echo is set to true, details will be written to the console.
private static void WriteLine(TextWriter writer, string message = null, bool echo = true)
{
    writer.WriteLine(message ?? String.Empty);
    if (echo) { Console.WriteLine(message ?? String.Empty); }
}

Definir o método de criação de revisãoDefine the review creation method

Agora está pronto para definir o método que irá lidar com a criação e consulta de revisão.Now you're ready to define the method that will handle the review creation and querying. Adicione um novo método, CreateReviews, e defina as seguintes variáveis locais.Add a new method, CreateReviews, and define the following local variables.

// Create the reviews using the fixed list of images.
private static void CreateReviews(ContentModeratorClient client, string[] ImageUrls, string teamName, string endpoint)
{
    Console.WriteLine("--------------------------------------------------------------");
    Console.WriteLine();
    Console.WriteLine("CREATE HUMAN IMAGE REVIEWS");

    // The minimum amount of time, in milliseconds, to wait between calls to the Image List API.
    const int throttleRate = 2000;
    // The number of seconds to delay after a review has finished before getting the review results from the server.
    const int latencyDelay = 45;

    // The name of the log file to create. Relative paths are relative to the execution directory.
    const string OutputFile = "OutputLog.txt";

    // The optional name of the subteam to assign the review to. Not used for this example.
    const string Subteam = null;

    // The media type for the item to review. Valid values are "image", "text", and "video".
    const string MediaType = "image";

    // The metadata key to initially add to each review item. This is short for 'score'.
    // It will enable the keys to be 'a' (adult) and 'r' (racy) in the response,
    // with a value of true or false if the human reviewer marked them as adult and/or racy.
    const string MetadataKey = "sc";
    // The metadata value to initially add to each review item.
    const string MetadataValue = "true";

    // A static reference to the text writer to use for logging.
    TextWriter writer;

    // The cached review information, associating a local content ID to the created review ID for each item.
    List<ReviewItem> reviewItems = new List<ReviewItem>();

Publicar comentários na ferramenta ReviewPost reviews to the Review tool

Em seguida, adicione o seguinte código para iterar através das imagens de amostras dadas, adicionar metadados e enviá-los para a ferramenta 'Revisão' num único lote.Then, add the following code to iterate through the given sample images, add metadata, and send them to the Review tool in a single batch.

using (TextWriter outputWriter = new StreamWriter(OutputFile, false))
{
    writer = outputWriter;
    WriteLine(writer, null, true);
    WriteLine(writer, "Creating reviews for the following images:", true);

    // Create the structure to hold the request body information.
    List<CreateReviewBodyItem> requestInfo = new List<CreateReviewBodyItem>();

    // Create some standard metadata to add to each item.
    List<CreateReviewBodyItemMetadataItem> metadata =
        new List<CreateReviewBodyItemMetadataItem>(new CreateReviewBodyItemMetadataItem[]
        { new CreateReviewBodyItemMetadataItem(MetadataKey, MetadataValue) });

    // Populate the request body information and the initial cached review information.
    for (int i = 0; i < ImageUrls.Length; i++)
    {
        // Cache the local information with which to create the review.
        var itemInfo = new ReviewItem()
        {
            Type = MediaType,
            ContentId = i.ToString(),
            Url = ImageUrls[i],
            ReviewId = null
        };

        WriteLine(writer, $" {Path.GetFileName(itemInfo.Url)} with id = {itemInfo.ContentId}.", true);

        // Add the item informaton to the request information.
        requestInfo.Add(new CreateReviewBodyItem(itemInfo.Type, itemInfo.Url, itemInfo.ContentId, endpoint, metadata));

        // Cache the review creation information.
        reviewItems.Add(itemInfo);
    }

    var reviewResponse = client.Reviews.CreateReviewsWithHttpMessagesAsync("application/json", teamName, requestInfo);

O objeto devolvido da chamada API conterá valores de ID únicos para cada imagem carregada.The object returned from the API call will contain unique ID values for each image uploaded. O código seguinte analisa estes IDs e, em seguida, usa-os para consultar o Moderador de Conteúdo para o estado de cada imagem no lote.The following code parses these IDs and then uses them to query Content Moderator for the status of each image in the batch.

// Update the local cache to associate the created review IDs with the associated content.
var reviewIds = reviewResponse.Result.Body;
for (int i = 0; i < reviewIds.Count; i++) { reviewItems[i].ReviewId = reviewIds[i]; }

WriteLine(outputWriter, JsonConvert.SerializeObject(reviewIds, Formatting.Indented));
Thread.Sleep(throttleRate);

// Get details of the reviews created that were sent to the Content Moderator website.
WriteLine(outputWriter, null, true);
WriteLine(outputWriter, "Getting review details:", true);
foreach (var item in reviewItems)
{
    var reviewDetail = client.Reviews.GetReviewWithHttpMessagesAsync(teamName, item.ReviewId);
    WriteLine(outputWriter, $"Review {item.ReviewId} for item ID {item.ContentId} is " +
        $"{reviewDetail.Result.Body.Status}.", true);
    WriteLine(outputWriter, JsonConvert.SerializeObject(reviewDetail.Result.Body, Formatting.Indented));
    Thread.Sleep(throttleRate);
}

Obter detalhes da avaliaçãoGet review details

O seguinte código faz com que o programa aguarde a entrada do utilizador.The following code causes the program to wait for user input. Quando chegar a este passo no tempo de execução, pode ir à ferramenta Review, verificar se a imagem da amostra foi carregada e interagir com ela.When you come to this step at runtime, you can go to the Review tool yourself, verify that the sample image was uploaded, and interact with it. Para obter informações sobre como interagir com uma revisão, consulte o guia de como fazer comentários.For information on how to interact with a review, see the Reviews how-to guide. Quando terminar, pode premir qualquer tecla para continuar o programa e recuperar os resultados do processo de revisão.When you're finished, you can press any key to continue the program and retrieve the results of the review process.

        Console.WriteLine();
        Console.WriteLine("Perform manual reviews on the Content Moderator site.");
        Console.WriteLine("Then, press any key to continue.");
        Console.ReadKey();

        // After the human reviews, the results are confirmed.
        Console.WriteLine();
        Console.WriteLine($"Waiting {latencyDelay} seconds for results to propagate.");
        Thread.Sleep(latencyDelay * 1000);

        // Get details from the human review.
        WriteLine(writer, null, true);
        WriteLine(writer, "Getting review details:", true);
        foreach (var item in reviewItems)
        {
            var reviewDetail = client.Reviews.GetReviewWithHttpMessagesAsync(teamName, item.ReviewId);
            WriteLine(writer, $"Review {item.ReviewId} for item ID {item.ContentId} is " + $"{reviewDetail.Result.Body.Status}.", true);
            WriteLine(outputWriter, JsonConvert.SerializeObject(reviewDetail.Result.Body, Formatting.Indented));

            Thread.Sleep(throttleRate);
        }

        Console.WriteLine();
        Console.WriteLine("Check the OutputLog.txt file for results of the review.");

        writer = null;
        outputWriter.Flush();
        outputWriter.Close();
    }
    Console.WriteLine("--------------------------------------------------------------");
}

Se usou um ponto final de retorno neste cenário, deverá receber um evento neste formato:If you used a callback endpoint in this scenario, it should receive an event in this format:

{'callback_endpoint': 'https://requestb.in/qmsakwqm',
 'content': '',
 'content_id': '3ebe16cb-31ed-4292-8b71-1dfe9b0e821f',
 'created_by': 'cspythonsdk',
 'metadata': [{'key': 'sc', 'value': 'True'}],
 'review_id': '201901i14682e2afe624fee95ebb248643139e7',
 'reviewer_result_tags': [{'key': 'a', 'value': 'True'},
                          {'key': 'r', 'value': 'True'}],
 'status': 'Complete',
 'sub_team': 'public',
 'type': 'Image'}

Executar a aplicaçãoRun the application

Executar o pedido do seu diretório de candidaturas com o dotnet run comando.Run the application from your application directory with the dotnet run command.

dotnet run 

Limpar os recursosClean up resources

Se pretender limpar e remover uma subscrição dos Serviços Cognitivos, pode eliminar o grupo de recursos ou recursos.If you want to clean up and remove a Cognitive Services subscription, you can delete the resource or resource group. A eliminação do grupo de recursos também elimina quaisquer outros recursos que lhe sejam associados.Deleting the resource group also deletes any other resources associated with it.

Passos seguintesNext steps

Neste arranque rápido, aprendeu a usar a biblioteca Content Moderator .NET para fazer tarefas de moderação.In this quickstart, you learned how to use the Content Moderator .NET library to do moderation tasks. Em seguida, saiba mais sobre a moderação de imagens ou outros meios de comunicação, lendo um guia conceptual.Next, learn more about the moderation of images or other media by reading a conceptual guide.

Começa com a biblioteca de clientes do Content Moderador para a Java.Get started with the Content Moderator client library for Java. Siga estes passos para instalar a embalagem e experimente o código de exemplo para tarefas básicas.Follow these steps to install the package and try out the example code for basic tasks. Content Moderador é um serviço cognitivo que verifica conteúdo de texto, imagem e vídeo para material potencialmente ofensivo, arriscado ou indesejável.Content Moderator is a cognitive service that checks text, image, and video content for material that is potentially offensive, risky, or otherwise undesirable. Quando este tipo de material é encontrado, o serviço aplica etiquetas adequadas (sinalizadores) ao conteúdo.When such material is found, the service applies appropriate labels (flags) to the content. Em seguida, a aplicação pode processar o conteúdo sinalizado para cumprir os regulamentos ou manter o ambiente desejado para os utilizadores.Your app can then handle flagged content in order to comply with regulations or maintain the intended environment for users.

Utilize a biblioteca de clientes Content Moderador para:Use the Content Moderator client library for Java to:

  • Imagens moderadas para conteúdo adulto ou picante, texto ou rostos humanos.Moderate images for adult or racy content, text, or human faces.

Documentação de referência | Artefacto (Maven) | AmostrasReference documentation | Artifact (Maven) | Samples

Pré-requisitosPrerequisites

ConfiguraçãoSetting up

Criar um recurso Azure moderador de conteúdoCreate a Content Moderator Azure resource

Os Serviços Cognitivos Azure são representados por recursos Azure que subscreve.Azure Cognitive Services are represented by Azure resources that you subscribe to. Crie um recurso para Moderador de Conteúdo utilizando o portal Azure ou O CLI Azure na sua máquina local.Create a resource for Content Moderator using the Azure portal or Azure CLI on your local machine. Também pode:You can also:

Depois de obter uma chave do seu recurso, crie uma variável ambiental para a chave, chamada AZURE_CONTENTMODERATOR_KEY .After getting a key from your resource, create an environment variable for the key, named AZURE_CONTENTMODERATOR_KEY.

Criar um novo projeto GradleCreate a new Gradle project

Numa janela de consola (como cmd, PowerShell ou Bash), crie um novo diretório para a sua aplicação e navegue até ela.In a console window (such as cmd, PowerShell, or Bash), create a new directory for your app, and navigate to it.

mkdir myapp && cd myapp

Execute gradle init.Run gradle init. Este comando criará ficheiros de construção essenciais para Gradle, incluindo build.gradle.kts, que é usado em tempo de execução para criar e configurar a sua aplicação.This command will create essential build files for Gradle, including build.gradle.kts, which is used at runtime to create and configure your application. Executar este comando a partir do seu diretório de trabalho:Run this command from your working directory:

gradle init --type basic

Quando solicitado para escolher um script de construção DSL, selecione Kotlin.When prompted to choose a build script DSL, select Kotlin.

Encontre build.gradle.kts e abra-o com o seu IDE preferido ou editor de texto.Find build.gradle.kts and open it with your preferred IDE or text editor. Em seguida, copie na seguinte configuração de construção.Then copy in the following build configuration. Esta configuração define o projeto como uma aplicação Java cujo ponto de entrada é a classe ContentModeratorQuickstart.This configuration defines the project as a Java application whose entry point is the class ContentModeratorQuickstart. Importa a biblioteca de clientes content moderador, bem como o Gson sdk para a serialização JSON.It imports the Content Moderator client library as well as the Gson sdk for JSON serialization.

plugins {
    java
    application
}

application{ 
    mainClassName = "ContentModeratorQuickstart"
}

repositories{
    mavenCentral()
}

dependencies{
    compile(group = "com.microsoft.azure.cognitiveservices", name = "azure-cognitiveservices-contentmoderator", version = "1.0.2-beta")
    compile(group = "com.google.code.gson", name = "gson", version = "2.8.5")
}

A partir do seu diretório de trabalho, executar o seguinte comando para criar uma pasta de origem do projeto.From your working directory, run the following command to create a project source folder.

mkdir -p src/main/java

Em seguida, crie um ficheiro chamado ContentModeratorQuickstart.java na nova pasta.Then create a file named ContentModeratorQuickstart.java in the new folder. Abra o ficheiro no seu editor preferido ou IDE e importe as seguintes bibliotecas no topo:Open the file in your preferred editor or IDE and import the following libraries at the top:

import com.google.gson.*;

import com.microsoft.azure.cognitiveservices.vision.contentmoderator.*;
import com.microsoft.azure.cognitiveservices.vision.contentmoderator.models.*;

import java.io.*;
import java.util.*;
import java.util.concurrent.*;

Modelo de objetoObject model

As seguintes aulas lidam com algumas das principais características da biblioteca de clientes Content Moderador Java.The following classes handle some of the major features of the Content Moderator Java client library.

NomeName DescriçãoDescription
ContentModeratorClientContentModeratorClient Esta classe é necessária para todas as funcionalidades do Moderador de Conteúdo.This class is needed for all Content Moderator functionality. Você instantanea-o com as suas informações de subscrição, e você usá-lo para produzir instâncias de outras classes.You instantiate it with your subscription information, and you use it to produce instances of other classes.
Imagem DedesederaçãoImageModeration Esta classe fornece a funcionalidade de análise de imagens para conteúdo adulto, informações pessoais ou rostos humanos.This class provides the functionality for analyzing images for adult content, personal information, or human faces.
TextModerationsTextModerations Esta classe fornece a funcionalidade de análise de texto para linguagem, profanação, erros e informações pessoais.This class provides the functionality for analyzing text for language, profanity, errors, and personal information.
RevisõesReviews Esta classe fornece a funcionalidade das APIs de revisão, incluindo os métodos para criar empregos, fluxos de trabalho personalizados e avaliações humanas.This class provides the functionality of the Review APIs, including the methods for creating jobs, custom workflows, and human reviews.

Exemplos de códigoCode examples

Estes snippets de código mostram-lhe como fazer as seguintes tarefas com a biblioteca de clientes do Content Moderador para Java:These code snippets show you how to do the following tasks with the Content Moderator client library for Java:

Autenticar o clienteAuthenticate the client

Nota

Este passo pressupõe que criou uma variável ambiental para a sua chave de Moderador de Conteúdo, denominada AZURE_CONTENTMODERATOR_KEY .This step assumes you've created an environment variable for your Content Moderator key, named AZURE_CONTENTMODERATOR_KEY.

No método da main aplicação, crie um objeto ContentModeratorClient utilizando o valor final da subscrição e variável de ambiente chave de subscrição.In the application's main method, create a ContentModeratorClient object using your subscription endpoint value and subscription key environment variable.

Nota

Se criou a variável ambiental depois de ter lançado a aplicação, terá de fechar e reabrir o editor, o IDE ou a shell que a executa para aceder à variável.If you created the environment variable after you launched the application, you will need to close and reopen the editor, IDE, or shell running it to access the variable.

/**
 * Authenticate
 */
// Set CONTENT_MODERATOR_SUBSCRIPTION_KEY in your environment settings, with your key as its value.
// Set COMPUTER_MODERATOR_ENDPOINT in your environment variables with your Azure endpoint.
ContentModeratorClient client = 
    ContentModeratorManager.authenticate(AzureRegionBaseUrl
                           .fromString(System.getenv("CONTENT_MODERATOR_ENDPOINT")), 
                                System.getenv("CONTENT_MODERATOR_SUBSCRIPTION_KEY"));

Imagens moderadasModerate images

Obter imagensGet images

Na pasta src/main/do seu projeto, crie uma pasta de recursos e navegue até ele.In the src/main/ folder of your project, create a resources folder and navigate to it. Em seguida, crie um novo ficheiro de texto, ImageFiles.txt.Then create a new text file, ImageFiles.txt. Neste ficheiro, adiciona-se os URLs de imagens para analisar — um URL em cada linha.In this file, you add the URLs of images to analyze—one URL on each line. Pode utilizar as seguintes imagens de amostra:You can use the following sample images:

https://moderatorsampleimages.blob.core.windows.net/samples/sample2.jpg
https://moderatorsampleimages.blob.core.windows.net/samples/sample5.png

Definir classe de ajudanteDefine helper class

Em seguida, no seu ficheiro ContentModeratorQuickstart.java, adicione a seguinte definição de classe dentro da classe ContentModeratorQuickstart.Then, in your ContentModeratorQuickstart.java file, add the following class definition inside the ContentModeratorQuickstart class. Esta classe interior será usada mais tarde no processo de moderação de imagem.This inner class will be used later in the image moderation process.

// Contains the image moderation results for an image, including text and face detection from the image.
public static class EvaluationData {
    // The URL of the evaluated image.
    public String ImageUrl;
    // The image moderation results.
    public Evaluate ImageModeration;
    // The text detection results.
    public OCR TextDetection;
    // The face detection results;
    public FoundFaces FaceDetection;
}

Iterar através de imagensIterate through images

Em seguida, adicione o seguinte código à parte inferior do main método.Next, add the following code to the bottom of the main method. Ou pode adicioná-lo a um método separado que é chamado de main .Or, you can add it to a separate method that's called from main. Este código passa por cada linha do ficheiro ImageFiles.txt.This code steps through each line of the ImageFiles.txt file.

// ImageFiles.txt is the file that contains the image URLs to evaluate.
// Relative paths are relative to the execution directory.
try (BufferedReader inputStream = new BufferedReader(new FileReader(imageListFile) )){
    String line;
    while ((line = inputStream.readLine()) != null) {
        if (line.length() > 0) {
            // Evalutate each line of text
            BodyModelModel url = new BodyModelModel();
            url.withDataRepresentation("URL");
            url.withValue(line);
            // Save to EvaluationData class for later
            EvaluationData imageData = new EvaluationData(); 
            imageData.ImageUrl = url.value();

Verifique se há conteúdo adulto/picanteCheck for adult/racy content

Esta linha de código verifica a imagem no URL dado para conteúdo adulto ou picante.This line of code checks the image at the given URL for adult or racy content. Consulte o guia de moderação da imagem para obter informações sobre estes termos.See the Image moderation conceptual guide for information on these terms.

// Evaluate for adult and racy content.
imageData.ImageModeration = client.imageModerations().evaluateUrlInput("application/json", url, new EvaluateUrlInputOptionalParameter().withCacheImage(true));
Thread.sleep(1000);

Verifique se há textoCheck for text

Esta linha de código verifica a imagem por texto visível.This line of code checks the image for visible text.

// Detect and extract text from image.
imageData.TextDetection = client.imageModerations().oCRUrlInput("eng", "application/json", url, new OCRUrlInputOptionalParameter().withCacheImage(true));
Thread.sleep(1000);

Verifique se há rostosCheck for faces

Esta linha de código verifica a imagem dos rostos humanos.This line of code checks the image for human faces.

// Detect faces.
imageData.FaceDetection = client.imageModerations().findFacesUrlInput("application/json", url, new FindFacesUrlInputOptionalParameter().withCacheImage(true));
Thread.sleep(1000);

Finalmente, guarde a informação devolvida na EvaluationData lista.Finally, store the returned information in the EvaluationData list.

resultsList.add(imageData);

Após o while loop, adicione o seguinte código, que imprime os resultados na consola e num ficheiro de saída, src/main/resources/ModerationOutput.jsem.After the while loop, add the following code, which prints the results to the console and to an output file, src/main/resources/ModerationOutput.json.

// Save the moderation results to a file.
// ModerationOutput.json contains the output from the evaluation.
// Relative paths are relative to the execution directory (where pom.xml is located).
BufferedWriter writer = new BufferedWriter(new FileWriter(new File("src\\main\\resources\\ImageModerationOutput.json")));
// For formatting the printed results
Gson gson = new GsonBuilder().setPrettyPrinting().create();  

writer.write(gson.toJson(resultsList).toString());
System.out.println("Check ImageModerationOutput.json to see printed results.");
writer.close();

Feche a try declaração e adicione uma declaração para completar o catch método.Close out the try statement and add a catch statement to complete the method.

}   catch (Exception e) {
    System.out.println(e.getMessage());
    e.printStackTrace();
}

Executar a aplicaçãoRun the application

Pode construir a aplicação com:You can build the app with:

gradle build

Executar a aplicação com o gradle run comando:Run the application with the gradle run command:

gradle run

Em seguida, navegue para o src/main/resources/ModerationOutput.jsem arquivo e veja os resultados da moderação do seu conteúdo.Then navigate to the src/main/resources/ModerationOutput.json file and view the results of your content moderation.

Limpar os recursosClean up resources

Se pretender limpar e remover uma subscrição dos Serviços Cognitivos, pode eliminar o grupo de recursos ou recursos.If you want to clean up and remove a Cognitive Services subscription, you can delete the resource or resource group. A eliminação do grupo de recursos também elimina quaisquer outros recursos que lhe sejam associados.Deleting the resource group also deletes any other resources associated with it.

Passos seguintesNext steps

Neste arranque rápido, aprendeu a usar a biblioteca Content Moderador Java para executar tarefas de moderação.In this quickstart, you learned how to use the Content Moderator Java library to perform moderation tasks. Em seguida, saiba mais sobre a moderação de imagens ou outros meios de comunicação, lendo um guia conceptual.Next, learn more about the moderation of images or other media by reading a conceptual guide.

Começa com a biblioteca de clientes do Content Moderador para python.Get started with the Content Moderator client library for Python. Siga estes passos para instalar a embalagem e experimente o código de exemplo para tarefas básicas.Follow these steps to install the package and try out the example code for basic tasks. Content Moderador é um serviço cognitivo que verifica conteúdo de texto, imagem e vídeo para material potencialmente ofensivo, arriscado ou indesejável.Content Moderator is a cognitive service that checks text, image, and video content for material that is potentially offensive, risky, or otherwise undesirable. Quando este tipo de material é encontrado, o serviço aplica etiquetas adequadas (sinalizadores) ao conteúdo.When such material is found, the service applies appropriate labels (flags) to the content. Em seguida, a aplicação pode processar o conteúdo sinalizado para cumprir os regulamentos ou manter o ambiente desejado para os utilizadores.Your app can then handle flagged content in order to comply with regulations or maintain the intended environment for users.

Utilize a biblioteca de clientes content Moderador para Python para:Use the Content Moderator client library for Python to:

Documentação de referência | Código fonte da biblioteca | Pacote (PiPy) | AmostrasReference documentation | Library source code | Package (PiPy) | Samples

Pré-requisitosPrerequisites

ConfiguraçãoSetting up

Criar um recurso Azure moderador de conteúdoCreate a Content Moderator Azure resource

Os Serviços Cognitivos Azure são representados por recursos Azure que subscreve.Azure Cognitive Services are represented by Azure resources that you subscribe to. Crie um recurso para Moderador de Conteúdo utilizando o portal Azure ou O CLI Azure na sua máquina local.Create a resource for Content Moderator using the Azure portal or Azure CLI on your local machine. Também pode:You can also:

Depois de obter uma chave do seu recurso, crie variáveis ambientais para o URL chave e ponto final, nomeado CONTENT_MODERATOR_SUBSCRIPTION_KEY CONTENT_MODERATOR_ENDPOINT e, respectivamente.After you get a key from your resource, create environment variables for the key and endpoint URL, named CONTENT_MODERATOR_SUBSCRIPTION_KEY and CONTENT_MODERATOR_ENDPOINT, respectively.

Criar um script pythonCreate a python script

Crie um novo script Python e abra-o no seu editor preferido ou IDE.Create a new Python script and open it in your preferred editor or IDE. Em seguida, adicione as import seguintes declarações ao topo do ficheiro.Then add the following import statements to the top of the file.

import os.path
from pprint import pprint
import time
from io import BytesIO
from random import random
import uuid

from azure.cognitiveservices.vision.contentmoderator import ContentModeratorClient
import azure.cognitiveservices.vision.contentmoderator.models
from msrest.authentication import CognitiveServicesCredentials

Em seguida, crie variáveis para a localização do ponto final do seu recurso e chave como variáveis ambientais.Next, create variables for your resource's endpoint location and key as environment variables.

CONTENTMODERATOR_ENDPOINT = os.environ.get("CONTENT_MODERATOR_ENDPOINT")
subscription_key = os.environ.get("CONTENT_MODERATOR_SUBSCRIPTION_KEY")

Nota

Se criou as variáveis ambientais depois de ter lançado a aplicação, terá de fechar e reabrir o editor, o IDE ou a shell que a executa para aceder às variáveis.If you created the environment variables after you launched the application, you will need to close and reopen the editor, IDE, or shell running it to access the variables.

Instalar a biblioteca do clienteInstall the client library

Pode instalar a biblioteca do cliente Content Moderador com o seguinte comando:You can install the Content Moderator client library with the following command:

pip install --upgrade azure-cognitiveservices-vision-contentmoderator

Modelo de objetoObject model

As seguintes aulas lidam com algumas das principais características da biblioteca de clientes Do Moderador de Conteúdo Python.The following classes handle some of the major features of the Content Moderator Python client library.

NomeName DescriçãoDescription
ContentModeratorClientContentModeratorClient Esta classe é necessária para todas as funcionalidades do Moderador de Conteúdo.This class is needed for all Content Moderator functionality. Você instantanea-o com as suas informações de subscrição, e você usá-lo para produzir instâncias de outras classes.You instantiate it with your subscription information, and you use it to produce instances of other classes.
ImageModerationOperaçõesImageModerationOperations Esta classe fornece a funcionalidade de análise de imagens para conteúdo adulto, informações pessoais ou rostos humanos.This class provides the functionality for analyzing images for adult content, personal information, or human faces.
TextModerationOperaçõesTextModerationOperations Esta classe fornece a funcionalidade de análise de texto para linguagem, profanação, erros e informações pessoais.This class provides the functionality for analyzing text for language, profanity, errors, and personal information.
Comentários OperaçõesReviewsOperations Esta classe fornece a funcionalidade das APIs de revisão, incluindo os métodos para criar empregos, fluxos de trabalho personalizados e avaliações humanas.This class provides the functionality of the Review APIs, including the methods for creating jobs, custom workflows, and human reviews.

Exemplos de códigoCode examples

Estes snippets de código mostram-lhe como fazer as seguintes tarefas com a biblioteca de clientes do Content Moderador para Python:These code snippets show you how to do the following tasks with the Content Moderator client library for Python:

Autenticar o clienteAuthenticate the client

Nota

Este quickstart pressupõe que criou variáveis ambientais para a chave e ponto final do Moderador de Conteúdo.This quickstart assumes you've created environment variables for your Content Moderator key and endpoint.

Instantiar um cliente com o seu ponto final e chave.Instantiate a client with your endpoint and key. Crie um objeto CognitiveServicesCredentials com a sua chave e use-o com o seu ponto final para criar um objeto ContentModeratorClient.Create a CognitiveServicesCredentials object with your key, and use it with your endpoint to create an ContentModeratorClient object.

client = ContentModeratorClient(
    endpoint=CONTENT_MODERATOR_ENDPOINT,
    credentials=CognitiveServicesCredentials(subscription_key)
)

Texto moderadoModerate text

O código que se segue utiliza um cliente Moderador de Conteúdo para analisar um conjunto de textos e imprimir os resultados na consola.The following code uses a Content Moderator client to analyze a body of text and print the results to the console. Em primeiro lugar, crie uma pasta de text_files/pasta na raiz do seu projeto e adicione um ficheiro content_moderator_text_moderation.txt.First, create a text_files/ folder at the root of your project and add a content_moderator_text_moderation.txt file. Adicione o seu próprio texto a este ficheiro ou use o seguinte texto de amostra:Add your own text to this file, or use the following sample text:

Is this a grabage email abcdef@abcd.com, phone: 4255550111, IP: 255.255.255.255, 1234 Main Boulevard, Panapolis WA 96555.
Crap is the profanity here. Is this information PII? phone 2065550111

Adicione uma referência à nova pasta.Add a reference to the new folder.

TEXT_FOLDER = os.path.join(os.path.dirname(
    os.path.realpath(__file__)), "text_files")

Em seguida, adicione o seguinte código ao seu script Python.Then, add the following code to your Python script.

# Screen the input text: check for profanity,
# do autocorrect text, and check for personally identifying
# information (PII)
with open(os.path.join(TEXT_FOLDER, 'content_moderator_text_moderation.txt'), "rb") as text_fd:
    screen = client.text_moderation.screen_text(
        text_content_type="text/plain",
        text_content=text_fd,
        language="eng",
        autocorrect=True,
        pii=True
    )
    assert isinstance(screen, Screen)
    pprint(screen.as_dict())

Use uma lista de termos personalizadosUse a custom terms list

O código que se segue mostra como gerir uma lista de termos personalizados para moderação de texto.The following code shows how to manage a list of custom terms for text moderation. Pode utilizar a classe ListManagementTermListsOperations para criar uma lista de termos, gerir os termos individuais e rastrear outros corpos de texto contra ele.You can use the ListManagementTermListsOperations class to create a terms list, manage the individual terms, and screen other bodies of text against it.

Obtenha texto de amostraGet sample text

Para utilizar esta amostra, tem de criar uma pasta de text_files/pasta na raiz do seu projeto e adicionar um ficheiro content_moderator_term_list.txt.To use this sample, you must create a text_files/ folder at the root of your project and add a content_moderator_term_list.txt file. Este ficheiro deve conter texto orgânico que será verificado com a lista de termos.This file should contain organic text that will be checked against the list of terms. Pode utilizar o seguinte texto de amostra:You can use the following sample text:

This text contains the terms "term1" and "term2".

Adicione uma referência à pasta se ainda não tiver definido uma.Add a reference to the folder if you haven't already defined one.

TEXT_FOLDER = os.path.join(os.path.dirname(
    os.path.realpath(__file__)), "text_files")

Criar uma listaCreate a list

Adicione o seguinte código ao seu script Python para criar uma lista de termos personalizados e guardar o seu valor de ID.Add the following code to your Python script to create a custom terms list and save its ID value.

#
# Create list
#
print("\nCreating list")
custom_list = client.list_management_term_lists.create(
    content_type="application/json",
    body={
        "name": "Term list name",
        "description": "Term list description",
    }
)
print("List created:")
assert isinstance(custom_list, TermList)
pprint(custom_list.as_dict())
list_id = custom_list.id

Definir detalhes da listaDefine list details

Pode utilizar o ID de uma lista para editar o seu nome e descrição.You can use a list's ID to edit its name and description.

#
# Update list details
#
print("\nUpdating details for list {}".format(list_id))
updated_list = client.list_management_term_lists.update(
    list_id=list_id,
    content_type="application/json",
    body={
        "name": "New name",
        "description": "New description"
    }
)
assert isinstance(updated_list, TermList)
pprint(updated_list.as_dict())

Adicione um termo à listaAdd a term to the list

O seguinte código adiciona os termos "term1" e "term2" a lista.The following code adds the terms "term1" and "term2" to the list.

#
# Add terms
#
print("\nAdding terms to list {}".format(list_id))
client.list_management_term.add_term(
    list_id=list_id,
    term="term1",
    language="eng"
)
client.list_management_term.add_term(
    list_id=list_id,
    term="term2",
    language="eng"
)

Obtenha todos os termos da listaGet all terms in the list

Pode utilizar o ID da lista para devolver todos os termos da lista.You can use the list ID to return all of the terms in the list.

#
# Get all terms ids
#
print("\nGetting all term IDs for list {}".format(list_id))
terms = client.list_management_term.get_all_terms(
    list_id=list_id, language="eng")
assert isinstance(terms, Terms)
terms_data = terms.data
assert isinstance(terms_data, TermsData)
pprint(terms_data.as_dict())

Atualizar o índice de listaRefresh the list index

Sempre que adicionar ou remover os termos da lista, tem de atualizar o índice antes de poder utilizar a lista atualizada.Whenever you add or remove terms from the list, you must refresh the index before you can use the updated list.

#
# Refresh the index
#
print("\nRefreshing the search index for list {}".format(list_id))
refresh_index = client.list_management_term_lists.refresh_index_method(
    list_id=list_id, language="eng")
assert isinstance(refresh_index, RefreshIndex)
pprint(refresh_index.as_dict())

print("\nWaiting {} minutes to allow the server time to propagate the index changes.".format(
    LATENCY_DELAY))
time.sleep(LATENCY_DELAY * 60)

Texto de tela contra a listaScreen text against the list

A principal funcionalidade da lista de termos personalizados é comparar um conjunto de texto com a lista e descobrir se existem quaisquer termos correspondentes.The main functionality of the custom terms list is to compare a body of text against the list and find whether there are any matching terms.

#
# Screen text
#
with open(os.path.join(TEXT_FOLDER, 'content_moderator_term_list.txt'), "rb") as text_fd:
    screen = client.text_moderation.screen_text(
        text_content_type="text/plain",
        text_content=text_fd,
        language="eng",
        autocorrect=False,
        pii=False,
        list_id=list_id
    )
    assert isinstance(screen, Screen)
    pprint(screen.as_dict())

Remover um termo de uma listaRemove a term from a list

O seguinte código remove o termo "term1" da lista.The following code removes the term "term1" from the list.

#
# Remove terms
#
term_to_remove = "term1"
print("\nRemove term {} from list {}".format(term_to_remove, list_id))
client.list_management_term.delete_term(
    list_id=list_id,
    term=term_to_remove,
    language="eng"
)

Remova todos os termos de uma listaRemove all terms from a list

Utilize o seguinte código para limpar uma lista de todos os seus termos.Use the following code to clear a list of all its terms.

#
# Delete all terms
#
print("\nDelete all terms in the image list {}".format(list_id))
client.list_management_term.delete_all_terms(
    list_id=list_id, language="eng")

Excluir listaDelete list

Utilize o seguinte código para eliminar uma lista de termos personalizados.Use the following code to delete a custom terms list.

#
# Delete list
#
print("\nDelete the term list {}".format(list_id))
client.list_management_term_lists.delete(list_id=list_id)

Imagens moderadasModerate images

O código que se segue utiliza um cliente Moderador de Conteúdo, juntamente com um objeto ImageModerationOperations, para analisar imagens para conteúdo adulto e picante.The following code uses a Content Moderator client, along with an ImageModerationOperations object, to analyze images for adult and racy content.

Obter imagensGet images

Defina uma referência a algumas imagens para analisar.Define a reference to some images to analyze.

IMAGE_LIST = [
    "https://moderatorsampleimages.blob.core.windows.net/samples/sample2.jpg",
    "https://moderatorsampleimages.blob.core.windows.net/samples/sample5.png"
]

Em seguida, adicione o seguinte código para iterar através das suas imagens.Then add the following code to iterate through your images. O resto do código nesta secção entrará neste ciclo.The rest of the code in this section will go inside this loop.

for image_url in IMAGE_LIST:
    print("\nEvaluate image {}".format(image_url))

Verifique se há conteúdo adulto/picanteCheck for adult/racy content

O código a seguir verifica a imagem no URL dado para conteúdo adulto ou picante e imprime resultados para a consola.The following code checks the image at the given URL for adult or racy content and prints results to the console. Consulte o guia de conceitos de moderação de imagem para obter informações sobre o que estes termos significam.See the Image moderation concepts guide for information on what these terms mean.

print("\nEvaluate for adult and racy content.")
evaluation = client.image_moderation.evaluate_url_input(
    content_type="application/json",
    cache_image=True,
    data_representation="URL",
    value=image_url
)
assert isinstance(evaluation, Evaluate)
pprint(evaluation.as_dict())

Verifique se há texto visívelCheck for visible text

O código a seguir verifica a imagem para o conteúdo de texto visível e imprime os resultados para a consola.The following code checks the image for visible text content and prints results to the console.

print("\nDetect and extract text.")
evaluation = client.image_moderation.ocr_url_input(
    language="eng",
    content_type="application/json",
    data_representation="URL",
    value=image_url,
    cache_image=True,
)
assert isinstance(evaluation, OCR)
pprint(evaluation.as_dict())

Verifique se há rostosCheck for faces

O código seguinte verifica a imagem para rostos humanos e imprime resultados para a consola.The following code checks the image for human faces and prints results to the console.

print("\nDetect faces.")
evaluation = client.image_moderation.find_faces_url_input(
    content_type="application/json",
    cache_image=True,
    data_representation="URL",
    value=image_url
)
assert isinstance(evaluation, FoundFaces)
pprint(evaluation.as_dict())

Use uma lista de imagens personalizadaUse a custom image list

O código que se segue mostra como gerir uma lista personalizada de imagens para moderação de imagem.The following code shows how to manage a custom list of images for image moderation. Esta funcionalidade é útil se a sua plataforma receber frequentemente casos do mesmo conjunto de imagens que pretende selecionar. Mantendo uma lista destas imagens específicas, pode melhorar o desempenho.This feature is useful if your platform frequently receives instances of the same set of images that you want to screen out. By maintaining a list of these specific images, you can improve performance. A classe ListManagementImageListsOperations permite-lhe criar uma lista de imagens, gerir as imagens individuais da lista e comparar outras imagens com ela.The ListManagementImageListsOperations class allows you to create an image list, manage the individual images on the list, and compare other images against it.

Crie as seguintes variáveis de texto para armazenar os URLs de imagem que utilizará neste cenário.Create the following text variables to store the image URLs that you'll use in this scenario.

IMAGE_LIST = {
    "Sports": [
        "https://moderatorsampleimages.blob.core.windows.net/samples/sample4.png",
        "https://moderatorsampleimages.blob.core.windows.net/samples/sample6.png",
        "https://moderatorsampleimages.blob.core.windows.net/samples/sample9.png"
    ],
    "Swimsuit": [
        "https://moderatorsampleimages.blob.core.windows.net/samples/sample1.jpg",
        "https://moderatorsampleimages.blob.core.windows.net/samples/sample3.png",
        "https://moderatorsampleimages.blob.core.windows.net/samples/sample4.png",
        "https://moderatorsampleimages.blob.core.windows.net/samples/sample16.png"
    ]
}

IMAGES_TO_MATCH = [
    "https://moderatorsampleimages.blob.core.windows.net/samples/sample1.jpg",
    "https://moderatorsampleimages.blob.core.windows.net/samples/sample4.png",
    "https://moderatorsampleimages.blob.core.windows.net/samples/sample5.png",
    "https://moderatorsampleimages.blob.core.windows.net/samples/sample16.png"
]

Nota

Esta não é a lista adequada em si, mas uma lista informal de imagens que serão adicionadas na add images secção do código.This is not the proper list itself, but an informal list of images that will be added in the add images section of the code.

Criar uma lista de imagensCreate an image list

Adicione o seguinte código para criar uma lista de imagens e guardar uma referência ao seu ID.Add the following code to create an image list and save a reference to its ID.

#
# Create list
#
print("Creating list MyList\n")
custom_list = client.list_management_image_lists.create(
    content_type="application/json",
    body={
        "name": "MyList",
        "description": "A sample list",
        "metadata": {
            "key_one": "Acceptable",
            "key_two": "Potentially racy"
        }
    }
)
print("List created:")
assert isinstance(custom_list, ImageList)
pprint(custom_list.as_dict())
list_id = custom_list.id

Adicionar imagens a uma listaAdd images to a list

O seguinte código adiciona todas as suas imagens à lista.The following code adds all of your images to the list.

print("\nAdding images to list {}".format(list_id))
index = {}  # Keep an index url to id for later removal
for label, urls in IMAGE_LIST.items():
    for url in urls:
        image = add_images(list_id, url, label)
        if image:
            index[url] = image.content_id

Defina a função de ajudante add_images em outro lugar no seu script.Define the add_images helper function elsewhere in your script.

#
# Add images
#
def add_images(list_id, image_url, label):
    """Generic add_images from url and label."""
    print("\nAdding image {} to list {} with label {}.".format(
        image_url, list_id, label))
    try:
        added_image = client.list_management_image.add_image_url_input(
            list_id=list_id,
            content_type="application/json",
            data_representation="URL",
            value=image_url,
            label=label
        )
    except APIErrorException as err:
        # sample4 will fail
        print("Unable to add image to list: {}".format(err))
    else:
        assert isinstance(added_image, Image)
        pprint(added_image.as_dict())
        return added_image

Obtenha imagens na listaGet images in list

O seguinte código imprime os nomes de todas as imagens da sua lista.The following code prints the names of all the images in your list.

#
# Get all images ids
#
print("\nGetting all image IDs for list {}".format(list_id))
image_ids = client.list_management_image.get_all_image_ids(list_id=list_id)
assert isinstance(image_ids, ImageIds)
pprint(image_ids.as_dict())

Atualizar detalhes da listaUpdate list details

Pode utilizar o ID da lista para atualizar o nome e a descrição da lista.You can use the list ID to update the name and description of the list.

#
# Update list details
#
print("\nUpdating details for list {}".format(list_id))
updated_list = client.list_management_image_lists.update(
    list_id=list_id,
    content_type="application/json",
    body={
        "name": "Swimsuits and sports"
    }
)
assert isinstance(updated_list, ImageList)
pprint(updated_list.as_dict())

Obter detalhes da listaGet list details

Utilize o seguinte código para imprimir os detalhes atuais da sua lista.Use the following code to print the current details of your list.

#
# Get list details
#
print("\nGetting details for list {}".format(list_id))
list_details = client.list_management_image_lists.get_details(
    list_id=list_id)
assert isinstance(list_details, ImageList)
pprint(list_details.as_dict())

Atualizar o índice de listaRefresh the list index

Depois de adicionar ou remover imagens, tem de atualizar o índice da lista antes de o poder utilizar para rastrear outras imagens.After you add or remove images, you must refresh the list index before you can use it to screen other images.

#
# Refresh the index
#
print("\nRefreshing the search index for list {}".format(list_id))
refresh_index = client.list_management_image_lists.refresh_index_method(
    list_id=list_id)
assert isinstance(refresh_index, RefreshIndex)
pprint(refresh_index.as_dict())

print("\nWaiting {} minutes to allow the server time to propagate the index changes.".format(
    LATENCY_DELAY))
time.sleep(LATENCY_DELAY * 60)

Combine imagens com a listaMatch images against the list

A principal função das listas de imagens é comparar novas imagens e ver se existem correspondências.The main function of image lists is to compare new images and see if there are any matches.

#
# Match images against the image list.
#
for image_url in IMAGES_TO_MATCH:
    print("\nMatching image {} against list {}".format(image_url, list_id))
    match_result = client.image_moderation.match_url_input(
        content_type="application/json",
        list_id=list_id,
        data_representation="URL",
        value=image_url,
    )
    assert isinstance(match_result, MatchResponse)
    print("Is match? {}".format(match_result.is_match))
    print("Complete match details:")
    pprint(match_result.as_dict())

Remover uma imagem da listaRemove an image from the list

O seguinte código remove um item da lista.The following code removes an item from the list. Neste caso, é uma imagem que não corresponde à categoria de lista.In this case, it is an image that does not match the list category.

#
# Remove images
#
correction = "https://moderatorsampleimages.blob.core.windows.net/samples/sample16.png"
print("\nRemove image {} from list {}".format(correction, list_id))
client.list_management_image.delete_image(
    list_id=list_id,
    image_id=index[correction]
)

Remova todas as imagens de uma listaRemove all images from a list

Utilize o seguinte código para limpar uma lista de imagens.Use the following code to clear out an image list.

#
# Delete all images
#
print("\nDelete all images in the image list {}".format(list_id))
client.list_management_image.delete_all_images(list_id=list_id)

Excluir a lista de imagensDelete the image list

Utilize o seguinte código para eliminar uma determinada lista de imagens.Use the following code to delete a given image list.

#
# Delete list
#
print("\nDelete the image list {}".format(list_id))
client.list_management_image_lists.delete(list_id=list_id)

Criar uma análiseCreate a review

Pode utilizar a biblioteca de clientes Do Moderador de Conteúdo Python para alimentar conteúdos na ferramenta Review para que os moderadores humanos possam revê-lo.You can use the Content Moderator Python client library to feed content into the Review tool so that human moderators can review it. Para saber mais sobre a ferramenta Review, consulte o guia conceptual da ferramenta Review.To learn more about the Review tool, see the Review tool conceptual guide.

O código que se segue utiliza a classe ReviewsOperations para criar uma revisão, recuperar o seu ID e verificar os seus dados depois de receber a entrada humana através do portal web da ferramenta Review.The following code uses the ReviewsOperations class to create a review, retrieve its ID, and check its details after receiving human input through the Review tool's web portal.

Obtenha credenciais de revisãoGet Review credentials

Primeiro, inscreva-se na ferramenta 'Revisão' e recupere o nome da sua equipa.First, sign in to the Review tool and retrieve your team name. Em seguida, atribua-o à variável apropriada no código.Then assign it to the appropriate variable in the code. Opcionalmente, pode configurar um ponto final de chamada para receber atualizações sobre a atividade da revisão.Optionally, you can set up a callback endpoint to receive updates on the activity of the review.

# The name of the team to assign the job to.
# This must be the team name you used to create your Content Moderator account. You can
# retrieve your team name from the Review tool web site. Your team name is the Id
# associated with your subscription.
team_name = "<insert your team name here>"

# An image to review
image_url = "https://moderatorsampleimages.blob.core.windows.net/samples/sample5.png"

# Where you want to receive the approval/refuse event. This is the only way to get this information.
call_back_endpoint = "https://requestb.in/qmsakwqm"

Criar uma revisão de imagemCreate an image review

Adicione o seguinte código para criar e publicar um revisão para o URL de imagem dado.Add the following code to create and post a review for the given image URL. O código guarda uma referência ao ID de revisão.The code saves a reference to the review ID.

# Create review
print("Create review for {}.\n".format(image_url))
review_item = {
    "type": "Image",             # Possible values include: 'Image', 'Text'
    "content": image_url,        # How to download the image
    "content_id": uuid.uuid4(),  # Random id
    "callback_endpoint": call_back_endpoint,
    "metadata": [{
        "key": "sc",
        "value": True  # will be sent to Azure as "str" cast.
    }]
}

reviews = client.reviews.create_reviews(
    url_content_type="application/json",
    team_name=team_name,
    create_review_body=[review_item]  # As many review item as you need
)

# Get review ID
review_id = reviews[0]  # Ordered list of string of review ID

Obter detalhes da avaliaçãoGet review details

Utilize o seguinte código para verificar os detalhes de uma determinada revisão.Use the following code to check the details of a given review. Depois de criar a revisão, pode ir à ferramenta Review e interagir com o conteúdo.After you create the review, you can go to the Review tool yourself and interact with the content. Para obter informações sobre como fazê-lo, consulte o guia de como fazer as avaliações.For information on how to do this, see the Reviews how-to guide. Quando terminar, pode executar este código novamente, e irá recuperar os resultados do processo de revisão.When you're finished, you can run this code again, and it will retrieve the results of the review process.

print("\nGet review details")
review_details = client.reviews.get_review(
    team_name=team_name, review_id=review_id)
pprint(review_details.as_dict())

Se usou um ponto final de retorno neste cenário, deverá receber um evento neste formato:If you used a callback endpoint in this scenario, it should receive an event in this format:

{'callback_endpoint': 'https://requestb.in/qmsakwqm',
 'content': '',
 'content_id': '3ebe16cb-31ed-4292-8b71-1dfe9b0e821f',
 'created_by': 'cspythonsdk',
 'metadata': [{'key': 'sc', 'value': 'True'}],
 'review_id': '201901i14682e2afe624fee95ebb248643139e7',
 'reviewer_result_tags': [{'key': 'a', 'value': 'True'},
                          {'key': 'r', 'value': 'True'}],
 'status': 'Complete',
 'sub_team': 'public',
 'type': 'Image'}

Executar a aplicaçãoRun the application

Execute a aplicação com o python comando no seu ficheiro quickstart.Run the application with the python command on your quickstart file.

python quickstart-file.py

Limpar os recursosClean up resources

Se pretender limpar e remover uma subscrição dos Serviços Cognitivos, pode eliminar o grupo de recursos ou recursos.If you want to clean up and remove a Cognitive Services subscription, you can delete the resource or resource group. A eliminação do grupo de recursos também elimina quaisquer outros recursos que lhe sejam associados.Deleting the resource group also deletes any other resources associated with it.

Passos seguintesNext steps

Neste arranque rápido, aprendeu a usar a biblioteca Do Moderador de Conteúdo Python para fazer tarefas de moderação.In this quickstart, you learned how to use the Content Moderator Python library to do moderation tasks. Em seguida, saiba mais sobre a moderação de imagens ou outros meios de comunicação, lendo um guia conceptual.Next, learn more about the moderation of images or other media by reading a conceptual guide.