你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

快速入门:分析图像内容

开始使用 Content Studio、REST API 或客户端 SDK 来执行基本的文本审查。 Azure AI 内容安全服务提供用于标记令人反感内容的 AI 算法。 请按照以下步骤试用该环境。

有关图像审查的详细信息,请参阅危害类别概念页。 如需了解 API 输入限制,请参阅“概述”的输入要求部分。

警告

示例数据和代码可能包含冒犯性内容。 建议用户自行决定是否查看。

Prerequisites

设置

按照以下步骤使用内容安全试用页面

  1. 转到 Azure AI Foundry 并导航到项目/中心。 然后选择左侧导航栏上的 Guardrails + 控件 选项卡,然后选择“ 试用 ”选项卡。
  2. “试用”页面上,您可以尝试包括文本和图像内容在内的多种保护措施和控件功能,并使用可调整的阈值来筛选不当或有害内容。

Guardrails 和控件试用页面的屏幕截图。

分析图像

“审查图像”页面提供了让你快速试用图像审查的功能。

  1. 选择“审查图像内容”面板
  2. 从页面上的面板中选择示例图像,或上传自己的图像。
  3. 选择“运行测试”。 该服务返回检测到的所有类别,以及每个类别的严重性级别(0-安全、2-低、4-中、6-高)。 它还会根据配置的筛选器返回二进制的“已接受”“已拒绝”结果/。 使用右侧“配置筛选器”选项卡中的矩阵为每个类别设置允许/禁止的严重性级别。 然后,可以再次运行文本以查看筛选器的效果。

查看和导出代码

可以使用“分析文本内容”或“分析图像内容”页中的“查看代码”功能查看和复制示例代码,其中包括严重性筛选、阻止列表和审查函数的配置。 然后,你可以自行部署代码。

“查看代码”按钮的屏幕截图。

Prerequisites

  • Azure订阅 - 免费创建一个订阅
  • 获得Azure订阅后,在Azure门户中创建内容安全资源以获取密钥和终结点。 输入资源的唯一名称,选择订阅,然后选择资源组、支持的区域(请参阅 区域可用性)和支持的定价层。 然后选择“创建”
    • 部署资源需要几分钟时间。 完成后,选择 转到资源。 在左窗格中的 “资源管理”下,选择 “订阅密钥”和“终结点”。 终结点和任一密钥都用于调用 API。
  • 已安装 cURL

分析图像内容

下一部分介绍使用 cURL 进行图像审查的示例。

准备图像示例

选择要分析的示例图像,并将其下载到设备。

有关图像限制,请参阅输入要求。 如果格式已进行动画处理,服务将提取第一帧执行分析。

可以通过以下两种方法之一输入图像:本地文件流或 Blob 存储 URL。

  • 本地文件流(推荐):将图像编码为 Base64。 可以使用 codebeautify 等网站来执行编码。 然后将编码的字符串保存到临时位置。

  • Blob 存储 URL:将图像上传到Azure Blob 存储帐户。 点击 Blob 存储快速入门了解如何执行此操作。 然后打开Azure 存储资源管理器并获取图像的 URL。 将其保存到临时位置。

    接下来,您需要授予内容安全资源读取 Azure 存储资源的权限。 为Azure AI 内容安全实例启用系统分配的托管标识,并将 Storage Blob 数据参与者/所有者的角色分配给标识:

    重要说明

    只有分配“存储 Blob 数据参与者”或“存储 Blob 数据所有者”角色才能继续。

    1. 为Azure AI 内容安全实例启用托管标识。

      Azure 门户启用托管标识的截图。

    2. 将“存储 Blob 数据参与者/所有者”角色分配给托管标识。 下面突出显示的任何角色均有效。

      Azure 门户中“添加角色分配”屏幕的截图。

      Azure 门户中分配的角色的截图。

      管理标识角色的屏幕截图。

分析图像内容

将以下命令粘贴到文本编辑器,并进行以下更改。

  1. <endpoint>替换为你的资源终结点 URL。
  2. <your_subscription_key> 替换为你的密钥。
  3. 使用 "image" 字段或 "content" 字段填充正文中的 "blobUrl" 字段。 例如: {"image": {"content": "<base_64_string>"}{"image": {"blobUrl": "<your_storage_url>"}
curl --location --request POST '<endpoint>/contentsafety/image:analyze?api-version=2024-09-01' \
--header 'Ocp-Apim-Subscription-Key: <your_subscription_key>' \
--header 'Content-Type: application/json' \
--data-raw '{
  "image": {
    "content": "<base_64_string>"
  },
  "categories": ["Hate", "SelfHarm", "Sexual", "Violence"],
  "outputType": "FourSeverityLevels"
}'

注意

如果使用的是 Blob 存储 URL,则请求主体应如下所示:

{
  "image": {
    "blobUrl": "<your_storage_url>"
  }
}

URL 中必须包含以下字段:

名称 必需? 说明 类型
API 版本 必选 这是要检查的 API 版本。 当前版本为: api-version=2024-09-01. 示例: <endpoint>/contentsafety/image:analyze?api-version=2024-09-01 字符串

请求正文中的参数在此表中定义:

名称 必需? 说明 类型
内容 必选 图像的内容或 Blob URL。 可以是 Base64 编码的字节或 Blob URL。 如果同时提供两者,则会拒绝该请求。 图像允许的最大大小为 7200x7200 像素,最大文件大小为 4MB。 图像的最小大小为 50 像素 x 50 像素。 字符串
类别 可选 假定这是类别名称的数组。 有关可用类别名称的列表,请参阅危害类别指南。 如果未指定类别,则使用所有四个类别。 我们使用多个类别在单个请求中获取分数。 字符串
outputType 可选 图像审查 API 仅支持 "FourSeverityLevels"。 输出严重性分为四个级别。 该值可以为 0,2,4,6 字符串

打开命令提示符窗口并运行 cURL 命令。

输出

应会在控制台中看到显示为 JSON 数据的图像审查结果。 例如:

{
  "categoriesAnalysis": [
    {
      "category": "Hate",
      "severity": 2
    },
    {
      "category": "SelfHarm",
      "severity": 0
    },
    {
      "category": "Sexual",
      "severity": 0
    },
    {
      "category": "Violence",
      "severity": 0
    }
  ]
}

输出中的 JSON 字段定义如下:

名称 说明 类型
categoriesAnalysis API 预测的每个输出类。 分类可以是多标记的。 例如,将图像上传到图像审查模型时,可以将其归类为性内容和暴力。 伤害类别 字符串
严重性 每个危害类别中标志的严重性级别。 伤害类别 整数

参考文档 | 库源代码 | 包(NuGet) | 示例

Prerequisites

  • Azure订阅 - 免费创建一个订阅
  • 启用了“.NET 桌面开发”工作负荷的 Visual Studio IDE。 或者,如果不打算使用 Visual Studio IDE,则需要当前版本的 .NET Core
  • 已安装 .NET Runtime
  • 获得Azure订阅后,在Azure门户中创建内容安全资源以获取密钥和终结点。 输入资源的唯一名称,选择订阅,然后选择资源组、支持的区域(请参阅 区域可用性)和支持的定价层。 然后选择“创建”
    • 部署资源需要几分钟时间。 完成后,选择“转到资源”。 在左窗格中的 “资源管理”下,选择 “订阅密钥”和“终结点”。 终结点和任一密钥都用于调用 API。

设置应用程序

创建一个新的 C# 应用程序。

打开Visual Studio,在 Get 启动下选择创建新项目。 将模板筛选器设置为 C#/所有平台/控制台。 选择 Console App(可在 Windows、Linux 和 macOS 上运行的 .NET 命令行应用程序),然后选择 Next。 将项目名称更新为 ContentSafetyQuickstart ,然后选择 “下一步”。 选择 .NET 6.0 或更高版本,然后选择 Create 以创建项目。

安装客户端 SDK

创建新项目后,右键单击 解决方案资源管理器 中的项目解决方案并选择 Manage NuGet 包来安装客户端 SDK。 在打开的包管理器中,选择Browse并搜索 Azure.AI.ContentSafety。 选择“安装”。

创建环境变量

在此示例中,你将凭据写入运行应用程序的本地计算机上的环境变量。

若要为密钥和终结点设置环境变量,请打开控制台窗口,并按照操作系统和开发环境的说明进行操作。

  • 若要设置 CONTENT_SAFETY_KEY 环境变量,请将 YOUR_CONTENT_SAFETY_KEY 替换为资源的其中一个密钥。
  • 若要设置 CONTENT_SAFETY_ENDPOINT 环境变量,请将 YOUR_CONTENT_SAFETY_ENDPOINT 替换为资源的终结点。

重要说明

请谨慎使用 API 密钥。 请不要直接在代码中包含 API 密钥,并且切勿公开发布该密钥。 如果使用 API 密钥,请安全地将其存储在Azure 密钥保管库中。 有关在应用中安全地使用 API 密钥的详细信息,请参阅 API 密钥和 Azure 密钥保管库

有关 AI 服务安全性的详细信息,请参阅 对 Azure AI 服务进行请求身份验证

setx CONTENT_SAFETY_KEY 'YOUR_CONTENT_SAFETY_KEY'
setx CONTENT_SAFETY_ENDPOINT 'YOUR_CONTENT_SAFETY_ENDPOINT'

添加环境变量后,可能需要重启任何正在运行的、将读取环境变量的程序(包括控制台窗口)。

分析图像内容

从项目目录中,打开之前创建的 Program.cs 文件。 粘贴到以下代码中。

using System;
using Azure.AI.ContentSafety;

namespace Azure.AI.ContentSafety.Dotnet.Sample
{
  class ContentSafetySampleAnalyzeImage
  {
    public static void AnalyzeImage()
    {
      // retrieve the endpoint and key from the environment variables created earlier
      string endpoint = Environment.GetEnvironmentVariable("CONTENT_SAFETY_ENDPOINT");
      string key = Environment.GetEnvironmentVariable("CONTENT_SAFETY_KEY");

      ContentSafetyClient client = new ContentSafetyClient(new Uri(endpoint), new AzureKeyCredential(key));

      // Example: analyze image

      string imagePath = @"sample_data\image.png";
      ContentSafetyImageData image = new ContentSafetyImageData(BinaryData.FromBytes(File.ReadAllBytes(imagePath)));

      var request = new AnalyzeImageOptions(image);

      Response<AnalyzeImageResult> response;
      try
      {
          response = client.AnalyzeImage(request);
      }
      catch (RequestFailedException ex)
      {
          Console.WriteLine("Analyze image failed.\nStatus code: {0}, Error code: {1}, Error message: {2}", ex.Status, ex.ErrorCode, ex.Message);
          throw;
      }

      Console.WriteLine("Hate severity: {0}", response.Value.CategoriesAnalysis.FirstOrDefault(a => a.Category == ImageCategory.Hate)?.Severity ?? 0);
      Console.WriteLine("SelfHarm severity: {0}", response.Value.CategoriesAnalysis.FirstOrDefault(a => a.Category == ImageCategory.SelfHarm)?.Severity ?? 0);
      Console.WriteLine("Sexual severity: {0}", response.Value.CategoriesAnalysis.FirstOrDefault(a => a.Category == ImageCategory.Sexual)?.Severity ?? 0);
      Console.WriteLine("Violence severity: {0}", response.Value.CategoriesAnalysis.FirstOrDefault(a => a.Category == ImageCategory.Violence)?.Severity ?? 0);
    }
    static void Main()
    {
      AnalyzeImage();
    }
  }
}

在项目目录中创建 sample_data 文件夹,并将 image.png 文件添加到其中。

通过从 IDE 窗口顶部的“调试”菜单中选择“开始调试”(或按 F5)生成并运行应用程序。

参考文档 | 库源代码 | 包(PyPI) | 示例 |

Prerequisites

  • Azure订阅 - 免费创建一个订阅
  • 获得Azure订阅后,在Azure门户中创建内容安全资源以获取密钥和终结点。 输入资源的唯一名称,选择订阅,然后选择资源组、支持的区域(请参阅 区域可用性)和支持的定价层。 然后选择“创建”
    • 部署资源需要几分钟时间。 完成后,选择“转到资源”。 在左窗格中的 “资源管理”下,选择 “订阅密钥”和“终结点”。 终结点和任一密钥都用于调用 API。
  • Python 3.8 或更高版本
    • Python安装应包括 pip。 可以通过在命令行上运行 pip --version 来检查是否安装了 pip。 通过安装最新版 Python 来获取 pip。

创建环境变量

在此示例中,你将凭据写入运行应用程序的本地计算机上的环境变量。

若要为密钥和终结点设置环境变量,请打开控制台窗口,并按照操作系统和开发环境的说明进行操作。

  • 若要设置 CONTENT_SAFETY_KEY 环境变量,请将 YOUR_CONTENT_SAFETY_KEY 替换为资源的其中一个密钥。
  • 若要设置 CONTENT_SAFETY_ENDPOINT 环境变量,请将 YOUR_CONTENT_SAFETY_ENDPOINT 替换为资源的终结点。

重要说明

请谨慎使用 API 密钥。 请不要直接在代码中包含 API 密钥,并且切勿公开发布该密钥。 如果使用 API 密钥,请安全地将其存储在Azure 密钥保管库中。 有关在应用中安全地使用 API 密钥的详细信息,请参阅 API 密钥和 Azure 密钥保管库

有关 AI 服务安全性的详细信息,请参阅 对 Azure AI 服务进行请求身份验证

setx CONTENT_SAFETY_KEY 'YOUR_CONTENT_SAFETY_KEY'
setx CONTENT_SAFETY_ENDPOINT 'YOUR_CONTENT_SAFETY_ENDPOINT'

添加环境变量后,可能需要重启任何正在运行的、将读取环境变量的程序(包括控制台窗口)。

分析图像内容

以下部分将演示如何使用 Python SDK 处理示例请求。

  1. 打开命令提示符,导航到项目文件夹,并创建名为 quickstart.py 的新文件。

  2. 运行以下命令以安装Azure AI 内容安全客户端库:

    python -m pip install azure-ai-contentsafety
    
  3. 将以下代码复制到 quickstart.py

    import os
    
    from azure.ai.contentsafety import ContentSafetyClient
    from azure.ai.contentsafety.models import AnalyzeImageOptions, ImageData, ImageCategory
    from azure.core.credentials import AzureKeyCredential
    from azure.core.exceptions import HttpResponseError
    
    def analyze_image():
        endpoint = os.environ.get('CONTENT_SAFETY_ENDPOINT')
        key = os.environ.get('CONTENT_SAFETY_KEY')
        image_path = os.path.join("sample_data", "image.jpg")
    
        # Create an Azure AI Content Safety client
        client = ContentSafetyClient(endpoint, AzureKeyCredential(key))
    
    
        # Build request
        with open(image_path, "rb") as file:
            request = AnalyzeImageOptions(image=ImageData(content=file.read()))
    
        # Analyze image
        try:
            response = client.analyze_image(request)
        except HttpResponseError as e:
            print("Analyze image failed.")
            if e.error:
                print(f"Error code: {e.error.code}")
                print(f"Error message: {e.error.message}")
                raise
            print(e)
            raise
    
        hate_result = next(item for item in response.categories_analysis if item.category == ImageCategory.HATE)
        self_harm_result = next(item for item in response.categories_analysis if item.category == ImageCategory.SELF_HARM)
        sexual_result = next(item for item in response.categories_analysis if item.category == ImageCategory.SEXUAL)
        violence_result = next(item for item in response.categories_analysis if item.category == ImageCategory.VIOLENCE)
    
        if hate_result:
            print(f"Hate severity: {hate_result.severity}")
        if self_harm_result:
            print(f"SelfHarm severity: {self_harm_result.severity}")
        if sexual_result:
            print(f"Sexual severity: {sexual_result.severity}")
        if violence_result:
            print(f"Violence severity: {violence_result.severity}")
    
    if __name__ == "__main__":
        analyze_image()
    
  4. "sample_data""image.jpg" 替换为要使用的本地文件的路径和文件名。

  5. 然后,使用快速入门文件中的 python 命令运行应用程序。

    python quickstart.py
    

参考文档 | 库源代码 | Artifact (Maven) | 示例

Prerequisites

  • Azure订阅 - 免费创建一个订阅
  • Java开发工具包 (JDK)
  • Gradle 生成工具,或其他依赖项管理器。
  • 获得Azure订阅后,在Azure门户中创建内容安全资源以获取密钥和终结点。 输入资源的唯一名称,选择订阅,然后选择资源组、支持的区域(请参阅 区域可用性)和支持的定价层。 然后选择“创建”
    • 部署资源需要几分钟时间。 完成后,选择“转到资源”。 在左窗格中的 “资源管理”下,选择 “订阅密钥”和“终结点”。 终结点和任一密钥都用于调用 API。

设置应用程序

创建一个新的 Gradle 项目。

在控制台窗口(例如 cmd、PowerShell 或 Bash)中,为应用创建一个新目录并导航到该目录。

mkdir myapp && cd myapp

从工作目录运行 gradle init 命令。 此命令将为 Gradle 创建基本生成文件,包括运行时用于创建和配置应用程序的 build.gradle.kts

gradle init --type basic

当提示你选择一个 DSL 时,选择 Kotlin

从工作目录运行以下命令,以创建项目源文件夹:

mkdir -p src/main/java

导航到新文件夹,创建名为 ContentSafetyQuickstart.java 的文件

此外,在项目的根目录中创建 src/resources 文件夹,并向其添加示例图像。

安装客户端 SDK

本快速入门使用 Gradle 依赖项管理器。 可以在 Maven 中央存储库中找到客户端库以及其他依赖项管理器的信息。

找到 build.gradle.kts,并使用喜好的 IDE 或文本编辑器将其打开。 然后在该文件中复制以下生成配置。 此配置将项目定义为Java应用程序,其入口点为类 ContentSafetyQuickstart。 它导入Azure AI 视觉库。

plugins {
    java
    application
}
application { 
    mainClass.set("ContentSafetyQuickstart")
}
repositories {
    mavenCentral()
}
dependencies {
    implementation(group = "com.azure", name = "azure-ai-contentsafety", version = "1.0.0")
}

创建环境变量

在此示例中,你将凭据写入运行应用程序的本地计算机上的环境变量。

若要为密钥和终结点设置环境变量,请打开控制台窗口,并按照操作系统和开发环境的说明进行操作。

  • 若要设置 CONTENT_SAFETY_KEY 环境变量,请将 YOUR_CONTENT_SAFETY_KEY 替换为资源的其中一个密钥。
  • 若要设置 CONTENT_SAFETY_ENDPOINT 环境变量,请将 YOUR_CONTENT_SAFETY_ENDPOINT 替换为资源的终结点。

重要说明

请谨慎使用 API 密钥。 请不要直接在代码中包含 API 密钥,并且切勿公开发布该密钥。 如果使用 API 密钥,请安全地将其存储在Azure 密钥保管库中。 有关在应用中安全地使用 API 密钥的详细信息,请参阅 API 密钥和 Azure 密钥保管库

有关 AI 服务安全性的详细信息,请参阅 对 Azure AI 服务进行请求身份验证

setx CONTENT_SAFETY_KEY 'YOUR_CONTENT_SAFETY_KEY'
setx CONTENT_SAFETY_ENDPOINT 'YOUR_CONTENT_SAFETY_ENDPOINT'

添加环境变量后,可能需要重启任何正在运行的、将读取环境变量的程序(包括控制台窗口)。

分析图像内容

在首选编辑器或 IDE 中打开 ContentSafetyQuickstart.java,并粘贴以下代码。source 变量替换为示例图像的路径。

import com.azure.ai.contentsafety.ContentSafetyClient;
import com.azure.ai.contentsafety.ContentSafetyClientBuilder;
import com.azure.ai.contentsafety.models.AnalyzeImageOptions;
import com.azure.ai.contentsafety.models.AnalyzeImageResult;
import com.azure.ai.contentsafety.models.ContentSafetyImageData;
import com.azure.ai.contentsafety.models.ImageCategoriesAnalysis;
import com.azure.core.credential.KeyCredential;
import com.azure.core.util.BinaryData;
import com.azure.core.util.Configuration;

import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Paths;


public class ContentSafetyQuickstart {
    public static void main(String[] args) throws IOException {

        // get endpoint and key from environment variables
        String endpoint = System.getenv("CONTENT_SAFETY_ENDPOINT");
        String key = System.getenv("CONTENT_SAFETY_KEY");

        ContentSafetyClient contentSafetyClient = new ContentSafetyClientBuilder()
            .credential(new KeyCredential(key))
            .endpoint(endpoint).buildClient();

        ContentSafetyImageData image = new ContentSafetyImageData();
        String cwd = System.getProperty("user.dir");
        String source = "/src/samples/resources/image.png";

        image.setContent(BinaryData.fromBytes(Files.readAllBytes(Paths.get(cwd, source))));

        AnalyzeImageResult response =
                contentSafetyClient.analyzeImage(new AnalyzeImageOptions(image));

        for (ImageCategoriesAnalysis result : response.getCategoriesAnalysis()) {
            System.out.println(result.getCategory() + " severity: " + result.getSeverity());
        }
    }
}

导航回项目根文件夹,并通过以下内容生成应用:

gradle build

然后,使用 gradle run 命令运行应用:

gradle run

输出

Hate severity: 0
SelfHarm severity: 0
Sexual severity: 0
Violence severity: 0

Reference 文档 | Library 源代码 | Package (npm) | 示例 |

Prerequisites

  • Azure订阅 - 免费创建一个订阅
  • 最新版本的 Node.js
  • 获得Azure订阅后,在Azure门户中创建内容安全资源以获取密钥和终结点。 输入资源的唯一名称,选择订阅,然后选择资源组、支持的区域(请参阅 区域可用性)和支持的定价层。 然后选择“创建”
    • 部署资源需要几分钟时间。 完成后,选择“转到资源”。 在左窗格中的 “资源管理”下,选择 “订阅密钥”和“终结点”。 终结点和任一密钥都用于调用 API。

设置应用程序

创建新的 Node.js 应用程序。 在控制台窗口(例如 cmd、PowerShell 或 Bash)中,为应用创建一个新目录并导航到该目录。

mkdir myapp && cd myapp

运行 npm init 命令以使用 package.json 文件创建一个 node 应用程序。

npm init

此外,在项目的根目录中创建 /resources 文件夹,并向其添加示例图像。

安装客户端 SDK

安装 @azure-rest/ai-content-safety npm 包:

npm install @azure-rest/ai-content-safety

另请安装 dotenv 模块以使用环境变量:

npm install dotenv

应用的 package.json 文件将使用依赖项进行更新。

创建环境变量

在此示例中,你将凭据写入运行应用程序的本地计算机上的环境变量。

若要为密钥和终结点设置环境变量,请打开控制台窗口,并按照操作系统和开发环境的说明进行操作。

  • 若要设置 CONTENT_SAFETY_KEY 环境变量,请将 YOUR_CONTENT_SAFETY_KEY 替换为资源的其中一个密钥。
  • 若要设置 CONTENT_SAFETY_ENDPOINT 环境变量,请将 YOUR_CONTENT_SAFETY_ENDPOINT 替换为资源的终结点。

重要说明

请谨慎使用 API 密钥。 请不要直接在代码中包含 API 密钥,并且切勿公开发布该密钥。 如果使用 API 密钥,请安全地将其存储在Azure 密钥保管库中。 有关在应用中安全地使用 API 密钥的详细信息,请参阅 API 密钥和 Azure 密钥保管库

有关 AI 服务安全性的详细信息,请参阅 对 Azure AI 服务进行请求身份验证

setx CONTENT_SAFETY_KEY 'YOUR_CONTENT_SAFETY_KEY'
setx CONTENT_SAFETY_ENDPOINT 'YOUR_CONTENT_SAFETY_ENDPOINT'

添加环境变量后,可能需要重启任何正在运行的、将读取环境变量的程序(包括控制台窗口)。

分析图像内容

在目录中创建新文件 index.js。 在偏好的编辑器或 IDE 中打开它,并粘贴以下代码。 将 image_path 变量替换为示例图像的路径。

const ContentSafetyClient = require("@azure-rest/ai-content-safety").default,
  { isUnexpected } = require("@azure-rest/ai-content-safety");
const { AzureKeyCredential } = require("@azure/core-auth");
const fs = require("fs");
const path = require("path");

// Load the .env file if it exists
require("dotenv").config();

async function main() {
    // get endpoint and key from environment variables
    const endpoint = process.env["CONTENT_SAFETY_ENDPOINT"];
    const key = process.env["CONTENT_SAFETY_KEY"];
    
    const credential = new AzureKeyCredential(key);
    const client = ContentSafetyClient(endpoint, credential);
    
    // replace with your own sample image file path 
    const image_path = path.resolve(__dirname, "./resources/image.jpg");
    
    const imageBuffer = fs.readFileSync(image_path);
    const base64Image = imageBuffer.toString("base64");
    const analyzeImageOption = { image: { content: base64Image } };
    const analyzeImageParameters = { body: analyzeImageOption };
    
    const result = await client.path("/image:analyze").post(analyzeImageParameters);
    
    if (isUnexpected(result)) {
        throw result;
    }
    for (let i = 0; i < result.body.categoriesAnalysis.length; i++) {
    const imageCategoriesAnalysisOutput = result.body.categoriesAnalysis[i];
    console.log(
      imageCategoriesAnalysisOutput.category,
      " severity: ",
      imageCategoriesAnalysisOutput.severity
    );
  }
}

main().catch((err) => {
    console.error("The sample encountered an error:", err);
});

在快速入门文件中使用 node 命令运行应用程序。

node index.js

输出

Hate severity:  0
SelfHarm severity:  0
Sexual severity:  0
Violence severity:  0

Reference 文档 | Library 源代码 | Package (npm) | 示例 |

Prerequisites

设置本地开发环境

  1. 为项目创建新目录并导航到它:

    mkdir content-safety-image-analysis
    cd content-safety-image-analysis
    code .
    
  2. 在项目目录中为 ESM 模块创建新包:

    npm init -y
    npm pkg set type=module
    
  3. 安装所需的包:

    npm install @azure-rest/ai-content-safety
    
  4. 安装开发依赖项:

    npm install typescript @types/node --save-dev
    
  5. 在项目目录中创建 tsconfig.json 文件:

    {
      "compilerOptions": {
        "target": "es2022",
        "module": "esnext",
        "moduleResolution": "bundler",
        "rootDir": "./src",
        "outDir": "./dist/",
        "esModuleInterop": true,
        "forceConsistentCasingInFileNames": true,
        "strict": true,
        "skipLibCheck": true,
        "declaration": true,
        "sourceMap": true,
        "resolveJsonModule": true,
        "moduleDetection": "force",
        "allowSyntheticDefaultImports": true,
        "verbatimModuleSyntax": false
      },
      "include": [
        "src/**/*.ts"
      ],
      "exclude": [
        "node_modules/**/*",
        "**/*.spec.ts"
      ]
    }
    
  6. 更新 package.json 以包含用于生成 TypeScript 文件的脚本:

    "scripts": {
      "build": "tsc",
      "start": "node dist/index.js"
    }
    
  7. 创建文件夹 resources 并向其添加示例映像。

  8. 为 TypeScript 代码创建 src 目录。

创建环境变量

在此示例中,你将凭据写入运行应用程序的本地计算机上的环境变量。

若要为密钥和终结点设置环境变量,请打开控制台窗口,并按照操作系统和开发环境的说明进行操作。

  • 若要设置 CONTENT_SAFETY_KEY 环境变量,请将 YOUR_CONTENT_SAFETY_KEY 替换为资源的其中一个密钥。
  • 若要设置 CONTENT_SAFETY_ENDPOINT 环境变量,请将 YOUR_CONTENT_SAFETY_ENDPOINT 替换为资源的终结点。

重要说明

请谨慎使用 API 密钥。 请不要直接在代码中包含 API 密钥,并且切勿公开发布该密钥。 如果使用 API 密钥,请安全地将其存储在Azure 密钥保管库中。 有关在应用中安全地使用 API 密钥的详细信息,请参阅 API 密钥和 Azure 密钥保管库

有关 AI 服务安全性的详细信息,请参阅 对 Azure AI 服务进行请求身份验证

setx CONTENT_SAFETY_KEY 'YOUR_CONTENT_SAFETY_KEY'
setx CONTENT_SAFETY_ENDPOINT 'YOUR_CONTENT_SAFETY_ENDPOINT'

添加环境变量后,可能需要重启任何正在运行的、将读取环境变量的程序(包括控制台窗口)。

分析图像内容

src 目录中创建新文件, index.ts 并粘贴以下代码。 将用于创建 imagePath 变量的字符串替换为示例图像的路径。

import ContentSafetyClient, {
    isUnexpected,
    AnalyzeImageParameters,
    AnalyzeImage200Response,
    AnalyzeImageDefaultResponse,
    AnalyzeImageOptions,
    ImageCategoriesAnalysisOutput
} from "@azure-rest/ai-content-safety";
import { AzureKeyCredential } from "@azure/core-auth";
import * as fs from "fs";
import * as path from "path";
import { fileURLToPath } from "url";

// Create __dirname equivalent for ESM modules
const __filename = fileURLToPath(import.meta.url);
const __dirname = path.dirname(__filename);

// Get endpoint and key from environment variables
const endpoint = process.env.CONTENT_SAFETY_ENDPOINT;
const key = process.env.CONTENT_SAFETY_KEY;

if (!endpoint || !key) {
    throw new Error("Missing required environment variables CONTENT_SAFETY_ENDPOINT or CONTENT_SAFETY_KEY");
}

try {

    const credential = new AzureKeyCredential(key);
    const client = ContentSafetyClient(endpoint, credential);

    const imagePath = path.join(__dirname, '../resources/image.jpg');

    const imageBuffer = fs.readFileSync(imagePath);
    const base64Image = imageBuffer.toString("base64");
    const analyzeImageOption: AnalyzeImageOptions = { image: { content: base64Image } };
    const analyzeImageParameters: AnalyzeImageParameters = { body: analyzeImageOption };

    const result: AnalyzeImage200Response | AnalyzeImageDefaultResponse = await client.path("/image:analyze").post(analyzeImageParameters);

    if (isUnexpected(result)) {
        throw result;
    }

    const categoriesAnalysis = result.body.categoriesAnalysis as ImageCategoriesAnalysisOutput[];

    for (const analysis of categoriesAnalysis) {
        console.log(`${analysis.category} severity: ${analysis.severity}`);
    }
} catch (error) {
    console.error("Error analyzing image:", error);
}

生成和运行示例

  1. 编译 TypeScript 代码:

    npm run build
    
  2. 运行编译的 JavaScript:

    node dist/index.js
    

输出

Hate severity:  0
SelfHarm severity:  0
Sexual severity:  0
Violence severity:  0

清理资源

如果要清理和删除Azure AI 服务订阅,可以删除资源或资源组。 删除资源组同时也会删除与之相关联的任何其他资源。