Tutorial: Imagens moderadas de produtos de e-commerce com Moderador de Conteúdo AzureTutorial: Moderate e-commerce product images with Azure Content Moderator

Neste tutorial, você aprenderá a usar os Serviços Cognitivos Azure, incluindo o Moderador de Conteúdo, para classificar e moderar imagens de produtos para um cenário de e-commerce.In this tutorial, you'll learn how to use Azure Cognitive Services, including Content Moderator, to classify and moderate product images for an e-commerce scenario. Você usará visão de computador e visão personalizada para aplicar tags (etiquetas) em imagens, e então você vai criar uma revisão de equipe, que combina as tecnologias baseadas em aprendizagem automática do Content Moderador com equipas de revisão humana para fornecer um sistema de moderação inteligente.You'll use Computer Vision and Custom Vision to apply tags (labels) to images, and then you will create a team review, which combines Content Moderator's machine-learning-based technologies with human review teams to provide an intelligent moderation system.

Este tutorial mostrar-lhe como:This tutorial shows you how to:

  • Inscreva-se no Moderador de Conteúdo e crie uma equipa de revisão.Sign up for Content Moderator and create a review team.
  • Utilize a API de imagem do Content Moderator para analisar potenciais conteúdos para adultos e picantes.Use Content Moderator's image API to scan for potential adult and racy content.
  • Utilize o serviço de Visão de Computador para verificar se existem conteúdos de celebridades (ou outras tags detetáveis por Computador-Vision).Use the Computer Vision service to scan for celebrity content (or other Computer-Vision-detectable tags).
  • Utilize o serviço Visão Personalizada para verificar a presença de bandeiras, brinquedos e canetas (ou outras etiquetas personalizadas).Use the Custom Vision service to scan for the presence of flags, toys, and pens (or other custom tags).
  • Apresente os resultados combinados da digitalização para revisão humana e tomada de decisão final.Present the combined scan results for human review and final decision making.

O código de amostra completo está disponível no repositório de moderação do catálogo samples eCommerce no GitHub.The complete sample code is available in the Samples eCommerce Catalog Moderation repository on GitHub.

Se não tiver uma subscrição do Azure, crie uma conta gratuita antes de começar.If you don't have an Azure subscription, create a free account before you begin.

Pré-requisitosPrerequisites

  • A chave de uma subscrição do Content Moderator.A Content Moderator subscription key. Siga as instruções na conta Criar um Serviços Cognitivos para subscrever o serviço de Moderador de Conteúdo e obter a sua chave.Follow the instructions in Create a Cognitive Services account to subscribe to the Content Moderator service and get your key.
  • Uma chave de subscrição de Visão de Computador (as mesmas instruções acima).A Computer Vision subscription key (same instructions as above).
  • Qualquer edição do Visual Studio 2015 ou 2017.Any edition of Visual Studio 2015 or 2017.
  • Um conjunto de imagens para cada etiqueta que o classificador de Visão Personalizada utilizará (neste caso, brinquedos, canetas e bandeiras dos EUA).A set of images for each label that the Custom Vision classifier will use (in this case toys, pens, and US flags).

Criar uma equipa de revisãoCreate a review team

Consulte o Moderador de Conteúdo de Tentativa no início da web para obter instruções sobre como se inscrever na ferramenta de Análise de Moderador de Conteúdo e criar uma equipa de revisão.Refer to the Try Content Moderator on the web quickstart for instructions on how to sign up for the Content Moderator Review tool and create a review team. Tome nota do valor de identificação da equipa na página De Credenciais.Take note of the Team ID value on the Credentials page.

Criar etiquetas de moderação personalizadasCreate custom moderation tags

Em seguida, crie etiquetas personalizadas na ferramenta 'Rever' (consulte o artigo Tags se precisar de ajuda neste processo).Next, create custom tags in the Review tool (see the Tags article if you need help with this process). Neste caso, vamos adicionar as seguintes tags: celebridade, EUA, bandeira, brinquedo, e caneta.In this case, we will add the following tags: celebrity, USA, flag, toy, and pen. Nem todas as tags precisam de ser detetáveis categorias em Visão Computacional (como celebridade); pode adicionar as suas próprias etiquetas personalizadas desde que treine o classificador De Visão Personalizada para detetá-las mais tarde.Not all of the tags need to be detectable categories in Computer Vision (like celebrity); you can add your own custom tags as long as you train the Custom Vision classifier to detect them later on.

Configurar etiquetas personalizadas

Criar projeto do Visual StudioCreate Visual Studio project

  1. No Visual Studio, abra o diálogo do Novo Projeto.In Visual Studio, open the New Project dialog. Expandir instalado, em seguida, Visual C., em seguida, selecione app consola (.NET Framework).Expand Installed, then Visual C#, then select Console app (.NET Framework).
  2. Nomeie a aplicação EcommerceModeratione, em seguida, clique em OK.Name the application EcommerceModeration, then click OK.
  3. Se você está adicionando este projeto a uma solução existente, selecione este projeto como o projeto de startup única.If you're adding this project to an existing solution, select this project as the single startup project.

Este tutorial destaca o código que é central para o projeto, mas não cobre todas as linhas de código.This tutorial highlights the code that is central to the project, but it won't cover every line of code. Copie todo o conteúdo de Program.cs do projeto de amostra (Samples eCommerce Catalog Moderation)no arquivo Program.cs do seu novo projeto.Copy the full contents of Program.cs from the sample project (Samples eCommerce Catalog Moderation) into the Program.cs file of your new project. Em seguida, passe pelas seguintes secções para saber como o projeto funciona e como usá-lo por si mesmo.Then, step through the following sections to learn about how the project works and how to use it yourself.

Definir chaves e pontos finais da APIDefine API keys and endpoints

Este tutorial utiliza três serviços cognitivos; portanto, requer três chaves correspondentes e pontos finais API.This tutorial uses three cognitive services; therefore, it requires three corresponding keys and API endpoints. Consulte os seguintes campos na classe Programa:See the following fields in the Program class:

public const string ContentModeratorKey = "XXXXXXXXXXXXX";
public const string ComputerVisionKey = "XXXXXXXXXXXX";
public const string CustomVisionKey = "XXXXXXXXXXX";

// All your end points based on the new account and subscriptions
public const string ImageUri = "https://westus.api.cognitive.microsoft.com/contentmoderator/moderate/v1.0/ProcessImage/Evaluate";
public const string ReviewUri = "https://westus.api.cognitive.microsoft.com/contentmoderator/review/v1.0/teams/YOUR-TEAM-ID/reviews";
public const string ComputerVisionUri = "https://westcentralus.api.cognitive.microsoft.com/vision/v1.0/analyze?details=celebrities";
public const string CustomVisionUri = "https://southcentralus.api.cognitive.microsoft.com/customvision/v1.0/Prediction/XXXXXXXXXXXXXXXX/url";

Terá de atualizar os ___Key campos com os valores das suas teclas de subscrição e precisa de alterar os campos para ___Uri urls de ponto final correto (terá a tecla Visão Personalizada e o ponto final mais tarde).You'll need to update the ___Key fields with the values of your subscription keys, and you need to change the ___Uri fields to the correct endpoint URLs (you'll get the Custom Vision key and endpoint later on). Pode encontrar estes valores nos separadores de início rápido de cada recurso Azure.You can find these values in the Quick start tabs of each Azure resource. Preencha a YOURTEAMID parte do campo com o ReviewUri ID da equipa de revisão que criou anteriormente.Fill in the YOURTEAMID part of the ReviewUri field with the ID of the review team you created earlier. Vais preencher a parte final do CustomVisionUri campo mais tarde.You'll fill in the final part of the CustomVisionUri field later on.

Nota

Os novos recursos criados após 1 de julho de 2019, usarão nomes de subdomínios personalizados.New resources created after July 1, 2019, will use custom subdomain names. Para obter mais informações e uma lista completa de pontos finais regionais, consulte os nomes de subdomínio personalizados para serviços cognitivos.For more information and a complete list of regional endpoints, see Custom subdomain names for Cognitive Services.

Chamadas de método primárioPrimary method calls

Consulte o seguinte código no método Principal, que passa por uma lista de URLs de imagem.See the following code in the Main method, which loops through a list of image URLs. Analisa cada imagem com os três serviços diferentes, regista as tags aplicadas na matriz ReviewTags e, em seguida, cria uma revisão para moderadores humanos enviando as imagens para a Ferramenta de Revisão do Moderador de Conteúdo.It analyzes each image with the three different services, records the applied tags in the ReviewTags array, and then creates a review for human moderators by sending the images to the Content Moderator Review Tool. Você explorará estes métodos nas seguintes secções.You will explore these methods in the following sections. Se desejar, pode controlar quais as imagens enviadas para rever, utilizando o conjunto ReviewTags numa declaração condicional para verificar quais as etiquetas que foram aplicadas.If you wish, you can control which images are sent to review, using the ReviewTags array in a conditional statement to check which tags were applied.

// for each image URL in the file...
foreach (var Url in Urls)
{
    // Initiatize a new review tags array
    ReviewTags = new KeyValuePair[MAXTAGSCOUNT];

    // Evaluate for potential adult and racy content with Content Moderator API
    EvaluateAdultRacy(Url, ref ReviewTags);

    // Evaluate for potential presence of celebrity (ies) in images with Computer Vision API
    EvaluateComputerVisionTags(Url, ComputerVisionUri, ComputerVisionKey, ref ReviewTags);

    // Evaluate for potential presence of custom categories other than Marijuana
    EvaluateCustomVisionTags(Url, CustomVisionUri, CustomVisionKey, ref ReviewTags);

    // Create review in the Content Moderator review tool
    CreateReview(Url, ReviewTags);
}

Avaliar métodoAdultRacyEvaluateAdultRacy method

Consulte o método AvaliarAdultRacy na classe Programa.See the EvaluateAdultRacy method in the Program class. Este método requer um URL de imagem e uma matriz de pares de valores-chave como parâmetros.This method takes an image URL and an array of key-value pairs as parameters. Chama a API de Imagem do Moderador de Conteúdo (usando REST) para obter as pontuações de imagem adulta e picante.It calls the Content Moderator's Image API (using REST) to get the Adult and Racy scores of the image. Se a pontuação para um deles for superior a 0,4 (o intervalo é entre 0 e 1), define o valor correspondente na matriz ReviewTags para True.If the score for either is greater than 0.4 (the range is between 0 and 1), it sets the corresponding value in the ReviewTags array to True.

/// <summary>
/// Use Content Moderator API to evaluate for potential adult and racy content
/// </summary>
/// <param name="ImageUrl"></param>
/// <param name="ReviewTags"></param>
/// <returns>API call success or not</returns>
public static bool EvaluateAdultRacy(string ImageUrl, ref KeyValuePair[] ReviewTags)
{
    float AdultScore = 0;
    float RacyScore = 0;

    var File = ImageUrl;
    string Body = $"{{\"DataRepresentation\":\"URL\",\"Value\":\"{File}\"}}";

    HttpResponseMessage response = CallAPI(ImageUri, ContentModeratorKey, CallType.POST,
                                           "Ocp-Apim-Subscription-Key", "application/json", "", Body);

    if (response.IsSuccessStatusCode)
    {
        // {“answers”:[{“answer”:“Hello”,“questions”:[“Hi”],“score”:100.0}]}
        // Parse the response body. Blocking!
        GetAdultRacyScores(response.Content.ReadAsStringAsync().Result, out AdultScore, out RacyScore);
    }

    ReviewTags[0] = new KeyValuePair();
    ReviewTags[0].Key = "a";
    ReviewTags[0].Value = "false";
    if (AdultScore > 0.4)
    {
        ReviewTags[0].Value = "true";
    }

    ReviewTags[1] = new KeyValuePair();
    ReviewTags[1].Key = "r";
    ReviewTags[1].Value = "false";
    if (RacyScore > 0.3)
    {
        ReviewTags[1].Value = "true";
    }
    return response.IsSuccessStatusCode;
}

Avaliar Método DeComputerVisionTagsEvaluateComputerVisionTags method

O método seguinte requer um URL de imagem e a informação de subscrição da Visão de Computador e analisa a imagem para a presença de celebridades.The next method takes an image URL and your Computer Vision subscription information and analyzes the image for the presence of celebrities. Se uma ou mais celebridades forem encontradas, define o valor correspondente na matriz ReviewTags para True.If one or more celebrities are found, it sets the corresponding value in the ReviewTags array to True.

/// <summary>
/// Use Computer Vision API to evaluate for potential celebrity presence in image
/// </summary>
/// <param name="ImageUrl"></param>
/// <param name="ComputerVisionUri"></param>
/// <param name="ComputerVisionKey"></param>
/// <param name="ReviewTags"></param>
/// <returns>API call success or not</returns>
public static bool EvaluateComputerVisionTags(string ImageUrl, string ComputerVisionUri, string ComputerVisionKey, ref KeyValuePair[] ReviewTags)
{
    var File = ImageUrl;
    string Body = $"{{\"URL\":\"{File}\"}}";

    HttpResponseMessage Response = CallAPI(ComputerVisionUri, ComputerVisionKey, CallType.POST,
                                           "Ocp-Apim-Subscription-Key", "application/json", "", Body);

    if (Response.IsSuccessStatusCode)
    {
        ReviewTags[2] = new KeyValuePair();
        ReviewTags[2].Key = "cb";
        ReviewTags[2].Value = "false";

        ComputerVisionPrediction CVObject = JsonConvert.DeserializeObject<ComputerVisionPrediction>(Response.Content.ReadAsStringAsync().Result);

        if ((CVObject.categories[0].detail != null) && (CVObject.categories[0].detail.celebrities.Count() > 0))
        {                 
            ReviewTags[2].Value = "true";
        }
    }

    return Response.IsSuccessStatusCode;
}

Avaliar MétodoCustomVisionTagsEvaluateCustomVisionTags method

Em seguida, consulte o método AssessCustomVisionTags, que classifica os produtos reais — neste caso bandeiras, brinquedos e canetas.Next, see the EvaluateCustomVisionTags method, which classifies the actual products—in this case flags, toys, and pens. Siga as instruções do Guia de Como construir um guia de classificação para construir o seu próprio classificador de imagem personalizado e detetar bandeiras, brinquedos e canetas (ou o que escolher como suas etiquetas personalizadas) em imagens.Follow the instructions in the How to build a classifier guide to build your own custom image classifier and detect flags, toys, and pens (or whatever you chose as your custom tags) in images. Pode utilizar as imagens na pasta de imagens de amostras do repo GitHub para treinar rapidamente algumas das categorias neste exemplo.You can use the images in the sample-images folder of the GitHub repo to quickly train some of the categories in this example.

Página web da Visão Personalizada com imagens de treinamento de canetas, brinquedos e bandeiras

Depois de ter treinado o seu classificador, obtenha a chave de previsão e url de ponto final de previsão (consulte obter o URL e a chave de previsão se precisar de ajuda para recuperá-los) e atribua estes valores ao seu e aos seus CustomVisionKey CustomVisionUri campos, respectivamente.Once you've trained your classifier, get the prediction key and prediction endpoint URL (see Get the URL and prediction key if you need help with retrieving them), and assign these values to your CustomVisionKey and CustomVisionUri fields, respectively. O método utiliza estes valores para consultar o classificador.The method uses these values to query the classifier. Se o classificador encontrar uma ou mais etiquetas personalizadas na imagem, este método define o valor ou s correspondente na matriz reviewTags para True.If the classifier finds one or more of the custom tags in the image, this method sets the corresponding value(s) in the ReviewTags array to True.

/// <summary>
/// Use Custom Vision API to evaluate for potential content from custom-trained categories 
/// </summary>
/// <param name="ImageUrl"></param>
/// <param name="CustomVisionUri"></param>
/// <param name="CustomVisionKey"></param>
/// <param name="ReviewTags"></param>
/// <returns>API call success or not</returns>
 public static bool EvaluateCustomVisionTags(string ImageUrl, string CustomVisionUri, string CustomVisionKey, ref KeyValuePair[] ReviewTags)
 {
     var File = ImageUrl;
     string Body = $"{{\"URL\":\"{File}\"}}";

     HttpResponseMessage response = CallAPI(CustomVisionUri, CustomVisionKey, CallType.POST,
                                            "Prediction-Key", "application/json", "", Body);

     if (response.IsSuccessStatusCode)
     {
         // Parse the response body. Blocking!
         SaveCustomVisionTags(response.Content.ReadAsStringAsync().Result, ref ReviewTags);
     }

     return response.IsSuccessStatusCode;
 }

Criar comentários para a ferramenta ReviewCreate reviews for Review tool

Nas secções anteriores, explorou como a aplicação digitaliza imagens recebidas para conteúdo adulto e picante (Moderador de Conteúdo), celebridades (Visão de Computador) e vários outros objetos (Visão Personalizada).In the previous sections, you explored how the app scans incoming images for adult and racy content (Content Moderator), celebrities (Computer Vision), and various other objects (Custom Vision). Em seguida, consulte o método CreateReview, que faz o upload das imagens com todas as suas tags aplicadas (passadas como Metadados) para a Ferramenta de Revisão do Moderador de Conteúdo.Next, see the CreateReview method, which uploads the images with all of their applied tags (passed in as Metadata) to the Content Moderator Review Tool.

/// <summary>
/// Call Content Moderator's Review API to create a review with the image (URL) and the review tags as inputs
/// </summary>
/// <param name="ImageUrl"></param>
/// <param name="Metadata"></param>
/// <returns>API call success or not</returns>
public static bool CreateReview(string ImageUrl, KeyValuePair[] Metadata)
{

    ReviewCreationRequest Review = new ReviewCreationRequest();
    Review.Item[0] = new ReviewItem();
    Review.Item[0].Content = ImageUrl;
    Review.Item[0].Metadata = new KeyValuePair[MAXTAGSCOUNT];
    Metadata.CopyTo(Review.Item[0].Metadata, 0);

    //SortReviewItems(ref Review);

    string Body = JsonConvert.SerializeObject(Review.Item);

    HttpResponseMessage response = CallAPI(ReviewUri, ContentModeratorKey, CallType.POST,
                                           "Ocp-Apim-Subscription-Key", "application/json", "", Body);

    return response.IsSuccessStatusCode;
}

As imagens aparecerão no separador 'Análise' da ferramenta 'Análise de Moderadores de Conteúdo'.The images will show up in the Review tab of the Content Moderator Review tool.

Screenshot da ferramenta de Análise de Moderador de Conteúdo com várias imagens e as suas tags em destaque

Enviar uma lista de imagens de testeSubmit a list of test images

Como pode ver no método Principal, este programa procura um diretório "C:Test" com um ficheiro Urls.txt que contenha uma lista de Urls de imagem.As you can see in the Main method, this program looks for a "C:Test" directory with a Urls.txt file that contains a list of image Urls. Crie este ficheiro e diretório, ou altere o caminho para apontar para o seu ficheiro de texto.Create this file and directory, or change the path to point to your text file. Em seguida, povoar este ficheiro com os URLs de imagens que gostaria de testar.Then populate this file with the URLs of images you'd like to test.

// Check for a test directory for a text file with the list of Image URLs to scan
var topdir = @"C:\test\";
var Urlsfile = topdir + "Urls.txt";

if (!Directory.Exists(topdir))
    return;

if (!File.Exists(Urlsfile))
{
    return;
}

// Read all image URLs in the file
var Urls = File.ReadLines(Urlsfile);

Execute o programaRun the program

Se seguiu todos os passos acima, o programa deve processar cada imagem (consultando os três serviços para as suas etiquetas relevantes) e, em seguida, fazer o upload das imagens com informações de marcação para a Ferramenta de Revisão do Moderador de Conteúdo.If you've followed all of the above steps, the program should process each image (querying all three services for their relevant tags) and then upload the images with tag information to the Content Moderator Review Tool.

Passos seguintesNext steps

Neste tutorial, cria-se um programa para analisar as imagens do produto, marcá-las por tipo de produto e permitir que uma equipa de revisão tome decisões informadas sobre a moderação de conteúdos.In this tutorial, you set up a program to analyze product images, tag them by product type, and allow a review team to make informed decisions about content moderation. Em seguida, saiba mais sobre os detalhes da moderação da imagem.Next, learn more about the details of image moderation.