Quickstart: De Content Moderator-clientbibliotheek gebruiken
Ga aan de slag met de Azure Content Moderator-clientbibliotheek voor .NET. Voer deze stappen uit om het NuGet-pakket te installeren en de voorbeeldcode voor basistaken uit te proberen.
Content Moderator is een AI-service waarmee u inhoud kunt afhandelen die mogelijk aanstootgevend, riskant of anderszins ongewenst is. Gebruik de service voor inhoudsbeheer op basis van AI, waarmee tekst, afbeeldingen en video's worden gescand en automatisch inhoudsmarkeringen worden toegepast. Integreer vervolgens uw app met het controleprogramma, een onlinebeheeromgeving voor een team van menselijke revisoren. Voeg software voor het filteren van inhoud toe aan uw app om te voldoen aan de regelgeving of om de beoogde omgeving voor gebruikers te behouden.
Gebruik de Content Moderator-clientbibliotheek voor .NET om:
- Tekst modereren
- Afbeeldingen modereren
- Een beoordeling maken
Referentiedocumentatie | Broncode van bibliotheek | Pakket (NuGet) | Voorbeelden
Vereisten
- Azure-abonnement: Krijg een gratis abonnement
- De Visual Studio IDE of de huidige versie van .NET Core.
- Zodra u een Azure-abonnement hebt, kunt u een Content Moderator-resource maken in Azure Portal om uw sleutel en eindpunt op te halen. Wacht tot deze is geïmplementeerd en klik op de knop Naar de resource gaan.
- U hebt de sleutel en het eindpunt nodig van de resource die u maakt, om de toepassing te verbinden met Content Moderator. Later in de quickstart plakt u uw sleutel en eindpunt in de onderstaande code.
- U kunt de gratis prijscategorie (
F0) gebruiken om de service uit te proberen, en later upgraden naar een betaalde laag voor productie.
Instellen
Een nieuwe C#-toepassing maken
Maak met behulp van Visual Studio een nieuwe .NET Core-toepassing.
De clientbibliotheek installeren
Nadat u een nieuw project hebt gemaakt, installeert u de clientbibliotheek door in Solution Explorer met de rechtermuisknop op de projectoplossing te klikken en NuGet-pakketten beheren te selecteren. Selecteer in de package manager die wordt geopend de optie Bladeren, schakel Prerelease opnemen in en zoek naar Microsoft.Azure.CognitiveServices.ContentModerator. Selecteer versie 2.0.0 en vervolgens Installeren.
Tip
Wilt u het codebestand voor de quickstart in één keer weergeven? Die is te vinden op GitHub, waar de codevoorbeelden uit deze quickstart zich bevinden.
Open vanuit de projectmap het bestand Program.cs in uw favoriete editor of IDE. Voeg de volgende using instructies toe:
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;
Maak in de klasse Programma variabelen voor de sleutel en het eindpunt van uw resource.
Belangrijk
Ga naar Azure Portal. Als de Content Moderator-resource die u in de sectie Vereisten hebt gemaakt, is geïmplementeerd, klikt u op de knop Naar de resource gaan onder Volgende stappen. U vindt uw sleutel en eindpunt op de pagina Sleutel en eindpunt van de resource, onder Resourcebeheer.
Vergeet niet de sleutel uit uw code te verwijderen wanneer u klaar bent, en plaats deze sleutel nooit in het openbaar. Overweeg om voor productie een veilige manier te gebruiken voor het opslaan en openen van uw referenties. Zie het artikel over Cognitive Services-beveiliging voor meer informatie.
// Your Content Moderator subscription key is found in your Azure portal resource on the 'Keys' page.
private static readonly string SubscriptionKey = "PASTE_YOUR_CONTENT_MODERATOR_SUBSCRIPTION_KEY_HERE";
// Base endpoint URL. Found on 'Overview' page in Azure resource. For example: https://westus.api.cognitive.microsoft.com
private static readonly string Endpoint = "PASTE_YOUR_CONTENT_MODERATOR_ENDPOINT_HERE";
Voeg in de methode main() van de toepassing aanroepen toe voor de methoden die in deze quickstart worden gebruikt. U gaat deze later maken.
// 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);
// Moderate text from text in a file
ModerateText(clientText, TextFile, TextOutputFile);
// Moderate images from list of image URLs
ModerateImages(clientImage, ImageUrlFile, ImageOutputFile);
// Create image reviews for human reviewers
CreateReviews(clientReviews, IMAGE_URLS_FOR_REVIEW, TEAM_NAME, ReviewsEndpoint);
Objectmodel
De volgende klassen worden gebruikt voor enkele van de belangrijkste functies van de Content Moderator .NET-clientbibliotheek.
| Naam | Beschrijving |
|---|---|
| ContentModeratorClient | Deze klasse is nodig voor alle Content Moderator-functionaliteit. U instantieert deze klasse met uw abonnementsgegevens en gebruikt deze om instanties van andere klassen te maken. |
| ImageModeration | Deze klasse biedt de functionaliteit voor het analyseren van afbeeldingen op inhoud voor volwassenen, persoonlijke gegevens of menselijke gezichten. |
| TextModeration | Deze klasse biedt de functionaliteit voor het analyseren van tekst op taal, grove taal, fouten en persoonlijke gegevens. |
| Reviews | Deze klasse biedt de functionaliteit van de Review-API's, waaronder de methoden voor het maken van taken, aangepaste werkstromen en menselijke beoordelingen. |
Codevoorbeelden
Deze codefragmenten laten zien hoe u de volgende taken kunt uitvoeren met de Content Moderator-clientbibliotheek voor .NET:
De client verifiëren
Instantieer in een nieuwe methode clientobjecten met uw eindpunt en sleutel.
public static ContentModeratorClient Authenticate(string key, string endpoint)
{
ContentModeratorClient client = new ContentModeratorClient(new ApiKeyServiceClientCredentials(key));
client.Endpoint = endpoint;
return client;
}
Tekst modereren
In de volgende code wordt een Content Moderator-client gebruikt om een stuk tekst te analyseren en de resultaten af te drukken naar de console. Definieer in- en uitvoerbestanden in de hoofdsectie van uw Program-klasse:
// 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";
Voeg vervolgens in de hoofdmap van uw project een TextFile.txt toe. Voeg uw eigen tekst toe aan dit bestand, of gebruik de volgende voorbeeldtekst:
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
Definieer vervolgens de tekstmoderatiemethode ergens in uw Program-klasse:
/*
* 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();
}
Afbeeldingen modereren
In de volgende code wordt een Content Moderator-client samen met een ImageModeration-object gebruikt om externe afbeeldingen te analyseren op inhoud voor volwassenen.
Notitie
U kunt ook de inhoud van een lokale afbeelding analyseren. Zie de naslagdocumentatie voor methoden en bewerkingen die werken met lokale afbeeldingen.
Voorbeeldafbeeldingen ophalen
Definieer uw in- en uitvoerbestanden in de hoofdmap van de klasse Programma:
// 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";
Maak vervolgens het invoerbestand, ImageFiles.txt, in de hoofdmap van uw project. In dit bestand voegt u de URL's van te analyseren afbeeldingen toe, met—één URL per regel. U kunt de volgende voorbeeldafbeeldingen gebruiken:
https://moderatorsampleimages.blob.core.windows.net/samples/sample2.jpg
https://moderatorsampleimages.blob.core.windows.net/samples/sample5.png
Helperklasse definiëren
Voeg de volgende klassedefinitie toe in de Program-klasse. Deze binnenklasse handelt afbeeldingsmoderatieresultaten af.
// 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;
}
De methode voor het modereren van afbeeldingen definiëren
De volgende methode doorloopt de afbeeldings-URL's in een tekstbestand, maakt een EvaluationData-instantie en analyseert de afbeelding op inhoud voor volwassenen, tekst en menselijke gezichten. Vervolgens wordt de EvaluationData instantie toegevoegd aan een lijst en wordt de volledige lijst met geretourneerde gegevens naar de console geschreven.
Afbeeldingen doorlopen
/*
* 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());
Inhoud analyseren
Zie de handleiding Image moderation concepts (concepten voor afbeeldingsmoderatie) voor informatie over de afbeeldingskenmerken waarop Content Moderator let.
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);
}
}
}
Moderatieresultaten naar bestand schrijven
// 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();
}
}
Een beoordeling maken
U kunt de Content Moderator .NET-clientbibliotheek gebruiken om inhoud naar het beoordelingsprogramma te sturen zodat menselijke moderators die kunnen beoordelen. Zie de conceptgids over het beoordelingsprogramma voor meer informatie over het beoordelingsprogramma.
De methode in deze sectie gebruikt de Reviews-klasse om een beoordeling te maken, de id ervan op te halen en de gegevens ervan te controleren na menselijke invoer te hebben gekregen via de webportal van het beoordelingsprogramma. Al deze gegevens worden vastgelegd in een uitvoertekstbestand.
Voorbeeldafbeeldingen ophalen
Declareer de volgende matrix in de hoofdsectie van uw Program-klasse. Deze variabele verwijst naar een voorbeeldafbeelding die moet worden gebruikt om de beoordeling te maken.
// 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" };
Beoordelingsreferentie ophalen
Meld u aan bij het beoordelingsprogramma en haal uw teamnaam op. Wijs deze toe aan de juiste variabele in de Program-klasse. U kunt desgewenst een callback-eindpunt instellen om updates te ontvangen over de activiteit van de beoordeling.
// 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 = "CONTENT_MODERATOR_TEAM_NAME";
// The callback endpoint for completed human reviews.
// 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 = "CONTENT_MODERATOR_REVIEWS_ENDPOINT";
Helperklasse definiëren
Voeg de volgende klassedefinitie toe in uw Program-klasse. Deze klasse wordt gebruikt om één beoordelingsinstantie te vertegenwoordigen die naar het beoordelingsprogramma wordt verzonden.
// 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;
}
Helpermethode definiëren
Voeg de volgende methode toe aan de klasse Program. Deze methode schrijft de resultaten van beoordelingsquery's naar het uitvoertekstbestand.
// 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); }
}
De methode voor het maken van beoordelingen definiëren
Nu bent u klaar om de methode te definiëren waarmee het maken van beoordelingen en het opvragen ervan wordt afgehandeld. Voeg een nieuwe methode toe, CreateReviews, definieer de volgende lokale variabelen.
// 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>();
Beoordelingen posten naar het beoordelingsprogramma
Voeg nu de volgende code toe om de gegeven voorbeeldafbeeldingen te doorlopen, metagegevens toe te voegen en ze in één batch naar het beoordelingsprogramma te sturen.
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);
Het object dat door de API-aanroep wordt geretourneerd, bevat unieke id-waarde voor elke geüploade afbeelding. De volgende code parseert deze id's en gebruikt deze om de status van elke afbeelding in de batch op te vragen bij Content Moderator.
// 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);
}
Beoordelingsdetails ophalen
De volgende code zorgt ervoor dat het programma wacht op gebruikersinvoer. Wanneer u tijdens de uitvoering bij deze stap komt, kunt u zelf naar het beoordelingsprogramma gaan, controleren dat de voorbeeldafbeelding is geüpload en daarmee werken. Zie de instructiegids voor Reviews voor informatie over het werken met een beoordeling. Wanneer u klaar bent, kunt u op een willekeurige toets drukken om door te gaan met het programma en de resultaten van het beoordelingsproces op te halen.
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("--------------------------------------------------------------");
}
Als u in dit scenario een callback-eindpunt hebt gebruikt, zou het een gebeurtenis in deze indeling moeten ontvangen:
{'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'}
De toepassing uitvoeren
Voer de toepassing uit door boven in het IDE-venster op de knop Fouten opsporen te klikken.
Resources opschonen
Als u een Cognitive Services-abonnement wilt opschonen en verwijderen, kunt u de resource of resourcegroep verwijderen. Als u de resourcegroep verwijdert, worden ook alle bijbehorende resources verwijderd.
Volgende stappen
In deze quickstart hebt u geleerd hoe u de Content Moderator .NET-bibliotheek kunt gebruiken om moderatietaken uit te voeren. Nu kunt u doorgaan en in conceptgids meer lezen over het modereren van afbeeldingen en andere media.
Ga aan de slag met de Azure Content Moderator-clientbibliotheek voor Java. Voer deze stappen uit om het Maven-pakket te installeren en de voorbeeldcode voor basistaken uit te proberen.
Content Moderator is een AI-service waarmee u inhoud kunt afhandelen die mogelijk aanstootgevend, riskant of anderszins ongewenst is. Gebruik de service voor inhoudsbeheer op basis van AI, waarmee tekst, afbeeldingen en video's worden gescand en automatisch inhoudsmarkeringen worden toegepast. Voeg software voor het filteren van inhoud toe aan uw app om te voldoen aan de regelgeving of om de beoogde omgeving voor gebruikers te behouden.
Gebruik de Content Moderator-clientbibliotheek voor Java om:
- Tekst modereren
- Afbeeldingen modereren
Referentiedocumentatie | Broncode bibliotheek |Artefact (Maven) | Voorbeelden
Vereisten
- Een Azure-abonnement - Een gratis abonnement maken
- De huidige versie van de Java Development Kit (JDK)
- Het hulpprogramma Gradle of een andere afhankelijkheidsbeheerder.
- Zodra u een Azure-abonnement hebt, kunt u een Content Moderator-resource maken in Azure Portal om uw sleutel en eindpunt op te halen. Wacht tot deze is geïmplementeerd en klik op de knop Naar de resource gaan.
- U hebt de sleutel en het eindpunt nodig van de resource die u maakt, om de toepassing te verbinden met Content Moderator. Later in de quickstart plakt u uw sleutel en eindpunt in de onderstaande code.
- U kunt de gratis prijscategorie (
F0) gebruiken om de service uit te proberen, en later upgraden naar een betaalde laag voor productie.
Instellen
Een nieuw Gradle-project maken
Maak in een consolevenster (zoals cmd, PowerShell of Bash) een nieuwe map voor de app, en navigeer naar deze map.
mkdir myapp && cd myapp
Voer de opdracht gradle init uit vanuit uw werkmap. Met deze opdracht maakt u essentiële buildbestanden voor Gradle, inclusief build.gradle.kts, dat tijdens runtime wordt gebruikt om de toepassing te maken en te configureren.
gradle init --type basic
Wanneer u wordt gevraagd om een DSL te kiezen, selecteert u Kotlin.
De clientbibliotheek installeren
Zoek build.gradle.kts op en open het met uw favoriete IDE of teksteditor. Kopieer het vervolgens in de volgende buildconfiguratie. Deze configuratie definieert het project als een Java-toepassing waarvan het toegangspunt de klasse ContentModeratorQuickstart is. Hiermee worden de Content Moderator clientbibliotheek en de GSON-SDK voor JSON-serialisatie geïmporteerd.
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")
}
Een Java-bestand maken
Voer de volgende opdracht uit vanuit uw werkmap om een projectbronmap te maken:
mkdir -p src/main/java
Ga naar de nieuwe map en maak een bestand met de naam ContentModeratorQuickstart.java. Open het bestand in uw voorkeurseditor of IDE en voeg de volgende import-instructies toe:
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.*;
Tip
Wilt u het codebestand voor de quickstart in één keer weergeven? Die is te vinden op GitHub, waar de codevoorbeelden uit deze quickstart zich bevinden.
Maak in de klasse ContentModeratorQuickstart van de toepassing variabelen voor de sleutel en het eindpunt van uw resource.
private static final String subscriptionKey = "<your-subscription-key>";
private static final String endpoint = "<your-api-endpoint>";
Belangrijk
Ga naar Azure Portal. Als de Content Moderator-resource die u in de sectie Vereisten hebt gemaakt, is geïmplementeerd, klikt u op de knop Naar de resource gaan onder Volgende stappen. U vindt uw sleutel en eindpunt op de pagina Sleutel en eindpunt van de resource, onder Resourcebeheer.
Vergeet niet de sleutel uit uw code te verwijderen wanneer u klaar bent, en plaats deze sleutel nooit in het openbaar. Overweeg om voor productie een veilige manier te gebruiken voor het opslaan en openen van uw referenties. Zie het artikel over Cognitive Services-beveiliging voor meer informatie.
Voeg in de hoofdmethode van de toepassing aanroepen toe voor de methoden die in deze quickstart worden gebruikt. U definieert deze methoden later.
// Create a List in which to store the image moderation results.
List<EvaluationData> evaluationData = new ArrayList<EvaluationData>();
// Moderate URL images
moderateImages(client, evaluationData);
// Moderate text from file
moderateText(client);
// Create a human review
humanReviews(client);
Objectmodel
De volgende klassen worden gebruikt voor enkele van de belangrijkste functies van de Content Moderator Java-clientbibliotheek.
| Naam | Beschrijving |
|---|---|
| ContentModeratorClient | Deze klasse is nodig voor alle Content Moderator-functionaliteit. U instantieert deze klasse met uw abonnementsgegevens en gebruikt deze om instanties van andere klassen te maken. |
| ImageModeration | Deze klasse biedt de functionaliteit voor het analyseren van afbeeldingen op inhoud voor volwassenen, persoonlijke gegevens of menselijke gezichten. |
| TextModerations | Deze klasse biedt de functionaliteit voor het analyseren van tekst op taal, grove taal, fouten en persoonlijke gegevens. |
| Reviews | Deze klasse biedt de functionaliteit van de Review-API's, waaronder de methoden voor het maken van taken, aangepaste werkstromen en menselijke beoordelingen. |
Codevoorbeelden
Deze codefragmenten laten zien hoe u de volgende taken kunt uitvoeren met de Content Moderator-clientbibliotheek voor Java:
De client verifiëren
Maak in de main-methode van de toepassing een ContentModeratorClient-object met behulp van de eindpuntwaarde van uw abonnement en de abonnementssleutel.
// 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(endpoint),
"CONTENT_MODERATOR_SUBSCRIPTION_KEY");
Tekst modereren
Voorbeeldtekst instellen
Definieer bovenaan de ContentModeratorQuickstart -klasse een verwijzing naar een lokaal tekstbestand. Voeg een .txt-bestand toe aan uw projectmap en voer de tekst in die u wilt analyseren.
// TEXT MODERATION variable
private static File textFile = new File("src\\main\\resources\\TextModeration.txt");
Tekst analyseren
Maak een nieuwe methode die het .txt-bestand leest en de screenText -methode op elke regel aanroept.
public static void moderateText(ContentModeratorClient client) {
System.out.println("---------------------------------------");
System.out.println("MODERATE TEXT");
System.out.println();
try (BufferedReader inputStream = new BufferedReader(new FileReader(textFile))) {
String line;
Screen textResults = null;
// For formatting the printed results
Gson gson = new GsonBuilder().setPrettyPrinting().create();
while ((line = inputStream.readLine()) != null) {
if (line.length() > 0) {
textResults = client.textModerations().screenText("text/plain", line.getBytes(), null);
// Uncomment below line to print in console
// System.out.println(gson.toJson(textResults).toString());
}
}
Resultaten van tekstbeheer afdrukken
Voeg de volgende code toe om de beheerresultaten naar een. JSON-bestand in de projectmap af te drukken.
System.out.println("Text moderation status: " + textResults.status().description());
System.out.println();
// Create output results file to TextModerationOutput.json
BufferedWriter writer = new BufferedWriter(
new FileWriter(new File("src\\main\\resources\\TextModerationOutput.json")));
writer.write(gson.toJson(textResults).toString());
System.out.println("Check TextModerationOutput.json to see printed results.");
System.out.println();
writer.close();
Sluit de try- en catch-instructie om de methode uit te voeren.
} catch (Exception e) {
System.out.println(e.getMessage());
e.printStackTrace();
}
}
Afbeeldingen modereren
Voorbeeldafbeelding instellen
Maak in een nieuwe methode een BodyModelModel -object met een opgegeven URL-tekenreeks die naar een afbeelding verwijst.
public static void moderateImages(ContentModeratorClient client, List<EvaluationData> resultsList) {
System.out.println();
System.out.println("---------------------------------------");
System.out.println("MODERATE IMAGES");
System.out.println();
try {
String urlString = "https://moderatorsampleimages.blob.core.windows.net/samples/sample2.jpg";
// Evaluate each line of text
BodyModelModel url = new BodyModelModel();
url.withDataRepresentation("URL");
url.withValue(urlString);
// Save to EvaluationData class for later
EvaluationData imageData = new EvaluationData();
imageData.ImageUrl = url.value();
Helperklasse definiëren
Voeg vervolgens in uw ContentModeratorQuickstart.java-bestand de volgende klassedefinitie toe aan de klasse ContentModeratorQuickstart. Deze binnenste klasse wordt gebruikt in het proces voor afbeeldingsmoderatie.
// 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;
}
Inhoud analyseren
Met deze coderegel wordt de afbeelding op de opgegeven URL op inhoud voor volwassenen of racistische inhoud gecontroleerd. Zie de conceptuele handleiding voor afbeeldingsmoderatie voor informatie over deze voorwaarden.
// Evaluate for adult and racy content.
imageData.ImageModeration = client.imageModerations().evaluateUrlInput("application/json", url,
new EvaluateUrlInputOptionalParameter().withCacheImage(true));
Thread.sleep(1000);
Controleren op tekst
Met deze coderegel wordt de afbeelding gecontroleerd op zichtbare tekst.
// Detect and extract text from image.
imageData.TextDetection = client.imageModerations().oCRUrlInput("eng", "application/json", url,
new OCRUrlInputOptionalParameter().withCacheImage(true));
Thread.sleep(1000);
Controleren op gezichten
Met deze coderegel wordt de afbeelding gecontroleerd op menselijke gezichten.
// Detect faces.
imageData.FaceDetection = client.imageModerations().findFacesUrlInput("application/json", url,
new FindFacesUrlInputOptionalParameter().withCacheImage(true));
Thread.sleep(1000);
Sla tot slot de geretourneerde informatie op in de lijst EvaluationData.
resultsList.add(imageData);
Resultaten afdrukken
Voeg na de while-lus de volgende code toe, waarmee de resultaten worden afgedrukt op de console en op een uitvoerbestand, 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();
Sluit de try-instructie en voeg een catch-instructie toe om de methode uit te voeren.
} catch (Exception e) {
System.out.println(e.getMessage());
e.printStackTrace();
}
De toepassing uitvoeren
U kunt de app maken met:
gradle build
De toepassing uitvoeren met de opdracht gradle run:
gradle run
Ga vervolgens naar de bestand src/main/resources/ModerationOutput.json en bekijk de resultaten van de inhoud van uw inhoudsmoderatie.
Resources opschonen
Als u een Cognitive Services-abonnement wilt opschonen en verwijderen, kunt u de resource of resourcegroep verwijderen. Als u de resourcegroep verwijdert, worden ook alle bijbehorende resources verwijderd.
Volgende stappen
In deze quickstart hebt u geleerd hoe u de Content Moderator Java-bibliotheek kunt gebruiken om moderatietaken uit te voeren. Nu kunt u doorgaan en in conceptgids meer lezen over het modereren van afbeeldingen en andere media.
Ga aan de slag met de Azure Content Moderator-clientbibliotheek voor Python. Volg deze stappen om het PiPy-pakket te installeren en de voorbeeldcode voor basistaken uit te proberen.
Content Moderator is een AI-service waarmee u inhoud kunt afhandelen die mogelijk aanstootgevend, riskant of anderszins ongewenst is. Gebruik de service voor inhoudsbeheer op basis van AI, waarmee tekst, afbeeldingen en video's worden gescand en automatisch inhoudsmarkeringen worden toegepast. Integreer vervolgens uw app met het controleprogramma, een online beheeromgeving voor een team van menselijke revisoren. Voeg software voor het filteren van inhoud toe aan uw app om te voldoen aan de regelgeving of om de beoogde omgeving voor gebruikers te behouden.
Gebruik de Content Moderator-clientbibliotheek voor Python om het volgende te doen:
- Tekst modereren
- Aangepaste termenlijst gebruiken
- Afbeeldingen modereren
- Een aangepaste afbeeldingslijst gebruiken
- Een beoordeling maken
Referentiedocumentatie | Broncode bibliotheek | Package (PiPy) | Voorbeelden
Vereisten
- Azure-abonnement: Krijg een gratis abonnement
- Python 3.x
- De python-installatie moet PIPbevatten. U kunt controleren of u PIP hebt geïnstalleerd door uit te voeren
pip --versionop de opdracht regel. Ontvang PIP door de meest recente versie van python te installeren.
- De python-installatie moet PIPbevatten. U kunt controleren of u PIP hebt geïnstalleerd door uit te voeren
- Wanneer u uw Azure-abonnement hebt, een content moderator resource in de Azure Portal om uw sleutel en eind punt op te halen. Wacht tot deze is geïmplementeerd en klik op de knop Naar de resource gaan.
- U hebt de sleutel en het eindpunt nodig van de resource die u maakt, om de toepassing te verbinden met Content Moderator. Later in de quickstart plakt u uw sleutel en eindpunt in de onderstaande code.
- U kunt de gratis prijscategorie (
F0) gebruiken om de service uit te proberen, en later upgraden naar een betaalde laag voor productie.
Instellen
De clientbibliotheek installeren
Nadat u Python hebt geïnstalleerd, kunt u de Content Moderator-clientbibliotheek installeren met de volgende opdracht:
pip install --upgrade azure-cognitiveservices-vision-contentmoderator
Een nieuwe Python-toepassing maken
Maak een nieuw Python-script en open het in uw favoriete editor of IDE. Voeg bovenaan het bestand de volgende import-instructies toe.
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
Tip
Wilt u het codebestand voor de quickstart in één keer weergeven? Die is te vinden op GitHub, waar de codevoorbeelden uit deze quickstart zich bevinden.
Maak vervolgens variabelen voor de eindpuntlocatie en sleutel van uw resource.
CONTENT_MODERATOR_ENDPOINT = "PASTE_YOUR_CONTENT_MODERATOR_ENDPOINT_HERE"
subscription_key = "PASTE_YOUR_CONTENT_MODERATOR_SUBSCRIPTION_KEY_HERE"
Belangrijk
Ga naar Azure Portal. Als de Content Moderator-resource die u in de sectie Vereisten hebt gemaakt, is geïmplementeerd, klikt u op de knop Naar de resource gaan onder Volgende stappen. U vindt uw sleutel en eindpunt op de pagina Sleutel en eindpunt van de resource, onder Resourcebeheer.
Vergeet niet de sleutel uit uw code te verwijderen wanneer u klaar bent, en plaats deze sleutel nooit in het openbaar. Overweeg om voor productie een veilige manier te gebruiken voor het opslaan en openen van uw referenties. Bijvoorbeeld Azure Key Vault.
Objectmodel
De volgende klassen worden gebruikt voor enkele van de belangrijkste functies van de Content Moderator Python-clientbibliotheek.
| Naam | Beschrijving |
|---|---|
| ContentModeratorClient | Deze klasse is nodig voor alle Content Moderator-functionaliteit. U instantieert deze klasse met uw abonnementsgegevens en gebruikt deze om instanties van andere klassen te maken. |
| ImageModerationOperations | Deze klasse biedt de functionaliteit voor het analyseren van afbeeldingen op inhoud voor volwassenen, persoonlijke gegevens of menselijke gezichten. |
| TextModerationOperations | Deze klasse biedt de functionaliteit voor het analyseren van tekst op taal, grove taal, fouten en persoonlijke gegevens. |
| ReviewsOperations | Deze klasse biedt de functionaliteit van de Review-API's, waaronder de methoden voor het maken van taken, aangepaste werkstromen en menselijke beoordelingen. |
Codevoorbeelden
Deze codefragmenten laten zien hoe u de volgende taken kunt uitvoeren met de Content Moderator-clientbibliotheek voor Python:
- De client verifiëren
- Tekst modereren
- Aangepaste begrippenlijst gebruiken
- Afbeeldingen modereren
- Een aangepaste afbeeldingslijst gebruiken
- Een beoordeling maken
De client verifiëren
Instantieer een client met uw eindpunt en sleutel. Maak een CognitiveServicesCredentials-object met uw sleutel en gebruik het met uw eindpunt om een ContentModeratorClient--object te maken.
client = ContentModeratorClient(
endpoint=CONTENT_MODERATOR_ENDPOINT,
credentials=CognitiveServicesCredentials(subscription_key)
)
Tekst modereren
In de volgende code wordt een Content Moderator-client gebruikt om een stuk tekst te analyseren en de resultaten af te drukken naar de console. Maak eerst de map text_files/ in de hoofdmap van het project en voeg een bestand met de naam content_moderator_text_moderation.txt toe. Voeg uw eigen tekst toe aan dit bestand, of gebruik de volgende voorbeeldtekst:
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
Voeg een verwijzing toe naar de nieuwe map.
TEXT_FOLDER = os.path.join(os.path.dirname(
os.path.realpath(__file__)), "text_files")
Voeg de volgende code toe aan uw 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())
Aangepaste termenlijst gebruiken
De volgende code laat zien hoe u een lijst met aangepaste termen voor tekstmoderatie beheert. U kunt de klasse ListManagementTermListsOperations gebruiken om een lijst met termen te maken, de afzonderlijke termen te beheren en andere teksten ermee te screenen.
Voorbeeldtekst ophalen
Om dit voorbeeld te gebruiken moet u de map text_files/ maken in de hoofdmap van het project en een bestand met de naam content_moderator_term_list.txt toevoegen. Dit bestand moet organische tekst bevatten die wordt gecontroleerd aan de hand van de lijst met termen. U kunt de volgende voorbeeldtekst gebruiken:
This text contains the terms "term1" and "term2".
Voeg een verwijzing naar de map toe als u deze nog niet hebt gedefinieerd.
TEXT_FOLDER = os.path.join(os.path.dirname(
os.path.realpath(__file__)), "text_files")
Een lijst maken
Voeg de volgende code toe aan het Python-script om een lijst met aangepaste termen te maken en de id-waarde op te slaan.
#
# 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
Lijstdetails definiëren
U kunt de ID van een lijst gebruiken om de naam en beschrijving ervan te bewerken.
#
# 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())
Een term toevoegen aan de lijst
Met de volgende code worden de termen "term1" en "term2" aan de lijst toegevoegd.
#
# 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"
)
Alle termen in de lijst ophalen
U kunt de lijst-id gebruiken om alle termen in de lijst te retourneren.
#
# 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())
De lijstindex vernieuwen
Wanneer u termen aan de lijst toevoegt of eruit verwijdert, moet u de index vernieuwen voordat u de bijgewerkte lijst kunt gebruiken.
#
# 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)
Tekst screenen op basis van de lijst
De belangrijkste functionaliteit van de lijst met aangepaste termen is het vergelijken van teksten met de lijst om te zien of er overeenkomende termen zijn.
#
# 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())
Een term uit een lijst verwijderen
Met de volgende code wordt de term "term1" verwijderd uit de lijst.
#
# 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"
)
Alle termen uit een lijst verwijderen
Gebruik de volgende code om alle termen van een lijst te wissen.
#
# 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")
Een lijst verwijderen
Gebruik de volgende code om een lijst met aangepaste termen te verwijderen.
#
# Delete list
#
print("\nDelete the term list {}".format(list_id))
client.list_management_term_lists.delete(list_id=list_id)
Afbeeldingen modereren
In de volgende code wordt een Content Moderator-client samen met een ImageModerationOperations-object gebruikt om externe afbeeldingen te analyseren op inhoud voor volwassenen.
Voorbeeldafbeeldingen ophalen
Definieer een verwijzing naar enkele te analyseren afbeeldingen.
IMAGE_LIST = [
"https://moderatorsampleimages.blob.core.windows.net/samples/sample2.jpg",
"https://moderatorsampleimages.blob.core.windows.net/samples/sample5.png"
]
Voeg vervolgens de volgende code toe om uw afbeeldingen te doorlopen. De rest van de code in deze sectie wordt binnen deze lus geplaatst.
for image_url in IMAGE_LIST:
print("\nEvaluate image {}".format(image_url))
Controleren op inhoud voor volwassenen/gewaagde inhoud
Met de volgende code wordt de afbeelding op de opgegeven URL gecontroleerd op inhoud voor volwassenen of gewaagde inhoud en worden de resultaten afgedrukt naar de console. Zie de handleiding Concepten voor afbeeldingsmoderatie voor informatie over de betekenis van deze begrippen.
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())
Controleren op zichtbare tekst
Met de volgende code wordt de afbeelding gecontroleerd op zichtbare tekstinhoud en worden de resultaten afgedrukt naar de 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())
Controleren op gezichten
Met de volgende code wordt de afbeelding gecontroleerd op menselijke gezichten en worden de resultaten afgedrukt naar de 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())
Een aangepaste afbeeldingslijst gebruiken
De volgende code laat zien hoe u een aangepaste lijst met afbeeldingen voor afbeeldingsmoderatie beheert. Deze functie is handig als uw platform vaak exemplaren van dezelfde set afbeeldingen ontvangt die u eruit wilt filteren. Door een lijst bij te houden van deze specifieke afbeeldingen, kunt u de prestaties verbeteren. Met de klasse ListManagementImageListsOperations kunt u een lijst met afbeeldingen maken, de afzonderlijke afbeeldingen in de lijst beheren en andere afbeeldingen ermee vergelijken.
Maak de volgende tekstvariabelen om de afbeeldings-URL's op te slaan die u in dit scenario gebruikt.
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"
]
Notitie
Dit is niet de eigenlijke lijst zelf, maar een informele lijst met afbeeldingen die worden toegevoegd in de sectie add images van de code.
Een afbeeldingslijst maken
Voeg de volgende code toe om een lijst met afbeeldingen te maken en sla een verwijzing naar de id ervan op te slaan.
#
# 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
Afbeeldingen toevoegen aan een lijst
Met de volgende code worden al uw afbeeldingen aan de lijst toegevoegd.
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
Definieer de hulpfunctie add_images elders in het 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
Afbeeldingen in lijst ophalen
Met de volgende code worden de namen van alle afbeeldingen in uw lijst afgedrukt.
#
# 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())
Lijstdetails bijwerken
U kunt de lijst-id gebruiken om de naam en beschrijving van de lijst bij te werken.
#
# 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())
Lijstdetails ophalen
Gebruik de volgende code om de huidige details van de lijst af te drukken.
#
# 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())
De lijstindex vernieuwen
Nadat u afbeeldingen hebt toegevoegd of verwijderd, moet u de lijstindex vernieuwen voordat u deze kunt gebruiken om andere afbeeldingen te screenen.
#
# 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)
Afbeeldingen vergelijken met de lijst
De belangrijkste functie van lijsten met afbeeldingen is nieuwe afbeeldingen ermee te vergelijken en te controleren of er overeenkomsten zijn.
#
# 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())
Een afbeelding verwijderen uit de lijst
Met de volgende code wordt een item uit de lijst verwijderd. In dit geval is het een afbeelding die niet in de lijstcategorie past.
#
# 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]
)
Alle afbeeldingen uit een lijst verwijderen
Gebruik de volgende code om een lijst met afbeeldingen leeg te maken.
#
# 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)
De lijst met afbeeldingen verwijderen
Gebruik de volgende code om een lijst met afbeeldingen te verwijderen.
#
# Delete list
#
print("\nDelete the image list {}".format(list_id))
client.list_management_image_lists.delete(list_id=list_id)
Een beoordeling maken
U kunt de Content Moderator Python-clientbibliotheek gebruiken om inhoud naar het Review-programma te sturen zodat menselijke moderators die kunnen beoordelen. Zie de conceptgids over het beoordelingsprogramma voor meer informatie over het beoordelingsprogramma.
In de volgende code wordt de Reviews-klasse gebruikt om een beoordeling te maken, de id ervan op te halen en de gegevens ervan te controleren na menselijke invoer te hebben gekregen via de webportal van het Review-programma.
Review-referentie ophalen
Begin door u aan te melden bij het Review-programma en uw teamnaam op te halen. Wijs deze vervolgens toe aan de juiste variabele in de code. U kunt desgewenst een callback-eindpunt instellen om updates te ontvangen over de activiteit van de beoordeling.
# 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"
Een afbeeldingsbeoordeling maken
Voeg de volgende code toe om een beoordeling te maken en te posten voor de opgegeven afbeeldings-URL. Met de code wordt een verwijzing naar de beoordelings-id opgeslagen.
# 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
Beoordelingsdetails ophalen
Gebruik de volgende code om de details van een bepaalde beoordeling te controleren. Nadat u de beoordeling hebt gemaakt, kunt u zelf naar het Review-programma gaan en werken met de inhoud. Zie de Instructiegids voor Review voor informatie hierover. Wanneer u klaar bent, kunt u deze code opnieuw uitvoeren en worden de resultaten van het beoordelingsproces opgehaald.
print("\nGet review details")
review_details = client.reviews.get_review(
team_name=team_name, review_id=review_id)
pprint(review_details.as_dict())
Als u in dit scenario een callback-eindpunt hebt gebruikt, zou het een gebeurtenis in deze indeling moeten ontvangen:
{'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'}
De toepassing uitvoeren
Voer de toepassing uit met de opdracht python in uw quickstart-bestand.
python quickstart-file.py
Resources opschonen
Als u een Cognitive Services-abonnement wilt opschonen en verwijderen, kunt u de resource of resourcegroep verwijderen. Als u de resourcegroep verwijdert, worden ook alle bijbehorende resources verwijderd.
Volgende stappen
In deze quickstart hebt u geleerd hoe u de Content Moderator Python-bibliotheek kunt gebruiken om moderatietaken uit te voeren. Nu kunt u doorgaan en in conceptgids meer lezen over het modereren van afbeeldingen en andere media.
Ga aan de slag met de Azure Content Moderator-REST API.
Content Moderator is een AI-service waarmee u inhoud kunt afhandelen die mogelijk aanstootgevend, riskant of anderszins ongewenst is. Gebruik de service voor inhoudsbeheer op basis van AI, waarmee tekst, afbeeldingen en video's worden gescand en automatisch inhoudsmarkeringen worden toegepast. Integreer vervolgens uw app met het controleprogramma, een onlinebeheeromgeving voor een team van menselijke revisoren. Voeg software voor het filteren van inhoud toe aan uw app om te voldoen aan de regelgeving of om de beoogde omgeving voor gebruikers te behouden.
Gebruik de Content Moderator-REST API voor:
- Tekst modereren
- Afbeeldingen modereren
Vereisten
- Azure-abonnement: Krijg een gratis abonnement
- Zodra u een Azure-abonnement hebt, kunt u een Content Moderator-resource maken in Azure Portal om uw sleutel en eindpunt op te halen. Wacht tot deze is geïmplementeerd en klik op de knop Naar de resource gaan.
- U hebt de sleutel en het eindpunt nodig van de resource die u maakt, om de toepassing te verbinden met Content Moderator. Later in de quickstart plakt u uw sleutel en eindpunt in de onderstaande code.
- U kunt de gratis prijscategorie (
F0) gebruiken om de service uit te proberen, en later upgraden naar een betaalde laag voor productie.
- Power shell versie 6.0 +, of een vergelijk bare opdracht regel toepassing.
Tekst modereren
U gebruikt een opdracht als wat hier volgt om de Content Moderator-API aan te roepen om een stuk tekst te analyseren en de resultaten af te drukken naar de console.
curl -v -X POST "https://westus.api.cognitive.microsoft.com/contentmoderator/moderate/v1.0/ProcessText/Screen?autocorrect=True&PII=True&classify=True&language={string}"
-H "Content-Type: text/plain"
-H "Ocp-Apim-Subscription-Key: {subscription key}"
--data-ascii "Is this a crap email abcdef@abcd.com, phone: 6657789887, IP: 255.255.255.255, 1 Microsoft Way, Redmond, WA 98052"
Kopieer de opdracht naar een teksteditor en maak de volgende wijzigingen:
- Wijs
Ocp-Apim-Subscription-Keytoe aan de geldige Face-abonnementssleutel. - Wijzig het eerste deel van deze URL, zodat deze overeenkomt met het eindpunt dat bij uw abonnementssleutel hoort.
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.
- Wijzig eventueel de hoofdtekst van de aanvraag naar een teksttekenreeks die u wilt analyseren.
Nadat u de wijzigingen hebt aangebracht, opent u een opdrachtprompt en voert u de nieuwe opdracht in.
De resultaten bekijken
De resultaten van het tekstbeheer worden nu in het consolevenster weergegeven als JSON-gegevens. Bijvoorbeeld:
{
"OriginalText": "Is this a crap email abcdef@abcd.com, phone: 6657789887, IP: 255.255.255.255,\n1 Microsoft Way, Redmond, WA 98052\n",
"NormalizedText": "Is this a crap email abide@ abed. com, phone: 6657789887, IP: 255. 255. 255. 255, \n1 Microsoft Way, Redmond, WA 98052",
"AutoCorrectedText": "Is this a crap email abide@ abed. com, phone: 6657789887, IP: 255. 255. 255. 255, \n1 Microsoft Way, Redmond, WA 98052",
"Misrepresentation": null,
"PII": {
"Email": [
{
"Detected": "abcdef@abcd.com",
"SubType": "Regular",
"Text": "abcdef@abcd.com",
"Index": 21
}
],
"IPA": [
{
"SubType": "IPV4",
"Text": "255.255.255.255",
"Index": 61
}
],
"Phone": [
{
"CountryCode": "US",
"Text": "6657789887",
"Index": 45
}
],
"Address": [
{
"Text": "1 Microsoft Way, Redmond, WA 98052",
"Index": 78
}
]
},
"Classification": {
"Category1":
{
"Score": 0.5
},
"Category2":
{
"Score": 0.6
},
"Category3":
{
"Score": 0.5
},
"ReviewRecommended": true
},
"Language": "eng",
"Terms": [
{
"Index": 10,
"OriginalIndex": 10,
"ListId": 0,
"Term": "crap"
}
],
"Status": {
"Code": 3000,
"Description": "OK",
"Exception": null
},
"TrackingId": "1717c837-cfb5-4fc0-9adc-24859bfd7fac"
}
Zie de handleiding Text moderation concepts (concepten voor tekstmoderatie) voor informatie over de tekstkenmerken waarop Content Moderator let.
Afbeeldingen modereren
U gebruikt een opdracht als wat hier volgt om de Content Moderator-API aan te roepen om een externe afbeelding te modereren en de resultaten af te drukken naar de console.
curl -v -X POST "https://westus.api.cognitive.microsoft.com/contentmoderator/moderate/v1.0/ProcessImage/Evaluate?CacheImage={boolean}"
-H "Content-Type: application/json"
-H "Ocp-Apim-Subscription-Key: {subscription key}"
--data-ascii "{\"DataRepresentation\":\"URL\", \"Value\":\"https://moderatorsampleimages.blob.core.windows.net/samples/sample.jpg\"}"
Kopieer de opdracht naar een teksteditor en maak de volgende wijzigingen:
- Wijs
Ocp-Apim-Subscription-Keytoe aan de geldige Face-abonnementssleutel. - Wijzig het eerste deel van deze URL, zodat deze overeenkomt met het eindpunt dat bij uw abonnementssleutel hoort.
- Wijzig eventueel de URL voor
"Value"in de hoofdtekst van de aanvraag naar de externe afbeelding die u wilt modereren.
Tip
U kunt ook lokale afbeeldingen modereren door de bytegegevens door te geven aan de aanvraagbody. Lees de documentatie voor meer informatie over hoe u dit kunt doen.
Nadat u de wijzigingen hebt aangebracht, opent u een opdrachtprompt en voert u de nieuwe opdracht in.
De resultaten bekijken
De resultaten van het afbeeldingsbeheer worden nu in het consolevenster weergegeven als JSON-gegevens.
{
"AdultClassificationScore": x.xxx,
"IsImageAdultClassified": <Bool>,
"RacyClassificationScore": x.xxx,
"IsImageRacyClassified": <Bool>,
"AdvancedInfo": [],
"Result": false,
"Status": {
"Code": 3000,
"Description": "OK",
"Exception": null
},
"TrackingId": "<Request Tracking Id>"
}
Zie de handleiding Image moderation concepts (concepten voor afbeeldingsmoderatie) voor informatie over de afbeeldingskenmerken waarop Content Moderator let.
Resources opschonen
Als u een Cognitive Services-abonnement wilt opschonen en verwijderen, kunt u de resource of resourcegroep verwijderen. Als u de resourcegroep verwijdert, worden ook alle bijbehorende resources verwijderd.
Volgende stappen
In deze quickstart hebt u geleerd hoe u de Content Moderator-REST API kunt gebruiken om moderatietaken uit te voeren. Nu kunt u doorgaan en in conceptgids meer lezen over het modereren van afbeeldingen en andere media.