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

Content Moderation:画像モデレーション 2.0 SDK と利用ガイド

最終更新日:Jul 07, 2025

画像モデレーション 2.0 API は、SDK または HTTPS リクエストを使用して呼び出すことができます。署名検証や HTTPS リクエストボディの構築など、いくつかの操作をスキップできるため、SDK を使用して API を呼び出すことをお勧めします。このトピックでは、画像モデレーション 2.0 の使用方法について説明します。

ステップ 1:画像モデレーション 2.0 を有効にする

Content Moderation V2.0 ページを開き、画像モデレーション 2.0 サービスを有効にします。

画像モデレーション 2.0 サービスを有効にすると、デフォルトの請求方法は従量課金制になります。日額料金は実際の使用量に基づいて計算されます。サービスが呼び出されない場合、料金は発生しません。API オペレーションを呼び出すと、請求システムによって使用量に基づいて自動的に課金されます。詳細については、「請求ルール」をご参照ください。

ステップ 2:RAM ユーザーを作成し、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. AliyunYundunGreenWebFullAccess システムポリシーを RAM ユーザーに付与します。詳細については、「RAM ユーザーへの権限の付与」をご参照ください。

ステップ 3:SDK をインストールして使用する

次の表は、サポートされているリージョンを示しています。

リージョン

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

インターナルエンドポイント

シンガポール

green-cip.ap-southeast-1.aliyuncs.com

green-cip-vpc.ap-southeast-1.aliyuncs.com

説明

他のプログラミング言語で SDK サンプルコードが必要な場合は、OpenAPI Explorer で API オペレーションを呼び出すことができます。OpenAPI Explorer は、さまざまな SDK の操作のサンプルコードを動的に生成します。

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

API フィールドの詳細については、「画像モデレーション 2.0 の同期モデレーション API」をご参照ください。

Java SDK

Java のバージョンは 1.8 以降である必要があります。

ソースコードの詳細については、「Java 向け SDK ソースコード」または「Open Source Software(OSS)の Java 向け SDK ソースコード」をご参照ください。

次の 3 つの画像モデレーション方法がサポートされています。

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

シナリオ

モデレートする画像がインターネット経由でアクセスできる場合、画像モデレーション 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 を使用します。

    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");
            // ビジネス要件に基づいてリージョン ID とエンドポイントを変更します。
            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");
            // モデレートされるデータのユニーク ID。
            serviceParameters.put("dataId", UUID.randomUUID().toString());
    
            ImageModerationRequest request = new ImageModerationRequest();
            // 画像モデレーションサービス:Content Moderation コンソールで画像モデレーション 2.0 用に設定されたサービスコード。例: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 操作に対する権限を持っています。セキュリティリスクを避けるため、RAM ユーザーを使用して API 操作を呼び出したり、日常の O&M を実行したりすることをお勧めします。
             * 一般的な環境変数の取得方法:
             * 方法 1:
             *     RAM ユーザーの AccessKey ID を取得する:System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID");
             *     RAM ユーザーの AccessKey シークレットを取得する:System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET");
             * 方法 2:
             *     RAM ユーザーの AccessKey ID を取得する:System.getProperty("ALIBABA_CLOUD_ACCESS_KEY_ID");
             *     RAM ユーザーの AccessKey シークレットを取得する:System.getProperty("ALIBABA_CLOUD_ACCESS_KEY_SECRET");
             */
            String accessKeyId = "環境変数から RAM ユーザーの AccessKey ID を取得することをお勧めします";
            String accessKeySecret = "環境変数から RAM ユーザーの AccessKey シークレットを取得することをお勧めします";
            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("image moderation not success. code:" + body.getCode());
                    }
                } else {
                    System.out.println("response not success. status:" + response.getStatusCode());
                }
            }
    
        }
    }

ローカル画像のモデレート

シナリオ

モデレートする画像がローカルコンピュータに保存されていて、インターネット経由でアクセスできない場合は、Content Moderation サービスが提供する 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 を使用します。

    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;
    
        // ファイルのアップロードに使用されるトークン。キーは Content Moderation のエンドポイント、値はトークンです。
        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);
            // ビジネス要件に基づいてリージョン ID とエンドポイントを変更します。
            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 コンソールで画像モデレーション 2.0 用に設定されたサービスコード。例:baselineCheck。
            request.setService("baselineCheck");
            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 操作に対する権限を持っています。セキュリティリスクを避けるため、RAM ユーザーを使用して API 操作を呼び出したり、日常の O&M を実行したりすることをお勧めします。
             * 一般的な環境変数の取得方法:
             * 方法 1:
             *     RAM ユーザーの AccessKey ID を取得する:System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID");
             *     RAM ユーザーの AccessKey シークレットを取得する:System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET");
             * 方法 2:
             *     RAM ユーザーの AccessKey ID を取得する:System.getProperty("ALIBABA_CLOUD_ACCESS_KEY_ID");
             *     RAM ユーザーの AccessKey シークレットを取得する:System.getProperty("ALIBABA_CLOUD_ACCESS_KEY_SECRET");
             */
            String accessKeyId = "環境変数から RAM ユーザーの AccessKey ID を取得することをお勧めします";
            String accessKeySecret = "環境変数から RAM ユーザーの AccessKey シークレットを取得することをお勧めします";
            // ビジネス要件に基づいてアクセスリージョン ID とエンドポイントを変更します。
            ImageModerationResponse response = invokeFunction(accessKeyId, accessKeySecret, "green-cip.cn-shanghai.aliyuncs.com");
            try {
                // 自動ルーティング。
                if (response != null) {
                    // リージョンを cn-beijing に切り替えます。
                    if (500 == response.getStatusCode() || (response.getBody() != null && 500 == (response.getBody().getCode()))) {
                        // ビジネス要件に基づいてアクセスリージョン ID とエンドポイントを変更します。
                        response = invokeFunction(accessKeyId, accessKeySecret, "green-cip.cn-beijing.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("image moderation not success. code:" + body.getCode());
                        }
                    } else {
                        System.out.println("response not success. status:" + response.getStatusCode());
                    }
                }
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }

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

シナリオ

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

  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 を使用します。

    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");
            // ビジネス要件に基づいてリージョン ID とエンドポイントを変更します。
            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<>();
            // モデレートされるデータのユニーク ID。
            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 コンソールで画像モデレーション 2.0 用に設定されたサービスコード。例: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 操作に対する権限を持っています。セキュリティリスクを避けるため、RAM ユーザーを使用して API 操作を呼び出したり、日常の O&M を実行したりすることをお勧めします。
             * 一般的な環境変数の取得方法:
             * 方法 1:
             *     RAM ユーザーの AccessKey ID を取得する:System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID");
             *     RAM ユーザーの AccessKey シークレットを取得する:System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET");
             * 方法 2:
             *     RAM ユーザーの AccessKey ID を取得する:System.getProperty("ALIBABA_CLOUD_ACCESS_KEY_ID");
             *     RAM ユーザーの AccessKey シークレットを取得する:System.getProperty("ALIBABA_CLOUD_ACCESS_KEY_SECRET");
             */
            String accessKeyId = "環境変数から RAM ユーザーの AccessKey ID を取得することをお勧めします";
            String accessKeySecret = "環境変数から RAM ユーザーの AccessKey シークレットを取得することをお勧めします";
            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("image moderation not success. code:" + body.getCode());
                    }
                } else {
                    System.out.println("response not success. status:" + response.getStatusCode());
                }
            }
        }
    }

Python SDK

Python のバージョンは 3.6 以降である必要があります。

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

次の 3 つの画像モデレーション方法がサポートされています。

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

シナリオ

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

  1. 次のコマンドを実行して、関連する依存関係をインストールします。

    pip install alibabacloud_green20220302==2.2.11
  2. Python SDK を使用します。

    # 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 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',
            # ビジネス要件に基づいてリージョン ID とエンドポイントを変更します。
            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 用に設定されたサービスコード。例: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 シークレットをプロジェクトコードに保存しないことをお勧めします。そうしないと、AccessKey ペアが漏洩し、アカウント内のリソースのセキュリティが侵害される可能性があります。
        # 一般的な環境変数の取得方法:
        # RAM ユーザーの AccessKey ID を取得する:os.environ['ALIBABA_CLOUD_ACCESS_KEY_ID']
        # RAM ユーザーの AccessKey シークレットを取得する:os.environ['ALIBABA_CLOUD_ACCESS_KEY_SECRET']
        access_key_id='環境変数から RAM ユーザーの AccessKey ID を取得することをお勧めします'
        access_key_secret='環境変数から RAM ユーザーの AccessKey シークレットを取得することをお勧めします'
        # ビジネス要件に基づいてリージョン ID とエンドポイントを変更します。
        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))
    

ローカル画像を画像モデレーションに送信する

シナリオ

モデレートする画像がローカルコンピュータに保存されていて、インターネット経由でアクセスできない場合は、Content Moderation サービスが提供する 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 を使用します。

    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
    # ファイルのアップロードに使用されるトークン。キーは Content Moderation のエンドポイント、値はトークンです。
    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',
            # ビジネス要件に基づいてリージョン ID とエンドポイントを変更します。
            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 用に設定されたサービスコード。例: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 シークレットをプロジェクトコードに保存しないことをお勧めします。そうしないと、AccessKey ペアが漏洩し、アカウント内のリソースのセキュリティが侵害される可能性があります。
        # 一般的な環境変数の取得方法:
        # RAM ユーザーの AccessKey ID を取得する:os.environ['ALIBABA_CLOUD_ACCESS_KEY_ID']
        # RAM ユーザーの AccessKey シークレットを取得する:os.environ['ALIBABA_CLOUD_ACCESS_KEY_SECRET']
        access_key_id='環境変数から RAM ユーザーの AccessKey ID を取得することをお勧めします'
        access_key_secret='環境変数から RAM ユーザーの AccessKey シークレットを取得することをお勧めします'
        # ビジネス要件に基づいてリージョン ID とエンドポイントを変更します。
        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 OSS バケットに保存されている場合は、Content Moderation サービスが OSS バケットにアクセスできるように、SLR を作成するための権限を付与できます。画像モデレーション 2.0 は、SLR を使用して OSS バケットから画像を取得してモデレートします。クラウド・リソース・アクセス認可 ページに移動して、SLR を作成します。

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

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

    pip install alibabacloud_green20220302==2.2.11
  3. Python SDK を使用します。

    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',
            # ビジネス要件に基づいてリージョン ID とエンドポイントを変更します。
            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 用に設定されたサービスコード。例: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 シークレットをプロジェクトコードに保存しないことをお勧めします。そうしないと、AccessKey ペアが漏洩し、アカウント内のリソースのセキュリティが侵害される可能性があります。
        # 一般的な環境変数の取得方法:
        # RAM ユーザーの AccessKey ID を取得する:os.environ['ALIBABA_CLOUD_ACCESS_KEY_ID']
        # RAM ユーザーの AccessKey シークレットを取得する:os.environ['ALIBABA_CLOUD_ACCESS_KEY_SECRET']
        access_key_id='環境変数から RAM ユーザーの AccessKey ID を取得することをお勧めします'
        access_key_secret='環境変数から RAM ユーザーの AccessKey シークレットを取得することをお勧めします'
        # ビジネス要件に基づいてリージョン ID とエンドポイントを変更します。
        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 ソースコード」をご参照ください。

次の 3 つの画像モデレーション方法がサポートされています。

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

シナリオ

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

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

    次のコマンドを実行して、関連する依存関係をインストールします。

    composer require alibabacloud/green-20220302 2.2.10
  2. PHP SDK を使用します。

    <?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 用に設定されたサービスコード。例: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 シークレットをプロジェクトコードに保存しないことをお勧めします。そうしないと、AccessKey ペアが漏洩し、アカウント内のリソースのセキュリティが侵害される可能性があります。
    * 一般的な環境変数の取得方法:
    * RAM ユーザーの AccessKey ID を取得する:getenv("ALIBABA_CLOUD_ACCESS_KEY_ID");
    * RAM ユーザーの AccessKey シークレットを取得する:getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET");
    */
    $accessKeyId = '環境変数から RAM ユーザーの AccessKey ID を取得することをお勧めします';
    $accessKeySecret = '環境変数から RAM ユーザーの AccessKey シークレットを取得することをお勧めします';
    // ビジネス要件に基づいてリージョン ID とエンドポイントを変更します。
    $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 サービスが提供する 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 を使用します。

    <?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 用に設定されたサービスコード。例:baselineCheck_global。
        $request->service = "baselineCheck_global";
        // モデレートされる画像の URL。インターネット経由でアクセスできます。
        $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 シークレットをプロジェクトコードに保存しないことをお勧めします。そうしないと、AccessKey ペアが漏洩し、アカウント内のリソースのセキュリティが侵害される可能性があります。
    * 一般的な環境変数の取得方法:
    * RAM ユーザーの AccessKey ID を取得する:getenv("ALIBABA_CLOUD_ACCESS_KEY_ID");
    * RAM ユーザーの AccessKey シークレットを取得する:getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET");
    */
    $accessKeyId = '環境変数から RAM ユーザーの AccessKey ID を取得することをお勧めします';
    $accessKeySecret = '環境変数から RAM ユーザーの AccessKey シークレットを取得することをお勧めします';
    // ビジネス要件に基づいてリージョン ID とエンドポイントを変更します。
    $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 OSS バケットに保存されている場合は、Content Moderation サービスが OSS バケットにアクセスできるように、SLR を作成するための権限を付与できます。画像モデレーション 2.0 は、SLR を使用して OSS バケットから画像を取得してモデレートします。クラウド・リソース・アクセス認可 ページに移動して、SLR を作成します。

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

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

    composer require alibabacloud/green-20220302 2.2.10
  3. PHP SDK を使用します。

    <?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 用に設定されたサービスコード。例: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 シークレットをプロジェクトコードに保存しないことをお勧めします。そうしないと、AccessKey ペアが漏洩し、アカウント内のリソースのセキュリティが侵害される可能性があります。
    * 一般的な環境変数の取得方法:
    * RAM ユーザーの AccessKey ID を取得する:getenv("ALIBABA_CLOUD_ACCESS_KEY_ID");
    * RAM ユーザーの AccessKey シークレットを取得する:getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET");
    */
    $accessKeyId = '環境変数から RAM ユーザーの AccessKey ID を取得することをお勧めします';
    $accessKeySecret = '環境変数から RAM ユーザーの AccessKey シークレットを取得することをお勧めします';
    // ビジネス要件に基づいてリージョン ID とエンドポイントを変更します。
    $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

次の 3 つの画像モデレーション方法がサポートされています。

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

シナリオ

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

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

    go git clone --branch v2.2.11 github.com/alibabacloud-go/green-20220302/v2
  2. Go SDK を使用します。

    package main
    
    import (
    	"encoding/json"
    	"fmt"
    	openapi "github.com/alibabacloud-go/darabonba-openapi/v2/client"
    	green20220302 "github.com/alibabacloud-go/green-20220302/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
    	}
    	// RuntimeOptions インスタンスを作成し、ランタイムパラメータを指定します。設定は、RuntimeOptions インスタンスを使用するリクエストに対してのみ有効です。
    	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() {
    	/**
    	 * Alibaba Cloud アカウントの AccessKey ペアは、すべての API 操作に対する権限を持っています。セキュリティリスクを避けるため、RAM ユーザーを使用して API 操作を呼び出したり、日常の O&M を実行したりすることをお勧めします。
    	 * AccessKey ID と AccessKey シークレットをプロジェクトコードに保存しないことをお勧めします。そうしないと、AccessKey ペアが漏洩し、アカウント内のリソースのセキュリティが侵害される可能性があります。
    	 * 一般的な環境変数の取得方法:
    	 * RAM ユーザーの AccessKey ID を取得する:os.Getenv("ALIBABA_CLOUD_ACCESS_KEY_ID")
    	 * RAM ユーザーの AccessKey シークレットを取得する:os.Getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET")
    	 */
    	var accessKeyId= tea.String("環境変数から RAM ユーザーの AccessKey ID を取得することをお勧めします");
    	var accessKeySecret= tea.String("環境変数から RAM ユーザーの AccessKey シークレットを取得することをお勧めします");
    	// ビジネス要件に基づいてリージョン ID とエンドポイントを変更します。
    	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)
    		}
    	}
    }

ローカル画像のモデレート

シナリオ

モデレートする画像がローカルコンピュータに保存されていて、インターネット経由でアクセスできない場合は、Content Moderation サービスが提供する 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 を使用します。

    package main
    
    import (
    	"encoding/json"
    	"fmt"
    	openapi "github.com/alibabacloud-go/darabonba-openapi/v2/client"
    	green20220302 "github.com/alibabacloud-go/green-20220302/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(-11)
    		}
    		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
    	}
    	// RuntimeOptions インスタンスを作成し、ランタイムパラメータを指定します。設定は、RuntimeOptions インスタンスを使用するリクエストに対してのみ有効です。
    	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() {
    	/**
    	 * Alibaba Cloud アカウントの AccessKey ペアは、すべての API 操作に対する権限を持っています。セキュリティリスクを避けるため、RAM ユーザーを使用して API 操作を呼び出したり、日常の O&M を実行したりすることをお勧めします。
    	 * AccessKey ID と AccessKey シークレットをプロジェクトコードに保存しないことをお勧めします。そうしないと、AccessKey ペアが漏洩し、アカウント内のリソースのセキュリティが侵害される可能性があります。
    	 * 一般的な環境変数の取得方法:
    	 * RAM ユーザーの AccessKey ID を取得する:os.Getenv("ALIBABA_CLOUD_ACCESS_KEY_ID")
    	 * RAM ユーザーの AccessKey シークレットを取得する:os.Getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET")
    	 */
    	var accessKeyId= tea.String("環境変数から RAM ユーザーの AccessKey ID を取得することをお勧めします");
    	var accessKeySecret= tea.String("環境変数から RAM ユーザーの AccessKey シークレットを取得することをお勧めします");
    	// ビジネス要件に基づいてリージョン ID とエンドポイントを変更します。
    	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 OSS バケットに保存されている場合は、Content Moderation サービスが OSS バケットにアクセスできるように、SLR を作成するための権限を付与できます。画像モデレーション 2.0 は、SLR を使用して OSS バケットから画像を取得してモデレートします。クラウド・リソース・アクセス認可 ページに移動して、SLR を作成します。

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

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

    go git clone --branch v2.2.11 github.com/alibabacloud-go/green-20220302/v2
  3. Go SDK を使用します。

    package main
    
    import (
    	"encoding/json"
    	"fmt"
    	openapi "github.com/alibabacloud-go/darabonba-openapi/v2/client"
    	green20220302 "github.com/alibabacloud-go/green-20220302/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
    	}
    	// RuntimeOptions インスタンスを作成し、ランタイムパラメータを指定します。設定は、RuntimeOptions インスタンスを使用するリクエストに対してのみ有効です。
    	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{
    			// 画像モデレーションサービス:Content Moderation コンソールで画像モデレーション 2.0 用に設定されたサービスコード。例:baselineCheck_global。
    			Service:           tea.String("baselineCheck_global"),
    			ServiceParameters: tea.String(string(serviceParameters)),
    		}
    
    	return client.ImageModerationWithOptions(imageModerationRequest, runtime)
    
    }
    
    func main() {
    	/**
    	 * Alibaba Cloud アカウントの AccessKey ペアは、すべての API 操作に対する権限を持っています。セキュリティリスクを避けるため、RAM ユーザーを使用して API 操作を呼び出したり、日常の O&M を実行したりすることをお勧めします。
    	 * AccessKey ID と AccessKey シークレットをプロジェクトコードに保存しないことをお勧めします。そうしないと、AccessKey ペアが漏洩し、アカウント内のリソースのセキュリティが侵害される可能性があります。
    	 * 一般的な環境変数の取得方法:
    	 * RAM ユーザーの AccessKey ID を取得する:os.Getenv("ALIBABA_CLOUD_ACCESS_KEY_ID")
    	 * RAM ユーザーの AccessKey シークレットを取得する:os.Getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET")
    	 */
    	var accessKeyId = tea.String("環境変数から RAM ユーザーの AccessKey ID を取得することをお勧めします");
    	var accessKeySecret = tea.String("環境変数から RAM ユーザーの AccessKey シークレットを取得することをお勧めします");
    	// ビジネス要件に基づいてリージョン ID とエンドポイントを変更します。
    	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 ソースコード」をご参照ください。

次の 3 つの画像モデレーション方法がサポートされています。

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

シナリオ

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

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

    次のコマンドを実行して、関連する依存関係をインストールします。

    npm install @alicloud/green20220302@2.2.10
  2. Node.js SDK を使用します。

    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 シークレットをプロジェクトコードに保存しないことをお勧めします。そうしないと、AccessKey ペアが漏洩し、アカウント内のリソースのセキュリティが侵害される可能性があります。
             * 一般的な環境変数の取得方法:
             * RAM ユーザーの AccessKey ID を取得する:process.env['ALIBABA_CLOUD_ACCESS_KEY_ID']
             * RAM ユーザーの AccessKey シークレットを取得する:process.env['ALIBABA_CLOUD_ACCESS_KEY_SECRET']
             */
            accessKeyId: '環境変数から RAM ユーザーの AccessKey ID を取得することをお勧めします',
            accessKeySecret: '環境変数から RAM ユーザーの AccessKey シークレットを取得することをお勧めします',
            // ビジネス要件に基づいてリージョン ID とエンドポイントを変更します。
            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 = {
            // 画像モデレーションサービス:Content Moderation コンソールで画像モデレーション 2.0 用に設定されたサービスコード。例: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 {
            // 操作を呼び出して、モデレーション結果を取得します。
            var response = await client.request('ImageModeration', params, requestOption)
        } catch (err) {
            console.log(err);
        }
    
        return response;
    }
    
    main().then(function (response) {
        console.log(JSON.stringify(response))
    });

ローカル画像のモデレート

シナリオ

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

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

    Content Moderation 向け SDK をインストールする:

    npm install @alicloud/green20220302@2.2.10

    OSS 依存関係をインストールする:

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

    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 = {
            // 画像モデレーションサービス:Content Moderation コンソールで画像モデレーション 2.0 用に設定されたサービスコード。例:baselineCheck_global。
            "Service": "baselineCheck_global",
            // ローカル画像のアップロードに関する情報。
            "ServiceParameters": JSON.stringify({
                "ossBucketName": tokenDic[endpoint].BucketName,
                "ossObjectName": objectName
            })
        }
        // 操作を呼び出して、モデレーション結果を取得します。
        return await client.request('ImageModeration', params, requestOption);
    }
    
    
    
    function main() {
    	/**
        * Alibaba Cloud アカウントの AccessKey ペアは、すべての API 操作に対する権限を持っています。セキュリティリスクを避けるため、RAM ユーザーを使用して API 操作を呼び出したり、日常の O&M を実行したりすることをお勧めします。
        * AccessKey ID と AccessKey シークレットをプロジェクトコードに保存しないことをお勧めします。そうしないと、AccessKey ペアが漏洩し、アカウント内のリソースのセキュリティが侵害される可能性があります。
        * 一般的な環境変数の取得方法:
        * RAM ユーザーの AccessKey ID を取得する:process.env['ALIBABA_CLOUD_ACCESS_KEY_ID']
        * RAM ユーザーの AccessKey シークレットを取得する:process.env['ALIBABA_CLOUD_ACCESS_KEY_SECRET']
        */
        const accessKeyId = '環境変数から RAM ユーザーの AccessKey ID を取得することをお勧めします'
        const accessKeySecret = '環境変数から RAM ユーザーの AccessKey シークレットを取得することをお勧めします'
        // ビジネス要件に基づいてリージョン ID とエンドポイントを変更します。
        var endpoint = "https://green-cip.ap-southeast-1.aliyuncs.com"
    
        try {
            // 操作を呼び出して、モデレーション結果を取得します。
            invoke(accessKeyId, accessKeySecret, endpoint).then(function (response) {
                    console.log(JSON.stringify(response))
            })
        } catch (err) {
            console.log(err);
        }
    }
    
    main();

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

シナリオ

モデレートする画像が Alibaba Cloud OSS バケットに保存されている場合は、Content Moderation サービスが OSS バケットにアクセスできるように、SLR を作成するための権限を付与できます。画像モデレーション 2.0 は、SLR を使用して OSS バケットから画像を取得してモデレートします。クラウド・リソース・アクセス認可 ページに移動して、SLR を作成します。

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

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

    npm install @alicloud/green20220302@2.2.10
  3. Node.js SDK を使用します。

    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 シークレットをプロジェクトコードに保存しないことをお勧めします。そうしないと、AccessKey ペアが漏洩し、アカウント内のリソースのセキュリティが侵害される可能性があります。
             * 一般的な環境変数の取得方法:
             * RAM ユーザーの AccessKey ID を取得する:process.env['ALIBABA_CLOUD_ACCESS_KEY_ID']
             * RAM ユーザーの AccessKey シークレットを取得する:process.env['ALIBABA_CLOUD_ACCESS_KEY_SECRET']
             */
            accessKeyId: '環境変数から RAM ユーザーの AccessKey ID を取得することをお勧めします',
            accessKeySecret: '環境変数から RAM ユーザーの AccessKey シークレットを取得することをお勧めします',
            // ビジネス要件に基づいてリージョン ID とエンドポイントを変更します。
            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 = {
            // 画像モデレーションサービス:Content Moderation コンソールで画像モデレーション 2.0 用に設定されたサービスコード。例: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 {
            // 操作を呼び出して、モデレーション結果を取得します。
            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 ソースコード」をご参照ください。

次の 3 つの画像モデレーション方法がサポートされています。

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

シナリオ

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

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

    dotnet add package AlibabaCloud.SDK.Green20220302 --version 2.2.10
  2. C# SDK を使用します。

    // This file is auto-generated, don't edit it. Thanks.
    
    using Newtonsoft.Json;
    
    namespace AlibabaCloud.SDK.Green20220302
    {
        public class ImageModerationAutoRoute
        {
            public static void Main(string[] args)
            {
                /**
                * Alibaba Cloud アカウントの AccessKey ペアは、すべての API 操作に対する権限を持っています。セキュリティリスクを避けるため、RAM ユーザーを使用して API 操作を呼び出したり、日常の O&M を実行したりすることをお勧めします。
                * AccessKey ID と AccessKey シークレットをプロジェクトコードに保存しないことをお勧めします。そうしないと、AccessKey ペアが漏洩し、アカウント内のリソースのセキュリティが侵害される可能性があります。
                * 一般的な環境変数の取得方法:
                * RAM ユーザーの AccessKey ID を取得する:Environment.GetEnvironmentVariable("ALIBABA_CLOUD_ACCESS_KEY_ID")
                * RAM ユーザーの AccessKey シークレットを取得する:Environment.GetEnvironmentVariable("ALIBABA_CLOUD_ACCESS_KEY_SECRET")
                */
                String accessKeyId = "環境変数から RAM ユーザーの AccessKey ID を取得することをお勧めします";
                String accessKeySecret = "環境変数から RAM ユーザーの AccessKey シークレットを取得することをお勧めします";
                // ビジネス要件に基づいてリージョン ID とエンドポイントを変更します。
                String endpoint = "green-cip.ap-southeast-1.aliyuncs.com";
                // 注:インスタンス化されたクライアントは、可能な限り再利用して、接続の再確立を避け、モデレーションのパフォーマンスを向上させることをお勧めします。
                Client client = createClient(accessKeyId, accessKeySecret, endpoint);
    
                // RuntimeOptions インスタンスを作成し、ランタイムパラメータを指定します。設定は、RuntimeOptions インスタンスを使用するリクエストに対してのみ有効です。
                AlibabaCloud.TeaUtil.Models.RuntimeOptions runtimeOptions =
                    new AlibabaCloud.TeaUtil.Models.RuntimeOptions();
    
                // 画像モデレーションリクエストを構築します。
                Models.ImageModerationRequest imageModerationRequest =
                    new Models.ImageModerationRequest();
                // 画像モデレーションサービス:Content Moderation コンソールで画像モデレーション 2.0 用に設定されたサービスコード。例:baselineCheck_global。
                imageModerationRequest.Service = "baselineCheck_global";
                Dictionary<string, object> task = new Dictionary<string, object>();
                // モデレートされる画像の URL。インターネット経由でアクセスできます。
                task.Add(
                    "imageUrl",
                    "https://img.alicdn.com/tfs/xxxxxxxxxx001.png"
                );
                // モデレートされるデータの ID。
                task.Add("dataId", Guid.NewGuid().ToString());
                imageModerationRequest.ServiceParameters = JsonConvert.SerializeObject(task);
    
                try
                {
                    // 操作を呼び出して、モデレーション結果を取得します。
                    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 サービスが提供する 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 を使用して SDK をインストールする
    1. Visual Studio に NuGet がインストールされていない場合は、最初に NuGet をインストールする必要があります。
    2. NuGet をインストールした後、Visual Studio でプロジェクトを作成するか、既存のプロジェクトを開きます。次に、[ツール] > [NuGet パッケージマネージャー] > [ソリューションの NuGet パッケージの管理] を選択します。
    3. 検索ボックスに「aliyun.oss.sdk」と入力し、[検索] をクリックします。検索結果で、Aliyun.OSS.SDK(.NET Framework に適用可能)または Aliyun.OSS.SDK.NetCore(.Net Core に適用可能)を見つけます。最新バージョンを選択し、[インストール] をクリックします。

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

    // This file is auto-generated, don't edit it. Thanks.
    
    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 操作に対する権限を持っています。セキュリティリスクを避けるため、RAM ユーザーを使用して API 操作を呼び出したり、日常の O&M を実行したりすることをお勧めします。
                * AccessKey ID と AccessKey シークレットをプロジェクトコードに保存しないことをお勧めします。そうしないと、AccessKey ペアが漏洩し、アカウント内のリソースのセキュリティが侵害される可能性があります。
                * 一般的な環境変数の取得方法:
                * RAM ユーザーの AccessKey ID を取得する:Environment.GetEnvironmentVariable("ALIBABA_CLOUD_ACCESS_KEY_ID")
                * RAM ユーザーの AccessKey シークレットを取得する:Environment.GetEnvironmentVariable("ALIBABA_CLOUD_ACCESS_KEY_SECRET")
                */
                String accessKeyId = "環境変数から RAM ユーザーの AccessKey ID を取得することをお勧めします";
                String accessKeySecret = "環境変数から RAM ユーザーの AccessKey シークレットを取得することをお勧めします";
                // ビジネス要件に基づいてリージョン ID とエンドポイントを変更します。
                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);
    
                // RuntimeOptions インスタンスを作成し、ランタイムパラメータを指定します。設定は、RuntimeOptions インスタンスを使用するリクエストに対してのみ有効です。
                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 コンソールで画像モデレーション 2.0 用に設定されたサービスコード。例: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);
                    // 操作を呼び出して、モデレーション結果を取得します。
                    Models.ImageModerationResponse response = client.ImageModerationWithOptions(
                        imageModerationRequest,
                        runtimeOptions
                    );
                    return response;
                }
                catch (Exception _err)
                {
                    Console.WriteLine(_err);
                    return null;
                }
            }
        }
    }

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

シナリオ

モデレートする画像が Alibaba Cloud OSS バケットに保存されている場合は、Content Moderation サービスが OSS バケットにアクセスできるように、SLR を作成するための権限を付与できます。画像モデレーション 2.0 は、SLR を使用して OSS バケットから画像を取得してモデレートします。クラウド・リソース・アクセス認可 ページに移動して、SLR を作成します。

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

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

    dotnet add package AlibabaCloud.SDK.Green20220302 --version 2.2.10
  3. C# SDK を使用します。

    // This file is auto-generated, don't edit it. Thanks.
    
    using Newtonsoft.Json;
    
    namespace AlibabaCloud.SDK.Green20220302
    {
        public class OssScanDemo
        {
            public static void Main(string[] args)
            {
                /**
                * Alibaba Cloud アカウントの AccessKey ペアは、すべての API 操作に対する権限を持っています。セキュリティリスクを避けるため、RAM ユーザーを使用して API 操作を呼び出したり、日常の O&M を実行したりすることをお勧めします。
                * AccessKey ID と AccessKey シークレットをプロジェクトコードに保存しないことをお勧めします。そうしないと、AccessKey ペアが漏洩し、アカウント内のリソースのセキュリティが侵害される可能性があります。
                * 一般的な環境変数の取得方法:
                * RAM ユーザーの AccessKey ID を取得する:Environment.GetEnvironmentVariable("ALIBABA_CLOUD_ACCESS_KEY_ID")
                * RAM ユーザーの AccessKey シークレットを取得する:Environment.GetEnvironmentVariable("ALIBABA_CLOUD_ACCESS_KEY_SECRET")
                */
                String accessKeyId = "環境変数から RAM ユーザーの AccessKey ID を取得することをお勧めします";
                String accessKeySecret = "環境変数から RAM ユーザーの AccessKey シークレットを取得することをお勧めします";
                // ビジネス要件に基づいてリージョン ID とエンドポイントを変更します。
                String endpoint = "green-cip.ap-southeast-1.aliyuncs.com";
                // 注:インスタンス化されたクライアントは、可能な限り再利用して、接続の再確立を避け、モデレーションのパフォーマンスを向上させることをお勧めします。
                Client client = createClient(accessKeyId, accessKeySecret, endpoint);
    
                // RuntimeOptions インスタンスを作成し、ランタイムパラメータを指定します。設定は、RuntimeOptions インスタンスを使用するリクエストに対してのみ有効です。
                AlibabaCloud.TeaUtil.Models.RuntimeOptions runtimeOptions =
                    new AlibabaCloud.TeaUtil.Models.RuntimeOptions();
    
                // 画像モデレーションリクエストを構築します。
                Models.ImageModerationRequest imageModerationRequest =
                    new Models.ImageModerationRequest();
                // 画像モデレーションサービス:Content Moderation コンソールで画像モデレーション 2.0 用に設定されたサービスコード。例: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
                {
                    // 操作を呼び出して、モデレーション結果を取得します。
                    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 を使用して画像モデレーション 2.0 API を呼び出すこともできます。HTTPS を使用するには、プロトコルをカプセル化し、署名を追加および検証し、URL、本文、ヘッダー、およびパラメータをリクエストにまとめる必要があります。一般に、次の 2 つのシナリオでのみ、HTTPS を使用して画像モデレーション 2.0 API オペレーションを呼び出す必要があります。その他のシナリオでは、Content Moderation SDK を使用して画像モデレーション 2.0 API オペレーションを呼び出すことをお勧めします。

  1. サービスがアプリケーションで直接提供されており、クライアントサイズに高い要件がある。

  2. サービスが特定のライブラリに依存しており、更新が困難である。

  • 呼び出し方法

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

    プロトコル:HTTP

    メソッド:POST

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

    画像モデレーション 2.0 API の入力パラメータには、共通リクエストパラメータと操作固有のリクエストパラメータが含まれます。共通リクエストパラメータは、各 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

    はい

    リクエストのタイムスタンプ。ISO 8601 標準の yyyy-MM-ddTHH:mm:ssZ 形式で時間を指定します。時間は協定世界時(UTC)である必要があります。たとえば、2022 年 12 月 12 日 09:13:14(UTC+8)は 2022-12-12T01:13:14Z と記述されます。

    SignatureVersion

    String

    はい

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

    SignatureNonce

    String

    はい

    リプレイ攻撃を防ぐために使用されるユニークな乱数。リクエストごとに異なる番号を使用する必要があります。

    Action

    String

    はい

    値を ImageModeration に設定します。

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

    呼び出しが成功したかどうかに関係なく、システムはすべてのレスポンスに対してユニークな RequestId を返します。その他のレスポンスパラメータには、label と confidence が含まれます。confidence パラメータは信頼度スコアを指定します。レスポンスパラメータはサービスによって異なります。詳細については、特定のサービスのドキュメントを参照してください。

  • サンプルコード

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

    以下は、画像モデレーション 画像モデレーション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
        &ServiceParameters={"imageUrl": "https://img.alicdn.com/tfs/TB1U4r9AeH2gK0jSZJnXXaT1FXa-2880-480.png",
        "dataId": "img1234567"}

    以下は、画像モデレーション 画像モデレーション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"
    }
  • 署名メソッド

    画像モデレーション 2.0 サービスは、各アクセスリクエストを認証します。したがって、各リクエストには署名情報が含まれている必要があります。画像モデレーション 2.0 は、AccessKey ペアによる対称暗号化を実装して、リクエスト送信者を認証します。

    AccessKey ペアは、Alibaba Cloud によって正式に発行されます。Alibaba Cloud の公式 Web サイトで申請および管理できます。AccessKey ペアは、AccessKey ID と AccessKey シークレットで構成されます。AccessKey ID はユーザーの身元を確認するために使用され、AccessKey シークレットは署名文字列の暗号化と検証に使用されます。AccessKey シークレットは厳重に機密にする必要があります。

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

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

      1. リクエストパラメータをパラメータ名のアルファベット順にソートします。これらのパラメータには、共通リクエストパラメータと操作固有のパラメータが含まれます。ただし、共通リクエストパラメータの Signature パラメータは含まれません。

      2. 関連するリクエストパラメータの名前と値をエンコードします。パラメータ名と値は、UTF-8 文字セットを使用して URL エンコードする必要があります。

        説明

        java.net.URLEncoder など、URL エンコードをサポートするほとんどのライブラリは、application/x-www-form-urlencoded の MIME(Multipurpose Internet Mail Extensions)エンコードルールに準拠しています。このエンコード方法を使用する場合は、エンコードされた文字列のプラス記号(+)を %20 に、アスタリスク(*)を %2A に、%7E をチルダ(~)に置き換えます。このようにして、上記のエンコードルールに基づいて作成されたエンコードされた文字列を取得できます。

        次のエンコードルールに注意してください。

        • 大文字、小文字、数字、およびハイフン(-)、アンダースコア(_)、ピリオド(.)、チルダ(~)などの一部の特殊文字はエンコードする必要はありません。

        • その他の文字は、%XY 形式でエンコードする必要があります。ここで、XY は 16 進表記の文字の ASCII コードを表します。たとえば、二重引用符(")は %22 としてエンコードされます。

        • 拡張 UTF-8 文字は、%XY%ZA... 形式でエンコードする必要があります。

        • スペースは %20 としてエンコードする必要があります。スペースをプラス記号(+)としてエンコードしないでください。

      3. エンコードされたパラメータ名と値を等号(=)でつなぎます。

      4. 等号でつながれた文字列をパラメータ名のアルファベット順にソートし、アンパサンド(&)でつないで正規化されたクエリ文字列を取得します。

    2. 手順 a.i で作成した正規化されたクエリ文字列を使用して、次のルールに基づいて署名する文字列を作成します。

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

      HTTPMethod は、リクエストを行うために使用される HTTP メソッド(POST など)を示します。percentEncode("/") は、手順 a.ii で説明されている URL エンコードルールに基づいてスラッシュ(/)をエンコードします。スラッシュ(/)のエンコードされた値は %2F です。percentEncode(CanonicalizedQueryString) は、手順 a.i で構築された正規化されたクエリ文字列のエンコードされた文字列を指定します。エンコードされた文字列は、手順 a.ii で説明されている URL エンコードルールに従って取得されます。

    3. RFC 2104 で説明されている HMAC アルゴリズムに基づいて、署名する文字列の HMAC(Hash-based Message Authentication Code)値を計算します。

      説明

      SHA1(Secure Hash Algorithm 1)アルゴリズムを使用して、署名する文字列の HMAC 値を計算します。アンパサンド(&)(ASCII:38)が付加された AccessKey シークレットは、HMAC 計算のキーとして使用されます。

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

    5. 署名文字列を Signature パラメータとしてリクエストに追加します。これにより、API リクエストが署名されます。

      説明

      署名文字列が最終的なリクエストパラメータ値として Content Moderation サービスに送信される場合、RFC 3986 で定義されているルールに基づいて、他のパラメータと同様に値を URL エンコードする必要があります。