快速入門:使用 Content Moderator 用戶端程式庫

開始使用適用於 .NET 的 Azure Content Moderator 用戶端程式庫。 請遵循下列步驟來安裝 NuGet 套件,並試用基本工作的程式碼範例。

Content Moderator 是一種 AI 服務,可讓您處理可能具冒犯意味、有風險或不當的資料。 使用 AI 驅動的內容審核服務來掃描文字、影像和影片,並自動套用內容旗標。 在應用程式中建置內容篩選軟體,以遵循法規或維護使用者應有的環境。

使用適用於 .NET 的 Content Moderator 用戶端程式庫可以:

  • 仲裁文字
  • 仲裁影像

參考文件 | 程式庫來源程式碼 | 套件 (NuGet) | 範例

必要條件

  • Azure 訂用帳戶 - 建立免費帳戶
  • Visual Studio IDE 或目前版本的 .NET Core
  • 擁有 Azure 訂用帳戶之後,在 Azure 入口網站中建立 Content Moderator 資源,以取得您的金鑰和端點。 部署完成後,按一下 [移至資源] 按鈕。
    • 您需要來自所建立資源的金鑰和端點,以將應用程式連線至 Content Moderator。 您稍後會在快速入門中將金鑰和端點貼到下列程式碼中。
    • 您可以使用免費定價層 (F0) 來試用服務,之後可升級至付費層以用於實際執行環境。

設定

建立新的 C# 應用程式

使用 Visual Studio,建立新的 .NET Core 應用程式。

安裝用戶端程式庫

建立新專案後,以滑鼠右鍵按一下 [方案總管] 中的專案解決方案,然後選取 [管理 NuGet 套件],以安裝用戶端程式庫。 在開啟的套件管理員中,選取 [瀏覽]、核取 [包含發行前版本],然後搜尋 Microsoft.Azure.CognitiveServices.ContentModerator。 選取版本 2.0.0,然後 安裝

提示

想要立刻檢視整個快速入門程式碼檔案嗎? 您可以在 GitHub 上找到該檔案,其中包含本快速入門中的程式碼範例。

從專案目錄,在慣用的編輯器或 IDE 中開啟 Program.cs 檔案。 新增下列 using 陳述式:

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;

Program 類別中,為資源的金鑰和端點建立變數。

重要

前往 Azure 入口網站。 如果您在 [必要條件] 區段中建立的 Content Moderator 資源成功部署,請按一下 [後續步驟] 底下的 [前往資源] 按鈕。 您可以在 [資源管理] 底下的 [金鑰和端點] 頁面中找到金鑰和端點。

// 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";

重要

完成時,請記得從程式碼中移除金鑰,且不要公開張貼金鑰。 在生產環境中,請使用安全的方式來儲存和存取您的認證,例如 Azure Key Vault。 如需詳細資訊,請參閱認知服務安全性一文。

在應用程式的 main() 方法中,針對本快速入門中使用的方法新增呼叫。 您稍後會建立這些呼叫。

// 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);

物件模型

下列類別會處理 Content Moderator .NET 用戶端程式庫的一些主要功能。

Name 說明
ContentModeratorClient 所有 Content Moderator 功能都需要此類別。 您可以使用訂用帳戶資訊來具現化此類別,並用其來產生其他類別的執行個體。
ImageModeration 此類別提供對成人內容、個人資訊或人臉的影像進行分析的功能。
TextModeration 此類別提供對語言、粗話、錯誤和個人資訊的文字進行分析的功能。

程式碼範例

這些程式碼片段說明如何使用適用於 .NET 的 Content Moderator 用戶端程式庫來執行下列工作:

驗證用戶端

在新方法中,使用端點和金鑰來具現化用戶端物件。

public static ContentModeratorClient Authenticate(string key, string endpoint)
{
    ContentModeratorClient client = new ContentModeratorClient(new ApiKeyServiceClientCredentials(key));
    client.Endpoint = endpoint;

    return client;
}

仲裁文字

下列程式碼會使用 Content Moderator 用戶端來分析文字主體,並將結果列印到主控台。 在 Program 類別的根目錄中,定義輸入和輸出檔案:

// 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";

然後,在專案的根目錄中新增 TextFile.txt 檔案。 將您自己的文字新增至此檔案,或使用下列範例文字:

Is this a grabage email abcdef@abcd.com, phone: 4255550111, IP: 255.255.255.255, 1234 Main Boulevard, Panapolis WA 96555.
<offensive word> is the profanity here. Is this information PII? phone 4255550111

然後,在 Program 類別中的某處定義文字仲裁方法:

/*
 * 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();
}

仲裁影像

下列程式碼會使用 Content Moderator 用戶端以及 ImageModeration 物件,來分析遠端影像中是否有成人和猥褻內容。

注意

您也可以分析本機影像的內容。 如需適用於本機影像的方法和作業,請參閱參考文件

取得範例影像

Program 類別的根目錄中,定義輸入和輸出檔案:

// 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";

然後,在專案的根目錄中建立輸入檔 ImageFiles.txt。 在此檔案中,您會新增要分析之影像的 URL — 每行一個 URL。 您可以使用下列範例影像:

https://moderatorsampleimages.blob.core.windows.net/samples/sample2.jpg
https://moderatorsampleimages.blob.core.windows.net/samples/sample5.png

定義協助程式類別

Program 類別中新增下列類別定義。 這個內部類別將會處理影像仲裁結果。

// 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;
}

定義影像仲裁方法

下列方法會逐一查看文字檔中的影像 URL、建立 EvaluationData 執行個體,並分析影像中是否有成人/猥褻內容、文字和人臉。 然後,它會將最終的 EvaluationData 執行個體新增至清單,並將傳回資料的完整清單寫入至主控台。

逐一查看影像

/*
 * 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());

分析內容

若要進一步了解 Content Moderator 所過濾的影像屬性,請參閱影像仲裁概念指南。

            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);
        }
    }
}

將仲裁結果寫入至檔案

        // 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();
    }
}

執行應用程式

按一下 IDE 視窗頂端的 [偵錯] 按鈕,以執行應用程式。

清除資源

如果您想要清除和移除認知服務訂用帳戶,則可以刪除資源或資源群組。 刪除資源群組也會刪除其關聯的任何其他資源。

後續步驟

在本快速入門中,您已了解如何使用 Content Moderator .NET 程式庫來執行仲裁工作。 接下來請閱讀概念性指南,以深入了解影像或其他媒體的仲裁。

開始使用適用於 Java 的 Azure Content Moderator 用戶端程式庫。 請遵循下列步驟來安裝 Maven 套件,並試用基本工作的程式碼範例。

Content Moderator 是一種 AI 服務,可讓您處理可能具冒犯意味、有風險或不當的資料。 使用 AI 驅動的內容審核服務來掃描文字、影像和影片,並自動套用內容旗標。 在應用程式中建置內容篩選軟體,以遵循法規或維護使用者應有的環境。

使用適用於 Java 的 Content Moderator 用戶端程式庫可以:

  • 仲裁文字
  • 仲裁影像

參考文件 | 程式庫原始程式碼 |成品 (Maven) | 範例

必要條件

  • Azure 訂用帳戶 - 建立免費帳戶
  • 最新版的 Java Development Kit (JDK)
  • Gradle 建置工具,或其他相依性管理員。
  • 擁有 Azure 訂用帳戶之後,在 Azure 入口網站中建立 Content Moderator 資源,以取得您的金鑰和端點。 部署完成後,按一下 [移至資源] 按鈕。
    • 您需要來自所建立資源的金鑰和端點,以將應用程式連線至 Content Moderator。 您稍後會在快速入門中將金鑰和端點貼到下列程式碼中。
    • 您可以使用免費定價層 (F0) 來試用服務,之後可升級至付費層以用於實際執行環境。

設定

建立新的 Gradle 專案

在主控台視窗 (例如 cmd、PowerShell 或 Bash) 中,為您的應用程式建立新的目錄,並瀏覽至該目錄。

mkdir myapp && cd myapp

從您的工作目錄執行 gradle init 命令。 此命令會建立 Gradle 的基本組建檔案,包括 build.gradle.kts,此檔案將在執行階段用來建立及設定您的應用程式。

gradle init --type basic

出現選擇 DSL 的提示時,請選取 [Kotlin]。

安裝用戶端程式庫

找出 build.gradle.kts,並使用您慣用的 IDE 或文字編輯器加以開啟。 然後,在其中複製下列組建組態。 此組態會將專案定義為進入點為 ContentModeratorQuickstart 類別的 Java 應用程式。 這會匯入 Content Moderator 用戶端程式庫和 GSON SDK,以進行 JSON 序列化。

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")
}

建立 Java 檔案

在您的工作目錄中執行下列命令,以建立專案來源資料夾:

mkdir -p src/main/java

瀏覽至新的資料夾,並建立名為 ContentModeratorQuickstart.java 的檔案。 在您慣用的編輯器或 IDE 中開啟該檔案,並新增下列 import 陳述式:

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.*;

提示

想要立刻檢視整個快速入門程式碼檔案嗎? 您可以在 GitHub 上找到該檔案,其中包含本快速入門中的程式碼範例。

In the application's ContentModeratorQuickstart class, create variables for your resource's key and endpoint.

重要

前往 Azure 入口網站。 如果您在 [必要條件] 區段中建立的 Content Moderator 資源成功部署,請按一下 [後續步驟] 底下的 [前往資源] 按鈕。 您可以在 [資源管理] 底下的 [金鑰和端點] 頁面中找到金鑰和端點。

private static final String subscriptionKey = "<your-subscription-key>";
private static final String endpoint = "<your-api-endpoint>";

重要

完成時,請記得從程式碼中移除金鑰,且不要公開張貼金鑰。 在生產環境中,請使用安全的方式來儲存和存取您的認證,例如 Azure Key Vault。 如需詳細資訊,請參閱認知服務安全性一文。

在應用程式的 main 方法中,針對本快速入門中使用的方法新增呼叫。 您稍後將定義這些方法。

// 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);

物件模型

下列類別會處理 Content Moderator Java 用戶端程式庫的一些主要功能。

Name 說明
ContentModeratorClient 所有 Content Moderator 功能都需要此類別。 您可以使用訂用帳戶資訊來具現化此類別,並用其來產生其他類別的執行個體。
ImageModeration 此類別提供對成人內容、個人資訊或人臉的影像進行分析的功能。
TextModerations 此類別提供對語言、粗話、錯誤和個人資訊的文字進行分析的功能。

程式碼範例

這些程式碼片段說明如何使用適用於 Java 的 Content Moderator 用戶端程式庫來執行下列工作:

驗證用戶端

在應用程式的 main 方法中,使用您的訂用帳戶端點值和訂用帳戶金鑰來建立 ContentModeratorClient 物件。

// 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");

仲裁文字

設定範例文字

ContentModeratorQuickstart 類別的頂端,定義對本地文字檔的參考。 將 .txt 檔案新增至您的專案目錄,並輸入想要分析的文字。

// TEXT MODERATION variable
private static File textFile = new File("src\\main\\resources\\TextModeration.txt");

分析文字

建立新的方法來讀取 .txt 檔案,並在每一行上呼叫 screenText 方法。

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());
            }
        }

新增下列程式碼,將仲裁結果列印到專案目錄中的 .json 檔案。

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();

關閉 trycatch 陳述式以完成此方法。

    } catch (Exception e) {
        System.out.println(e.getMessage());
        e.printStackTrace();
    }
}

仲裁影像

設定範例影像

在新的方法中,使用指向影像的指定 URL 字串建立 BodyModelModel 物件。

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();

定義協助程式類別

然後,在您的 ContentModeratorQuickstart.java 檔案中,將下列類別定義新增至 ContentModeratorQuickstart 類別內。 影像仲裁程序將會使用此內部類別。

// 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;
}

分析內容

這行程式碼會檢查指定 URL 中的影像是否有成人或猥褻內容。 如需這些字詞的相關資訊,請參閱「影像仲裁概念」指南。

// Evaluate for adult and racy content.
imageData.ImageModeration = client.imageModerations().evaluateUrlInput("application/json", url,
        new EvaluateUrlInputOptionalParameter().withCacheImage(true));
Thread.sleep(1000);

檢查文字

這行程式碼會檢查影像中是否有可見文字。

// Detect and extract text from image.
imageData.TextDetection = client.imageModerations().oCRUrlInput("eng", "application/json", url,
        new OCRUrlInputOptionalParameter().withCacheImage(true));
Thread.sleep(1000);

檢查臉部

這行程式碼會檢查影像中是否有人臉。

// Detect faces.
imageData.FaceDetection = client.imageModerations().findFacesUrlInput("application/json", url,
        new FindFacesUrlInputOptionalParameter().withCacheImage(true));
Thread.sleep(1000);

最後,將傳回的資訊儲存在 EvaluationData 清單中。

resultsList.add(imageData);

while 迴圈後面新增下列程式碼,以將結果列印至主控台和輸出檔案 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();

關閉 try 陳述式,並新增用來完成此方法的 catch 陳述式。

} catch (Exception e) {
    System.out.println(e.getMessage());
    e.printStackTrace();
}

執行應用程式

您可以使用下列命令來建置應用程式:

gradle build

使用 gradle run 命令執行應用程式:

gradle run

然後,瀏覽至 src/main/resources/ModerationOutput.json 檔案,並檢視內容仲裁的結果。

清除資源

如果您想要清除和移除認知服務訂用帳戶,則可以刪除資源或資源群組。 刪除資源群組也會刪除其關聯的任何其他資源。

後續步驟

在本快速入門中,您已了解如何使用 Content Moderator Java 程式庫來執行仲裁工作。 接下來請閱讀概念性指南,以深入了解影像或其他媒體的仲裁。

開始使用適用於 Python 的 Azure Content Moderator 用戶端程式庫。 請遵循下列步驟來安裝 PiPy 套件,並試用基本工作的程式碼範例。

Content Moderator 是一種 AI 服務,可讓您處理可能具冒犯意味、有風險或不當的資料。 使用 AI 驅動的內容審核服務來掃描文字、影像和影片,並自動套用內容旗標。 在應用程式中建置內容篩選軟體,以遵循法規或維護使用者應有的環境。

使用適用於 Python 的 Content Moderator 用戶端程式庫可以:

  • 仲裁文字
  • 使用自訂字詞清單
  • 仲裁影像
  • 使用自訂影像清單

參考文件 | 程式庫原始程式碼 | 套件 (PiPy) | 範例

必要條件

  • Azure 訂用帳戶 - 建立免費帳戶
  • Python 3.x
    • 您安裝的 Python 應包含 pip。 您可以在命令列上執行 pip --version 來檢查是否已安裝 pip。 安裝最新版本的 Python 以取得 pip。
  • 擁有 Azure 訂用帳戶之後,在 Azure 入口網站中建立 Content Moderator 資源,以取得您的金鑰和端點。 部署完成後,按一下 [移至資源] 按鈕。
    • 您需要來自所建立資源的金鑰和端點,以將應用程式連線至 Content Moderator。 您稍後會在快速入門中將金鑰和端點貼到下列程式碼中。
    • 您可以使用免費定價層 (F0) 來試用服務,之後可升級至付費層以用於實際執行環境。

設定

安裝用戶端程式庫

安裝 Python 之後,您可以使用下列命令來安裝 Content Moderator 用戶端程式庫:

pip install --upgrade azure-cognitiveservices-vision-contentmoderator

建立新的 Python 應用程式

在您慣用的編輯器或 IDE 中建立新的 Python 指令碼,並加以開啟。 然後,在檔案頂端新增下列 import 陳述式。

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

提示

想要立刻檢視整個快速入門程式碼檔案嗎? 您可以在 GitHub 上找到該檔案,其中包含本快速入門中的程式碼範例。

接著,為資源的端點位置和變數建立變數。

重要

前往 Azure 入口網站。 如果您在 [必要條件] 區段中建立的 Content Moderator 資源成功部署,請按一下 [後續步驟] 底下的 [前往資源] 按鈕。 您可以在 [資源管理] 底下的 [金鑰和端點] 頁面中找到金鑰和端點。

CONTENT_MODERATOR_ENDPOINT = "PASTE_YOUR_CONTENT_MODERATOR_ENDPOINT_HERE"
subscription_key = "PASTE_YOUR_CONTENT_MODERATOR_SUBSCRIPTION_KEY_HERE"

重要

完成時,請記得從程式碼中移除金鑰,且不要公開張貼金鑰。 在生產環境中,請使用安全的方式來儲存和存取您的認證,例如 Azure Key Vault。 如需詳細資訊,請參閱認知服務安全性一文。

物件模型

下列類別會處理 Content Moderator Python 用戶端程式庫的一些主要功能。

Name 說明
ContentModeratorClient 所有 Content Moderator 功能都需要此類別。 您可以使用訂用帳戶資訊來具現化此類別,並用其來產生其他類別的執行個體。
ImageModerationOperations 此類別提供對成人內容、個人資訊或人臉的影像進行分析的功能。
TextModerationOperations 此類別提供對語言、粗話、錯誤和個人資訊的文字進行分析的功能。

程式碼範例

這些程式碼片段說明如何使用適用於 Python 的 Content Moderator 用戶端程式庫來執行下列工作:

驗證用戶端

使用端點和金鑰來具現化用戶端。 使用金鑰建立 CognitiveServicesCredentials 物件,並使用該物件與您的端點建立 ContentModeratorClient 物件。

client = ContentModeratorClient(
    endpoint=CONTENT_MODERATOR_ENDPOINT,
    credentials=CognitiveServicesCredentials(subscription_key)
)

仲裁文字

下列程式碼會使用 Content Moderator 用戶端來分析文字主體,並將結果列印到主控台。 首先,在專案的根目錄建立 text_files/ 資料夾,並新增 content_moderator_text_moderation.txt 檔案。 將您自己的文字新增至此檔案,或使用下列範例文字:

Is this a grabage email abcdef@abcd.com, phone: 4255550111, IP: 255.255.255.255, 1234 Main Boulevard, Panapolis WA 96555.
<offensive word> is the profanity here. Is this information PII? phone 2065550111

將參考新增至新的資料夾。

TEXT_FOLDER = os.path.join(os.path.dirname(
    os.path.realpath(__file__)), "text_files")

然後,將下列程式碼新增至 Python 指令碼。

# 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())

使用自訂字詞清單

下列程式碼說明如何管理文字仲裁的自訂字詞清單。 您可以使用 ListManagementTermListsOperations 類別建立字詞清單、管理個別字詞,以及根據該清單過濾其他文字主體。

取得範例文字

若要使用此範例,您必須在專案的根目錄建立 text_files/ 資料夾,並新增 content_moderator_term_list.txt 檔案。 此檔案應包含將根據字詞清單受到檢查的有機文字。 您可以使用下列範例文字:

This text contains the terms "term1" and "term2".

將參考新增至資料夾 (如果尚未定義)。

TEXT_FOLDER = os.path.join(os.path.dirname(
    os.path.realpath(__file__)), "text_files")

建立清單

將下列程式碼新增至 Python 指令碼以建立自訂字詞清單,並儲存其識別碼值。

#
# 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

定義清單詳細資料

您可以使用清單的識別碼來編輯其名稱和描述。

#
# 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())

將字詞新增至清單

下列程式碼會將字詞 "term1""term2" 新增至清單。

#
# 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"
)

取得清單中的所有字詞

您可以使用清單識別碼傳回清單中的所有字詞。

#
# 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())

重新整理清單索引

每當您在清單中新增或移除字詞時,都必須重新整理索引,才能使用更新的清單。

#
# 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)

根據清單過濾文字

自訂字詞清單的主要功能是將文字的主體與清單進行比較,並找出任何相符的字詞。

#
# 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())

從清單中移除字詞

下列程式碼會從清單中移除字詞 "term1"

#
# 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"
)

從清單中移除所有字詞

使用下列程式碼清除所有字詞的清單。

#
# 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")

刪除清單

使用下列程式碼刪除自訂字詞清單。

#
# Delete list
#
print("\nDelete the term list {}".format(list_id))
client.list_management_term_lists.delete(list_id=list_id)

仲裁影像

下列程式碼會使用 Content Moderator 用戶端以及 ImageModerationOperations 物件,來分析成人和猥褻內容的影像。

取得範例影像

定義要分析之部分影像的參考。

IMAGE_LIST = [
    "https://moderatorsampleimages.blob.core.windows.net/samples/sample2.jpg",
    "https://moderatorsampleimages.blob.core.windows.net/samples/sample5.png"
]

然後,新增下列程式碼以逐一查看您的影像。 本節中的其餘程式碼將在此迴圈內執行。

for image_url in IMAGE_LIST:
    print("\nEvaluate image {}".format(image_url))

檢查成人/猥褻內容

下列程式碼會檢查指定 URL 中的影像是否有成人或猥褻內容,並將結果列印到主控台。 若想了解這些字詞所代表的意義,請參閱影像仲裁概念指南。

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())

檢查可見文字

下列程式碼會檢查影像中是否有可見文字內容,並將結果列印到主控台。

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())

檢查臉部

下列程式碼會檢查影像中是否有臉部,並將結果列印到主控台。

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())

使用自訂影像清單

下列程式碼說明如何管理影像仲裁的自訂影像清單。 如果您的平台經常收到同一組您想要過濾掉的影像執行個體,此功能將可發揮效用。藉由維護這些特定影像的清單,您將可改善效能。 ListManagementImageListsOperations 類別可讓您建立影像清單、管理清單上的個別影像,以及將其他影像與清單進行比較。

建立下列文字變數,以儲存您將在此案例中使用的影像 URL。

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"
]

注意

這本身並不是正確的清單,而是將在程式碼的 add images 區段中新增的非正式影像清單。

建立影像清單

新增下列程式碼,以建立影像清單並儲存其識別碼的參考。

#
# 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

將影像新增至清單

下列程式碼會將您所有的影像新增至清單。

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

在指令碼中的任一處定義 add_images Helper 函式。

#
# 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

取得清單中的影像

下列程式碼會列印清單中所有影像的名稱。

#
# 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())

更新清單詳細資料

您可以使用清單識別碼來更新清單的名稱和描述。

#
# 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())

取得清單詳細資料

使用下列程式碼來列印清單目前的詳細資料。

#
# 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())

重新整理清單索引

新增或移除影像之後,您必須先重新整理清單索引,才能用它來過濾其他影像。

#
# 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)

根據清單比對影像

影像清單的主要功能是要比較新的影像,並查看是否有任何相符項目。

#
# 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())

從清單中移除影像

下列程式碼會從清單中移除項目。 此案例中的影像是不符合清單類別的影像。

#
# 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]
)

從清單中移除所有影像

使用下列程式碼清除影像清單。

#
# 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)

刪除影像清單

使用下列程式碼刪除指定的影像清單。

#
# Delete list
#
print("\nDelete the image list {}".format(list_id))
client.list_management_image_lists.delete(list_id=list_id)

執行應用程式

使用快速入門檔案上使用 python 命令執行應用程式。

python quickstart-file.py

清除資源

如果您想要清除和移除認知服務訂用帳戶,則可以刪除資源或資源群組。 刪除資源群組也會刪除其關聯的任何其他資源。

後續步驟

在本快速入門中,您已了解如何使用 Content Moderator Python 程式庫來執行仲裁工作。 接下來請閱讀概念性指南,以深入了解影像或其他媒體的仲裁。

開始使用 Azure Content Moderator REST API。

Content Moderator 是一種 AI 服務,可讓您處理可能具冒犯意味、有風險或不當的資料。 使用 AI 驅動的內容審核服務來掃描文字、影像和影片,並自動套用內容旗標。 在應用程式中建置內容篩選軟體,以遵循法規或維護使用者應有的環境。

使用 Content Moderator REST API 執行下列動作:

  • 仲裁文字
  • 仲裁影像

必要條件

  • Azure 訂用帳戶 - 建立免費帳戶
  • 擁有 Azure 訂用帳戶之後,在 Azure 入口網站中建立 Content Moderator 資源,以取得您的金鑰和端點。 部署完成後,按一下 [移至資源] 按鈕。
    • 您需要來自所建立資源的金鑰和端點,以將應用程式連線至 Content Moderator。 您稍後會在快速入門中將金鑰和端點貼到下列程式碼中。
    • 您可以使用免費定價層 (F0) 來試用服務,之後可升級至付費層以用於實際執行環境。
  • PowerShell 6.0 版以上,或類似的命令列應用程式。

仲裁文字

您將使用如下所示的命令呼叫 Content Moderator API 來分析文字主體,並將結果列印到主控台。

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"

將命令複製到文字編輯器,並進行下列變更:

  1. Ocp-Apim-Subscription-Key 指派至您的有效臉部訂用帳戶金鑰。

    重要

    完成時,請記得從程式碼中移除金鑰,且不要公開張貼金鑰。 在生產環境中,請使用安全的方式來儲存和存取您的認證,例如 Azure Key Vault。 如需詳細資訊,請參閱認知服務安全性一文。

  2. 變更查詢 URL 的第一個部分,以符合與您訂用帳戶金鑰對應的端點。

    注意

    2019 年 7 月 1 日之後建立的新資源會使用自訂的子網域名稱。 如需詳細資訊和完整的區域端點清單,請參閱認知服務的自訂子網域名稱

  3. 選擇性地將要求主體變更為您想要分析的任何文字字串。

完成變更之後,請開啟命令提示字元並輸入新的命令。

檢查結果

您應該會在主控台視窗中看到顯示為 JSON 資料的文字仲裁結果。 例如:

{
  "OriginalText": "Is this a <offensive word> email abcdef@abcd.com, phone: 6657789887, IP: 255.255.255.255,\n1 Microsoft Way, Redmond, WA 98052\n",
  "NormalizedText": "Is this a <offensive word> email abide@ abed. com, phone: 6657789887, IP: 255. 255. 255. 255, \n1 Microsoft Way, Redmond, WA 98052",
  "AutoCorrectedText": "Is this a <offensive word> 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": "<offensive word>"
    }
  ],
  "Status": {
    "Code": 3000,
    "Description": "OK",
    "Exception": null
  },
  "TrackingId": "1717c837-cfb5-4fc0-9adc-24859bfd7fac"
}

若要進一步了解 Content Moderator 所過濾的文字屬性,請參閱文字仲裁概念指南。

仲裁影像

您將使用如下所示的命令呼叫 Content Moderator API 來仲裁遠端影像,並將結果列印到主控台。

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\"}"

將命令複製到文字編輯器,並進行下列變更:

  1. Ocp-Apim-Subscription-Key 指派至您的有效臉部訂用帳戶金鑰。
  2. 變更查詢 URL 的第一個部分,以符合與您訂用帳戶金鑰對應的端點。
  3. 選擇性地將要求主體中的 "Value" URL 變更為您想要仲裁的任何遠端影像。

提示

您也可以藉由將其位元組資料傳遞至要求主體,來仲裁本機影像。 若要了解如何執行此操作,請參閱參考文件

完成變更之後,請開啟命令提示字元並輸入新的命令。

檢查結果

您應該會在主控台視窗中看到顯示為 JSON 資料的影像仲裁結果。

{
  "AdultClassificationScore": x.xxx,
  "IsImageAdultClassified": <Bool>,
  "RacyClassificationScore": x.xxx,
  "IsImageRacyClassified": <Bool>,
  "AdvancedInfo": [],
  "Result": false,
  "Status": {
    "Code": 3000,
    "Description": "OK",
    "Exception": null
  },
  "TrackingId": "<Request Tracking Id>"
}

若要進一步了解 Content Moderator 所過濾的影像屬性,請參閱影像仲裁概念指南。

清除資源

如果您想要清除和移除認知服務訂用帳戶,則可以刪除資源或資源群組。 刪除資源群組也會刪除其關聯的任何其他資源。

後續步驟

在本快速入門中,您已了解如何使用 Content Moderator REST API 來執行仲裁工作。 接下來請閱讀概念性指南,以深入了解影像或其他媒體的仲裁。