Tutorial: Moderación de imágenes de productos de comercio electrónico con Azure Content Moderator
Precaución
La herramienta Content Moderator Review queda en desuso y se retirará el 31 de diciembre de 2021.
En este tutorial, obtendrá información sobre cómo usar Azure Cognitive Services, que incluye Content Moderator, para clasificar y moderar imágenes de productos en un escenario de comercio electrónico. Usará Computer Vision y Custom Vision para aplicar etiquetas a las imágenes y, después, creará una revisión en equipo, que combina las tecnologías basadas en aprendizaje automático de Content Moderator con equipos de revisión humana para formar un sistema de moderación inteligente.
En este tutorial se muestra cómo realizar las siguientes acciones:
- Regístrese en Content Moderator y cree un equipo de revisión.
- Uso de la API de imagen de Content Moderator para detectar posible contenido para adultos o subido de tono.
- Use el servicio Computer Vision para buscar contenido de celebridades (u otras etiquetas detectables por Computer Vision).
- Use Custom Vision Service para detectar la presencia de banderas, juguetes y lápices (u otras etiquetas personalizadas).
- Presente los resultados combinados para una revisión humana y la toma de decisión final.
El código de ejemplo completo está disponible en el repositorio Samples eCommerce Catalog Moderation de GitHub.
Si no tiene una suscripción a Azure, cree una cuenta gratuita antes de empezar.
Requisitos previos
- Una clave de suscripción de Content Moderator. Siga las instrucciones de Creación de una cuenta de Cognitive Services para suscribirse al servicio Content Moderator y obtener su clave.
- Una clave de suscripción de Computer Vision (las mismas instrucciones que antes).
- Cualquier edición de Visual Studio 2015 o 2017.
- Un conjunto de imágenes para cada etiqueta que va a usar el clasificador de Custom Vision (en este caso juguetes, lápices y banderas de EE. UU.).
Creación de un equipo de revisión
Consulte la guía de inicio rápido Cómo familiarizarse con Content Moderator para obtener instrucciones sobre cómo registrarse en la herramienta de revisión de Content Moderator y crear un equipo de revisión. Anote el valor de Id. de equipo en la página Credenciales.
Creación de etiquetas de moderación personalizadas
A continuación, cree etiquetas personalizadas en la herramienta de revisión (consulte el artículo Etiquetas si necesita ayuda con este proceso). En este caso, agregaremos las siguientes etiquetas: celebridad, EE. UU. , bandera, juguete y lápiz. No todas las etiquetas tienen que tener categorías detectables en Computer Vision (como celebridad); puede agregar sus propias etiquetas personalizadas, siempre que entrene al clasificador de Custom Vision para que pueda detectarlas más adelante.

Creación de un proyecto de Visual Studio
- En Visual Studio, abra el cuadro de diálogo Nuevo proyecto. Expanda Instalado, luego, Visual C# y, después, seleccione Aplicación de consola (.NET Framework) .
- Asigne a la aplicación el nombre EcommerceModeration y seleccione Aceptar.
- Si va a agregar este proyecto a una solución existente, selecciónelo como proyecto de inicio único.
En este tutorial se resalta el código que es fundamental para el proyecto, pero no se describirán todas las líneas de código. Copie el contenido completo de Program.cs del proyecto de ejemplo (Samples eCommerce Catalog Moderation) en el archivo Program.cs del nuevo proyecto. Después, continúe por las siguientes secciones para obtener información sobre cómo funciona el proyecto y cómo usarlo.
Definición de los puntos de conexión y las claves de API
Este tutorial usa tres servicios de Cognitive Services; por consiguiente, requiere tres claves y puntos de conexión de API. Vea los campos siguientes de la clase Program:
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";
Tendrá que actualizar los campos ___Key con los valores de las claves de suscripción y cambiar los campos ___Uri a las direcciones URL de punto de conexión correctas (obtendrá la clave y el punto de conexión de Computer Vision más adelante). Puede encontrar estos valores en las pestañas Inicio rápido de cada recurso de Azure. Rellene la parte YOURTEAMID del campo ReviewUri con el identificador del equipo de revisión que creó anteriormente. Rellenará la parte final del campo CustomVisionUri más adelante.
Nota
Los nuevos recursos creados después del 1 de julio de 2019 usarán nombres de subdominio personalizados. Para más información y para obtener una lista completa de los puntos de conexión regionales, consulte Nombres de subdominios personalizados para Cognitive Services.
Llamadas al método principal
Vea el siguiente código en el método Main, que recorre en iteración una lista de direcciones URL de imagen. Analiza cada imagen con los tres servicios diferentes, registra las etiquetas aplicadas en la matriz ReviewTags y, después, crea una revisión para los moderadores humanos (envía las imágenes a la herramienta de revisión de Content Moderator). En las siguientes secciones veremos estos métodos. Si lo desea, puede controlar qué imágenes se envían a revisión, utilizando para ello la matriz ReviewTags en una instrucción condicional para comprobar qué etiquetas se aplicaron.
// 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);
}
Método EvaluateAdultRacy
Consulte el método EvaluateAdultRacy en la clase Program. Este método emplea una dirección URL de imagen y una matriz de pares de clave-valor como parámetros. Llama a la API REST de imagen de Content Moderator para obtener las puntuaciones de las categorías "para adultos" y "subido de tono" de la imagen. Si la puntuación es superior a 0,4 (el intervalo es entre 0 y 1), establece el valor correspondiente en la matriz ReviewTags en 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;
}
Método EvaluateComputerVisionTags
El siguiente método toma una dirección URL de imagen y la información de la suscripción de Computer Vision y analiza la presencia de celebridades en la imagen. Si se encuentran una o más celebridades, establece el valor correspondiente de la matriz ReviewTags en 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;
}
Método EvaluateCustomVisionTags
A continuación, consulte el método EvaluateCustomVisionTags, que clasifica los productos reales; en este caso, banderas, juguetes y lápices. Siga las instrucciones de la guía Cómo crear un clasificador para crear un clasificador de imágenes personalizado para detectar banderas, juguetes y lápices (o lo que haya elegido como etiquetas personalizadas) en las imágenes. Puede usar las imágenes de la carpeta sample-images carpeta del repositorio de GitHub para entrenar rápidamente algunas de las categorías de este ejemplo.

Una vez entrenado el clasificador, obtenga la clave de predicción y la dirección URL del punto de conexión de predicción (consulte Obtención de una clave de predicción y dirección URL si necesita ayuda para recuperarlas) y asigne estos valores a los campos CustomVisionKey y CustomVisionUri, respectivamente. El método usa estos valores para consultar el clasificador. Si el clasificador encuentra una o más etiquetas personalizadas en la imagen, este método establece los valores correspondientes de la matriz ReviewTags en 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;
}
Creación de revisiones para la herramienta de revisión
En las secciones anteriores, vio cómo la aplicación examina las imágenes entrantes en busca de contenido para adultos o subido de tono (Content Moderator), celebridades (Computer Vision) y diversos objetos (Custom Vision). A continuación, verá el método CreateReview, que carga las imágenes con todas las etiquetas aplicadas (pasadas como Metadata) en la herramienta de revisión de Content Moderator.
/// <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;
}
Las imágenes se mostrarán en la pestaña Review (Revisión) de la herramienta de revisión de Content Moderator.

Envío de una lista de imágenes de prueba
Como puede ver en el método Main, este programa busca un directorio "C:Test" con un archivo Urls.txt que contiene una lista de direcciones URL de imagen. Cree este archivo y directorio, o cambie la ruta de acceso para que apunte al archivo de texto. A continuación, rellene este archivo con las direcciones URL de imagen que desea probar.
// 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);
Ejecución del programa
Si ha seguido todos los pasos anteriores, el programa procesará cada imagen (y consultará las etiquetas correspondientes a los tres servicios) y, después, cargará las imágenes con información de etiqueta en la herramienta de revisión de Content Moderator.
Pasos siguientes
En este tutorial, configurará un programa para analizar las imágenes de productos y etiquetarlas por tipo de producto para que un equipo de revisión pueda tomar decisiones informadas sobre la moderación de contenido. Después, obtendrá más información acerca de los detalles de la moderación de imágenes.