Zelfstudie: E-commerce-productafbeeldingen beheren met Azure Content Moderator
Waarschuwing
Het Content Moderator review-hulpprogramma is nu afgeschaft en wordt op 31-12-2021 afgeschaft.
In deze zelfstudie leert u hoe u Azure Cognitive Services, waaronder Content Moderator, gebruikt om productafbeeldingen voor een e-commerce-scenario te classificeren en te beheren. U gebruikt Computer Vision en Custom Vision om tags (labels) toe te passen op afbeeldingen. Vervolgens maakt u een teambeoordeling, waarin de op machine learning gebaseerde technologieën van Content Moderator worden gecombineerd met menselijke beoordelingsteams om een intelligent beoordelingssysteem te bieden.
In deze zelfstudie ontdekt u hoe u:
- Aanmelden voor Content Moderator en een beoordelingsteam maken.
- De Image-API van Content Moderator gebruiken om te scannen op mogelijke ongepaste inhoud of inhoud voor volwassenen.
- De Computer Vision-service gebruiken om te scannen op beroemdheden (of andere tags die Computer Vision kan detecteren).
- De Custom Vision service gebruiken om te scannen op de aanwezigheid van vlaggen, speelgoed en pennen (of andere aangepaste tags).
- De gecombineerde scanresultaten presenteren voor menselijke beoordeling en uiteindelijke besluitvorming.
De volledige voorbeeldcode is beschikbaar in de opslagplaats Samples eCommerce Catalog Moderation op GitHub.
Als u nog geen abonnement op Azure hebt, maak dan een gratis account aan voordat u begint.
Vereisten
- Een abonnementssleutel voor Content Moderator. Volg de instructies in Een Cognitive Services-account maken om u te abonneren op Content Moderator en een sleutel op te halen.
- Een abonnementssleutel voor Computer Vision (dezelfde instructies als hierboven).
- Een versie van Visual Studio 2015 of 2017.
- Een reeks afbeeldingen voor elk label dat door de Custom Vision-classificatie wordt gebruikt (in dit geval van speelgoed, pennen en vlaggen).
Een beoordelingsteam maken
Zie de quickstart Content Moderator proberen op internet om te lezen hoe u zich kunt aanmelden voor het beoordelingsprogramma Content Moderator en een beoordelingsteam kunt samenstellen. Noteer de waarde voor Team Id op de pagina Create review team.
Aangepaste controletags maken
Maak vervolgens aangepaste tags in het controlehulpprogramma (zie het artikel Tags als u hierbij hulp nodig hebt). In dit geval voegen we deze tags toe: celebrity, USA, flag, toy en pen. Niet alle tags hoeven categorieën te zijn die kunnen worden gedetecteerd in Computer Vision (zoals celebrity). U kunt uw eigen aangepaste tags toevoegen, op voorwaarde dat u Custom Vision traint voor het detecteren van deze tags.

Een Visual Studio-project maken
- Open het dialoogvenster Nieuw project in Visual Studio. Vouw Geïnstalleerd en vervolgens Visual C# uit en selecteer Console App (.NET Framework).
- Noem de toepassing EcommerceModeration en selecteer ok.
- Als u dit project aan een bestaande oplossing toevoegt, selecteert u dit project als het enige opstartproject.
In deze zelfstudie wordt aandacht besteed aan de code die essentieel is voor het project, maar niet elke regel met code wordt besproken. Kopieer de volledige inhoud van Program.cs uit het voorbeeldproject (Samples eCommerce Catalog Moderation) naar het bestand Program.cs van het nieuwe project. Neem vervolgens de onderstaande gedeelten door voor meer informatie over de werking van het project en hoe u dit zelf kunt gebruiken.
API-sleutels en -eindpunten definiëren
In deze zelfstudie worden drie cognitieve services gebruikt. Daarom zijn er drie bijbehorende sleutels en API-eindpunten vereist. Bekijk de volgende velden in de klasse 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";
U moet de velden ___Key bijwerken met de waarde van de abonnementssleutels. en u moet de velden ___Uri wijzigen in de juiste eindpunt-URL’s. (U ontvangt de sleutel en het eindpunt voor Custom Vision later.) U vindt deze waarden op de tabbladen in de quickstart voor elke Azure-resource. Voer in het gedeelte YOURTEAMID van het veld ReviewUri de id in van het beoordelingsteam dat u eerder hebt gemaakt. Het laatste gedeelte van het veld CustomVisionUri vult u later in.
Notitie
Nieuwe resources die zijn gemaakt na 1 juli 2019, hebben aangepaste subdomeinnamen. Zie Aangepaste subdomeinnamen voor Cognitive Services voor meer informatie en een volledige lijst met regionale eindpunten.
Aanroepen van primaire methode
Bekijk de volgende code in de methode Main, waarmee een lijst met afbeeldings-URL's wordt doorlopen. De methode analyseert elke afbeelding met behulp van de drie verschillende services, registreert de toegepaste labels in de matrix ReviewTags en maakt vervolgens een beoordeling voor menselijke moderators door de afbeeldingen naar het Content Moderator-controlehulpprogramma te verzenden. Deze methoden gaan we in de volgende gedeelten bespreken. Als u wilt, kunt u hier aangeven welke afbeeldingen ter beoordeling worden verzonden. Hiervoor gebruikt u de matrix ReviewTags in een voorwaardelijke instructie om te controleren welke tags zijn toegepast.
// 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-methode
Bekijk de methode EvaluateAdultRacy in de klasse Program. Deze methode accepteert een afbeeldings-URL en een matrix van sleutel-waardeparen als parameters. Het roept de Content Moderator Image REST API om de scores voor volwassenen en racy van de afbeelding op te halen. Als de score voor een van de twee hoger is dan 0,4 (het bereik is tussen 0 en 1), wordt de bijbehorende waarde in de matrix ReviewTags ingesteld op 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;
}
Methode EvaluateComputerVisionTags
De volgende methode verwerkt een afbeeldings-URL en de gegevens van uw Computer Vision-abonnement en analyseert de afbeelding op de aanwezigheid van beroemdheden. Als er een of meer beroemdheden worden gevonden in de afbeelding, wordt de bijbehorende waarde in de matrix ReviewTags ingesteld op 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;
}
EvaluateComputerVisionTags-methode
Bekijk nu de methode EvaluateCustomVisionTags, waarmee de daadwerkelijke producten worden geclassificeerd—in dit geval vlaggen, speelgoed en pennen. Volg de instructies in Een classificatie bouwen om uw eigen aangepaste afbeeldingsclassificatie te bouwen en vlaggen, speelgoed en pennen (of wat u ook maar hebt gekozen als aangepaste tags) te detecteren in afbeeldingen. U kunt de afbeeldingen in de map sample-images van de GitHub-opslagplaats gebruiken om snel enkele categorieën in dit voorbeeld te trainen.

Als u de classificatie hebt getraind, haalt u de sleutel en de eindpunt-URL van de voorspelling op en wijst u deze toe aan respectievelijk de velden CustomVisionKey en CustomVisionUri. Zie eventueel De URL en voorspellingssleutel ophalen voor instructies. De methode gebruikt deze waarden om query's uit te voeren op de classificatie. Als de classificatie een of meer van de aangepaste tags vindt in de afbeelding, worden de bijbehorende waarden in de matrix ReviewTags ingesteld op 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;
}
Beoordelingen maken voor het beoordelingsprogramma
In de vorige secties hebt u verkend hoe met de app binnenkomende afbeeldingen worden gescand op inhoud voor volwassen en ongepaste inhoud (Content Moderator), beroemdheden (Computer Vision) en verschillende andere objecten (Custom Vision). Hieronder besteden we aandacht aan de methode CreateReview. Hiermee worden de afbeeldingen, samen met alle toegepaste tags (doorgegeven als Metagegevens), geüpload naar het Content Moderator-controlehulpprogramma.
/// <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;
}
De afbeeldingen worden weergegeven op het tabblad Review van het beoordelingsprogramma Content Moderator.

Een lijst met testafbeeldingen aanbieden
Zoals u kunt zien in de methode Main, zoekt dit programma naar een map 'C:Test' met daarin een bestand Urls.txt dat een lijst met afbeeldings-URL's bevat. Maak dit bestand en deze map, of wijzig het pad zodat het verwijst naar uw tekstbestand. Vul dit bestand vervolgens met de URL's van de afbeeldingen die u wilt testen.
// 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);
Het programma uitvoeren
Als u alle bovenstaande stappen hebt gevolgd, worden de verschillende afbeeldingen in het programma verwerkt (waarbij in alle drie de services wordt gezocht naar de relevante tags), en worden de afbeeldingen vervolgens met de taggegevens geüpload naar het Content Moderator-controlehulpprogramma.
Volgende stappen
In deze zelfstudie hebt u een programma gemaakt voor het analyseren van productafbeeldingen, deze te taggen op producttype, en een beoordelingsteam te laten beslissen of de afbeeldingen al dan niet geschikt zijn. In de volgende zelfstudie wordt meer aandacht besteed aan het beoordelen van gecontroleerde afbeeldingen.