すべてのプロダクト
Search
ドキュメントセンター

Content Moderation:画像監査 2.0 SDK と使用ガイド

最終更新日:Nov 09, 2025

SDK またはネイティブ HTTPS リクエストを使用して、画像監査 2.0 API を呼び出すことができます。署名検証やリクエストボディの構築などのタスクを簡素化するために、SDK を使用して API を呼び出すことをお勧めします。このトピックでは、画像監査 2.0 の使用方法について説明します。

ステップ 1: サービスをアクティブ化する

サービスのアクティブ化ページに移動して、画像監査 V2.0 サービスをアクティブ化します。

画像監査 2.0 サービスをアクティブ化すると、デフォルトの課金方法は従量課金になります。日額料金は実際の使用量に基づいて計算されます。サービスを呼び出さない場合、料金は請求されません。API 操作を呼び出すと、課金システムは使用量に基づいて自動的に課金します。詳細については、「課金の詳細」をご参照ください。

ステップ 2: RAM ユーザーを作成して権限を付与する

SDK を使用して Content Moderation API を呼び出す前に、ユーザーを作成し、そのユーザーに関連付けられたアクセス資格情報を取得し、Alibaba Cloud リソースにアクセスするための権限をユーザーに付与する必要があります。この例では、Resource Access Management (RAM) ユーザーが作成され、AccessKey ペアがアクセス資格情報として使用され、RAM ユーザーには Content Moderation を呼び出す権限が付与されます

  1. Alibaba Cloud アカウントまたは管理者権限を持つ RAM ユーザーを使用して RAM コンソールにログオンします。

  2. RAM ユーザーを作成して OpenAPI アクセスを選択し、その RAM ユーザー用に生成された AccessKey ペアを記録します。 RAM ユーザーの作成方法の詳細については、「RAM ユーザーの作成」をご参照ください。

  3. RAM ユーザーに AliyunYundunGreenWebFullAccess システムポリシーを付与します。詳細については、「RAM ユーザーへの権限付与」をご参照ください。

ステップ 3: SDK のインストールと使用

次のリージョンがアクセスでサポートされています:

リージョン

パブリックエンドポイント

VPC エンドポイント

サポートされているサービス

シンガポール

https://green-cip.ap-southeast-1.aliyuncs.com

https://green-cip-vpc.ap-southeast-1.aliyuncs.com

, postImageCheckByVL_global, baselineCheck_global, aigcDetector_global, faceDetect_global, faceDetect_pro_global

英国 (ロンドン)

https://green-cip.eu-west-1.aliyuncs.com

利用不可

米国 (バージニア)

https://green-cip.us-east-1.aliyuncs.com

https://green-cip-vpc.us-east-1.aliyuncs.com

baselineCheck_global, aigcDetector_global

米国 (シリコンバレー)

https://green-cip.us-west-1.aliyuncs.com

利用不可

ドイツ (フランクフルト)

green-cip.eu-central-1.aliyuncs.com

利用不可

説明

他のプログラミング言語の SDK サンプルコードが必要な場合は、OpenAPI Explorer オンラインデバッグツールを使用して API 操作をテストできます。このツールは、API 操作の SDK サンプルコードを自動的に生成します。

Alibaba Cloud SDK コードでは、ALIBABA_CLOUD_ACCESS_KEY_IDALIBABA_CLOUD_ACCESS_KEY_SECRET 環境変数を定義することで、デフォルトのアクセス資格情報を作成できます。Alibaba Cloud サービスの API 操作を呼び出すと、システムは資格情報に直接アクセスし、AccessKey ペアを読み取り、自動的に認証を完了します。SDK サンプルコードを使用する前に、環境変数を設定する必要があります。詳細については、「資格情報の設定」をご参照ください。

API 操作フィールドの説明については、「画像監査拡張 V2.0 同期検出 API」をご参照ください。

Java SDK

使用上の注意

説明

次の操作によって返される Label フィールドの値と意味については、「リスクラベルリファレンス」をご参照ください。

インターネット経由でアクセス可能な画像を監査する

シナリオ

監査対象の画像がインターネット経由でアクセス可能な場合、画像監査 バージョン 2.0 サービスは画像の URL から画像を取得して監査できます。

  1. pom.xml ファイルに次の依存関係を追加して、Java SDK をインストールします。その後、Maven プロジェクトで SDK を使用できます。

    <dependency>
      <groupId>com.aliyun</groupId>
      <artifactId>green20220302</artifactId>
      <version>2.2.11</version>
    </dependency>

  2. Java SDK を使用します。

    • 同期 API アクセスの例

      import com.alibaba.fastjson.JSON;
      import com.aliyun.green20220302.Client;
      import com.aliyun.green20220302.models.ImageModerationRequest;
      import com.aliyun.green20220302.models.ImageModerationResponse;
      import com.aliyun.green20220302.models.ImageModerationResponseBody;
      import com.aliyun.green20220302.models.ImageModerationResponseBody.ImageModerationResponseBodyData;
      import com.aliyun.green20220302.models.ImageModerationResponseBody.ImageModerationResponseBodyDataResult;
      import com.aliyun.teaopenapi.models.Config;
      import com.aliyun.teautil.models.RuntimeOptions;
      
      import java.util.HashMap;
      import java.util.List;
      import java.util.Map;
      import java.util.UUID;
      
      public class ImageUrlDemo {
          /**
           * リクエストクライアントを作成します。
           *
           * @param accessKeyId
           * @param accessKeySecret
           * @param endpoint
           * @return
           * @throws Exception
           */
          public static Client createClient(String accessKeyId, String accessKeySecret, String endpoint) throws Exception {
              Config config = new Config();
              config.setAccessKeyId(accessKeyId);
              config.setAccessKeySecret(accessKeySecret);
              // HTTP プロキシを設定します。
              // config.setHttpProxy("http://10.10.xx.xx:xxxx");
              // HTTPS プロキシを設定します。
              // config.setHttpsProxy("https://10.10.xx.xx:xxxx");
              // 必要に応じてリージョンとエンドポイントを変更します。
              config.setEndpoint(endpoint);
              return new Client(config);
          }
      
          public static ImageModerationResponse invokeFunction(String accessKeyId, String accessKeySecret, String endpoint) throws Exception {
              // 注: 検出パフォーマンスを向上させるには、インスタンス化されたクライアントを再利用して、接続を繰り返し確立しないようにします。
              Client client = createClient(accessKeyId, accessKeySecret, endpoint);
      
              // RuntimeObject インスタンスを作成し、実行時パラメーターを設定します。
              RuntimeOptions runtime = new RuntimeOptions();
      
              // 検出パラメーターを構築します。
              Map<String, String> serviceParameters = new HashMap<>();
              // 一般公開されている URL。
              serviceParameters.put("imageUrl", "https://img.alicdn.com/tfs/xxxxxxxxxx001.png");
              // 検出対象データの一意の識別子。
              serviceParameters.put("dataId", UUID.randomUUID().toString());
      
              ImageModerationRequest request = new ImageModerationRequest();
              // 画像検出サービス: Content Moderation コンソールで画像監査拡張ルールに設定された serviceCode。例: baselineCheck_global。
              request.setService("baselineCheck_global");
              request.setServiceParameters(JSON.toJSONString(serviceParameters));
      
              ImageModerationResponse response = null;
              try {
                  response = client.imageModerationWithOptions(request, runtime);
              } catch (Exception e) {
                  e.printStackTrace();
              }
              return response;
          }
      
          public static void main(String[] args) throws Exception {
              /**
               * Alibaba Cloud アカウントの AccessKey は、すべての API 操作に対する完全な権限を持っています。API アクセスや日常の O&M には RAM ユーザーを使用することをお勧めします。
               * 環境変数を取得する一般的な方法:
               * 方法 1:
               *     RAM ユーザーの AccessKey ID を取得します: System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID");
               *     RAM ユーザーの AccessKey Secret を取得します: System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET");
               * 方法 2:
               *     RAM ユーザーの AccessKey ID を取得します: System.getProperty("ALIBABA_CLOUD_ACCESS_KEY_ID");
               *     RAM ユーザーの AccessKey Secret を取得します: System.getProperty("ALIBABA_CLOUD_ACCESS_KEY_SECRET");
               */
              String accessKeyId = "環境変数から RAM ユーザーの AccessKey ID を取得することをお勧めします";
              String accessKeySecret = "環境変数から RAM ユーザーの AccessKey Secret を取得することをお勧めします";
              ImageModerationResponse response = invokeFunction(accessKeyId, accessKeySecret, "green-cip.ap-southeast-1.aliyuncs.com");
      
              // 検出結果を出力します。
              if (response != null) {
                  if (response.getStatusCode() == 200) {
                      ImageModerationResponseBody body = response.getBody();
                      System.out.println("requestId=" + body.getRequestId());
                      System.out.println("code=" + body.getCode());
                      System.out.println("msg=" + body.getMsg());
                      if (body.getCode() == 200) {
                          ImageModerationResponseBodyData data = body.getData();
                          System.out.println("dataId=" + data.getDataId());
                          List<ImageModerationResponseBodyDataResult> results = data.getResult();
                          for (ImageModerationResponseBodyDataResult result : results) {
                              System.out.println("label=" + result.getLabel());
                              System.out.println("confidence=" + result.getConfidence());
                          }
                      } else {
                          System.out.println("画像監査は成功しませんでした。コード:" + body.getCode());
                      }
                  } else {
                      System.out.println("応答は成功しませんでした。ステータス:" + response.getStatusCode());
                  }
              }
      
          }
      }

ローカル画像を監査する

シナリオ

監査したい画像がローカルコンピューターに保存されていて、インターネット経由でアクセスできない場合は、Content Moderation サービスが提供する Object Storage Service (OSS) バケットに画像をアップロードできます。画像監査 2.0 サービスは、OSS に直接アクセスして画像コンテンツを取得し、監査できます。

  1. Java SDK をインストールします。

    Content Moderation SDK をインストールします:

    <dependency>
      <groupId>com.aliyun</groupId>
      <artifactId>green20220302</artifactId>
      <version>2.2.11</version>
    </dependency>

    OSS SDK をインストールします:

    <dependency>
      <groupId>com.aliyun.oss</groupId>
      <artifactId>aliyun-sdk-oss</artifactId>
      <version>3.16.3</version>
    </dependency>
  2. Java SDK を使用します。

    • 同期 API アクセスの例

      import com.alibaba.fastjson.JSON;
      import com.aliyun.green20220302.Client;
      import com.aliyun.green20220302.models.DescribeUploadTokenResponse;
      import com.aliyun.green20220302.models.DescribeUploadTokenResponseBody;
      import com.aliyun.green20220302.models.ImageModerationRequest;
      import com.aliyun.green20220302.models.ImageModerationResponse;
      import com.aliyun.green20220302.models.ImageModerationResponseBody;
      import com.aliyun.green20220302.models.ImageModerationResponseBody.ImageModerationResponseBodyData;
      import com.aliyun.green20220302.models.ImageModerationResponseBody.ImageModerationResponseBodyDataResult;
      import com.aliyun.oss.OSS;
      import com.aliyun.oss.OSSClientBuilder;
      import com.aliyun.oss.model.PutObjectRequest;
      import com.aliyun.teaopenapi.models.Config;
      import com.aliyun.teautil.models.RuntimeOptions;
      
      import java.io.File;
      import java.util.HashMap;
      import java.util.List;
      import java.util.Map;
      import java.util.UUID;
      
      public class ScanLocalImage {
      
          // サービスが VPC にデプロイされているかどうかを指定します。
          public static boolean isVPC = false;
      
          // ファイルのアップロードに使用されるトークン。キーはエンドポイント、値はトークンです。
          public static Map<String, DescribeUploadTokenResponseBody.DescribeUploadTokenResponseBodyData> tokenMap = new HashMap<>();
      
          // ファイルのアップロードに使用されるクライアント。
          public static OSS ossClient = null;
      
          /**
           * リクエストクライアントを作成します。
           *
           * @param accessKeyId
           * @param accessKeySecret
           * @param endpoint
           * @return
           * @throws Exception
           */
          public static Client createClient(String accessKeyId, String accessKeySecret, String endpoint) throws Exception {
              Config config = new Config();
              config.setAccessKeyId(accessKeyId);
              config.setAccessKeySecret(accessKeySecret);
              // 必要に応じてリージョンとエンドポイントを変更します。
              config.setEndpoint(endpoint);
              return new Client(config);
          }
      
          /**
           * ファイルをアップロードするためのクライアントを作成します。
           *
           * @param tokenData
           * @param isVPC
           */
          public static void getOssClient(DescribeUploadTokenResponseBody.DescribeUploadTokenResponseBodyData tokenData, boolean isVPC) {
              // 注: 検出パフォーマンスを向上させるには、インスタンス化されたクライアントを再利用して、接続を繰り返し確立しないようにします。
              if (isVPC) {
                  ossClient = new OSSClientBuilder().build(tokenData.ossInternalEndPoint, tokenData.getAccessKeyId(), tokenData.getAccessKeySecret(), tokenData.getSecurityToken());
              } else {
                  ossClient = new OSSClientBuilder().build(tokenData.ossInternetEndPoint, tokenData.getAccessKeyId(), tokenData.getAccessKeySecret(), tokenData.getSecurityToken());
              }
          }
      
          /**
           * ファイルをアップロードします。
           *
           * @param filePath
           * @param tokenData
           * @return
           * @throws Exception
           */
          public static String uploadFile(String filePath, DescribeUploadTokenResponseBody.DescribeUploadTokenResponseBodyData tokenData) throws Exception {
              String[] split = filePath.split("\\.");
              String objectName;
              if (split.length > 1) {
                  objectName = tokenData.getFileNamePrefix() + UUID.randomUUID() + "." + split[split.length - 1];
              } else {
                  objectName = tokenData.getFileNamePrefix() + UUID.randomUUID();
              }
              PutObjectRequest putObjectRequest = new PutObjectRequest(tokenData.getBucketName(), objectName, new File(filePath));
              ossClient.putObject(putObjectRequest);
              return objectName;
          }
      
          public static ImageModerationResponse invokeFunction(String accessKeyId, String accessKeySecret, String endpoint) throws Exception {
              // 注: 検出パフォーマンスを向上させるには、インスタンス化されたクライアントを再利用して、接続を繰り返し確立しないようにします。
              Client client = createClient(accessKeyId, accessKeySecret, endpoint);
              RuntimeOptions runtime = new RuntimeOptions();
      
              // ローカルファイルのフルパス。例: D:\localPath\exampleFile.png。
              String filePath = "D:\localPath\exampleFile.png";
              // ファイルのアップロードに使用されるトークンを取得します。
              if (tokenMap.get(endpoint) == null || tokenMap.get(endpoint).expiration <= System.currentTimeMillis() / 1000) {
                  DescribeUploadTokenResponse tokenResponse = client.describeUploadToken();
                  tokenMap.put(endpoint,tokenResponse.getBody().getData());
              }
              // ファイルのアップロードに使用されるクライアント。
              getOssClient(tokenMap.get(endpoint), isVPC);
      
              // ファイルをアップロードします。
              String objectName = uploadFile(filePath, tokenMap.get(endpoint));
      
              // 検出パラメーターを構築します。
              Map<String, String> serviceParameters = new HashMap<>();
              // ファイルアップロードに関する情報。
              serviceParameters.put("ossBucketName", tokenMap.get(endpoint).getBucketName());
              serviceParameters.put("ossObjectName", objectName);
              serviceParameters.put("dataId", UUID.randomUUID().toString());
      
              ImageModerationRequest request = new ImageModerationRequest();
              // 画像検出サービス: Content Moderation コンソールで画像監査拡張ルールに設定された serviceCode。例: baselineCheck。
              request.setService("baselineCheck_global");
              request.setServiceParameters(JSON.toJSONString(serviceParameters));
      
              ImageModerationResponse response = null;
              try {
                  response = client.imageModerationWithOptions(request, runtime);
              } catch (Exception e) {
                  e.printStackTrace();
              }
              return response;
          }
      
          public static void main(String[] args) throws Exception {
              /**
               * Alibaba Cloud アカウントの AccessKey は、すべての API 操作に対する完全な権限を持っています。API アクセスや日常の O&M には RAM ユーザーを使用することをお勧めします。
               * 環境変数を取得する一般的な方法:
               * 方法 1:
               *     RAM ユーザーの AccessKey ID を取得します: System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID");
               *     RAM ユーザーの AccessKey Secret を取得します: System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET");
               * 方法 2:
               *     RAM ユーザーの AccessKey ID を取得します: System.getProperty("ALIBABA_CLOUD_ACCESS_KEY_ID");
               *     RAM ユーザーの AccessKey Secret を取得します: System.getProperty("ALIBABA_CLOUD_ACCESS_KEY_SECRET");
               */
              String accessKeyId = "環境変数から RAM ユーザーの AccessKey ID を取得することをお勧めします";
              String accessKeySecret = "環境変数から RAM ユーザーの AccessKey Secret を取得することをお勧めします";
              // 必要に応じてリージョンとエンドポイントを変更します。
              ImageModerationResponse response = invokeFunction(accessKeyId, accessKeySecret, "green-cip.ap-southeast-1.aliyuncs.com");
              try {
                  // 検出結果を出力します。
                  if (response != null) {
                      if (response.getStatusCode() == 200) {
                          ImageModerationResponseBody body = response.getBody();
                          System.out.println("requestId=" + body.getRequestId());
                          System.out.println("code=" + body.getCode());
                          System.out.println("msg=" + body.getMsg());
                          if (body.getCode() == 200) {
                              ImageModerationResponseBodyData data = body.getData();
                              System.out.println("dataId=" + data.getDataId());
                              List<ImageModerationResponseBodyDataResult> results = data.getResult();
                              for (ImageModerationResponseBodyDataResult result : results) {
                                  System.out.println("label=" + result.getLabel());
                                  System.out.println("confidence=" + result.getConfidence());
                              }
                          } else {
                              System.out.println("画像監査は成功しませんでした。コード:" + body.getCode());
                          }
                      } else {
                          System.out.println("応答は成功しませんでした。ステータス:" + response.getStatusCode());
                      }
                  }
              } catch (Exception e) {
                  e.printStackTrace();
              }
          }
      }

OSS に保存されている画像を監査する

シナリオ

監査したい画像が Alibaba Cloud Object Storage Service (OSS) に保存されている場合、サービスリンクロール (SLR) を作成して、Content Moderation サービスが OSS にアクセスできるようにすることができます。画像監査 2.0 サービスは SLR を使用して OSS からファイルを取得し、監査します。クラウドリソースアクセス承認ページに移動して、AliyunCIPScanOSSRole サービスロールを作成します。

  1. Alibaba Cloud アカウントを使用して クラウドリソースアクセス承認ページに移動し、権限を付与します。

  2. pom.xml ファイルに次の依存関係を追加して、Java SDK をインストールします。その後、Maven プロジェクトで SDK を使用できます。

    <dependency>
      <groupId>com.aliyun</groupId>
      <artifactId>green20220302</artifactId>
      <version>2.2.11</version>
    </dependency>

  3. Java SDK を使用します。

    • 同期 API アクセスの例

      import com.alibaba.fastjson.JSON;
      import com.aliyun.green20220302.Client;
      import com.aliyun.green20220302.models.ImageModerationRequest;
      import com.aliyun.green20220302.models.ImageModerationResponse;
      import com.aliyun.green20220302.models.ImageModerationResponseBody;
      import com.aliyun.green20220302.models.ImageModerationResponseBody.ImageModerationResponseBodyData;
      import com.aliyun.green20220302.models.ImageModerationResponseBody.ImageModerationResponseBodyDataResult;
      import com.aliyun.teaopenapi.models.Config;
      import com.aliyun.teautil.models.RuntimeOptions;
      
      import java.util.HashMap;
      import java.util.List;
      import java.util.Map;
      import java.util.UUID;
      
      public class OssScanDemo {
          /**
           * リクエストクライアントを作成します。
           *
           * @param accessKeyId
           * @param accessKeySecret
           * @param endpoint
           * @return
           * @throws Exception
           */
          public static Client createClient(String accessKeyId, String accessKeySecret, String endpoint) throws Exception {
              Config config = new Config();
              config.setAccessKeyId(accessKeyId);
              config.setAccessKeySecret(accessKeySecret);
              // HTTP プロキシを設定します。
              // config.setHttpProxy("http://10.10.xx.xx:xxxx");
              // HTTPS プロキシを設定します。
              // config.setHttpsProxy("https://10.10.xx.xx:xxxx");
              // 必要に応じてリージョンとエンドポイントを変更します。
              config.setEndpoint(endpoint);
              return new Client(config);
          }
      
          public static ImageModerationResponse invokeFunction(String accessKeyId, String accessKeySecret, String endpoint) throws Exception {
              // 注: 検出パフォーマンスを向上させるには、インスタンス化されたクライアントを再利用して、接続を繰り返し確立しないようにします。
              Client client = createClient(accessKeyId, accessKeySecret, endpoint);
      
              // RuntimeObject インスタンスを作成し、実行時パラメーターを設定します。
              RuntimeOptions runtime = new RuntimeOptions();
      
              // 検出パラメーターを構築します。
              Map<String, String> serviceParameters = new HashMap<>();
              // 検出対象データの一意の識別子。
              serviceParameters.put("dataId", UUID.randomUUID().toString());
              // 検出対象画像のバケットが配置されているリージョン。例: ap-southeast-1。
              serviceParameters.put("ossRegionId", "ap-southeast-1");
              // 検出対象画像が保存されているバケットの名前。例: bucket001。
              serviceParameters.put("ossBucketName", "bucket001");
              // 検出対象画像。例: image/001.jpg。
              serviceParameters.put("ossObjectName", "image/001.jpg");
      
              ImageModerationRequest request = new ImageModerationRequest();
              // 画像検出サービス: Content Moderation コンソールで画像監査拡張ルールに設定された serviceCode。例: baselineCheck_global。
              request.setService("baselineCheck_global");
              request.setServiceParameters(JSON.toJSONString(serviceParameters));
      
              ImageModerationResponse response = null;
              try {
                  response = client.imageModerationWithOptions(request, runtime);
              } catch (Exception e) {
                  e.printStackTrace();
              }
              return response;
          }
      
          public static void main(String[] args) throws Exception {
              /**
               * Alibaba Cloud アカウントの AccessKey は、すべての API 操作に対する完全な権限を持っています。API アクセスや日常の O&M には RAM ユーザーを使用することをお勧めします。
               * 環境変数を取得する一般的な方法:
               * 方法 1:
               *     RAM ユーザーの AccessKey ID を取得します: System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID");
               *     RAM ユーザーの AccessKey Secret を取得します: System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET");
               * 方法 2:
               *     RAM ユーザーの AccessKey ID を取得します: System.getProperty("ALIBABA_CLOUD_ACCESS_KEY_ID");
               *     RAM ユーザーの AccessKey Secret を取得します: System.getProperty("ALIBABA_CLOUD_ACCESS_KEY_SECRET");
               */
              String accessKeyId = "環境変数から RAM ユーザーの AccessKey ID を取得することをお勧めします";
              String accessKeySecret = "環境変数から RAM ユーザーの AccessKey Secret を取得することをお勧めします";
              ImageModerationResponse response = invokeFunction(accessKeyId, accessKeySecret, "green-cip.ap-southeast-1.aliyuncs.com");
      
              // 検出結果を出力します。
              if (response != null) {
                  if (response.getStatusCode() == 200) {
                      ImageModerationResponseBody body = response.getBody();
                      System.out.println("requestId=" + body.getRequestId());
                      System.out.println("code=" + body.getCode());
                      System.out.println("msg=" + body.getMsg());
                      if (body.getCode() == 200) {
                          ImageModerationResponseBodyData data = body.getData();
                          System.out.println("dataId=" + data.getDataId());
                          List<ImageModerationResponseBodyDataResult> results = data.getResult();
                          for (ImageModerationResponseBodyDataResult result : results) {
                              System.out.println("label=" + result.getLabel());
                              System.out.println("confidence=" + result.getConfidence());
                          }
                      } else {
                          System.out.println("画像監査は成功しませんでした。コード:" + body.getCode());
                      }
                  } else {
                      System.out.println("応答は成功しませんでした。ステータス:" + response.getStatusCode());
                  }
              }
          }
      }

Python SDK

使用上の注意

  • 前提条件: Python 3.6 以降。

  • ソースコード: 詳細については、「Python 用 SDK ソースコード」をご参照ください。

  • 機能: SDK は、次の 3 種類の画像監査をサポートしています。

説明

次の操作によって返される Label フィールドの値と意味については、「リスクラベルリファレンス」をご参照ください。

公開アクセス可能な画像のモデレート

シナリオ

モデレートしたい画像が公開 URL を使用してアクセスできる場合、画像モデレーション 2.0 サービスは、その URL によって画像を取得してモデレートできます。

  1. 次のコマンドを実行して、必要な依存関係をインポートします。

    pip install alibabacloud_green20220302==2.2.11

  2. Python SDK を使用します。

    • 同期 API アクセスの例

      # coding=utf-8
      
      from alibabacloud_green20220302.client import Client
      from alibabacloud_green20220302 import models
      from alibabacloud_tea_openapi.models import Config
      from alibabacloud_tea_util import models as util_models
      import json
      import uuid
      
      
      # リクエストクライアントを作成します。
      def create_client(access_key_id, access_key_secret, endpoint):
          config = Config(
              access_key_id=access_key_id,
              access_key_secret=access_key_secret,
              # HTTP プロキシを設定します。
              # http_proxy='http://10.10.xx.xx:xxxx',
              # HTTPS プロキシを設定します。
              # https_proxy='https://10.10.xx.xx:xxxx',
              # 必要に応じてリージョンとエンドポイントを変更します。
              endpoint=endpoint
          )
          return Client(config)
      
      
      def invoke_function(access_key_id, access_key_secret, endpoint):
          # 注: モデレーションのパフォーマンスを向上させるために、インスタンス化されたクライアントを再利用して、接続の繰り返し確立を回避します。
          client = create_client(access_key_id, access_key_secret, endpoint)
          # RuntimeObject インスタンスを作成し、実行時パラメーターを設定します。
          runtime = util_models.RuntimeOptions()
      
          # モデレーションパラメーターを構築します。
          service_parameters = {
              # 公開アクセス可能な画像の URL。
              'imageUrl': 'https://img.alicdn.com/tfs/xxxxxxxxxx001.png',
              # データの一意の ID。
              'dataId': str(uuid.uuid1())
          }
      
          image_moderation_request = models.ImageModerationRequest(
              # 画像モデレーションサービス: Content Moderation コンソールで画像モデレーション 2.0 に設定されたルールの serviceCode。例: baselineCheck_global。
              service='baselineCheck_global',
              service_parameters=json.dumps(service_parameters)
          )
      
          try:
              return client.image_moderation_with_options(image_moderation_request, runtime)
          except Exception as err:
              print(err)
      
      
      if __name__ == '__main__':
          # Alibaba Cloud アカウントの AccessKey ペアは、すべての API 操作に対する完全な権限を持っています。RAM ユーザーを使用して API 操作を呼び出すか、日常の O&M を実行することをお勧めします。
          # セキュリティ上の理由から、AccessKey ID と AccessKey Secret をプロジェクトコードに保存しないでください。これにより、AccessKey ペアが漏洩し、すべてのクラウドリソースのセキュリティが損なわれる可能性があります。
          # 環境変数を取得する一般的な方法:
          # RAM ユーザーの AccessKey ID を取得する: os.environ['ALIBABA_CLOUD_ACCESS_KEY_ID']
          # RAM ユーザーの AccessKey Secret を取得する: os.environ['ALIBABA_CLOUD_ACCESS_KEY_SECRET']
          access_key_id='RAM ユーザーの AccessKey ID を環境変数から取得することをお勧めします。'
          access_key_secret='RAM ユーザーの AccessKey Secret を環境変数から取得することをお勧めします。'
          # 必要に応じてリージョンとエンドポイントを変更します。
          response = invoke_function(access_key_id, access_key_secret, 'green-cip.ap-southeast-1.aliyuncs.com')
          # 結果を出力します。
          if response is not None:
              if response.status_code == 200:
                  # 呼び出しは成功です。
                  # モデレーション結果を取得します。
                  result = response.body
                  print('response success. result:{}'.format(result))
                  if result.code == 200:
                      result_data = result.data
                      print('result: {}'.format(result_data))
              else:
                  print('response not success. status:{} ,result:{}'.format(response.status_code, response))
      

検出にローカルイメージを使用する

シナリオ

モデレートしたい画像がローカルマシン上にあり、公開 URL を持たない場合、Content Moderation が提供する Object Storage Service (OSS) バケットに画像をアップロードできます。その後、画像モデレーション 2.0 サービスは OSS に直接アクセスして、モデレーションのために画像を取得できます。

  1. Python SDK をインストールします。

    Content Moderation SDK をインストールします:

    pip install alibabacloud_green20220302==2.2.11

    OSS SDK をインストールします:

    pip install oss2
  2. Python SDK を使用します。

    • 同期 API アクセスの例

      from alibabacloud_green20220302.client import Client
      from alibabacloud_green20220302 import models
      from alibabacloud_tea_openapi.models import Config
      from alibabacloud_tea_util import models as util_models
      import json
      import uuid
      import oss2
      import time
      import os
      
      # サービスが VPC にデプロイされているかどうかを指定します。
      is_vpc = False
      # ファイルアップロード用のトークン。endpoint->token。
      token_dict = dict()
      # ファイルアップロード用のクライアント。
      bucket = None
      
      
      # リクエストクライアントを作成します。
      def create_client(access_key_id, access_key_secret, endpoint):
          config = Config(
              access_key_id=access_key_id,
              access_key_secret=access_key_secret,
              # HTTP プロキシを設定します。
              # http_proxy='http://10.10.xx.xx:xxxx',
              # HTTPS プロキシを設定します。
              # https_proxy='https://10.10.xx.xx:xxxx',
              # 必要に応じてリージョンとエンドポイントを変更します。
              endpoint=endpoint
          )
          return Client(config)
      
      
      # ファイルアップロードクライアントを作成します。
      def create_oss_bucket(is_vpc, upload_token):
          global token_dict
          global bucket
          auth = oss2.StsAuth(upload_token.access_key_id, upload_token.access_key_secret, upload_token.security_token)
      
          if (is_vpc):
              end_point = upload_token.oss_internal_end_point
          else:
              end_point = upload_token.oss_internet_end_point
          # 注: モデレーションのパフォーマンスを向上させるために、インスタンス化されたバケットを再利用して、接続の繰り返し確立を回避します。
          bucket = oss2.Bucket(auth, end_point, upload_token.bucket_name)
      
      
      def upload_file(file_name, upload_token):
          create_oss_bucket(is_vpc, upload_token)
          object_name = upload_token.file_name_prefix + str(uuid.uuid1()) + '.' + file_name.split('.')[-1]
          bucket.put_object_from_file(object_name, file_name)
          return object_name
      
      
      def invoke_function(access_key_id, access_key_secret, endpoint):
          # 注: モデレーションのパフォーマンスを向上させるために、インスタンス化されたクライアントを再利用して、接続の繰り返し確立を回避します。
          client = create_client(access_key_id, access_key_secret, endpoint)
          # RuntimeObject インスタンスを作成し、実行時パラメーターを設定します。
          runtime = util_models.RuntimeOptions()
      
          # ローカルファイルの完全なパス。例: D:\localPath\exampleFile.png。
          file_path = 'D:\localPath\exampleFile.png'
      
          # ファイルアップロード用のトークンを取得します。
          upload_token = token_dict.setdefault(endpoint, None)
          if (upload_token == None) or int(upload_token.expiration) <= int(time.time()):
              response = client.describe_upload_token()
              upload_token = response.body.data
              token_dict[endpoint] = upload_token
          # ファイルをアップロードします。
          object_name = upload_file(file_path, upload_token)
      
          # モデレーションパラメーターを構築します。
          service_parameters = {
              # モデレートするファイルを保存するバケットの名前。
              'ossBucketName': upload_token.bucket_name,
              # モデレートするファイル。
              'ossObjectName': object_name,
              # データの一意の ID。
              'dataId': str(uuid.uuid1())
          }
      
          image_moderation_request = models.ImageModerationRequest(
              # 画像モデレーションサービス: Content Moderation コンソールで画像モデレーション 2.0 に設定されたルールの serviceCode。例: baselineCheck_global。
              service='baselineCheck_global',
              service_parameters=json.dumps(service_parameters)
          )
      
          try:
              return client.image_moderation_with_options(image_moderation_request, runtime)
          except Exception as err:
              print(err)
      
      
      if __name__ == '__main__':
          # Alibaba Cloud アカウントの AccessKey ペアは、すべての API 操作に対する完全な権限を持っています。RAM ユーザーを使用して API 操作を呼び出すか、日常の O&M を実行することをお勧めします。
          # セキュリティ上の理由から、AccessKey ID と AccessKey Secret をプロジェクトコードに保存しないでください。これにより、AccessKey ペアが漏洩し、すべてのクラウドリソースのセキュリティが損なわれる可能性があります。
          # 環境変数を取得する一般的な方法:
          # RAM ユーザーの AccessKey ID を取得する: os.environ['ALIBABA_CLOUD_ACCESS_KEY_ID']
          # RAM ユーザーの AccessKey Secret を取得する: os.environ['ALIBABA_CLOUD_ACCESS_KEY_SECRET']
          access_key_id='RAM ユーザーの AccessKey ID を環境変数から取得することをお勧めします。'
          access_key_secret='RAM ユーザーの AccessKey Secret を環境変数から取得することをお勧めします。'
          # 必要に応じてリージョンとエンドポイントを変更します。
          response = invoke_function(access_key_id, access_key_secret, 'green-cip.ap-southeast-1.aliyuncs.com')
          # 結果を出力します。
          if response is not None:
              if response.status_code == 200:
                  # 呼び出しは成功です。
                  # モデレーション結果を取得します。
                  result = response.body
                  print('response success. result:{}'.format(result))
                  if result.code == 200:
                      result_data = result.data
                      print('result: {}'.format(result_data))
              else:
                  print('response not success. status:{} ,result:{}'.format(response.status_code, response))
      

OSS に保存されている画像のモデレート

シナリオ

モデレートしたい画像がすでに Alibaba Cloud Object Storage Service (OSS) に保存されている場合、サービスロールを作成する権限を付与できます。これにより、Content Moderation サービスが OSS にアクセスできるようになります。画像モデレーション 2.0 サービスは、このサービスロールを使用して OSS から画像を取得し、モデレーションを行います。クラウドリソースアクセス承認ページに移動して、AliyunCIPScanOSSRole サービスロールを作成します。

  1. Alibaba Cloud アカウントを使用して クラウドリソースアクセス承認ページに移動し、必要な権限を付与します。

  2. 次のコマンドを実行して Python SDK をインストールします。

    pip install alibabacloud_green20220302==2.2.11

  3. Python SDK を使用します。

    • 同期 API アクセスの例

      from alibabacloud_green20220302.client import Client
      from alibabacloud_green20220302 import models
      from alibabacloud_tea_openapi.models import Config
      from alibabacloud_tea_util import models as util_models
      import json
      import os
      import uuid
      
      
      # リクエストクライアントを作成します。
      def create_client(access_key_id, access_key_secret, endpoint):
          config = Config(
              access_key_id=access_key_id,
              access_key_secret=access_key_secret,
              # HTTP プロキシを設定します。
              # http_proxy='http://10.10.xx.xx:xxxx',
              # HTTPS プロキシを設定します。
              # https_proxy='https://10.10.xx.xx:xxxx',
              # 必要に応じてリージョンとエンドポイントを変更します。
              endpoint=endpoint
          )
          return Client(config)
      
      
      def invoke_function(access_key_id, access_key_secret, endpoint):
          # 注: モデレーションのパフォーマンスを向上させるために、インスタンス化されたクライアントを再利用して、接続の繰り返し確立を回避します。
          client = create_client(access_key_id, access_key_secret, endpoint)
          # RuntimeObject インスタンスを作成し、実行時パラメーターを設定します。
          runtime = util_models.RuntimeOptions()
      
          # モデレーションパラメーターを構築します。
          service_parameters = {
              # モデレートするファイルを保存するバケットが配置されているリージョン。例: ap-southeast-1。
              'ossRegionId': 'ap-southeast-1',
              # モデレートするファイルを保存するバケットの名前。例: bucket001。
              'ossBucketName': 'bucket001',
              # モデレートするファイル。例: image/001.jpg。
              'ossObjectName': 'image/001.jpg',
              # データの一意の ID。
              'dataId': str(uuid.uuid1())
          }
      
          image_moderation_request = models.ImageModerationRequest(
              # 画像モデレーションサービス: Content Moderation コンソールで画像モデレーション 2.0 に設定されたルールの serviceCode。例: baselineCheck_global。
              service='baselineCheck_global',
              service_parameters=json.dumps(service_parameters)
          )
      
          try:
              return client.image_moderation_with_options(image_moderation_request, runtime)
          except Exception as err:
              print(err)
      
      
      if __name__ == '__main__':
          # Alibaba Cloud アカウントの AccessKey ペアは、すべての API 操作に対する完全な権限を持っています。RAM ユーザーを使用して API 操作を呼び出すか、日常の O&M を実行することをお勧めします。
          # セキュリティ上の理由から、AccessKey ID と AccessKey Secret をプロジェクトコードに保存しないでください。これにより、AccessKey ペアが漏洩し、すべてのクラウドリソースのセキュリティが損なわれる可能性があります。
          # 環境変数を取得する一般的な方法:
          # RAM ユーザーの AccessKey ID を取得する: os.environ['ALIBABA_CLOUD_ACCESS_KEY_ID']
          # RAM ユーザーの AccessKey Secret を取得する: os.environ['ALIBABA_CLOUD_ACCESS_KEY_SECRET']
          access_key_id='RAM ユーザーの AccessKey ID を環境変数から取得することをお勧めします。'
          access_key_secret='RAM ユーザーの AccessKey Secret を環境変数から取得することをお勧めします。'
          # 必要に応じてリージョンとエンドポイントを変更します。
          response = invoke_function(access_key_id, access_key_secret, 'green-cip.ap-southeast-1.aliyuncs.com')
          # 結果を出力します。
          if response is not None:
              if response.status_code == 200:
                  # 呼び出しは成功です。
                  # モデレーション結果を取得します。
                  result = response.body
                  print('response success. result:{}'.format(result))
                  if result.code == 200:
                      result_data = result.data
                      print('result: {}'.format(result_data))
              else:
                  print('response not success. status:{} ,result:{}'.format(response.status_code, response))
      

PHP SDK

使用上の注意

  • 前提条件: PHP 5.6 以降。

  • ソースコード: 詳細については、「PHP SDK ソースコード」をご参照ください。

  • 機能: この SDK は、次の 3 種類の画像モデレーションをサポートしています。

説明

次の API 操作によって返される Label フィールドの値と意味については、「リスクラベルの定義」をご参照ください。

インターネット経由でアクセス可能な画像をモデレートする

シナリオ

モデレート対象の画像がパブリック URL を使用してアクセス可能な場合、画像モデレーション バージョン 2.0 サービスは、画像 URL からファイルを取得してモデレートできます。

  1. PHP SDK をインストールします。

    次のコマンドを実行して、必要な依存関係をインポートします。

    composer require alibabacloud/green-20220302 2.2.10

  2. PHP SDK を使用します。

    • 同期 API アクセスの例

      <?php
      require('vendor/autoload.php');
      
      use AlibabaCloud\SDK\Green\V20220302\Models\ImageModerationResponse;
      use Darabonba\OpenApi\Models\Config;
      use AlibabaCloud\Tea\Utils\Utils\RuntimeOptions;
      use AlibabaCloud\SDK\Green\V20220302\Green;
      use AlibabaCloud\SDK\Green\V20220302\Models\ImageModerationRequest;
      
      /**
       * リクエストクライアントを作成します。
       * @param $accessKeyId
       * @param $accessKeySecret
       * @param $endpoint
       * @return Green
       */
      function create_client($accessKeyId, $accessKeySecret, $endpoint): Green
      {
          $config = new Config([
              "accessKeyId" => $accessKeyId,
              "accessKeySecret" => $accessKeySecret,
          		// HTTP プロキシを設定します。
          		// "httpProxy" => "http://10.10.xx.xx:xxxx",
          		// HTTPS プロキシを設定します。
          		// "httpsProxy" => "https://10.10.xx.xx:xxxx",
              "endpoint" => $endpoint,
          ]);
          return new Green($config);
      }
      
      /**
       * モデレーションタスクを送信します。
       * @param $accessKeyId
       * @param $accessKeySecret
       * @param $endpoint
       * @return ImageModerationResponse
       */
      function invoke($accessKeyId, $accessKeySecret, $endpoint): ImageModerationResponse
      {
          // 注: インスタンス化されたクライアントを再利用して、接続の繰り返しを回避し、モデレーションのパフォーマンスを向上させます。
          $client = create_client($accessKeyId, $accessKeySecret, $endpoint);
          // RuntimeObject インスタンスを作成し、実行時パラメーターを設定します。
          $runtime = new RuntimeOptions([]);
          // モデレーションパラメーターを作成します。
          $request = new ImageModerationRequest();
          $serviceParameters = array(
              // モデレートする画像の URL。画像はインターネット経由でアクセスできる必要があります。
              'imageUrl' => 'https://img.alicdn.com/tfs/xxxxxxxxxx001.png',
              // モデレートするデータの一意の ID。
              'dataId' => uniqid());
          // 画像モデレーションサービス: Content Moderation コンソールで画像モデレーション 2.0 に設定されているルールの serviceCode。例: baselineCheck_global。
          $request->service = "baselineCheck_global";
          $request->serviceParameters = json_encode($serviceParameters);
          // モデレーションタスクを送信します。
          return $client->imageModerationWithOptions($request, $runtime);
      }
      
      /**
      * Alibaba Cloud アカウントの AccessKey ペアは、すべての API 操作に対する権限を持っています。セキュリティのため、RAM ユーザーを使用して API 操作を呼び出すか、日常の O&M を実行してください。
      * プロジェクトコードに AccessKey ID と AccessKey Secret をハードコーディングしないでください。これにより、漏洩が発生し、すべてのリソースのセキュリティが損なわれる可能性があります。
      * 環境変数から取得します:
      * RAM ユーザーの AccessKey ID を取得します: getenv("ALIBABA_CLOUD_ACCESS_KEY_ID");
      * RAM ユーザーの AccessKey Secret を取得します: getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET");
      */
      $accessKeyId = 'RAM ユーザーの AccessKey ID を環境変数から取得します';
      $accessKeySecret = 'RAM ユーザーの AccessKey Secret を環境変数から取得します';
      // 必要に応じてリージョンとエンドポイントを変更します。
      $endpoint = "green-cip.ap-southeast-1.aliyuncs.com";
      
      try {
          $response = invoke($accessKeyId, $accessKeySecret, $endpoint);
          print_r(json_encode($response->body, JSON_UNESCAPED_UNICODE));
      } catch (Exception $e) {
          var_dump($e->getMessage());
          var_dump($e->getErrorInfo());
          var_dump($e->getLastException());
          var_dump($e->getLastRequest());
      }

ローカル画像をモデレートする

シナリオ

モデレートする画像がローカルコンピューターに保存されていて、インターネット経由でアクセスできない場合は、Content Moderation サービスが提供する Object Storage Service (OSS) バケットに画像をアップロードできます。画像モデレーション 2.0 サービスは、OSS に直接アクセスして画像を取得し、モデレートできます。

  1. PHP SDK をインストールします。

    Content Moderation SDK をインストールします:

    composer require alibabacloud/green-20220302 2.2.10

    OSS SDK をインストールします:

    composer require aliyuncs/oss-sdk-php
  2. PHP SDK を使用します。

    • 同期 API アクセスの例

      <?php
      require('vendor/autoload.php');
      
      use AlibabaCloud\SDK\Green\V20220302\Models\ImageModerationResponse;
      use AlibabaCloud\Tea\Utils\Utils;
      use Darabonba\OpenApi\Models\Config;
      use AlibabaCloud\Tea\Utils\Utils\RuntimeOptions;
      use AlibabaCloud\SDK\Green\V20220302\Green;
      use AlibabaCloud\SDK\Green\V20220302\Models\ImageModerationRequest;
      use OSS\OssClient;
      
      // サービスが VPC にデプロイされているかどうかを指定します。
      $isVPC = false;
      // ファイルアップロード用のトークン。
      $tokenArray = array();
      // ファイルアップロードリクエスト用のクライアント。
      $ossClient = null;
      
      /**
       * リクエストクライアントを作成します。
       * @param $accessKeyId
       * @param $accessKeySecret
       * @param $endpoint
       * @return Green
       */
      function create_client($accessKeyId, $accessKeySecret, $endpoint): Green
      {
          $config = new Config([
              "accessKeyId" => $accessKeyId,
              "accessKeySecret" => $accessKeySecret,
          		// HTTP プロキシを設定します。
         			// "httpProxy" => "http://10.10.xx.xx:xxxx",
         		 	// HTTPS プロキシを設定します。
         			// "httpsProxy" => "https://10.10.xx.xx:xxxx",
              "endpoint" => $endpoint,
          ]);
          return new Green($config);
      }
      
      /**
       * ファイルアップロードクライアントを作成します。
       * @param $tokenData
       * @return void
       */
      function create_upload_client($tokenData): void
      {
          global $isVPC;
          global $ossClient;
          // 注: インスタンス化されたクライアントを再利用して、接続の繰り返しを回避し、モデレーションのパフォーマンスを向上させます。
          if ($isVPC) {
              $ossClient = new OssClient($tokenData->accessKeyId, $tokenData->accessKeySecret, $tokenData->ossInternalEndPoint, false, $tokenData->securityToken);
          } else {
              $ossClient = new OssClient($tokenData->accessKeyId, $tokenData->accessKeySecret, $tokenData->ossInternetEndPoint, false, $tokenData->securityToken);
          }
      }
      
      /**
       * ファイルをアップロードします。
       * @param $fileName
       * @param $tokenData
       * @return string
       * @throws \OSS\Core\OssException
       */
      function upload_file($filePath, $tokenData): string
      {
          global $ossClient;
          // OssClient インスタンスを初期化します。
          create_upload_client($tokenData);
          $split = explode(".", $filePath);
          if (count($split) > 1) {
              $objectName = $tokenData->fileNamePrefix . uniqid() . "." . explode(".", $filePath)[count($split) - 1];
          } else {
              $objectName = $tokenData->fileNamePrefix . uniqid();
          }
          // ファイルをアップロードします。
          $ossClient->uploadFile($tokenData->bucketName, $objectName, $filePath);
          return $objectName;
      }
      
      /**
       * モデレーションタスクを送信します。
       * @param $accessKeyId
       * @param $accessKeySecret
       * @param $endpoint
       * @return ImageModerationResponse
       * @throws \OSS\Core\OssException
       */
      function invoke($accessKeyId, $accessKeySecret, $endpoint): ImageModerationResponse
      {
          global $tokenArray;
          // 注: インスタンス化されたクライアントを再利用して、接続の繰り返しを回避し、モデレーションのパフォーマンスを向上させます。
          $client = create_client($accessKeyId, $accessKeySecret, $endpoint);
          // RuntimeObject インスタンスを作成し、実行時パラメーターを設定します。
          $runtime = new RuntimeOptions([]);
          // ローカルファイルの完全なパス。例: D:\\localPath\\exampleFile.png。
          $filePath = "D:\\localPath\\exampleFile.png";
      
          // ファイルアップロードトークンを取得します。
          if (!isset($tokenArray[$endpoint]) || $tokenArray[$endpoint]->expiration <= time()) {
              $token = $client->describeUploadToken();
              $tokenArray[$endpoint] = $token->body->data;
          }
      
          // ファイルをアップロードします。
          $objectName = upload_file($filePath, $tokenArray[$endpoint]);
      
          // モデレーションパラメーターを作成します。
          $request = new ImageModerationRequest();
          // 画像モデレーションサービス: Content Moderation コンソールで画像モデレーション 2.0 に設定されているルールの serviceCode。例: baselineCheck_global。
          $request->service = "baselineCheck_global";
          // モデレートする画像の OSS 情報。
          $serviceParameters = array(
              'ossObjectName' => $objectName,
              'ossBucketName' => $tokenArray[$endpoint]->bucketName,
              'dataId' => uniqid());
          $request->serviceParameters = json_encode($serviceParameters);
          // モデレーションタスクを送信します。
          return $client->imageModerationWithOptions($request, $runtime);
      }
      
      /**
      * Alibaba Cloud アカウントの AccessKey ペアは、すべての API 操作に対する権限を持っています。セキュリティのため、RAM ユーザーを使用して API 操作を呼び出すか、日常の O&M を実行してください。
      * プロジェクトコードに AccessKey ID と AccessKey Secret をハードコーディングしないでください。これにより、漏洩が発生し、すべてのリソースのセキュリティが損なわれる可能性があります。
      * 環境変数から取得します:
      * RAM ユーザーの AccessKey ID を取得します: getenv("ALIBABA_CLOUD_ACCESS_KEY_ID");
      * RAM ユーザーの AccessKey Secret を取得します: getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET");
      */
      $accessKeyId = 'RAM ユーザーの AccessKey ID を環境変数から取得します';
      $accessKeySecret = 'RAM ユーザーの AccessKey Secret を環境変数から取得します';
      // 必要に応じてリージョンとエンドポイントを変更します。
      $endpoint = "green-cip.ap-southeast-1.aliyuncs.com";
      
      try {
          $response = invoke($accessKeyId, $accessKeySecret, $endpoint);
          print_r(json_encode($response->body, JSON_UNESCAPED_UNICODE));
      } catch (Exception $e) {
          var_dump($e->getMessage());
          var_dump($e->getErrorInfo());
          var_dump($e->getLastException());
          var_dump($e->getLastRequest());
      }

OSS に保存されている画像をモデレートする

シナリオ

モデレートする画像ファイルがすでに Alibaba Cloud Object Storage Service (OSS) に保存されている場合は、Content Moderation サービスが OSS にアクセスできるようにするサービスロールを作成するための権限を付与できます。画像モデレーション 2.0 サービスは、サービスロールを使用して OSS からファイルを取得し、モデレーションを行います。クラウドリソースアクセス承認ページ に移動して、AliyunCIPScanOSSRole サービスロールを作成します。

  1. Alibaba Cloud アカウントを使用して クラウドリソースアクセス承認ページ に移動し、権限を付与します。

  2. PHP SDK をインストールします。

    composer require alibabacloud/green-20220302 2.2.10

  3. PHP SDK を使用します。

    • 同期 API アクセスの例

      <?php
      require('vendor/autoload.php');
      
      use AlibabaCloud\SDK\Green\V20220302\Models\ImageModerationResponse;
      use Darabonba\OpenApi\Models\Config;
      use AlibabaCloud\Tea\Utils\Utils\RuntimeOptions;
      use AlibabaCloud\SDK\Green\V20220302\Green;
      use AlibabaCloud\SDK\Green\V20220302\Models\ImageModerationRequest;
      use AlibabaCloud\Tea\Utils\Utils;
      
      /**
       * リクエストクライアントを作成します。
       * @param $accessKeyId
       * @param $accessKeySecret
       * @param $endpoint
       * @return Green
       */
      function create_client($accessKeyId, $accessKeySecret, $endpoint): Green
      {
          $config = new Config([
              "accessKeyId" => $accessKeyId,
              "accessKeySecret" => $accessKeySecret,
              // HTTP プロキシを設定します。
              // "httpProxy" => "http://10.10.xx.xx:xxxx",
              // HTTPS プロキシを設定します。
              // "httpsProxy" => "https://10.10.xx.xx:xxxx",
              "endpoint" => $endpoint,
          ]);
          return new Green($config);
      }
      
      /**
       * モデレーションタスクを送信します。
       * @param $accessKeyId
       * @param $accessKeySecret
       * @param $endpoint
       * @return ImageModerationResponse
       */
      function invoke($accessKeyId, $accessKeySecret, $endpoint): ImageModerationResponse
      {
          // 注: インスタンス化されたクライアントを再利用して、接続の繰り返しを回避し、モデレーションのパフォーマンスを向上させます。
          $client = create_client($accessKeyId, $accessKeySecret, $endpoint);
          // RuntimeObject インスタンスを作成し、実行時パラメーターを設定します。
          $runtime = new RuntimeOptions([]);
          // モデレーションパラメーターを作成します。
          $request = new ImageModerationRequest();
          $serviceParameters = array(
            	// モデレートするファイル。例: image/001.jpg。
              'ossObjectName' => 'image/001.jpg',
              // モデレートするファイルが保存されているバケットのリージョン。例: ap-southeast-1。
              'ossRegionId' => 'ap-southeast-1',
            	// モデレートするファイルが保存されているバケットの名前。例: bucket001。
              'ossBucketName' => 'bucket001',
              // モデレートするデータの一意の ID。
              'dataId' => uniqid());
          // 画像モデレーションサービス: Content Moderation コンソールで画像モデレーション 2.0 に設定されているルールの serviceCode。例: baselineCheck_global。
          $request->service = "baselineCheck_global";
          $request->serviceParameters = json_encode($serviceParameters);
          // モデレーションタスクを送信します。
          return $client->imageModerationWithOptions($request, $runtime);
      }
      
      /**
      * Alibaba Cloud アカウントの AccessKey ペアは、すべての API 操作に対する権限を持っています。セキュリティのため、RAM ユーザーを使用して API 操作を呼び出すか、日常の O&M を実行してください。
      * プロジェクトコードに AccessKey ID と AccessKey Secret をハードコーディングしないでください。これにより、漏洩が発生し、すべてのリソースのセキュリティが損なわれる可能性があります。
      * 環境変数から取得します:
      * RAM ユーザーの AccessKey ID を取得します: getenv("ALIBABA_CLOUD_ACCESS_KEY_ID");
      * RAM ユーザーの AccessKey Secret を取得します: getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET");
      */
      $accessKeyId = 'RAM ユーザーの AccessKey ID を環境変数から取得します';
      $accessKeySecret = 'RAM ユーザーの AccessKey Secret を環境変数から取得します';
      // 必要に応じてリージョンとエンドポイントを変更します。
      $endpoint = "green-cip.ap-southeast-1.aliyuncs.com";
      
      try {
          $response = invoke($accessKeyId, $accessKeySecret, $endpoint);
          print_r(json_encode($response->body, JSON_UNESCAPED_UNICODE));
      } catch (Exception $e) {
          var_dump($e->getMessage());
          var_dump($e->getErrorInfo());
          var_dump($e->getLastException());
          var_dump($e->getLastRequest());
      }

Go SDK

使用上の注意

  • ソースコード: 詳細については、「Go SDK ソースコード」をご参照ください。

  • 機能: この SDK は、次の 3 種類の画像審査をサポートしています。

説明

以下の API 操作によって返される Label フィールドの値と意味については、「脅威ラベルの説明」をご参照ください。

インターネット経由でアクセス可能な画像を審査する

シナリオ

審査対象の画像がインターネット経由でアクセス可能な場合、画像審査 2.0 は画像の URL から画像を取得して審査できます。

  1. Go SDK をインストールします。

    go git clone --branch v2.2.11 github.com/alibabacloud-go/green-20220302/v2

  2. Go SDK を使用します。

    • 同期 API アクセスの例

      package main
      
      import (
      	"encoding/json"
      	"fmt"
      	openapi "github.com/alibabacloud-go/darabonba-openapi/v2/client"
      	green20220302 "github.com/alibabacloud-go/green-20220302/v2/client"
      	util "github.com/alibabacloud-go/tea-utils/v2/service"
      	"github.com/alibabacloud-go/tea/tea"
      	"github.com/google/uuid"
      	"net/http"
      	"os"
      )
      
      // リクエストを送信するクライアントを作成します。
      func createClient(accessKeyId *string, accessKeySecret *string, endpoint *string) (*green20220302.Client, error) {
      	config := &openapi.Config{
      		AccessKeyId: accessKeyId,
      		AccessKeySecret: accessKeySecret,
      		// HTTP プロキシを設定します。
      		// HttpProxy: tea.String("http://10.10.xx.xx:xxxx"),
      		// HTTPS プロキシを設定します。
      		// HttpsProxy: tea.String("https://username:password@xxx.xxx.xxx.xxx:9999"),
      		Endpoint: endpoint,
      	}
      	// 注: インスタンス化されたクライアントを再利用して、繰り返し接続を回避し、審査パフォーマンスを向上させます。
      	return green20220302.NewClient(config);
      }
      
      func invoke(accessKeyId *string, accessKeySecret *string, endpoint *string) (_result *green20220302.ImageModerationResponse, _err error) {
      	// 注: インスタンス化されたクライアントを再利用して、繰り返し接続を回避し、審査パフォーマンスを向上させます。
      	client, _err := createClient(accessKeyId, accessKeySecret, endpoint)
      	if _err != nil {
      		return nil,_err
      	}
      	// 実行時パラメーターを設定します。この設定は、このランタイムインスタンスを使用するリクエストに対してのみ有効です。
      	runtime := &util.RuntimeOptions{}
      
      	// 画像審査リクエストを構築します。
      	serviceParameters, _ := json.Marshal(
      		map[string]interface{}{
      			// 審査する画像の URL。画像はインターネット経由でアクセスできる必要があります。
      			"imageUrl": "https://img.alicdn.com/tfs/xxxxxxxxxx001.png",
      			// 審査するデータの ID。
      			"dataId":uuid.New(),
      		},
      	)
      	imageModerationRequest := &green20220302.ImageModerationRequest{
      		// 画像審査サービス。これは、Content Moderation コンソールで画像審査 2.0 用に設定したサービスコードです。例: baselineCheck_global。
      		Service:           tea.String("baselineCheck_global"),
      		ServiceParameters: tea.String(string(serviceParameters)),
      	}
      
      	return client.ImageModerationWithOptions(imageModerationRequest, runtime)
      
      }
      
      func main() {
      	/**
      	 * AccessKey ペアは、すべての API へのフルアクセスを許可します。セキュリティのため、API 呼び出しと日常の O&M には RAM ユーザーを使用してください。
      	 * AccessKey ID と AccessKey Secret をプロジェクトにハードコーディングしないでください。認証情報をハードコーディングすると、漏洩につながり、すべてのリソースのセキュリティが損なわれる可能性があります。
      	 * 環境変数から認証情報を取得できます:
      	 * RAM ユーザーの AccessKey ID を取得: os.Getenv("ALIBABA_CLOUD_ACCESS_KEY_ID")
      	 * RAM ユーザーの AccessKey Secret を取得: os.Getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET")
      	 */
      	var accessKeyId= tea.String("環境変数から RAM ユーザーの AccessKey ID を取得します。");
      	var accessKeySecret= tea.String("環境変数から RAM ユーザーの AccessKey Secret を取得します。");
      	// 必要に応じてリージョンとエンドポイントを変更します。
      	var endpoint = tea.String("green-cip.ap-southeast-1.aliyuncs.com");
      	response,_err := invoke(accessKeyId,accessKeySecret,endpoint)
      
      	if response != nil {
      		statusCode := tea.IntValue(tea.ToInt(response.StatusCode))
      		body := response.Body
      		imageModerationResponseData := body.Data
      		fmt.Println("requestId:" + tea.StringValue(body.RequestId))
      		if statusCode == http.StatusOK {
      			fmt.Println("response success. response:" + body.String())
      			if tea.IntValue(tea.ToInt(body.Code)) == 200 {
      				result := imageModerationResponseData.Result
      				fmt.Println("response dataId:" + tea.StringValue(imageModerationResponseData.DataId))
      				for i := 0; i < len(result); i++ {
      					fmt.Println("response label:" + tea.StringValue(result[i].Label))
      					fmt.Println("response confidence:" + tea.ToString(tea.Float32Value(result[i].Confidence)))
      				}
      			} else {
      				fmt.Println("image moderation not success. status" + tea.ToString(body.Code))
      			}
      		} else {
      			fmt.Print("response not success. status:" + tea.ToString(statusCode))
      			fmt.Println("Error:", _err)
      		}
      	}
      }

ローカル画像を審査する

シナリオ

審査したい画像がローカルマシン上にあり、パブリック URL を持たない場合、Content Moderation が提供する Object Storage Service (OSS) バケットに画像をアップロードできます。その後、画像審査 2.0 は OSS に直接アクセスして画像コンテンツを取得し、審査を行います。

  1. Go SDK をインストールします。

    Content Moderation SDK をインストールします:

    go git clone --branch v2.2.11 github.com/alibabacloud-go/green-20220302/v2

    OSS SDK をインストールします:

    go get github.com/aliyun/aliyun-oss-go-sdk/oss
  2. Go SDK を使用します。

    • 同期 API アクセスの例

      package main
      
      import (
      	"encoding/json"
      	"fmt"
      	openapi "github.com/alibabacloud-go/darabonba-openapi/v2/client"
      	green20220302 "github.com/alibabacloud-go/green-20220302/v2/client"
      	util "github.com/alibabacloud-go/tea-utils/v2/service"
      	"github.com/alibabacloud-go/tea/tea"
      	"github.com/aliyun/aliyun-oss-go-sdk/oss"
      	"github.com/google/uuid"
      	"net/http"
      	"os"
      	"strings"
      	"time"
      )
      // ファイルアップロード用のトークン。
      var TokenMap =make(map[string]*green20220302.DescribeUploadTokenResponseBodyData)
      // ファイルアップロード用のクライアント。
      var Bucket *oss.Bucket
      // サービスが VPC にデプロイされているかどうかを指定します。
      var isVPC = false
      // リクエストを送信するクライアントを作成します。
      func createClient(accessKeyId string, accessKeySecret string, endpoint string) (*green20220302.Client, error) {
      	config := &openapi.Config{
      		AccessKeyId: tea.String(accessKeyId),
      		AccessKeySecret: tea.String(accessKeySecret),
      		// HTTP プロキシを設定します。
      		// HttpProxy: tea.String("http://10.10.xx.xx:xxxx"),
      		// HTTPS プロキシを設定します。
      		// HttpsProxy: tea.String("https://username:password@xxx.xxx.xxx.xxx:9999"),
      		Endpoint: tea.String(endpoint),
      	}
      	// 注: インスタンス化されたクライアントを再利用して、繰り返し接続を回避し、審査パフォーマンスを向上させます。
      	return green20220302.NewClient(config);
      }
      
      // ファイルをアップロードするクライアントを作成します。
      func createOssClient(tokenData *green20220302.DescribeUploadTokenResponseBodyData) {
      	if isVPC{
      		ossClient, err := oss.New(tea.StringValue(tokenData.OssInternalEndPoint), tea.StringValue(tokenData.AccessKeyId), tea.StringValue(tokenData.AccessKeySecret), oss.SecurityToken(tea.StringValue(tokenData.SecurityToken)))
      		if err != nil {
      			fmt.Println("Error:", err)
      			os.Exit(-1)
      		}
      		Bucket, _ =ossClient.Bucket(tea.StringValue(tokenData.BucketName));
      	}else {
      		ossClient, err := oss.New(tea.StringValue(tokenData.OssInternetEndPoint), tea.StringValue(tokenData.AccessKeyId), tea.StringValue(tokenData.AccessKeySecret), oss.SecurityToken(tea.StringValue(tokenData.SecurityToken)))
      		if err != nil {
      			fmt.Println("Error:", err)
      			os.Exit(-1)
      		}
      		Bucket, _ =ossClient.Bucket(tea.StringValue(tokenData.BucketName));
      	}
      }
      
      // ファイルをアップロードします。
      func uploadFile(filePath string,tokenData *green20220302.DescribeUploadTokenResponseBodyData) (string,error) {
      	createOssClient(tokenData)
      	objectName := tea.StringValue(tokenData.FileNamePrefix) + uuid.New().String() + "." + strings.Split(filePath, ".")[1]
      	// ファイルをアップロードします。
      	_err := Bucket.PutObjectFromFile(objectName, filePath)
      	if _err != nil {
      		fmt.Println("Error:", _err)
      		os.Exit(-1)
      	}
      	return objectName,_err
      }
      
      func invoke(accessKeyId string, accessKeySecret string, endpoint string) (_result *green20220302.ImageModerationResponse, _err error) {
      	// 注: インスタンス化されたクライアントを再利用して、繰り返し接続を回避し、審査パフォーマンスを向上させます。
      	client, _err := createClient(accessKeyId, accessKeySecret, endpoint)
      	if _err != nil {
      		return nil,_err
      	}
      	// 実行時パラメーターを設定します。この設定は、このランタイムインスタンスを使用するリクエストに対してのみ有効です。
      	runtime := &util.RuntimeOptions{}
      	// ローカルファイルの完全なパス。例: D:\\localPath\\exampleFile.png。
      	var filePath = "D:\\localPath\\exampleFile.png"
      	// ファイルアップロード用の一時トークンを取得します。
      	tokenData,ok:=TokenMap[endpoint];
      	if !ok || tea.Int32Value(tokenData.Expiration) <= int32(time.Now().Unix()) {
      		// ファイルアップロード用の一時トークンを取得します。
      		uploadTokenResponse, _err := client.DescribeUploadToken()
      		if _err != nil {
      			return nil,_err
      		}
      		tokenData = uploadTokenResponse.Body.Data
      		TokenMap[endpoint] = tokenData
      	}
      	var objectName, _ = uploadFile(filePath,TokenMap[endpoint])
      
      	// 画像審査リクエストを構築します。
      	serviceParameters, _ := json.Marshal(
      		map[string]interface{}{
      			"ossBucketName": tea.StringValue(TokenMap[endpoint].BucketName),
      			"ossObjectName": objectName,
      			"dataId":   uuid.New().String(),
      		},
      	)
      	imageModerationRequest := &green20220302.ImageModerationRequest{
      		// 画像審査サービス。これは、Content Moderation コンソールで画像審査 2.0 用に設定したサービスコードです。例: baselineCheck_global。
      		Service:           tea.String("baselineCheck_global"),
      		ServiceParameters: tea.String(string(serviceParameters)),
      	}
      
      	return client.ImageModerationWithOptions(imageModerationRequest, runtime)
      
      }
      
      func main() {
      	/**
      	 * AccessKey ペアは、すべての API へのフルアクセスを許可します。セキュリティのため、API 呼び出しと日常の O&M には RAM ユーザーを使用してください。
      	 * AccessKey ID と AccessKey Secret をプロジェクトにハードコーディングしないでください。認証情報をハードコーディングすると、漏洩につながり、すべてのリソースのセキュリティが損なわれる可能性があります。
      	 * 環境変数から認証情報を取得できます:
      	 * RAM ユーザーの AccessKey ID を取得: os.Getenv("ALIBABA_CLOUD_ACCESS_KEY_ID")
      	 * RAM ユーザーの AccessKey Secret を取得: os.Getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET")
      	 */
      	var accessKeyId= "環境変数から RAM ユーザーの AccessKey ID を取得します。";
      	var accessKeySecret= "環境変数から RAM ユーザーの AccessKey Secret を取得します。";
      	// 必要に応じてリージョンとエンドポイントを変更します。
      	var endpoint = "green-cip.ap-southeast-1.aliyuncs.com";
      	response,_err := invoke(accessKeyId,accessKeySecret,endpoint)
      
      	if response != nil {
      		statusCode := tea.IntValue(tea.ToInt(response.StatusCode))
      		body := response.Body
      		imageModerationResponseData := body.Data
      		fmt.Println("requestId:" + tea.StringValue(body.RequestId))
      		if statusCode == http.StatusOK {
      			fmt.Println("response success. response:" + body.String())
      			if tea.IntValue(tea.ToInt(body.Code)) == 200 {
      				result := imageModerationResponseData.Result
      				fmt.Println("response dataId:" + tea.StringValue(imageModerationResponseData.DataId))
      				for i := 0; i < len(result); i++ {
      					fmt.Println("response label:" + tea.StringValue(result[i].Label))
      					fmt.Println("response confidence:" + tea.ToString(tea.Float32Value(result[i].Confidence)))
      				}
      			} else {
      				fmt.Println("image moderation not success. status" + tea.ToString(body.Code))
      			}
      		} else {
      			fmt.Print("response not success. status:" + tea.ToString(statusCode))
      			fmt.Println("Error:", _err)
      		}
      	}
      }

OSS 内の画像を審査する

シナリオ

審査したい画像がすでに Alibaba Cloud Object Storage Service (OSS) に保存されている場合、サービスリンクロール (SLR) を作成して Content Moderation が OSS にアクセスできるようにすることができます。画像審査 2.0 は SLR を使用して OSS からファイルを取得し、審査を行います。クラウドリソースアクセス承認ページに移動して、AliyunCIPScanOSSRole SLR を作成します。

  1. Alibaba Cloud アカウントを使用してクラウドリソースアクセス承認ページに移動し、必要な権限を付与します。

  2. 次のコマンドを実行して Go SDK をインストールします。

    go git clone --branch v2.2.11 github.com/alibabacloud-go/green-20220302/v2

  3. Go SDK を使用します。

    • 同期 API アクセスの例

      package main
      
      import (
      	"encoding/json"
      	"fmt"
      	openapi "github.com/alibabacloud-go/darabonba-openapi/v2/client"
      	green20220302 "github.com/alibabacloud-go/green-20220302/v2/client"
      	util "github.com/alibabacloud-go/tea-utils/v2/service"
      	"github.com/alibabacloud-go/tea/tea"
      	"github.com/google/uuid"
      	"net/http"
      	"os"
      )
      
      // リクエストクライアントを作成します。
      func createClient(accessKeyId *string, accessKeySecret *string, endpoint *string) (*green20220302.Client, error) {
      	config := &openapi.Config{
      		AccessKeyId: accessKeyId,
      		AccessKeySecret: accessKeySecret,
      		// HTTP プロキシを設定します。
      		// HttpProxy: tea.String("http://10.10.xx.xx:xxxx"),
      		// HTTPS プロキシを設定します。
      		// HttpsProxy: tea.String("https://username:password@xxx.xxx.xxx.xxx:9999"),
      		Endpoint: endpoint,
      	}
      	// 注: クライアントインスタンスを再利用して、接続の繰り返し確立を回避し、検出パフォーマンスを向上させることをお勧めします。
      	return green20220302.NewClient(config);
      }
      
      func invoke(accessKeyId *string, accessKeySecret *string, endpoint *string) (_result *green20220302.ImageModerationResponse, _err error) {
      	// 注: クライアントインスタンスを再利用して、接続の繰り返し確立を回避し、検出パフォーマンスを向上させることをお勧めします。
      	client, _err := createClient(accessKeyId, accessKeySecret, endpoint)
      	if _err != nil {
      		return nil,_err
      	}
      	// 実行時パラメーターを設定します。この設定は、このランタイムパラメーターインスタンスを使用するリクエストに対してのみ有効です。
      	runtime := &util.RuntimeOptions{}
      
      	// 画像審査リクエストを構築します。
      		serviceParameters, _ := json.Marshal(
      			map[string]interface{}{
      				// 審査対象の画像の OSS バケットが配置されているリージョン。例: ap-southeast-1
      				"ossRegionId": "ap-southeast-1",
      				// 審査対象の画像の OSS バケットの名前。例: bucket001
      				"ossBucketName":"bucket001",
      				// 審査対象の画像のオブジェクト名。例: image//001.jpg
      				"ossObjectName":"image//001.jpg",
      				// 審査対象のデータの ID。
      				"dataId":   uuid.New().String(),
      			},
      		)
      		imageModerationRequest := &green20220302.ImageModerationRequest{
      			// 画像審査サービス。これは、コンソールで設定した画像審査拡張ルールの serviceCode です。例: baselineCheck_global
      			Service:           tea.String("baselineCheck_global"),
      			ServiceParameters: tea.String(string(serviceParameters)),
      		}
      
      	return client.ImageModerationWithOptions(imageModerationRequest, runtime)
      
      }
      
      func main() {
      	/**
      	 * Alibaba Cloud アカウントの AccessKey ペアは、すべての API 操作に対する権限を持っています。API 操作の呼び出しや日常の O&M には RAM ユーザーを使用することをお勧めします。
      	 * AccessKey ID と AccessKey Secret をプロジェクトコードに保存しないことを強くお勧めします。そうしないと、AccessKey ペアが漏洩し、アカウント内のすべてのリソースのセキュリティが脅かされる可能性があります。
      	 * 環境変数を取得する一般的な方法:
      	 * RAM ユーザーの AccessKey ID を取得: os.Getenv("ALIBABA_CLOUD_ACCESS_KEY_ID")
      	 * RAM ユーザーの AccessKey Secret を取得: os.Getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET")
      	 */
      	
      	// 実際の要件に基づいてリージョンとエンドポイントを変更します。
      	var endpoint = tea.String("green-cip.ap-southeast-1.aliyuncs.com");
      	response,_err := invoke(accessKeyId,accessKeySecret,endpoint)
      
      	if response != nil {
      		statusCode := tea.IntValue(tea.ToInt(response.StatusCode))
      		body := response.Body
      		imageModerationResponseData := body.Data
      		fmt.Println("requestId:" + tea.StringValue(body.RequestId))
      		if statusCode == http.StatusOK {
      			fmt.Println("response success. response:" + body.String())
      			if tea.IntValue(tea.ToInt(body.Code)) == 200 {
      				result := imageModerationResponseData.Result
      				fmt.Println("response dataId:" + tea.StringValue(imageModerationResponseData.DataId))
      				for i := 0; i < len(result); i++ {
      					fmt.Println("response label:" + tea.StringValue(result[i].Label))
      					fmt.Println("response confidence:" + tea.ToString(tea.Float32Value(result[i].Confidence)))
      				}
      			} else {
      				fmt.Println("image moderation not success. status" + tea.ToString(body.Code))
      			}
      		} else {
      			fmt.Print("response not success. status:" + tea.ToString(statusCode))
      			fmt.Println("Error:", _err)
      		}
      	}
      }

Node.js SDK

前提条件

  • ソースコード: 詳細については、「Node.js SDK ソースコード」をご参照ください。

  • 機能: この SDK は、次の 3 種類の画像モデレーションをサポートしています。

説明

次の API 操作によって返される Label フィールドの値と意味については、「リスクラベルの説明」をご参照ください。

インターネット経由でアクセス可能な画像をモデレートする

シナリオ

モデレートする画像がインターネット経由でアクセス可能な場合、画像モデレーション 2.0 は、その URL から画像を取得してモデレーションできます。

  1. Node.js SDK をインストールします。

    次のコマンドを実行して、必要な依存関係をインポートします。

    npm install @alicloud/green20220302@2.2.10

  2. Node.js SDK を使用します。

    • 同期 API アクセスの例

      const RPCClient = require("@alicloud/pop-core");
      const { v4: uuidv4 } = require('uuid');
      
      async function main() {
          // 注: インスタンス化されたクライアントをできるだけ再利用して、繰り返し接続を避け、モデレーションのパフォーマンスを向上させます。
          var client = new RPCClient({
      				/**
               * Alibaba Cloud アカウントの AccessKey ペアは、すべての API 操作に対する権限を持っています。RAM ユーザーを使用して API 操作を呼び出すか、日常の O&M を実行することをお勧めします。
               * プロジェクトコードに AccessKey ID と AccessKey Secret を保存しないことを強くお勧めします。そうしないと、AccessKey ペアが漏洩し、すべてのクラウドリソースのセキュリティが脅かされる可能性があります。
               * 環境変数を取得する一般的な方法:
               * RAM ユーザーの AccessKey ID を取得する: process.env['ALIBABA_CLOUD_ACCESS_KEY_ID']
               * RAM ユーザーの AccessKey Secret を取得する: process.env['ALIBABA_CLOUD_ACCESS_KEY_SECRET']
               */
              accessKeyId: '環境変数から RAM ユーザーの AccessKey ID を取得します。',
              accessKeySecret: '環境変数から RAM ユーザーの AccessKey Secret を取得します。',
              // 必要に応じてリージョンとエンドポイントを変更します。
              endpoint: "https://green-cip.ap-southeast-1.aliyuncs.com",
              apiVersion: '2022-03-02',
              // HTTP プロキシを設定します。
              // httpProxy: "http://xx.xx.xx.xx:xxxx",
              // HTTPS プロキシを設定します。
              // httpsProxy: "https://username:password@xxx.xxx.xxx.xxx:9999",
          });
          // 次のコードを使用して API リクエストを作成し、パラメーターを設定します。
          var params = {
              // 画像モデレーションサービス。これは、画像モデレーション 2.0 コンソールでルールに設定した serviceCode です。例: baselineCheck_global。
              "Service": "baselineCheck_global",
              "ServiceParameters": JSON.stringify({
                  // データの一意の ID。
                  "dataId": uuidv4(),
                  // モデレートする画像の URL。画像はインターネット経由でアクセス可能である必要があります。
                  "imageUrl": "https://img.alicdn.com/tfs/xxxxxxxxxx001.png"
              })
          }
      
          var requestOption = {
              method: 'POST',
              formatParams: false,
          };
      
          try {
              // API 操作を呼び出して、モデレーション結果を取得します。
              var response = await client.request('ImageModeration', params, requestOption)
          } catch (err) {
              console.log(err);
          }
      
          return response;
      }
      
      main().then(function (response) {
          console.log(JSON.stringify(response))
      });

ローカル画像を検出する

シナリオ

モデレートする画像がローカルマシン上にあり、パブリック URL を持たない場合、Content Moderation が提供する Object Storage Service (OSS) バケットに画像をアップロードできます。その後、画像モデレーション 2.0 サービスは OSS に直接アクセスして画像を取得し、モデレーションを実行できます。

  1. Node.js SDK をインストールします。

    Content Moderation SDK をインストールします:

    npm install @alicloud/green20220302@2.2.10

    OSS SDK をインストールします:

    npm install ali-oss --save
  2. Node.js SDK を使用します。

    • 同期 API アクセスの例

      const RPCClient = require("@alicloud/pop-core");
      const OSS = require('ali-oss');
      const { v4: uuidv4 } = require('uuid');
      const path = require("path");
      
      // サービスが VPC にデプロイされているかどうかを指定します。
      var isVPC = false;
      // ファイルのアップロードに使用されるトークン。
      var tokenDic = new Array();
      // ファイルのアップロードに使用されるクライアント。
      var ossClient;
      
      // ファイルをアップロードするためのクライアントを作成します。
      function createClient(accessKeyId, accessKeySecret, endpoint) {
          return new RPCClient({
              accessKeyId: accessKeyId,
              accessKeySecret: accessKeySecret,
              endpoint: endpoint,
              apiVersion: '2022-03-02',
              // HTTP プロキシを設定します。
              //httpProxy: "http://xx.xx.xx.xx:xxxx",
              // HTTPS プロキシを設定します。
              //httpsProxy: "https://username:password@xxx.xxx.xxx.xxx:9999",
          });
      }
      
      // ファイルをアップロードするためのクライアントを作成します。
      function getOssClient(tokenData, isVPC) {
          if (isVPC) {
              ossClient = new OSS({
                  accessKeyId: tokenData['AccessKeyId'],
                  accessKeySecret: tokenData['AccessKeySecret'],
                  stsToken: tokenData['SecurityToken'],
                  endpoint: tokenData['OssInternalEndPoint'],
                  bucket: tokenData['BucketName'],
              });
          } else {
              ossClient = new OSS({
                  accessKeyId: tokenData['AccessKeyId'],
                  accessKeySecret: tokenData['AccessKeySecret'],
                  stsToken: tokenData['SecurityToken'],
                  endpoint: tokenData['OssInternetEndPoint'],
                  bucket: tokenData['BucketName'],
              });
          }
      }
      
      
      async function invoke(accessKeyId, accessKeySecret, endpoint) {
          // 注: インスタンス化されたクライアントをできるだけ再利用して、繰り返し接続を避け、モデレーションのパフォーマンスを向上させます。
          var client = createClient(accessKeyId, accessKeySecret, endpoint);
          var requestOption = {
              method: 'POST',
              formatParams: false,
          };
          // ローカルファイルの完全なパス。例: D:\\localPath\\exampleFile.png。
          var filePath = 'D:\\localPath\\exampleFile.png';
      
          // ファイルをアップロードするためのトークンを取得します。
          if (tokenDic[endpoint] == null || tokenDic[endpoint]['Expiration'] <= Date.parse(new Date() / 1000)) {
              var tokenResponse = await client.request('DescribeUploadToken', '', requestOption)
              tokenDic[endpoint] = tokenResponse.Data;
          }
      
          // ファイルをアップロードするためのクライアントを取得します。
          getOssClient(tokenDic[endpoint], isVPC)
          var split = filePath.split(".");
          var objectName;
          if (split.length > 1) {
              objectName = tokenDic[endpoint].FileNamePrefix + uuidv4() + "." + split[split.length - 1];
          } else {
              objectName = tokenDic[endpoint].FileNamePrefix + uuidv4();
          }
          // ファイルをアップロードします。
          const result = await ossClient.put(objectName, path.normalize(filePath));
      
          // 次のコードを使用してモデレーション API リクエストを作成し、パラメーターを設定します。
          var params = {
              // 画像モデレーションサービス。これは、画像モデレーション 2.0 コンソールでルールに設定した serviceCode です。例: baselineCheck_global。
              "Service": "baselineCheck_global",
              // アップロードされたローカル画像に関する情報。
              "ServiceParameters": JSON.stringify({
                  "ossBucketName": tokenDic[endpoint].BucketName,
                  "ossObjectName": objectName
              })
          }
          // API 操作を呼び出して、モデレーション結果を取得します。
          return await client.request('ImageModeration', params, requestOption);
      }
      
      
      
      function main() {
      	/**
          * Alibaba Cloud アカウントの AccessKey ペアは、すべての API 操作に対する権限を持っています。RAM ユーザーを使用して API 操作を呼び出すか、日常の O&M を実行することをお勧めします。
          * プロジェクトコードに AccessKey ID と AccessKey Secret を保存しないことを強くお勧めします。そうしないと、AccessKey ペアが漏洩し、すべてのクラウドリソースのセキュリティが脅かされる可能性があります。
          * 環境変数を取得する一般的な方法:
          * RAM ユーザーの AccessKey ID を取得する: process.env['ALIBABA_CLOUD_ACCESS_KEY_ID']
          * RAM ユーザーの AccessKey Secret を取得する: process.env['ALIBABA_CLOUD_ACCESS_KEY_SECRET']
          */
          const accessKeyId = '環境変数から RAM ユーザーの AccessKey ID を取得します。';
          const accessKeySecret = '環境変数から RAM ユーザーの AccessKey Secret を取得します。';
          // 必要に応じてリージョンとエンドポイントを変更します。
          var endpoint = "https://green-cip.ap-southeast-1.aliyuncs.com"
      
          try {
              // API 操作を呼び出して、モデレーション結果を取得します。
              invoke(accessKeyId, accessKeySecret, endpoint).then(function (response) {
                      console.log(JSON.stringify(response))
              })
          } catch (err) {
              console.log(err);
          }
      }
      
      main();

OSS 内の画像をモデレートする

シナリオ

モデレートする画像がすでに Alibaba Cloud Object Storage Service (OSS) に保存されている場合、サービスリンクロール (SLR) を作成することで、Content Moderation が OSS リソースにアクセスすることを承認できます。その後、画像モデレーション 2.0 サービスは SLR を使用して OSS から画像を取得し、モデレーションを実行します。クラウドリソースアクセス承認ページ に移動して、AliyunCIPScanOSSRole SLR を作成します。

  1. Alibaba Cloud アカウントを使用して クラウドリソースアクセス承認ページ に移動し、権限を付与します。

  2. Node.js SDK をインストールします。

    npm install @alicloud/green20220302@2.2.10

  3. Node.js SDK を使用します。

    • 同期 API アクセスの例

      const RPCClient = require("@alicloud/pop-core");
      const { v4: uuidv4 } = require('uuid');
      
      async function main() {
          // 注: インスタンス化されたクライアントをできるだけ再利用して、繰り返し接続を避け、モデレーションのパフォーマンスを向上させます。
          var client = new RPCClient({
      				/**
               * Alibaba Cloud アカウントの AccessKey ペアは、すべての API 操作に対する権限を持っています。RAM ユーザーを使用して API 操作を呼び出すか、日常の O&M を実行することをお勧めします。
               * プロジェクトコードに AccessKey ID と AccessKey Secret を保存しないことを強くお勧めします。そうしないと、AccessKey ペアが漏洩し、すべてのクラウドリソースのセキュリティが脅かされる可能性があります。
               * 環境変数を取得する一般的な方法:
               * RAM ユーザーの AccessKey ID を取得する: process.env['ALIBABA_CLOUD_ACCESS_KEY_ID']
               * RAM ユーザーの AccessKey Secret を取得する: process.env['ALIBABA_CLOUD_ACCESS_KEY_SECRET']
               */
              accessKeyId: '環境変数から RAM ユーザーの AccessKey ID を取得します。',
              accessKeySecret: '環境変数から RAM ユーザーの AccessKey Secret を取得します。',
              // 必要に応じてリージョンとエンドポイントを変更します。
              endpoint: "https://green-cip.ap-southeast-1.aliyuncs.com",
              apiVersion: '2022-03-02',
              // HTTP プロキシを設定します。
              // httpProxy: "http://xx.xx.xx.xx:xxxx",
              // HTTPS プロキシを設定します。
              // httpsProxy: "https://username:password@xxx.xxx.xxx.xxx:9999",
          });
      
          // 次のコードを使用して API リクエストを作成し、パラメーターを設定します。
          var params = {
              // 画像モデレーションサービス。これは、画像モデレーション 2.0 コンソールでルールに設定した serviceCode です。例: baselineCheck_global。
              "Service": "baselineCheck_global",
              // モデレートする OSS 画像に関する情報。
              "ServiceParameters": JSON.stringify({
                  // ファイルを保存するバケットが配置されているリージョン。例: ap-southeast-1。
                  "ossRegionId": "ap-southeast-1",
                  // ファイルを保存するバケットの名前。例: bucket001。
                  "ossBucketName": "bucket001",
                  // モデレートするファイル。例: image/001.jpg。
                  "ossObjectName": "image/001.jpg",
                  // データの一意の ID。
                  "dataId": uuidv4()
              })
          }
      
          var requestOption = {
              method: 'POST',
              formatParams: false,
          };
      
          try {
              // API 操作を呼び出して、モデレーション結果を取得します。
              var response = await client.request('ImageModeration', params, requestOption)
              return response;
          } catch (err) {
              console.log(err);
          }
      }
      
      main().then(function (response) {
          console.log(JSON.stringify(response))
      });

C# SDK

使用上の注意

  • ソースコード: 詳細については、「C# SDK ソースコード」をご参照ください。

  • 機能: この SDK は、次の 3 種類の画像モデレーションをサポートしています。

説明

次の API 操作によって返される Label フィールドの値と意味については、「リスクラベルの定義」をご参照ください。

インターネット経由でアクセスできる画像をモデレートする

シナリオ

モデレートする画像がインターネット経由でアクセスできる場合、画像モデレーション バージョン 2.0 サービスは、画像の URL からファイルを取得してモデレートできます。

  1. C# SDK をインストールします。

    dotnet add package AlibabaCloud.SDK.Green20220302 --version 2.2.10

  2. C# SDK を使用します。

    • 同期 API アクセスの例

      // このファイルは自動生成されたものです。編集しないでください。ありがとうございます。
      
      using Newtonsoft.Json;
      
      namespace AlibabaCloud.SDK.Green20220302
      {
          public class ImageModerationAutoRoute
          {
              public static void Main(string[] args)
              {
                  /**
                  * Alibaba Cloud アカウントの AccessKey ペアは、すべての API 操作に対する権限を持っています。API 操作の呼び出しや日常の O&M には、RAM ユーザーを使用することをお勧めします。
                  * プロジェクトコードに AccessKey ペアを保存しないことを強くお勧めします。そうしないと、AccessKey ペアが漏洩し、アカウントに含まれるすべてのリソースが潜在的なセキュリティリスクにさらされる可能性があります。
                  * 環境変数を取得する一般的な方法:
                  * RAM ユーザーの AccessKey ID を取得する: Environment.GetEnvironmentVariable("ALIBABA_CLOUD_ACCESS_KEY_ID")
                  * RAM ユーザーの AccessKey Secret を取得する: Environment.GetEnvironmentVariable("ALIBABA_CLOUD_ACCESS_KEY_SECRET")
                  */
                  String accessKeyId = "環境変数から AccessKey ID を取得します";
                  String accessKeySecret = "環境変数から AccessKey Secret を取得します";
                  // 実際の要件に基づいてリージョンとエンドポイントを変更します。
                  String endpoint = "green-cip.ap-southeast-1.aliyuncs.com";
                  // 注: 接続の確立を繰り返すのを避け、検出パフォーマンスを向上させるために、クライアントインスタンスを再利用することをお勧めします。
                  Client client = createClient(accessKeyId, accessKeySecret, endpoint);
      
                  // 実行時パラメーターを設定します。このパラメーターは、実行時パラメーターインスタンスを使用するリクエストに対してのみ有効です。
                  AlibabaCloud.TeaUtil.Models.RuntimeOptions runtimeOptions =
                      new AlibabaCloud.TeaUtil.Models.RuntimeOptions();
      
                  // 画像モデレーションリクエストを作成します。
                  Models.ImageModerationRequest imageModerationRequest =
                      new Models.ImageModerationRequest();
                  // 画像モデレーションサービス。この値は、Content Moderation コンソールで画像モデレーションルールに設定した serviceCode です。例: baselineCheck_global
                  imageModerationRequest.Service = "baselineCheck_global";
                  Dictionary<string, object> task = new Dictionary<string, object>();
                  // モデレートする画像の URL。URL はインターネット経由でアクセスできる必要があります。
                  task.Add(
                      "imageUrl",
                      "https://img.alicdn.com/tfs/xxxxxxxxxx001.png"
                  );
                  // モデレートするデータの ID。
                  task.Add("dataId", Guid.NewGuid().ToString());
                  imageModerationRequest.ServiceParameters = JsonConvert.SerializeObject(task);
      
                  try
                  {
                      // API 操作を呼び出して、モデレーション結果を取得します。
                      Models.ImageModerationResponse response = client.ImageModerationWithOptions(
                          imageModerationRequest,
                          runtimeOptions
                      );
      
                      Console.WriteLine(response.Body.RequestId);
                      Console.WriteLine(JsonConvert.SerializeObject(response.Body));
                  }
                  catch (Exception _err)
                  {
                      Console.WriteLine(_err);
                  }
              }
      
              // リクエストクライアントを作成します。
              public static Client createClient(
                  String accessKeyId,
                  String accessKeySecret,
                  String endpoint
              )
              {
                  AlibabaCloud.OpenApiClient.Models.Config config =
                      new AlibabaCloud.OpenApiClient.Models.Config
                      {
                          AccessKeyId = accessKeyId,
                          AccessKeySecret = accessKeySecret,
                          // HTTP プロキシを設定します。
                          //HttpProxy = "http://10.10.xx.xx:xxxx",
                          // HTTPS プロキシを設定します。
                          //HttpsProxy = "https://username:password@xxx.xxx.xxx.xxx:9999",
                          // アクセスするエンドポイント。
                          Endpoint = endpoint,
                      };
                  return new Client(config);
              }
          }
      }

ローカル画像をモデレートする

シナリオ

モデレートしたい画像がローカルコンピューターに保存されていて、インターネット経由でアクセスできない場合は、Content Moderation サービスが提供する Object Storage Service (OSS) バケットに画像をアップロードできます。画像モデレーション バージョン 2.0 は、OSS に直接アクセスして画像を取得し、モデレートできます。

  1. C# SDK をインストールします。

    Content Moderation SDK をインストールします:

    dotnet add package AlibabaCloud.SDK.Green20220302 --version 2.2.10

    OSS SDK をインストールします:

    dotnet add package AlibabaCloud.SDK.Green20220302 --version 2.2.8
    
    NuGet を使用してインストール 
    1. Visual Studio に NuGet がインストールされていない場合は、NuGet をインストールします。
    2. Visual Studio で、新しいプロジェクトを作成するか、既存のプロジェクトを開きます。[ツール] > [NuGet パッケージ マネージャー] > [ソリューションの NuGet パッケージの管理] を選択します。
    3. aliyun.oss.sdk を検索します。検索結果で、Aliyun.OSS.SDK (.NET Framework 用) または Aliyun.OSS.SDK.NetCore (.Net Core 用) を見つけます。最新バージョンを選択し、[インストール] をクリックします。
  2. C# SDK を使用します。

    • 同期 API アクセスの例

      // このファイルは自動生成されたものです。編集しないでください。ありがとうございます。
      
      using System;
      using Newtonsoft.Json;
      using Aliyun.OSS;
      
      namespace AlibabaCloud.SDK.Green20220302
      {
          public class ImageModerationAutoRoute
          {
              // ファイルアップロードトークン。
              public static Dictionary<String, Models.DescribeUploadTokenResponse> tokenDic =
                  new Dictionary<String, Models.DescribeUploadTokenResponse>();
      
              // ファイルアップロードクライアント。
              public static OssClient ossClient = null;
      
              // サービスが VPC にデプロイされているかどうかを指定します。
              public static Boolean isVPC = false;
      
              public static void Main(string[] args)
              {
                  /**
                  * Alibaba Cloud アカウントの AccessKey は、すべての API にアクセスする権限を持っています。API 呼び出しや日常の O&M には、Resource Access Management (RAM) ユーザーを使用してください。
                  * プロジェクトコードに AccessKey ID と AccessKey Secret を保存しないでください。これにより、AccessKey が漏洩し、すべてのリソースのセキュリティが侵害される可能性があります。
                  * 環境変数を取得する一般的な方法:
                  * RAM ユーザーの AccessKey ID を取得する: Environment.GetEnvironmentVariable("ALIBABA_CLOUD_ACCESS_KEY_ID")
                  * RAM ユーザーの AccessKey Secret を取得する: Environment.GetEnvironmentVariable("ALIBABA_CLOUD_ACCESS_KEY_SECRET")
                  */
                  String accessKeyId = "環境変数から RAM ユーザーの AccessKey ID を取得します";
                  String accessKeySecret = "環境変数から RAM ユーザーの AccessKey Secret を取得します";
                  // 必要に応じてリージョンとエンドポイントを変更します。
                  String endpoint = "green-cip.ap-southeast-1.aliyuncs.com";
      
                  Models.ImageModerationResponse response = invoke(
                      accessKeyId,
                      accessKeySecret,
                      endpoint
                  );
              
                  Console.WriteLine(response.Body.RequestId);
                  Console.WriteLine(JsonConvert.SerializeObject(response.Body));
              }
      
              // リクエストクライアントを作成します。
              public static Client createClient(
                  String accessKeyId,
                  String accessKeySecret,
                  String endpoint
              )
              {
                  AlibabaCloud.OpenApiClient.Models.Config config =
                      new AlibabaCloud.OpenApiClient.Models.Config
                      {
                          AccessKeyId = accessKeyId,
                          AccessKeySecret = accessKeySecret,
                          // HTTP プロキシを設定します。
                          //HttpProxy = "http://10.10.xx.xx:xxxx",
                          // HTTPS プロキシを設定します。
                          //HttpsProxy = "https://username:password@xxx.xxx.xxx.xxx:9999",
                          // アクセスするドメイン名。
                          Endpoint = endpoint,
                      };
                  return new Client(config);
              }
      
              // ファイルアップロードクライアントを作成します。
              private static OssClient getOssClient(
                  Models.DescribeUploadTokenResponse tokenResponse,
                  Boolean isVPC
              )
              {
                  var tokenData = tokenResponse.Body.Data;
                  if (isVPC)
                  {
                      return new OssClient(
                          tokenData.OssInternalEndPoint,
                          tokenData.AccessKeyId,
                          tokenData.AccessKeySecret,
                          tokenData.SecurityToken
                      );
                  }
                  else
                  {
                      return new OssClient(
                          tokenData.OssInternetEndPoint,
                          tokenData.AccessKeyId,
                          tokenData.AccessKeySecret,
                          tokenData.SecurityToken
                      );
                  }
              }
      
              // ファイルをアップロードします。
              public static String uploadFile(
                  String filePath,
                  Models.DescribeUploadTokenResponse tokenResponse
              )
              {
                  // OssClient インスタンスを作成します。
                  ossClient = getOssClient(tokenResponse, isVPC);
                  var tokenData = tokenResponse.Body.Data;
      
                  String objectName =
                      tokenData.FileNamePrefix
                      + Guid.NewGuid().ToString()
                      + "."
                      + filePath.Split(".").GetValue(1);
                  // ファイルをアップロードします。
                  ossClient.PutObject(tokenData.BucketName, objectName, filePath);
                  return objectName;
              }
      
              // モデレーションリクエストを送信します。
              public static Models.ImageModerationResponse invoke(
                  String accessKeyId,
                  String accessKeySecret,
                  String endpoint
              )
              {
                  // 注: インスタンス化されたクライアントを再利用して、繰り返しの接続作成を避け、モデレーションパフォーマンスを向上させます。
                  Client client = createClient(accessKeyId, accessKeySecret, endpoint);
      
                  // 実行時パラメーターの設定。これらの設定は、この実行時パラメーターインスタンスを使用するリクエストに対してのみ有効です。
                  AlibabaCloud.TeaUtil.Models.RuntimeOptions runtimeOptions =
                      new AlibabaCloud.TeaUtil.Models.RuntimeOptions();
      
                  // ローカルファイルの完全なパス。例: D:\localPath\exampleFile.png。
                  String filePath = "D:\\localPath\\exampleFile.png";
                  try
                  {
                      // ファイルアップロード用の一時的なトークンを取得します。
                      if (
                          !tokenDic.ContainsKey(endpoint)
                          || tokenDic[endpoint].Body.Data.Expiration
                              <= DateTimeOffset.Now.ToUnixTimeSeconds()
                      )
                      {
                          var tokenResponse = client.DescribeUploadToken();
                          tokenDic[endpoint] = tokenResponse;
                      }
                      // ファイルをアップロードします。
                      String objectName = uploadFile(filePath, tokenDic[endpoint]);
                      // 画像モデレーションリクエストを構築します。
                      Models.ImageModerationRequest imageModerationRequest =
                          new Models.ImageModerationRequest();
                      // 画像モデレーションサービス: Content Moderation コンソールで設定された拡張画像モデレーションルールの serviceCode。例: baselineCheck_global。
                      imageModerationRequest.Service = "baselineCheck_global";
                      Dictionary<string, object> task = new Dictionary<string, object>();
                      // モデレートする画像に関する情報。
                      task.Add("ossBucketName", tokenDic[endpoint].Body.Data.BucketName);
                      task.Add("ossObjectName", objectName);
                      // モデレートするデータの ID。
                      task.Add("dataId", Guid.NewGuid().ToString());
                      imageModerationRequest.ServiceParameters = JsonConvert.SerializeObject(task);
                      // API を呼び出してモデレーション結果を取得します。
                      Models.ImageModerationResponse response = client.ImageModerationWithOptions(
                          imageModerationRequest,
                          runtimeOptions
                      );
                      return response;
                  }
                  catch (Exception _err)
                  {
                      Console.WriteLine(_err);
                      return null;
                  }
              }
          }
      }

OSS 内の画像をモデレートする

シナリオ

Alibaba Cloud Object Storage Service (OSS) にモデレーション用の画像を保存する場合、サービスロールを作成して Content Moderation に OSS へのアクセスを許可できます。画像モデレーション バージョン 2.0 サービスは、サービスロールを使用して OSS からファイルを取得し、モデレーションを行います。クラウド リソース アクセス承認ページに移動して、AliyunCIPScanOSSRole サービスロールを作成します。

  1. Alibaba Cloud アカウントを使用して クラウド リソース アクセス承認ページに移動し、必要な権限を付与します。

  2. C# SDK をインストールします。

    dotnet add package AlibabaCloud.SDK.Green20220302 --version 2.2.10

  3. C# SDK を使用します。

    • 同期 API アクセスの例

      // このファイルは自動生成されたものです。編集しないでください。ありがとうございます。
      
      using Newtonsoft.Json;
      
      namespace AlibabaCloud.SDK.Green20220302
      {
          public class OssScanDemo
          {
              public static void Main(string[] args)
              {
                  /**
                  * Alibaba Cloud アカウントの AccessKey ペアは、すべての API 操作に対する権限を持っています。API 操作の呼び出しや日常の O&M には、RAM ユーザーを使用することをお勧めします。
                  * プロジェクトコードに AccessKey ID と AccessKey Secret をハードコーディングしないでください。これにより、AccessKey ペアが漏洩し、アカウント内のすべてのリソースのセキュリティが侵害される可能性があります。
                  * 環境変数から AccessKey ペアを取得できます:
                  * RAM ユーザーの AccessKey ID を取得する: Environment.GetEnvironmentVariable("ALIBABA_CLOUD_ACCESS_KEY_ID")
                  * RAM ユーザーの AccessKey Secret を取得する: Environment.GetEnvironmentVariable("ALIBABA_CLOUD_ACCESS_KEY_SECRET")
                  */
                  String accessKeyId = "環境変数から RAM ユーザーの AccessKey ID を取得します。";
                  String accessKeySecret = "環境変数から RAM ユーザーの AccessKey Secret を取得します。";
                  // 必要に応じてリージョンとエンドポイントを変更します。
                  String endpoint = "green-cip.ap-southeast-1.aliyuncs.com";
                  // 注: モデレーションパフォーマンスを向上させるために、インスタンス化されたクライアントを再利用して、繰り返しの接続を避けてください。
                  Client client = createClient(accessKeyId, accessKeySecret, endpoint);
      
                  // 実行時パラメーターを設定します。この設定は、このランタイムインスタンスを使用するリクエストに対してのみ有効です。
                  AlibabaCloud.TeaUtil.Models.RuntimeOptions runtimeOptions =
                      new AlibabaCloud.TeaUtil.Models.RuntimeOptions();
      
                  // 画像モデレーションリクエストを構築します。
                  Models.ImageModerationRequest imageModerationRequest =
                      new Models.ImageModerationRequest();
                  // 画像モデレーションサービス: Content Moderation コンソールでルールに設定した serviceCode。例: baselineCheck_global。
                  imageModerationRequest.Service = "baselineCheck_global";
                  Dictionary<string, object> task = new Dictionary<string, object>();
                  // モデレートする画像の OSS バケットが配置されているリージョン。例: ap-southeast-1。
                  task.Add("ossRegionId", "ap-southeast-1");
                  // モデレートする画像を保存する OSS バケットの名前。例: bucket001。
                  task.Add("ossBucketName", "bucket001");
                  // モデレートする画像のオブジェクト名。例: image/001.jpg。
                  task.Add("ossObjectName", "image/001.jpg");
                  // モデレートするデータの ID。
                  task.Add("dataId", Guid.NewGuid().ToString());
                  imageModerationRequest.ServiceParameters = JsonConvert.SerializeObject(task);
                  try
                  {
                      // API 操作を呼び出して、モデレーション結果を取得します。
                      Models.ImageModerationResponse response = client.ImageModerationWithOptions(
                          imageModerationRequest,
                          runtimeOptions
                      );
      
                      Console.WriteLine(response.Body.RequestId);
                      Console.WriteLine(JsonConvert.SerializeObject(response.Body));
                  }
                  catch (Exception _err)
                  {
                      Console.WriteLine(_err);
                  }
              }
      
              // リクエストを送信するためのクライアントを作成します。
              public static Client createClient(
                  String accessKeyId,
                  String accessKeySecret,
                  String endpoint
              )
              {
                  AlibabaCloud.OpenApiClient.Models.Config config =
                      new AlibabaCloud.OpenApiClient.Models.Config
                      {
                          AccessKeyId = accessKeyId,
                          AccessKeySecret = accessKeySecret,
                          // HTTP プロキシを設定します。
                          //HttpProxy = "http://10.10.xx.xx:xxxx",
                          // HTTPS プロキシを設定します。
                          //HttpsProxy = "https://username:password@xxx.xxx.xxx.xxx:9999",
                          // サービスのエンドポイント。
                          Endpoint = endpoint,
                      };
                  return new Client(config);
              }
          }
      }

ネイティブ HTTPS 呼び出し

ネイティブ HTTPS 呼び出しを行うことで、Content Moderation 2.0 API サービスを呼び出すこともできます。このメソッドでは、署名の生成と検証を処理し、URL、本文、ヘッダー、パラメーターを含むリクエストを構築する必要があります。ネイティブ HTTPS 呼び出しは、次の 2 つのシナリオでのみ使用してください。その他の場合は、SDK を使用することをお勧めします。

  1. クライアントサイズに厳しい要件があるアプリでサービスを直接使用する場合。

  2. アップグレードが困難な特定のライブラリパッケージに特定の依存関係がある場合。

  • 呼び出しメソッド

    サービスエンドポイント: https://green-cip.{region}.aliyuncs.com

    プロトコル: HTTPS

    メソッド: POST

  • 共通リクエストパラメーター

    Image Moderation 2.0 API 操作のリクエストパラメーターには、共通リクエストパラメーターと操作固有のリクエストパラメーターが含まれます。共通リクエストパラメーターは、すべての操作で必須です。次の表に、共通リクエストパラメーターを示します。

    名前

    タイプ

    必須

    説明

    Format

    String

    はい

    応答メッセージのフォーマット。有効な値:

    • JSON (デフォルト)

    • XML

    Version

    String

    はい

    API のバージョン番号。YYYY-MM-DD フォーマットを使用します。値を 2022-03-02 に設定します。

    AccessKeyId

    String

    はい

    Alibaba Cloud がサービスへのアクセス用に提供する AccessKey ID。

    Signature

    String

    はい

    署名文字列。署名の計算方法の詳細については、後述の「署名メソッド」セクションをご参照ください。

    SignatureMethod

    String

    はい

    署名メソッド。値を HMAC-SHA1 に設定します。

    Timestamp

    String

    はい

    リクエストのタイムスタンプ。協定世界時 (UTC) で、ISO 8601 標準フォーマット (`yyyy-MM-ddTHH:mm:ssZ`) で時間を指定します。たとえば、`2022-12-12T01:13:14Z` は 2022 年 12 月 12 日 09:13:14 (UTC+8) を表します。

    SignatureVersion

    String

    はい

    署名アルゴリズムのバージョン。値を 1.0 に設定します。

    SignatureNonce

    String

    はい

    リプレイ攻撃を防ぐために使用される一意の乱数。リクエストごとに異なる乱数を使用します。

    Action

    String

    はい

    • 同期画像審査操作: ImageModeration

    • 非同期画像審査操作: ImageAsyncModeration

    • 非同期画像審査結果を取得する操作: DescribeImageModerationResult

    • 同期マルチサービス画像審査操作: ImageBatchModeration

  • 共通レスポンスパラメーター

    各 API 呼び出しについて、呼び出しが成功したかどうかに関係なく、システムは一意のリクエスト ID `RequestId` を返します。その他のレスポンスパラメーターには、`label` と `confidence` があります。レスポンスパラメーターはサービスによって異なります。詳細については、特定のサービスのドキュメントをご参照ください。

    説明

    すべての操作で返される Label フィールドの値と意味については、「脅威ラベルの定義」をご参照ください。

  • コード例

    次のサンプル応答は、読みやすくするためにフォーマットされています。実際の応答は、改行やインデントでフォーマットされていません。

    次のコードは、同期 Image Moderation 2.0ベースラインチェックサービス のリクエストのサンプルです。その他の操作については、その操作のドキュメントを参照して、必要なリクエストパラメーターを取得してください。

    https://green-cip.ap-southeast-1.aliyuncs.com/ 
        ?Format=JSON
        &Version=2022-03-02
        &Signature=vpEEL0zFHfxXYzSFV0n7%2FZiFL9o%3D
        &SignatureMethod=Hmac-SHA1
        &SignatureNonce=15215528852396
        &SignatureVersion=1.0
        &Action=ImageModeration
        &AccessKeyId=123****cip
        &Timestamp=2022-12-12T12:00:00Z
        &Service=baselineCheck_global
        &ServiceParameters={"imageUrl": "https://img.alicdn.com/tfs/TB1U4r9AeH2gK0jSZJnXXaT1FXa-2880-480.png",
        "dataId": "img1234567"}

    次のコードは、同期 Image Moderation 2.0ベースラインチェックサービス からのサンプル JSON 応答です。

    {
        "Msg": "OK",
        "Code": 200,
        "Data": {
            "DataId": "uimg123****",
            "Result": [
                {
                    "Label": "pornographic_adultContent",
                    "Confidence": 81.3
                },
                {
                    "Label": "sexual_partialNudity",
                    "Confidence": 98.9
                }
            ]
        },
        "RequestId": "ABCD1234-1234-1234-1234-1234XYZ"
    }
  • 署名メソッド

    Image Moderation 2.0 サービスは、各リクエストを認証します。したがって、各リクエストに署名情報を含める必要があります。Image Moderation 2.0 サービスは、AccessKey ID と AccessKey Secret を使用して対称暗号化を実行し、リクエストの送信者を認証します。

    Alibaba Cloud は、AccessKey ID と AccessKey Secret を発行します。Alibaba Cloud の Web サイトで申請および管理できます。AccessKey ID はユーザーを識別します。AccessKey Secret は、署名文字列を暗号化し、サーバーで署名文字列を検証するために使用されるキーです。AccessKey Secret は機密情報として保持する必要があります。

    リクエストに署名するには、次のステップを実行します。

    1. リクエストパラメーターから正規化されたクエリ文字列を作成します。

      1. すべてのリクエストパラメーターをパラメーター名でアルファベット順にソートします。ソートするパラメーターには、共通リクエストパラメーターと操作固有のパラメーターが含まれますが、[Signature] パラメーターは除外されます。

      2. ソートされたパラメーターの名前と値を UTF-8 文字セットを使用して URL エンコードします。

        説明

        Java の `java.net.URLEncoder` など、URL エンコーディングをサポートするほとんどのライブラリは、`application/x-www-form-urlencoded` MIME (Multipurpose Internet Mail Extensions) タイプルールに従ってエンコードします。このエンコーディングメソッドを使用できます。エンコードされた文字列では、プラス記号 (+) を `%20` に、アスタリスク (*) を `%2A` に、`%7E` をチルダ (~) に置き換える必要があります。

        URL エンコーディングのルールは次のとおりです。

        • 大文字 (A-Z)、小文字 (a-z)、数字 (0-9)、ハイフン (-)、アンダースコア (_)、ピリオド (.)、チルダ (~) はエンコードしません。

        • 他の文字は %XY フォーマットにエンコードします。XY は文字の ASCII コードの 2 桁の 16 進値です。たとえば、二重引用符 (") は %22 としてエンコードされます。

        • 拡張 UTF-8 文字は %XY%ZA… フォーマットにエンコードします。

        • スペースはプラス記号 (+) の代わりに %20 としてエンコードします。

      3. エンコードされた各パラメーター名とその値を等号 (=) で連結します。

      4. 結果の名前と値のペアをアンパサンド (&) で同じアルファベット順に連結して、正規化されたクエリ文字列を作成します。

    2. ステップ 1 の正規化されたクエリ文字列を使用して、次のように署名対象の文字列を作成します。

      StringToSign=
      HTTPMethod + "&" +
      percentEncode("/") + "&" +
      percentEncode(CanonicalizedQueryString)
      説明

      `HTTPMethod` は、POST などのリクエストに使用される HTTP メソッドです。`percentEncode("/")` は、ステップ 1.b の URL エンコーディングルールに従ってエンコードされたスラッシュ (/) の値です。値は %2F です。`percentEncode(CanonicalizedQueryString)` は、ステップ 1 の正規化されたクエリ文字列をステップ 1.b の URL エンコーディングルールに従ってエンコードして取得する文字列です。

    3. RFC 2104 で定義されているように、署名対象の文字列のハッシュベースのメッセージ認証コード (HMAC) 値を計算します。

      説明

      SHA1 ハッシュアルゴリズムを使用します。HMAC 計算のキーは、AccessKey Secret にアンパサンド (&) 文字 (ASCII コード 38) を追加したものです。

    4. HMAC 値を Base64 でエンコードして、署名文字列を取得します。

    5. 結果の署名文字列を `Signature` パラメーターとしてリクエストパラメーターに追加します。これでリクエストの署名プロセスは完了です。

      説明

      署名値を最終的なリクエストパラメーターとして Content Moderation サーバーに送信する場合、RFC 3986 に従って、他のパラメーターと同様に URL エンコードする必要があります。