Självstudie: Moderera produktbilder för e-handel med Azure Content Moderator
Varning
Granskningsverktyget Content Moderator är nu inaktuellt och dras tillbaka den 31 maj 2021.
I den här självstudien lär du dig att använda Azure Cognitive Services, inklusive Content Moderator, för att klassificera och moderera produktbilder för ett e-handelsscenario. Du använder Visuellt innehåll och Custom Vision för att tillämpa taggar (etiketter) på bilder, och sedan skapar du en teamgranskning som kombinerar Content Moderator:s maskininlärningsbaserade tekniker med mänskliga granskningsteam för att tillhandahålla ett intelligent modereringssystem.
I den här självstudiekursen lär du dig att:
- Registrera dig för Content Moderator och skapa ett granskningsteam.
- Använd Content Moderators bild-API för att söka efter potentiellt vuxet eller vågat innehåll.
- Använd tjänsten för visuellt innehåll för att söka efter kändisinnehåll (eller andra identifierbara taggar för visuellt innehåll).
- Använd tjänsten Custom Vision om du vill söka efter flaggor, leksaker och pennor (eller andra anpassade taggar).
- Presentera kombinerade sökresultat för mänsklig granskning och slutgiltigt beslutsfattande.
Den fullständiga exempelkoden är tillgänglig på lagringsplatsen Samples eCommerce Catalog Moderation på GitHub.
Om du inte har någon Azure-prenumeration kan du skapa ett kostnadsfritt konto innan du börjar.
Förutsättningar
- En prenumerationsnyckeln för Content Moderator. Följ instruktionerna i Skapa ett konto för Cognitive Services för att prenumerera på Content Moderator-tjänsten och få din nyckel.
- En prenumerationsnyckel för visuellt innehåll (samma instruktioner som ovan).
- Valfri version av Visual Studio 2015 eller 2017.
- En uppsättning bilder för varje etikett som klassificeraren för Custom Vision ska använda (i det här fallet leksaker, pennor och amerikanska flaggor).
Skapa ett granskningsteam
Se snabbstarten Prova Content Moderator på webben för instruktioner om hur du registrerar dig för Content Moderator Review-verktyget och skapar ett granskningsteam. Anteckna värdet för team-ID:t på sidan Autentiseringsuppgifter.
Skapa anpassade modereringstaggar
Skapa sedan anpassade taggar i granskningsverktyget (se artikeln Taggar om du behöver hjälp med den här processen). I det här fallet ska vi lägga till följande taggar: kändisar, USA, flagga, leksak och penna. Alla taggar måste inte vara det går att identifiera kategorier i Visuellt innehåll (som kändisar). du kan lägga till egna anpassade taggar så länge du tränar Custom Vision att identifiera dem senare.

Skapa Visual Studio-projekt
- Öppna dialogrutan New Project (Nytt projekt) i Visual Studio. Expandera Installerat, sedan Visual C# och välj Konsolapp (.NET Framework).
- Ge programmet namnet EcommerceModeration och välj sedan OK.
- Om du lägger till det här projektet i en befintlig lösning väljer du det här projektet som det enda startprojektet.
Den här självstudien visar koden som är central för projektet, men den täcker inte alla kodrader. Kopiera hela innehållet i Program.cs från exempelprojektet (Samples eCommerce Catalog Moderation) till filen Program.cs för det nya projektet. Gå sedan igenom avsnitten nedan om du vill veta mer om hur projektet fungerar och hur du använder det själv.
Definiera API-nycklar och slutpunkter
I den här självstudien används tre kognitiva tjänster: Därför kräver den tre motsvarande nycklar och API-slutpunkter. Se följande fält i klassen 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";
Du måste uppdatera fälten med värdena för dina prenumerationsnycklar och du måste ändra fälten till rätt slutpunkts-URL:er (du får Custom Vision nyckel och ___Key ___Uri slutpunkt senare). Du hittar dessa värden på snabbstartsflikarna för varje Azure-resurs. Fyll i YOURTEAMID-delen av fältet ReviewUri med ID:t för granskningsteamet som du skapade tidigare. Du fyller i den sista delen av CustomVisionUri fältet senare.
Anteckning
Nya resurser som skapats efter den 1 juli 2019 kommer att använda anpassade under domän namn. Mer information och en fullständig lista över regionala slut punkter finns i anpassade under domän namn för Cognitive Services.
Primära metodanrop
Se följande kod i Main-metoden, som loopar igenom en lista över webbadresser till bilder. Den analyserar varje bild med de tre olika tjänsterna, registrerar tillämpade taggar i matrisen ReviewTags och skapar sedan en granskning för mänskliga moderatorer genom att skicka bilderna till Content Moderator Review Tool. Du utforskar dessa metoder i följande avsnitt. Om du vill kan du styra vilka bilder som ska skickas för granskning med hjälp av matrisen ReviewTags i en villkorsstyrd instruktion för att kontrollera vilka taggar som har tillämpats.
// 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);
}
EvaluateAdultRacy-metod
Se metoden EvaluateAdultRacy i klassen Program. Den här metoden tar en bild-URL och en matris med nyckel/värde-par som parametrar. Den anropar Content Moderator Image REST API för att hämta poängen för vuxet och racy för bilden. Om poängen för endera är större än 0,4 (intervallet är mellan 0 och 1) anger det motsvarande värde i matrisen ReviewTags till 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;
}
EvaluateComputerVisionTags-metod
Nästa metod tar en bild-URL och din prenumerationsinformation för visuellt innehåll och analyserar bilden för förekomst av kändisar. Om det finns en eller flera kändisar ställs motsvarande värde i matrisen ReviewTags in på 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;
}
EvaluateCustomVisionTags-metod
Sedan kan du titta på metoden EvaluateCustomVisionTags som klassificerar de faktiska produkterna—i det här fallet flaggor, leksaker och pennor. Följ anvisningarna i guiden Så här skapar du en klassificerare för att skapa en egen anpassad bild klassificerare och identifiera flaggor, leksaker och pennor (eller vad du väljer som dina anpassade taggar) i bilder. Du kan använda bilderna i mappen sample-images på lagringsplatsen GitHub för att snabbt träna några av kategorierna i det här exemplet.

När du har tränat klassificeraren hämtar du förutsägelsenyckeln och förutsägelseslutpunktens URL (se Hämta URL:en och förutsägelsenyckeln om du behöver hjälp med att hämta dem) och tilldela dessa värden till fälten och CustomVisionKey CustomVisionUri . Metoden använder dessa värden för att fråga klassificeraren. Om klassificeraren hittar en eller flera av de anpassade taggarna i bilden ställer den här metoden in de motsvarande värdena i matrisen ReviewTags på 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;
}
Skapa granskningar för granskningsverktyg
I föregående avsnitt utforskade du hur appen genomsöker inkommande bilder efter vuxet och racy-innehåll (Content Moderator), kändisar (Visuellt innehåll) och olika andra objekt (Custom Vision). Se sedan metoden CreateReview, som laddar upp bilderna med alla deras tillämpade taggar (skickas som Metadata) till 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;
}
Bilderna visas på granskningsfliken i Content Moderator-granskningsverktyget.

Skicka en lista över bilder för testning
Som du ser i metoden Main söker det här programmet efter en ”C:Test”-katalog med en Urls.txt -fil som innehåller en lista över bild-URL:er. Skapa den här filen och katalogen eller ändra sökvägen så att den pekar på textfilen. Fyll sedan i den här filen med URL:er för bilder som du vill testa.
// 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);
Köra programmet
Om du har följt alla ovanstående steg bör programmet bearbeta varje bild (fråga alla tre tjänsterna efter relevanta taggar) och sedan ladda upp bilderna med tagginformation till Content Moderator Review Tool.
Nästa steg
I den här självstudien ställer du in ett program för att analysera produktbilder, tagga dem efter produkttyp och låta ett granskningsteam fatta välgrundade beslut om innehållsmoderering. Härnäst får du mer information om bildmoderering.