画像審査 2.0 は、SDK 呼び出しとネイティブ HTTPS 呼び出しをサポートしています。署名認証や本文形式の構築などの詳細な手順を省略できるため、SDK を使用してサービスに接続することを推奨します。このトピックでは、画像審査 2.0 への接続方法について説明します。
ステップ 1: サービスの有効化
サービスの有効化ページにアクセスし、画像審査 バージョン 2.0 サービスを有効化します。
画像審査 バージョン 2.0 サービスを有効にすると、デフォルトの課金方法は従量課金になり、実際の使用量に基づいて毎日決済されます。サービスを呼び出さない場合、料金は発生しません。API を統合して使用すると、システムは使用量に基づいて自動的に請求書を生成します。詳細については、「課金の詳細」をご参照ください。
ステップ 2: RAM ユーザーの作成と権限の付与
SDK を使用して Content Moderation API を呼び出す前に、ユーザーを作成し、そのユーザーに関連付けられたアクセス認証情報を取得し、Alibaba Cloud リソースにアクセスするための権限をユーザーに付与する必要があります。この例では、Resource Access Management (RAM) ユーザーを作成し、AccessKey ペアをアクセス認証情報として使用し、RAM ユーザーに Content Moderation を呼び出す権限を付与します。
Alibaba Cloud アカウントまたは管理権限を持つ RAM ユーザーを使用して、RAM コンソールにログインします。
RAM ユーザーを作成し、[OpenAPI アクセス] を選択して、RAM ユーザー用に生成された AccessKey ペアを記録します。RAM ユーザーの作成方法の詳細については、「RAM ユーザーの作成」をご参照ください。
AliyunYundunGreenWebFullAccessシステムポリシーを RAM ユーザーに付与します。詳細については、「RAM ユーザーへの権限付与」をご参照ください。
ステップ 3: SDK のインストールと統合
サポートされているリージョンは次のとおりです:
リージョン | パブリックエンドポイント | VPC エンドポイント | サポート |
シンガポール | green-cip.ap-southeast-1.aliyuncs.com | green-cip-vpc.ap-southeast-1.aliyuncs.com | postImageCheckByVL_global, baselineCheck_global, aigcDetector_global, faceDetect_global, faceDetect_pro_global |
イギリス (ロンドン) | green-cip.eu-west-1.aliyuncs.com | なし | |
米国 (バージニア) | green-cip.us-east-1.aliyuncs.com | green-cip-vpc.us-east-1.aliyuncs.com | baselineCheck_global, aigcDetector_global |
米国 (シリコンバレー) | green-cip.us-west-1.aliyuncs.com | なし | |
ドイツ (フランクフルト) | green-cip.eu-central-1.aliyuncs.com | green-cip-vpc.eu-central-1.aliyuncs.com |
他の言語の SDK サンプルコードが必要な場合は、OpenAPI Developer Portal のオンラインデバッグツールを使用して API 操作をデバッグできます。このツールは、対応する API 操作の SDK 呼び出しサンプルコードを自動的に生成します。
Alibaba Cloud SDK コードでは、ALIBABA_CLOUD_ACCESS_KEY_ID と ALIBABA_CLOUD_ACCESS_KEY_SECRET 環境変数を定義することで、デフォルトのアクセス認証情報を作成できます。Alibaba Cloud サービス の API 操作を呼び出すと、システムは認証情報に直接アクセスし、AccessKey ペアを読み取り、自動的に認証を完了します。SDK サンプルコードを使用する前に、環境変数を設定する必要があります。詳細については、「認証情報の設定」をご参照ください。
API 操作フィールドの説明については、「画像審査拡張版 2.0 同期検出 API」をご参照ください。
Java SDK
注意事項
環境要件:Java 1.8 以降。
ソースコードリファレンス:詳細については、「Java SDK ソースコード」または「Java SDK ソースコード (OSS パス)」をご参照ください。
サポートされている機能:SDK は、以下の 3 種類の画像検出をサポートしています。
これらの API 操作によって返される Label フィールドの値と説明の詳細については、「リスクラベル説明表」をご参照ください。
パブリックにアクセス可能な画像の検出
シナリオ
審査対象の画像がパブリック URL を使用してアクセス可能な場合、画像審査 バージョン 2.0 サービスは URL からファイルを取得して審査できます。
Java SDK をインストールするには、pom.xml ファイルに次の依存関係を追加します。その後、Maven プロジェクトで SDK を使用できます。
<dependency> <groupId>com.aliyun</groupId> <artifactId>green20220302</artifactId> <version>2.2.11</version> </dependency>Java SDK を統合します。
同期 API 統合の例
import com.alibaba.fastjson.JSON; import com.aliyun.green20220302.Client; import com.aliyun.green20220302.models.ImageModerationRequest; import com.aliyun.green20220302.models.ImageModerationResponse; import com.aliyun.green20220302.models.ImageModerationResponseBody; import com.aliyun.green20220302.models.ImageModerationResponseBody.ImageModerationResponseBodyData; import com.aliyun.green20220302.models.ImageModerationResponseBody.ImageModerationResponseBodyDataResult; import com.aliyun.teaopenapi.models.Config; import com.aliyun.teautil.models.RuntimeOptions; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.UUID; public class ImageUrlDemo { /** * リクエストクライアントを作成します。 * * @param accessKeyId * @param accessKeySecret * @param endpoint * @return * @throws Exception */ public static Client createClient(String accessKeyId, String accessKeySecret, String endpoint) throws Exception { Config config = new Config(); config.setAccessKeyId(accessKeyId); config.setAccessKeySecret(accessKeySecret); // HTTP プロキシを設定します。 // config.setHttpProxy("http://10.10.xx.xx:xxxx"); // HTTPS プロキシを設定します。 // config.setHttpsProxy("https://10.10.xx.xx:xxxx"); // 必要に応じてリージョンとエンドポイントを変更します。 config.setEndpoint(endpoint); return new Client(config); } public static ImageModerationResponse invokeFunction(String accessKeyId, String accessKeySecret, String endpoint) throws Exception { // 注:検出パフォーマンスを向上させるため、インスタンス化されたクライアントをできるだけ再利用し、接続の繰り返し確立を避けてください。 Client client = createClient(accessKeyId, accessKeySecret, endpoint); // RuntimeObject インスタンスを作成し、実行時パラメーターを設定します。 RuntimeOptions runtime = new RuntimeOptions(); // 検出パラメーターを構築します。 Map<String, String> serviceParameters = new HashMap<>(); // パブリックにアクセス可能な URL。 serviceParameters.put("imageUrl", "https://img.alicdn.com/tfs/xxxxxxxxxx001.png"); // 検出対象データの一意の識別子。 serviceParameters.put("dataId", UUID.randomUUID().toString()); ImageModerationRequest request = new ImageModerationRequest(); // 画像審査サービス:Content Moderation コンソールで画像審査 Pro ルールに設定された serviceCode。例:baselineCheck_global request.setService("baselineCheck_global"); request.setServiceParameters(JSON.toJSONString(serviceParameters)); ImageModerationResponse response = null; try { response = client.imageModerationWithOptions(request, runtime); } catch (Exception e) { e.printStackTrace(); } return response; } public static void main(String[] args) throws Exception { /** * Alibaba Cloud アカウントの AccessKey は、すべての API 操作に対する完全な権限を持っています。API 呼び出しや日常の O&M には RAM ユーザーを使用することを推奨します。 * 環境変数を取得する一般的な方法: * 方法 1: * RAM ユーザーの AccessKey ID を取得する:System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID"); * RAM ユーザーの AccessKey Secret を取得する:System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET"); * 方法 2: * RAM ユーザーの AccessKey ID を取得する:System.getProperty("ALIBABA_CLOUD_ACCESS_KEY_ID"); * RAM ユーザーの AccessKey Secret を取得する:System.getProperty("ALIBABA_CLOUD_ACCESS_KEY_SECRET"); */ String accessKeyId = "環境変数から RAM ユーザーの AccessKey ID を取得することを推奨します"; String accessKeySecret = "環境変数から RAM ユーザーの AccessKey Secret を取得することを推奨します"; ImageModerationResponse response = invokeFunction(accessKeyId, accessKeySecret, "green-cip.ap-southeast-1.aliyuncs.com"); // 検出結果を出力します。 if (response != null) { if (response.getStatusCode() == 200) { ImageModerationResponseBody body = response.getBody(); System.out.println("requestId=" + body.getRequestId()); System.out.println("code=" + body.getCode()); System.out.println("msg=" + body.getMsg()); if (body.getCode() == 200) { ImageModerationResponseBodyData data = body.getData(); System.out.println("dataId=" + data.getDataId()); List<ImageModerationResponseBodyDataResult> results = data.getResult(); for (ImageModerationResponseBodyDataResult result : results) { System.out.println("label=" + result.getLabel()); System.out.println("confidence=" + result.getConfidence()); } } else { System.out.println("image moderation not success. code:" + body.getCode()); } } else { System.out.println("response not success. status:" + response.getStatusCode()); } } } }
ローカル画像の検出
シナリオ
ローカルマシン上にあり、パブリックにアクセス可能な URL を持たない画像を審査するには、Content Moderation が提供する Object Storage Service (OSS) バケットに画像をアップロードします。その後、画像審査 バージョン 2.0 サービスは OSS に直接アクセスして画像コンテンツを取得し、審査できます。
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>Java SDK を統合します。
同期 API 統合の例
import com.alibaba.fastjson.JSON; import com.aliyun.green20220302.Client; import com.aliyun.green20220302.models.DescribeUploadTokenResponse; import com.aliyun.green20220302.models.DescribeUploadTokenResponseBody; import com.aliyun.green20220302.models.ImageModerationRequest; import com.aliyun.green20220302.models.ImageModerationResponse; import com.aliyun.green20220302.models.ImageModerationResponseBody; import com.aliyun.green20220302.models.ImageModerationResponseBody.ImageModerationResponseBodyData; import com.aliyun.green20220302.models.ImageModerationResponseBody.ImageModerationResponseBodyDataResult; import com.aliyun.oss.OSS; import com.aliyun.oss.OSSClientBuilder; import com.aliyun.oss.model.PutObjectRequest; import com.aliyun.teaopenapi.models.Config; import com.aliyun.teautil.models.RuntimeOptions; import java.io.File; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.UUID; public class ScanLocalImage { // サービスが VPC にデプロイされているかどうかを指定します。 public static boolean isVPC = false; // ファイルアップロードトークン:endpoint->token public static Map<String, DescribeUploadTokenResponseBody.DescribeUploadTokenResponseBodyData> tokenMap = new HashMap<>(); // ファイルアップロードリクエスト用のクライアント。 public static OSS ossClient = null; /** * リクエストクライアントを作成します。 * * @param accessKeyId * @param accessKeySecret * @param endpoint * @return * @throws Exception */ public static Client createClient(String accessKeyId, String accessKeySecret, String endpoint) throws Exception { Config config = new Config(); config.setAccessKeyId(accessKeyId); config.setAccessKeySecret(accessKeySecret); // 必要に応じてリージョンとエンドポイントを変更します。 config.setEndpoint(endpoint); return new Client(config); } /** * ファイルアップロードリクエスト用のクライアントを作成します。 * * @param tokenData * @param isVPC */ public static void getOssClient(DescribeUploadTokenResponseBody.DescribeUploadTokenResponseBodyData tokenData, boolean isVPC) { // 注:検出パフォーマンスを向上させるため、インスタンス化されたクライアントをできるだけ再利用し、接続の繰り返し確立を避けてください。 if (isVPC) { ossClient = new OSSClientBuilder().build(tokenData.ossInternalEndPoint, tokenData.getAccessKeyId(), tokenData.getAccessKeySecret(), tokenData.getSecurityToken()); } else { ossClient = new OSSClientBuilder().build(tokenData.ossInternetEndPoint, tokenData.getAccessKeyId(), tokenData.getAccessKeySecret(), tokenData.getSecurityToken()); } } /** * ファイルをアップロードします。 * * @param filePath * @param tokenData * @return * @throws Exception */ public static String uploadFile(String filePath, DescribeUploadTokenResponseBody.DescribeUploadTokenResponseBodyData tokenData) throws Exception { String[] split = filePath.split("\\."); String objectName; if (split.length > 1) { objectName = tokenData.getFileNamePrefix() + UUID.randomUUID() + "." + split[split.length - 1]; } else { objectName = tokenData.getFileNamePrefix() + UUID.randomUUID(); } PutObjectRequest putObjectRequest = new PutObjectRequest(tokenData.getBucketName(), objectName, new File(filePath)); ossClient.putObject(putObjectRequest); return objectName; } public static ImageModerationResponse invokeFunction(String accessKeyId, String accessKeySecret, String endpoint) throws Exception { // 注:検出パフォーマンスを向上させるため、インスタンス化されたクライアントをできるだけ再利用し、接続の繰り返し確立を避けてください。 Client client = createClient(accessKeyId, accessKeySecret, endpoint); RuntimeOptions runtime = new RuntimeOptions(); // ローカルファイルの完全なパス、例:D:\localPath\exampleFile.png。 String filePath = "D:\\localPath\\exampleFile.png"; // ファイルアップロードトークンを取得します。 if (tokenMap.get(endpoint) == null || tokenMap.get(endpoint).expiration <= System.currentTimeMillis() / 1000) { DescribeUploadTokenResponse tokenResponse = client.describeUploadToken(); tokenMap.put(endpoint,tokenResponse.getBody().getData()); } // ファイルアップロードリクエスト用のクライアント。 getOssClient(tokenMap.get(endpoint), isVPC); // ファイルをアップロードします。 String objectName = uploadFile(filePath, tokenMap.get(endpoint)); // 検出パラメーターを構築します。 Map<String, String> serviceParameters = new HashMap<>(); // ファイルアップロード情報。 serviceParameters.put("ossBucketName", tokenMap.get(endpoint).getBucketName()); serviceParameters.put("ossObjectName", objectName); serviceParameters.put("dataId", UUID.randomUUID().toString()); ImageModerationRequest request = new ImageModerationRequest(); // 画像審査サービス:Content Moderation コンソールで画像審査 Pro ルールに設定された serviceCode。例:baselineCheck request.setService("baselineCheck_global"); request.setServiceParameters(JSON.toJSONString(serviceParameters)); ImageModerationResponse response = null; try { response = client.imageModerationWithOptions(request, runtime); } catch (Exception e) { e.printStackTrace(); } return response; } public static void main(String[] args) throws Exception { /** * Alibaba Cloud アカウントの AccessKey は、すべての API 操作に対する完全な権限を持っています。API 呼び出しや日常の O&M には RAM ユーザーを使用することを推奨します。 * 環境変数を取得する一般的な方法: * 方法 1: * RAM ユーザーの AccessKey ID を取得する:System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID"); * RAM ユーザーの AccessKey Secret を取得する:System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET"); * 方法 2: * RAM ユーザーの AccessKey ID を取得する:System.getProperty("ALIBABA_CLOUD_ACCESS_KEY_ID"); * RAM ユーザーの AccessKey Secret を取得する:System.getProperty("ALIBABA_CLOUD_ACCESS_KEY_SECRET"); */ String accessKeyId = "環境変数から RAM ユーザーの AccessKey ID を取得することを推奨します"; String accessKeySecret = "環境変数から RAM ユーザーの AccessKey Secret を取得することを推奨します"; // 必要に応じてリージョンとエンドポイントを変更します。 ImageModerationResponse response = invokeFunction(accessKeyId, accessKeySecret, "green-cip.ap-southeast-1.aliyuncs.com"); try { // 検出結果を出力します。 if (response != null) { if (response.getStatusCode() == 200) { ImageModerationResponseBody body = response.getBody(); System.out.println("requestId=" + body.getRequestId()); System.out.println("code=" + body.getCode()); System.out.println("msg=" + body.getMsg()); if (body.getCode() == 200) { ImageModerationResponseBodyData data = body.getData(); System.out.println("dataId=" + data.getDataId()); List<ImageModerationResponseBodyDataResult> results = data.getResult(); for (ImageModerationResponseBodyDataResult result : results) { System.out.println("label=" + result.getLabel()); System.out.println("confidence=" + result.getConfidence()); } } else { System.out.println("image moderation not success. code:" + body.getCode()); } } else { System.out.println("response not success. status:" + response.getStatusCode()); } } } catch (Exception e) { e.printStackTrace(); } } }
OSS 画像の検出
シナリオ
Object Storage Service (OSS) に保存されている画像ファイルを審査するには、サービスロールを作成して Content Moderation サービスに OSS リソースへのアクセス権を付与します。画像審査 バージョン 2.0 サービスはこのサービスロールを使用して、OSS からファイルを取得して審査します。クラウドリソースアクセス承認ページで AliyunCIPScanOSSRole サービスロールを作成できます。
Alibaba Cloud アカウント (ルートアカウント) を使用して、クラウドリソースアクセス承認ページに移動して権限を付与します。
Java SDK をインストールするには、pom.xml ファイルに次の依存関係を追加します。その後、Maven プロジェクトで SDK を使用できます。
<dependency> <groupId>com.aliyun</groupId> <artifactId>green20220302</artifactId> <version>2.2.11</version> </dependency>Java SDK を統合します。
同期 API 統合の例
import com.alibaba.fastjson.JSON; import com.aliyun.green20220302.Client; import com.aliyun.green20220302.models.ImageModerationRequest; import com.aliyun.green20220302.models.ImageModerationResponse; import com.aliyun.green20220302.models.ImageModerationResponseBody; import com.aliyun.green20220302.models.ImageModerationResponseBody.ImageModerationResponseBodyData; import com.aliyun.green20220302.models.ImageModerationResponseBody.ImageModerationResponseBodyDataResult; import com.aliyun.teaopenapi.models.Config; import com.aliyun.teautil.models.RuntimeOptions; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.UUID; public class OssScanDemo { /** * リクエストクライアントを作成します。 * * @param accessKeyId * @param accessKeySecret * @param endpoint * @return * @throws Exception */ public static Client createClient(String accessKeyId, String accessKeySecret, String endpoint) throws Exception { Config config = new Config(); config.setAccessKeyId(accessKeyId); config.setAccessKeySecret(accessKeySecret); // HTTP プロキシを設定します。 // config.setHttpProxy("http://10.10.xx.xx:xxxx"); // HTTPS プロキシを設定します。 // config.setHttpsProxy("https://10.10.xx.xx:xxxx"); // 必要に応じてリージョンとエンドポイントを変更します。 config.setEndpoint(endpoint); return new Client(config); } public static ImageModerationResponse invokeFunction(String accessKeyId, String accessKeySecret, String endpoint) throws Exception { // 注:検出パフォーマンスを向上させるため、インスタンス化されたクライアントをできるだけ再利用し、接続の繰り返し確立を避けてください。 Client client = createClient(accessKeyId, accessKeySecret, endpoint); // RuntimeObject インスタンスを作成し、実行時パラメーターを設定します。 RuntimeOptions runtime = new RuntimeOptions(); // 検出パラメーターを構築します。 Map<String, String> serviceParameters = new HashMap<>(); // 検出対象データの一意の識別子。 serviceParameters.put("dataId", UUID.randomUUID().toString()); // 検出対象ファイルが格納されているバケットのリージョン。例:ap-southeast-1 serviceParameters.put("ossRegionId", "ap-southeast-1"); // 検出対象ファイルが格納されているバケットの名前。例:bucket001 serviceParameters.put("ossBucketName", "bucket001"); // 検出対象ファイル。例:image/001.jpg serviceParameters.put("ossObjectName", "image/001.jpg"); ImageModerationRequest request = new ImageModerationRequest(); // 画像審査サービス:Content Moderation コンソールで画像審査 Pro ルールに設定された serviceCode。例:baselineCheck_global request.setService("baselineCheck_global"); request.setServiceParameters(JSON.toJSONString(serviceParameters)); ImageModerationResponse response = null; try { response = client.imageModerationWithOptions(request, runtime); } catch (Exception e) { e.printStackTrace(); } return response; } public static void main(String[] args) throws Exception { /** * Alibaba Cloud アカウントの AccessKey は、すべての API 操作に対する完全な権限を持っています。API 呼び出しや日常の O&M には RAM ユーザーを使用することを推奨します。 * 環境変数を取得する一般的な方法: * 方法 1: * RAM ユーザーの AccessKey ID を取得する:System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID"); * RAM ユーザーの AccessKey Secret を取得する:System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET"); * 方法 2: * RAM ユーザーの AccessKey ID を取得する:System.getProperty("ALIBABA_CLOUD_ACCESS_KEY_ID"); * RAM ユーザーの AccessKey Secret を取得する:System.getProperty("ALIBABA_CLOUD_ACCESS_KEY_SECRET"); */ String accessKeyId = "環境変数から RAM ユーザーの AccessKey ID を取得することを推奨します"; String accessKeySecret = "環境変数から RAM ユーザーの AccessKey Secret を取得することを推奨します"; ImageModerationResponse response = invokeFunction(accessKeyId, accessKeySecret, "green-cip.ap-southeast-1.aliyuncs.com"); // 検出結果を出力します。 if (response != null) { if (response.getStatusCode() == 200) { ImageModerationResponseBody body = response.getBody(); System.out.println("requestId=" + body.getRequestId()); System.out.println("code=" + body.getCode()); System.out.println("msg=" + body.getMsg()); if (body.getCode() == 200) { ImageModerationResponseBodyData data = body.getData(); System.out.println("dataId=" + data.getDataId()); List<ImageModerationResponseBodyDataResult> results = data.getResult(); for (ImageModerationResponseBodyDataResult result : results) { System.out.println("label=" + result.getLabel()); System.out.println("confidence=" + result.getConfidence()); } } else { System.out.println("image moderation not success. code:" + body.getCode()); } } else { System.out.println("response not success. status:" + response.getStatusCode()); } } } }
Python SDK
注意事項
環境要件:Python 3.6 以降。
ソースコードリファレンス:ソースコードについては、「Python SDK ソースコード」をご参照ください。
サポートされている機能:SDK は、以下の 3 種類の画像検出をサポートしています。
これらの API 操作によって返される Label フィールドの値と説明の詳細については、「リスクラベル説明表」をご参照ください。
パブリックにアクセス可能な画像の検出
シナリオ
審査対象の画像がパブリック URL を使用してアクセス可能な場合、画像審査 V2.0 サービスは URL からファイルを取得して審査できます。
次のコマンドを実行して、必要な依存関係をインポートします。
pip install alibabacloud_green20220302==2.2.11Python SDK を統合します。
同期 API 統合の例
# coding=utf-8 from alibabacloud_green20220302.client import Client from alibabacloud_green20220302 import models from alibabacloud_tea_openapi.models import Config from alibabacloud_tea_util import models as util_models import json import uuid # リクエストクライアントを作成します。 def create_client(access_key_id, access_key_secret, endpoint): config = Config( access_key_id=access_key_id, access_key_secret=access_key_secret, # HTTP プロキシを設定します。 # http_proxy='http://10.10.xx.xx:xxxx', # HTTPS プロキシを設定します。 # https_proxy='https://10.10.xx.xx:xxxx', # 必要に応じてリージョンとエンドポイントを変更します。 endpoint=endpoint ) return Client(config) def invoke_function(access_key_id, access_key_secret, endpoint): # 注:検出パフォーマンスを向上させるため、インスタンス化されたクライアントをできるだけ再利用し、接続の繰り返し確立を避けてください。 client = create_client(access_key_id, access_key_secret, endpoint) # RuntimeObject インスタンスを作成し、実行時パラメーターを設定します。 runtime = util_models.RuntimeOptions() # 検出パラメーターを構築します。 service_parameters = { # パブリックにアクセス可能な画像 URL。 'imageUrl': 'https://img.alicdn.com/tfs/xxxxxxxxxx001.png', # データの一意の識別子。 'dataId': str(uuid.uuid1()) } image_moderation_request = models.ImageModerationRequest( # 画像審査サービス:Content Moderation コンソールで画像審査 Pro ルールに設定された serviceCode。例:baselineCheck_global service='baselineCheck_global', service_parameters=json.dumps(service_parameters) ) try: return client.image_moderation_with_options(image_moderation_request, runtime) except Exception as err: print(err) if __name__ == '__main__': # Alibaba Cloud アカウントの AccessKey は、すべての API 操作に対する完全な権限を持っています。API 呼び出しや日常の O&M には RAM ユーザーを使用することを推奨します。 # プロジェクトコードに AccessKey ID と AccessKey Secret を保存しないことを強く推奨します。そうしないと、AccessKey ペアが漏洩し、アカウント内のすべてのリソースのセキュリティを脅かす可能性があります。 # 環境変数を取得する一般的な方法: # RAM ユーザーの AccessKey ID を取得する:os.environ['ALIBABA_CLOUD_ACCESS_KEY_ID'] # RAM ユーザーの AccessKey Secret を取得する:os.environ['ALIBABA_CLOUD_ACCESS_KEY_SECRET'] access_key_id='環境変数から RAM ユーザーの AccessKey ID を取得することを推奨します' access_key_secret='環境変数から RAM ユーザーの AccessKey Secret を取得することを推奨します' # 必要に応じてリージョンとエンドポイントを変更します。 response = invoke_function(access_key_id, access_key_secret, 'green-cip.ap-southeast-1.aliyuncs.com') # 結果を出力します。 if response is not None: if response.status_code == 200: # 呼び出しは成功しました。 # 審査結果を取得します。 result = response.body print('response success. result:{}'.format(result)) if result.code == 200: result_data = result.data print('result: {}'.format(result_data)) else: print('response not success. status:{} ,result:{}'.format(response.status_code, response))
ローカル画像の検出
シナリオ
ローカルマシンに保存されており、パブリックにアクセス可能な URL を持たない画像を審査するには、Content Moderation が提供する Object Storage Service (OSS) バケットに画像をアップロードします。その後、画像審査 バージョン 2.0 サービスは OSS に直接アクセスして画像コンテンツを取得し、審査できます。
Python SDK をインストールします。
Content Moderation SDK をインストールします:
pip install alibabacloud_green20220302==2.2.11OSS SDK をインストールします:
pip install oss2Python SDK を統合します。
同期 API 統合の例
from alibabacloud_green20220302.client import Client from alibabacloud_green20220302 import models from alibabacloud_tea_openapi.models import Config from alibabacloud_tea_util import models as util_models import json import uuid import oss2 import time import os # サービスが VPC にデプロイされているかどうかを指定します。 is_vpc = False # ファイルアップロードトークン:endpoint->token token_dict = dict() # ファイルアップロード用のクライアント。 bucket = None # リクエストクライアントを作成します。 def create_client(access_key_id, access_key_secret, endpoint): config = Config( access_key_id=access_key_id, access_key_secret=access_key_secret, # HTTP プロキシを設定します。 # http_proxy='http://10.10.xx.xx:xxxx', # HTTPS プロキシを設定します。 # https_proxy='https://10.10.xx.xx:xxxx', # 必要に応じてリージョンとエンドポイントを変更します。 endpoint=endpoint ) return Client(config) # ファイルアップロード用のクライアントを作成します。 def create_oss_bucket(is_vpc, upload_token): global token_dict global bucket auth = oss2.StsAuth(upload_token.access_key_id, upload_token.access_key_secret, upload_token.security_token) if (is_vpc): end_point = upload_token.oss_internal_end_point else: end_point = upload_token.oss_internet_end_point # 注:検出パフォーマンスを向上させるため、インスタンス化されたバケットをできるだけ再利用し、接続の繰り返し確立を避けてください。 bucket = oss2.Bucket(auth, end_point, upload_token.bucket_name) def upload_file(file_name, upload_token): create_oss_bucket(is_vpc, upload_token) object_name = upload_token.file_name_prefix + str(uuid.uuid1()) + '.' + file_name.split('.')[-1] bucket.put_object_from_file(object_name, file_name) return object_name def invoke_function(access_key_id, access_key_secret, endpoint): # 注:検出パフォーマンスを向上させるため、インスタンス化されたクライアントをできるだけ再利用し、接続の繰り返し確立を避けてください。 client = create_client(access_key_id, access_key_secret, endpoint) # RuntimeObject インスタンスを作成し、実行時パラメーターを設定します。 runtime = util_models.RuntimeOptions() # ローカルファイルの完全なパス、例:D:\localPath\exampleFile.png。 file_path = 'D:\\localPath\\exampleFile.png' # ファイルアップロードトークンを取得します。 upload_token = token_dict.setdefault(endpoint, None) if (upload_token == None) or int(upload_token.expiration) <= int(time.time()): response = client.describe_upload_token() upload_token = response.body.data token_dict[endpoint] = upload_token # ファイルをアップロードします。 object_name = upload_file(file_path, upload_token) # 検出パラメーターを構築します。 service_parameters = { # 検出対象ファイルが格納されているバケットの名前。 'ossBucketName': upload_token.bucket_name, # 検出対象ファイル。 'ossObjectName': object_name, # データの一意の識別子。 'dataId': str(uuid.uuid1()) } image_moderation_request = models.ImageModerationRequest( # 画像審査サービス:Content Moderation コンソールで画像審査 Pro ルールに設定された serviceCode。例:baselineCheck_global service='baselineCheck_global', service_parameters=json.dumps(service_parameters) ) try: return client.image_moderation_with_options(image_moderation_request, runtime) except Exception as err: print(err) if __name__ == '__main__': # Alibaba Cloud アカウントの AccessKey は、すべての API 操作に対する完全な権限を持っています。API 呼び出しや日常の O&M には RAM ユーザーを使用することを推奨します。 # プロジェクトコードに AccessKey ID と AccessKey Secret を保存しないことを強く推奨します。そうしないと、AccessKey ペアが漏洩し、アカウント内のすべてのリソースのセキュリティを脅かす可能性があります。 # 環境変数を取得する一般的な方法: # RAM ユーザーの AccessKey ID を取得する:os.environ['ALIBABA_CLOUD_ACCESS_KEY_ID'] # RAM ユーザーの AccessKey Secret を取得する:os.environ['ALIBABA_CLOUD_ACCESS_KEY_SECRET'] access_key_id='環境変数から RAM ユーザーの AccessKey ID を取得することを推奨します' access_key_secret='環境変数から RAM ユーザーの AccessKey Secret を取得することを推奨します' # 必要に応じてリージョンとエンドポイントを変更します。 response = invoke_function(access_key_id, access_key_secret, 'green-cip.ap-southeast-1.aliyuncs.com') # 結果を出力します。 if response is not None: if response.status_code == 200: # 呼び出しは成功しました。 # 審査結果を取得します。 result = response.body print('response success. result:{}'.format(result)) if result.code == 200: result_data = result.data print('result: {}'.format(result_data)) else: print('response not success. status:{} ,result:{}'.format(response.status_code, response))
OSS 画像を使用した検出
シナリオ
審査が必要な画像ファイルが Alibaba Cloud Object Storage Service (OSS) に保存されている場合、サービスロールを作成して Content Moderation サービスに OSS リソースへのアクセスを許可できます。画像審査 バージョン 2.0 サービスはこのサービスロールを使用して、OSS からファイルを取得して審査します。クラウドリソースアクセス承認ページで AliyunCIPScanOSSRole サービスロールを作成できます。
Alibaba Cloud アカウント (ルートアカウント) を使用して、クラウドリソースアクセス承認ページに移動して権限を付与します。
次のコマンドを実行して、Python SDK をインストールします。
pip install alibabacloud_green20220302==2.2.11Python SDK を統合します。
同期 API 統合の例
from alibabacloud_green20220302.client import Client from alibabacloud_green20220302 import models from alibabacloud_tea_openapi.models import Config from alibabacloud_tea_util import models as util_models import json import os import uuid # リクエストクライアントを作成します。 def create_client(access_key_id, access_key_secret, endpoint): config = Config( access_key_id=access_key_id, access_key_secret=access_key_secret, # HTTP プロキシを設定します。 # http_proxy='http://10.10.xx.xx:xxxx', # HTTPS プロキシを設定します。 # https_proxy='https://10.10.xx.xx:xxxx', # 必要に応じてリージョンとエンドポイントを変更します。 endpoint=endpoint ) return Client(config) def invoke_function(access_key_id, access_key_secret, endpoint): # 注:検出パフォーマンスを向上させるため、インスタンス化されたクライアントをできるだけ再利用し、接続の繰り返し確立を避けてください。 client = create_client(access_key_id, access_key_secret, endpoint) # RuntimeObject インスタンスを作成し、実行時パラメーターを設定します。 runtime = util_models.RuntimeOptions() # 検出パラメーターを構築します。 service_parameters = { # 検出対象ファイルが格納されているバケットのリージョン。例:ap-southeast-1 'ossRegionId': 'ap-southeast-1', # 検出対象ファイルが格納されているバケットの名前。例:bucket001 'ossBucketName': 'bucket001', # 検出対象ファイル。例:image/001.jpg 'ossObjectName': 'image/001.jpg', # データの一意の識別子。 'dataId': str(uuid.uuid1()) } image_moderation_request = models.ImageModerationRequest( # 画像審査サービス:Content Moderation コンソールで画像審査 Pro ルールに設定された serviceCode。例:baselineCheck_global service='baselineCheck_global', service_parameters=json.dumps(service_parameters) ) try: return client.image_moderation_with_options(image_moderation_request, runtime) except Exception as err: print(err) if __name__ == '__main__': # Alibaba Cloud アカウントの AccessKey は、すべての API 操作に対する完全な権限を持っています。API 呼び出しや日常の O&M には RAM ユーザーを使用することを推奨します。 # プロジェクトコードに AccessKey ID と AccessKey Secret を保存しないことを強く推奨します。そうしないと、AccessKey ペアが漏洩し、アカウント内のすべてのリソースのセキュリティを脅かす可能性があります。 # 環境変数を取得する一般的な方法: # RAM ユーザーの AccessKey ID を取得する:os.environ['ALIBABA_CLOUD_ACCESS_KEY_ID'] # RAM ユーザーの AccessKey Secret を取得する:os.environ['ALIBABA_CLOUD_ACCESS_KEY_SECRET'] access_key_id='環境変数から RAM ユーザーの AccessKey ID を取得することを推奨します' access_key_secret='環境変数から RAM ユーザーの AccessKey Secret を取得することを推奨します' # 必要に応じてリージョンとエンドポイントを変更します。 response = invoke_function(access_key_id, access_key_secret, 'green-cip.ap-southeast-1.aliyuncs.com') # 結果を出力します。 if response is not None: if response.status_code == 200: # 呼び出しは成功しました。 # 審査結果を取得します。 result = response.body print('response success. result:{}'.format(result)) if result.code == 200: result_data = result.data print('result: {}'.format(result_data)) else: print('response not success. status:{} ,result:{}'.format(response.status_code, response))
PHP SDK
注意事項
環境要件:PHP 5.6 以降。
ソースコードリファレンス:詳細については、「PHP SDK ソースコード」をご参照ください。
サポートされている機能:SDK は、以下の 3 種類の画像検出をサポートしています。
これらの API 操作によって返される Label フィールドの値と説明の詳細については、「リスクラベル説明表」をご参照ください。
パブリックにアクセス可能な画像の検出
シナリオ
審査対象の画像がパブリック URL を使用してアクセス可能な場合、画像審査 バージョン 2.0 サービスは URL からファイルを取得して審査できます。
PHP SDK をインストールします。
次のコマンドを実行して、必要な依存関係をインポートします。
composer require alibabacloud/green-20220302 2.2.10PHP SDK を統合します。
同期 API 統合の例
<?php require('vendor/autoload.php'); use AlibabaCloud\SDK\Green\V20220302\Models\ImageModerationResponse; use Darabonba\OpenApi\Models\Config; use AlibabaCloud\Tea\Utils\Utils\RuntimeOptions; use AlibabaCloud\SDK\Green\V20220302\Green; use AlibabaCloud\SDK\Green\V20220302\Models\ImageModerationRequest; /** * リクエストクライアントを作成します。 * @param $accessKeyId * @param $accessKeySecret * @param $endpoint * @return Green */ function create_client($accessKeyId, $accessKeySecret, $endpoint): Green { $config = new Config([ "accessKeyId" => $accessKeyId, "accessKeySecret" => $accessKeySecret, // HTTP プロキシを設定します。 // "httpProxy" => "http://10.10.xx.xx:xxxx", // HTTPS プロキシを設定します。 // "httpsProxy" => "https://10.10.xx.xx:xxxx", "endpoint" => $endpoint, ]); return new Green($config); } /** * 検出タスクを送信します。 * @param $accessKeyId * @param $accessKeySecret * @param $endpoint * @return ImageModerationResponse */ function invoke($accessKeyId, $accessKeySecret, $endpoint): ImageModerationResponse { // 注:検出パフォーマンスを向上させるため、インスタンス化されたクライアントをできるだけ再利用し、接続の繰り返し確立を避けてください。 $client = create_client($accessKeyId, $accessKeySecret, $endpoint); // RuntimeObject インスタンスを作成し、実行時パラメーターを設定します。 $runtime = new RuntimeOptions([]); // 検出パラメーターを構築します。 $request = new ImageModerationRequest(); $serviceParameters = array( // 検出対象の画像。パブリックにアクセス可能な URL です。 'imageUrl' => 'https://img.alicdn.com/tfs/xxxxxxxxxx001.png', // 検出データの一意の識別子。 'dataId' => uniqid()); // 画像審査サービス:Content Moderation コンソールで画像審査 Pro ルールに設定された serviceCode。例:baselineCheck_global $request->service = "baselineCheck_global"; $request->serviceParameters = json_encode($serviceParameters); // 検出のために送信します。 return $client->imageModerationWithOptions($request, $runtime); } /** * Alibaba Cloud アカウントの AccessKey は、すべての API 操作に対する完全な権限を持っています。API 呼び出しや日常の O&M には RAM ユーザーを使用することを推奨します。 * プロジェクトコードに AccessKey ID と AccessKey Secret を保存しないことを強く推奨します。そうしないと、AccessKey ペアが漏洩し、アカウント内のすべてのリソースのセキュリティを脅かす可能性があります。 * 環境変数を取得する一般的な方法: * RAM ユーザーの AccessKey ID を取得する:getenv("ALIBABA_CLOUD_ACCESS_KEY_ID"); * RAM ユーザーの AccessKey Secret を取得する:getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET"); */ $accessKeyId = '環境変数から RAM ユーザーの AccessKey ID を取得することを推奨します'; $accessKeySecret = '環境変数から RAM ユーザーの AccessKey Secret を取得することを推奨します'; // 必要に応じてリージョンとエンドポイントを変更します。 $endpoint = "green-cip.ap-southeast-1.aliyuncs.com"; try { $response = invoke($accessKeyId, $accessKeySecret, $endpoint); print_r(json_encode($response->body, JSON_UNESCAPED_UNICODE)); } catch (Exception $e) { var_dump($e->getMessage()); var_dump($e->getErrorInfo()); var_dump($e->getLastException()); var_dump($e->getLastRequest()); }
ローカル画像の検出
シナリオ
ローカルマシン上にあり、パブリックにアクセス可能な URL を持たない画像を審査するには、Content Moderation が提供する Object Storage Service (OSS) バケットにアップロードします。その後、画像審査 バージョン 2.0 サービスは OSS に直接アクセスして画像コンテンツを取得し、審査できます。
PHP SDK をインストールします。
Content Moderation SDK をインストールします:
composer require alibabacloud/green-20220302 2.2.10OSS SDK をインストールします:
composer require aliyuncs/oss-sdk-phpPHP SDK を統合します。
同期 API 統合の例
<?php require('vendor/autoload.php'); use AlibabaCloud\SDK\Green\V20220302\Models\ImageModerationResponse; use AlibabaCloud\Tea\Utils\Utils; use Darabonba\OpenApi\Models\Config; use AlibabaCloud\Tea\Utils\Utils\RuntimeOptions; use AlibabaCloud\SDK\Green\V20220302\Green; use AlibabaCloud\SDK\Green\V20220302\Models\ImageModerationRequest; use OSS\OssClient; // サービスが VPC にデプロイされているかどうかを指定します。 $isVPC = false; // ファイルアップロードトークン。 $tokenArray = array(); // ファイルアップロードリクエスト用のクライアント。 $ossClient = null; /** * リクエストクライアントを作成します。 * @param $accessKeyId * @param $accessKeySecret * @param $endpoint * @return Green */ function create_client($accessKeyId, $accessKeySecret, $endpoint): Green { $config = new Config([ "accessKeyId" => $accessKeyId, "accessKeySecret" => $accessKeySecret, // HTTP プロキシを設定します。 // "httpProxy" => "http://10.10.xx.xx:xxxx", // HTTPS プロキシを設定します。 // "httpsProxy" => "https://10.10.xx.xx:xxxx", "endpoint" => $endpoint, ]); return new Green($config); } /** * ファイルアップロード用のクライアントを作成します。 * @param $tokenData * @return void */ function create_upload_client($tokenData): void { global $isVPC; global $ossClient; // 注:検出パフォーマンスを向上させるため、インスタンス化されたクライアントをできるだけ再利用し、接続の繰り返し確立を避けてください。 if ($isVPC) { $ossClient = new OssClient($tokenData->accessKeyId, $tokenData->accessKeySecret, $tokenData->ossInternalEndPoint, false, $tokenData->securityToken); } else { $ossClient = new OssClient($tokenData->accessKeyId, $tokenData->accessKeySecret, $tokenData->ossInternetEndPoint, false, $tokenData->securityToken); } } /** * ファイルをアップロードします。 * @param $fileName * @param $tokenData * @return string * @throws \OSS\Core\OssException */ function upload_file($filePath, $tokenData): string { global $ossClient; // OssClient を初期化します。 create_upload_client($tokenData); $split = explode(".", $filePath); if (count($split) > 1) { $objectName = $tokenData->fileNamePrefix . uniqid() . "." . explode(".", $filePath)[count($split) - 1]; } else { $objectName = $tokenData->fileNamePrefix . uniqid(); } // ファイルをアップロードします。 $ossClient->uploadFile($tokenData->bucketName, $objectName, $filePath); return $objectName; } /** * 検出タスクを送信します。 * @param $accessKeyId * @param $accessKeySecret * @param $endpoint * @return ImageModerationResponse * @throws \OSS\Core\OssException */ function invoke($accessKeyId, $accessKeySecret, $endpoint): ImageModerationResponse { global $tokenArray; // 注:検出パフォーマンスを向上させるため、インスタンス化されたクライアントをできるだけ再利用し、接続の繰り返し確立を避けてください。 $client = create_client($accessKeyId, $accessKeySecret, $endpoint); // RuntimeObject インスタンスを作成し、実行時パラメーターを設定します。 $runtime = new RuntimeOptions([]); // ローカルファイルの完全なパス、例:D:\\localPath\\exampleFile.png。 $filePath = "D:\\localPath\\exampleFile.png"; // ファイルアップロードトークンを取得します。 if (!isset($tokenArray[$endpoint]) || $tokenArray[$endpoint]->expiration <= time()) { $token = $client->describeUploadToken(); $tokenArray[$endpoint] = $token->body->data; } // ファイルをアップロードします。 $objectName = upload_file($filePath, $tokenArray[$endpoint]); // 検出パラメーターを構築します。 $request = new ImageModerationRequest(); // 画像審査サービス:Content Moderation コンソールで画像審査 Pro ルールに設定された serviceCode。例: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 操作に対する完全な権限を持っています。API 呼び出しや日常の O&M には RAM ユーザーを使用することを推奨します。 * プロジェクトコードに AccessKey ID と AccessKey Secret を保存しないことを強く推奨します。そうしないと、AccessKey ペアが漏洩し、アカウント内のすべてのリソースのセキュリティを脅かす可能性があります。 * 環境変数を取得する一般的な方法: * RAM ユーザーの AccessKey ID を取得する:getenv("ALIBABA_CLOUD_ACCESS_KEY_ID"); * RAM ユーザーの AccessKey Secret を取得する:getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET"); */ $accessKeyId = '環境変数から RAM ユーザーの AccessKey ID を取得することを推奨します'; $accessKeySecret = '環境変数から RAM ユーザーの AccessKey Secret を取得することを推奨します'; // 必要に応じてリージョンとエンドポイントを変更します。 $endpoint = "green-cip.ap-southeast-1.aliyuncs.com"; try { $response = invoke($accessKeyId, $accessKeySecret, $endpoint); print_r(json_encode($response->body, JSON_UNESCAPED_UNICODE)); } catch (Exception $e) { var_dump($e->getMessage()); var_dump($e->getErrorInfo()); var_dump($e->getLastException()); var_dump($e->getLastRequest()); }
OSS 画像の検出
シナリオ
審査したい画像ファイルが Object Storage Service (OSS) に保存されている場合、サービスロールを作成して Content Moderation サービスに OSS リソースへのアクセス権を付与できます。画像審査バージョン 2.0 サービスはこのサービスロールを使用して、OSS からファイルを取得して審査します。クラウドリソースアクセス承認ページで AliyunCIPScanOSSRole サービスロールを作成できます。
Alibaba Cloud アカウント (ルートアカウント) を使用して、クラウドリソースアクセス承認ページに移動して権限を付与します。
PHP SDK をインストールします。
composer require alibabacloud/green-20220302 2.2.10PHP SDK を統合します。
同期 API 統合の例
<?php require('vendor/autoload.php'); use AlibabaCloud\SDK\Green\V20220302\Models\ImageModerationResponse; use Darabonba\OpenApi\Models\Config; use AlibabaCloud\Tea\Utils\Utils\RuntimeOptions; use AlibabaCloud\SDK\Green\V20220302\Green; use AlibabaCloud\SDK\Green\V20220302\Models\ImageModerationRequest; use AlibabaCloud\Tea\Utils\Utils; /** * リクエストクライアントを作成します。 * @param $accessKeyId * @param $accessKeySecret * @param $endpoint * @return Green */ function create_client($accessKeyId, $accessKeySecret, $endpoint): Green { $config = new Config([ "accessKeyId" => $accessKeyId, "accessKeySecret" => $accessKeySecret, // HTTP プロキシを設定します。 // "httpProxy" => "http://10.10.xx.xx:xxxx", // HTTPS プロキシを設定します。 // "httpsProxy" => "https://10.10.xx.xx:xxxx", "endpoint" => $endpoint, ]); return new Green($config); } /** * 検出タスクを送信します。 * @param $accessKeyId * @param $accessKeySecret * @param $endpoint * @return ImageModerationResponse */ function invoke($accessKeyId, $accessKeySecret, $endpoint): ImageModerationResponse { // 注:検出パフォーマンスを向上させるため、インスタンス化されたクライアントをできるだけ再利用し、接続の繰り返し確立を避けてください。 $client = create_client($accessKeyId, $accessKeySecret, $endpoint); // RuntimeObject インスタンスを作成し、実行時パラメーターを設定します。 $runtime = new RuntimeOptions([]); // 検出パラメーターを構築します。 $request = new ImageModerationRequest(); $serviceParameters = array( // 検出対象ファイル。例:image/001.jpg 'ossObjectName' => 'image/001.jpg', // 検出対象ファイルが格納されているバケットのリージョン。例:ap-southeast-1 'ossRegionId' => 'ap-southeast-1', // 検出対象ファイルが格納されているバケットの名前。例:bucket001 'ossBucketName' => 'bucket001', // 検出対象データの一意の識別子。 'dataId' => uniqid()); // 画像審査サービス:Content Moderation コンソールで画像審査 Pro ルールに設定された serviceCode。例:baselineCheck_global $request->service = "baselineCheck_global"; $request->serviceParameters = json_encode($serviceParameters); // 検出のために送信します。 return $client->imageModerationWithOptions($request, $runtime); } /** * Alibaba Cloud アカウントの AccessKey は、すべての API 操作に対する完全な権限を持っています。API 呼び出しや日常の O&M には RAM ユーザーを使用することを推奨します。 * プロジェクトコードに AccessKey ID と AccessKey Secret を保存しないことを強く推奨します。そうしないと、AccessKey ペアが漏洩し、アカウント内のすべてのリソースのセキュリティを脅かす可能性があります。 * 環境変数を取得する一般的な方法: * RAM ユーザーの AccessKey ID を取得する:getenv("ALIBABA_CLOUD_ACCESS_KEY_ID"); * RAM ユーザーの AccessKey Secret を取得する:getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET"); */ $accessKeyId = '環境変数から RAM ユーザーの AccessKey ID を取得することを推奨します'; $accessKeySecret = '環境変数から RAM ユーザーの AccessKey Secret を取得することを推奨します'; // 必要に応じてリージョンとエンドポイントを変更します。 $endpoint = "green-cip.ap-southeast-1.aliyuncs.com"; try { $response = invoke($accessKeyId, $accessKeySecret, $endpoint); print_r(json_encode($response->body, JSON_UNESCAPED_UNICODE)); } catch (Exception $e) { var_dump($e->getMessage()); var_dump($e->getErrorInfo()); var_dump($e->getLastException()); var_dump($e->getLastRequest()); }
Go SDK
注意事項
ソースコードリファレンス:詳細については、「Go SDK ソースコード」をご参照ください。
サポートされている機能:SDK は、以下の 3 種類の画像検出をサポートしています。
これらの API 操作によって返される Label フィールドの値と説明の詳細については、「リスクラベル説明表」をご参照ください。
パブリックにアクセス可能な画像の検出
シナリオ
審査対象の画像がパブリック URL を使用してアクセス可能な場合、画像審査 バージョン 2.0 サービスは URL から画像ファイルを取得して審査できます。
Go SDK をインストールします。
go git clone --branch v2.2.11 github.com/alibabacloud-go/green-20220302/v2Go SDK を統合します。
同期 API 統合の例
package main import ( "encoding/json" "fmt" openapi "github.com/alibabacloud-go/darabonba-openapi/v2/client" green20220302 "github.com/alibabacloud-go/green-20220302/v3/client" util "github.com/alibabacloud-go/tea-utils/v2/service" "github.com/alibabacloud-go/tea/tea" "github.com/google/uuid" "net/http" "os" ) // リクエストクライアントを作成します。 func createClient(accessKeyId *string, accessKeySecret *string, endpoint *string) (*green20220302.Client, error) { config := &openapi.Config{ AccessKeyId: accessKeyId, AccessKeySecret: accessKeySecret, // HTTP プロキシを設定します。 // HttpProxy: tea.String("http://10.10.xx.xx:xxxx"), // HTTPS プロキシを設定します。 // HttpsProxy: tea.String("https://username:password@xxx.xxx.xxx.xxx:9999"), Endpoint: endpoint, } // 注:検出パフォーマンスを向上させるため、インスタンス化されたクライアントをできるだけ再利用し、接続の繰り返し確立を避けてください。 return green20220302.NewClient(config); } func invoke(accessKeyId *string, accessKeySecret *string, endpoint *string) (_result *green20220302.ImageModerationResponse, _err error) { // 注:検出パフォーマンスを向上させるため、インスタンス化されたクライアントをできるだけ再利用し、接続の繰り返し確立を避けてください。 client, _err := createClient(accessKeyId, accessKeySecret, endpoint) if _err != nil { return nil,_err } // 実行時パラメーターを設定します。これは、この実行時パラメーターインスタンスを使用するリクエストに対してのみ有効です。 runtime := &util.RuntimeOptions{} // 画像検出リクエストを構築します。 serviceParameters, _ := json.Marshal( map[string]interface{}{ // 検出対象の画像の URL。パブリックにアクセス可能である必要があります。 "imageUrl": "https://img.alicdn.com/tfs/xxxxxxxxxx001.png", // 検出対象のデータの ID。 "dataId":uuid.New(), }, ) imageModerationRequest := &green20220302.ImageModerationRequest{ // 画像審査サービス:Content Moderation コンソールで画像審査 Pro ルールに設定された serviceCode。例:baselineCheck_global Service: tea.String("baselineCheck_global"), ServiceParameters: tea.String(string(serviceParameters)), } return client.ImageModerationWithOptions(imageModerationRequest, runtime) } func main() { /** * Alibaba Cloud アカウントの AccessKey は、すべての API 操作に対する完全な権限を持っています。API 呼び出しや日常の O&M には RAM ユーザーを使用することを推奨します。 * プロジェクトコードに AccessKey ID と AccessKey Secret を保存しないことを強く推奨します。そうしないと、AccessKey ペアが漏洩し、アカウント内のすべてのリソースのセキュリティを脅かす可能性があります。 * 環境変数を取得する一般的な方法: * RAM ユーザーの AccessKey ID を取得する:os.Getenv("ALIBABA_CLOUD_ACCESS_KEY_ID") * RAM ユーザーの AccessKey Secret を取得する:os.Getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET") */ var accessKeyId= tea.String("環境変数から RAM ユーザーの AccessKey ID を取得することを推奨します"); var accessKeySecret= tea.String("環境変数から RAM ユーザーの AccessKey Secret を取得することを推奨します"); // 必要に応じてリージョンとエンドポイントを変更します。 var endpoint = tea.String("green-cip.ap-southeast-1.aliyuncs.com"); response,_err := invoke(accessKeyId,accessKeySecret,endpoint) if response != nil { statusCode := tea.IntValue(tea.ToInt(response.StatusCode)) body := response.Body imageModerationResponseData := body.Data fmt.Println("requestId:" + tea.StringValue(body.RequestId)) if statusCode == http.StatusOK { fmt.Println("response success. response:" + body.String()) if tea.IntValue(tea.ToInt(body.Code)) == 200 { result := imageModerationResponseData.Result fmt.Println("response dataId:" + tea.StringValue(imageModerationResponseData.DataId)) for i := 0; i < len(result); i++ { fmt.Println("response label:" + tea.StringValue(result[i].Label)) fmt.Println("response confidence:" + tea.ToString(tea.Float32Value(result[i].Confidence))) } } else { fmt.Println("image moderation not success. status" + tea.ToString(body.Code)) } } else { fmt.Print("response not success. status:" + tea.ToString(statusCode)) fmt.Println("Error:", _err) } } }
ローカル画像の検出
シナリオ
ローカルマシンに保存されており、パブリック URL を持たない画像を審査するには、Content Moderation が提供する Object Storage Service (OSS) バケットに画像をアップロードします。その後、画像審査 バージョン 2.0 サービスは OSS に直接アクセスして画像コンテンツを取得し、審査できます。
Go SDK をインストールします。
Content Moderation SDK をインストールします:
go git clone --branch v2.2.11 github.com/alibabacloud-go/green-20220302/v2OSS SDK をインストールします:
go get github.com/aliyun/aliyun-oss-go-sdk/ossGo SDK を統合します。
同期 API 統合の例
package main import ( "encoding/json" "fmt" openapi "github.com/alibabacloud-go/darabonba-openapi/v2/client" green20220302 "github.com/alibabacloud-go/green-20220302/v3/client" util "github.com/alibabacloud-go/tea-utils/v2/service" "github.com/alibabacloud-go/tea/tea" "github.com/aliyun/aliyun-oss-go-sdk/oss" "github.com/google/uuid" "net/http" "os" "strings" "time" ) // ファイルアップロードトークン。 var TokenMap =make(map[string]*green20220302.DescribeUploadTokenResponseBodyData) // ファイルアップロード用のクライアント。 var Bucket *oss.Bucket // サービスが VPC にデプロイされているかどうかを指定します。 var isVPC = false // リクエストクライアントを作成します。 func createClient(accessKeyId string, accessKeySecret string, endpoint string) (*green20220302.Client, error) { config := &openapi.Config{ AccessKeyId: tea.String(accessKeyId), AccessKeySecret: tea.String(accessKeySecret), // HTTP プロキシを設定します。 // HttpProxy: tea.String("http://10.10.xx.xx:xxxx"), // HTTPS プロキシを設定します。 // HttpsProxy: tea.String("https://username:password@xxx.xxx.xxx.xxx:9999"), Endpoint: tea.String(endpoint), } // 注:検出パフォーマンスを向上させるため、インスタンス化されたクライアントをできるだけ再利用し、接続の繰り返し確立を避けてください。 return green20220302.NewClient(config); } // ファイルアップロード用のクライアントを作成します。 func createOssClient(tokenData *green20220302.DescribeUploadTokenResponseBodyData) { if isVPC{ ossClient, err := oss.New(tea.StringValue(tokenData.OssInternalEndPoint), tea.StringValue(tokenData.AccessKeyId), tea.StringValue(tokenData.AccessKeySecret), oss.SecurityToken(tea.StringValue(tokenData.SecurityToken))) if err != nil { fmt.Println("Error:", err) os.Exit(-1) } Bucket, _ =ossClient.Bucket(tea.StringValue(tokenData.BucketName)); }else { ossClient, err := oss.New(tea.StringValue(tokenData.OssInternetEndPoint), tea.StringValue(tokenData.AccessKeyId), tea.StringValue(tokenData.AccessKeySecret), oss.SecurityToken(tea.StringValue(tokenData.SecurityToken))) if err != nil { fmt.Println("Error:", err) os.Exit(-1) } Bucket, _ =ossClient.Bucket(tea.StringValue(tokenData.BucketName)); } } // ファイルをアップロードします。 func uploadFile(filePath string,tokenData *green20220302.DescribeUploadTokenResponseBodyData) (string,error) { createOssClient(tokenData) objectName := tea.StringValue(tokenData.FileNamePrefix) + uuid.New().String() + "." + strings.Split(filePath, ".")[1] // ファイルをアップロードします。 _err := Bucket.PutObjectFromFile(objectName, filePath) if _err != nil { fmt.Println("Error:", _err) os.Exit(-1) } return objectName,_err } func invoke(accessKeyId string, accessKeySecret string, endpoint string) (_result *green20220302.ImageModerationResponse, _err error) { // 注:検出パフォーマンスを向上させるため、インスタンス化されたクライアントをできるだけ再利用し、接続の繰り返し確立を避けてください。 client, _err := createClient(accessKeyId, accessKeySecret, endpoint) if _err != nil { return nil,_err } // 実行時パラメーターを設定します。これは、この実行時パラメーターインスタンスを使用するリクエストに対してのみ有効です。 runtime := &util.RuntimeOptions{} // ローカルファイルの完全なパス、例:D:\localPath\exampleFile.png。 var filePath = "D:\\localPath\\exampleFile.png" // ファイルアップロード用の一時トークンを取得します。 tokenData,ok:=TokenMap[endpoint]; if !ok || tea.Int32Value(tokenData.Expiration) <= int32(time.Now().Unix()) { // ファイルアップロード用の一時トークンを取得します。 uploadTokenResponse, _err := client.DescribeUploadToken() if _err != nil { return nil,_err } tokenData = uploadTokenResponse.Body.Data TokenMap[endpoint] = tokenData } var objectName, _ = uploadFile(filePath,TokenMap[endpoint]) // 画像検出リクエストを構築します。 serviceParameters, _ := json.Marshal( map[string]interface{}{ "ossBucketName": tea.StringValue(TokenMap[endpoint].BucketName), "ossObjectName": objectName, "dataId": uuid.New().String(), }, ) imageModerationRequest := &green20220302.ImageModerationRequest{ // 画像審査サービス:Content Moderation コンソールで画像審査 Pro ルールに設定された serviceCode。例:baselineCheck_global Service: tea.String("baselineCheck_global"), ServiceParameters: tea.String(string(serviceParameters)), } return client.ImageModerationWithOptions(imageModerationRequest, runtime) } func main() { /** * Alibaba Cloud アカウントの AccessKey は、すべての API 操作に対する完全な権限を持っています。API 呼び出しや日常の O&M には RAM ユーザーを使用することを推奨します。 * プロジェクトコードに AccessKey ID と AccessKey Secret を保存しないことを強く推奨します。そうしないと、AccessKey ペアが漏洩し、アカウント内のすべてのリソースのセキュリティを脅かす可能性があります。 * 環境変数を取得する一般的な方法: * RAM ユーザーの AccessKey ID を取得する:os.Getenv("ALIBABA_CLOUD_ACCESS_KEY_ID") * RAM ユーザーの AccessKey Secret を取得する:os.Getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET") */ var accessKeyId= "環境変数から RAM ユーザーの AccessKey ID を取得することを推奨します"; var accessKeySecret= "環境変数から RAM ユーザーの AccessKey Secret を取得することを推奨します"; // 必要に応じてリージョンとエンドポイントを変更します。 var endpoint = "green-cip.ap-southeast-1.aliyuncs.com"; response,_err := invoke(accessKeyId,accessKeySecret,endpoint) if response != nil { statusCode := tea.IntValue(tea.ToInt(response.StatusCode)) body := response.Body imageModerationResponseData := body.Data fmt.Println("requestId:" + tea.StringValue(body.RequestId)) if statusCode == http.StatusOK { fmt.Println("response success. response:" + body.String()) if tea.IntValue(tea.ToInt(body.Code)) == 200 { result := imageModerationResponseData.Result fmt.Println("response dataId:" + tea.StringValue(imageModerationResponseData.DataId)) for i := 0; i < len(result); i++ { fmt.Println("response label:" + tea.StringValue(result[i].Label)) fmt.Println("response confidence:" + tea.ToString(tea.Float32Value(result[i].Confidence))) } } else { fmt.Println("image moderation not success. status" + tea.ToString(body.Code)) } } else { fmt.Print("response not success. status:" + tea.ToString(statusCode)) fmt.Println("Error:", _err) } } }
OSS 画像の検出
シナリオ
審査が必要な画像ファイルが Alibaba Cloud Object Storage Service (OSS) に保存されている場合、サービスロールを作成して Content Moderation サービスに OSS リソースへのアクセスを許可できます。画像審査 V2.0 サービスはこのサービスロールを使用して、OSS からファイルを取得して審査します。クラウドリソースアクセス承認ページで AliyunCIPScanOSSRole サービスロールを作成できます。
Alibaba Cloud アカウント (ルートアカウント) を使用して、クラウドリソースアクセス承認ページに移動して権限を付与します。
次のコマンドを実行して、Go SDK をインストールします。
go git clone --branch v2.2.11 github.com/alibabacloud-go/green-20220302/v2Go SDK を統合します。
同期 API 統合の例
package main import ( "encoding/json" "fmt" openapi "github.com/alibabacloud-go/darabonba-openapi/v2/client" green20220302 "github.com/alibabacloud-go/green-20220302/v3/client" util "github.com/alibabacloud-go/tea-utils/v2/service" "github.com/alibabacloud-go/tea/tea" "github.com/google/uuid" "net/http" "os" ) // リクエストクライアントを作成します。 func createClient(accessKeyId *string, accessKeySecret *string, endpoint *string) (*green20220302.Client, error) { config := &openapi.Config{ AccessKeyId: accessKeyId, AccessKeySecret: accessKeySecret, // HTTP プロキシを設定します。 // HttpProxy: tea.String("http://10.10.xx.xx:xxxx"), // HTTPS プロキシを設定します。 // HttpsProxy: tea.String("https://username:password@xxx.xxx.xxx.xxx:9999"), Endpoint: endpoint, } // 注:検出パフォーマンスを向上させるため、インスタンス化されたクライアントをできるだけ再利用し、接続の繰り返し確立を避けてください。 return green20220302.NewClient(config); } func invoke(accessKeyId *string, accessKeySecret *string, endpoint *string) (_result *green20220302.ImageModerationResponse, _err error) { // 注:検出パフォーマンスを向上させるため、インスタンス化されたクライアントをできるだけ再利用し、接続の繰り返し確立を避けてください。 client, _err := createClient(accessKeyId, accessKeySecret, endpoint) if _err != nil { return nil,_err } // 実行時パラメーターを設定します。これは、この実行時パラメーターインスタンスを使用するリクエストに対してのみ有効です。 runtime := &util.RuntimeOptions{} // 画像検出リクエストを構築します。 serviceParameters, _ := json.Marshal( map[string]interface{}{ // 検出対象画像のバケットが所在するリージョン。例:ap-southeast-1 "ossRegionId": "ap-southeast-1", // 検出対象画像のバケット名。例:bucket001 "ossBucketName":"bucket001", // 検出対象画像のオブジェクト名。例:image/001.jpg "ossObjectName":"image//001.jpg", // 検出対象データの ID。 "dataId": uuid.New().String(), }, ) imageModerationRequest := &green20220302.ImageModerationRequest{ // 画像審査サービス、Content Moderation コンソールで画像審査 Pro ルールに設定された serviceCode。例:baselineCheck_global Service: tea.String("baselineCheck_global"), ServiceParameters: tea.String(string(serviceParameters)), } return client.ImageModerationWithOptions(imageModerationRequest, runtime) } func main() { /** * Alibaba Cloud アカウントの AccessKey は、すべての API 操作に対する完全な権限を持っています。API 呼び出しや日常の O&M には RAM ユーザーを使用することを推奨します。 * プロジェクトコードに AccessKey ID と AccessKey Secret を保存しないことを強く推奨します。そうしないと、AccessKey ペアが漏洩し、アカウント内のすべてのリソースのセキュリティを脅かす可能性があります。 * 環境変数を取得する一般的な方法: * RAM ユーザーの AccessKey ID を取得する:os.Getenv("ALIBABA_CLOUD_ACCESS_KEY_ID") * RAM ユーザーの AccessKey Secret を取得する:os.Getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET") */ // 必要に応じてリージョンとエンドポイントを変更します。 var endpoint = tea.String("green-cip.ap-southeast-1.aliyuncs.com"); response,_err := invoke(accessKeyId,accessKeySecret,endpoint) if response != nil { statusCode := tea.IntValue(tea.ToInt(response.StatusCode)) body := response.Body imageModerationResponseData := body.Data fmt.Println("requestId:" + tea.StringValue(body.RequestId)) if statusCode == http.StatusOK { fmt.Println("response success. response:" + body.String()) if tea.IntValue(tea.ToInt(body.Code)) == 200 { result := imageModerationResponseData.Result fmt.Println("response dataId:" + tea.StringValue(imageModerationResponseData.DataId)) for i := 0; i < len(result); i++ { fmt.Println("response label:" + tea.StringValue(result[i].Label)) fmt.Println("response confidence:" + tea.ToString(tea.Float32Value(result[i].Confidence))) } } else { fmt.Println("image moderation not success. status" + tea.ToString(body.Code)) } } else { fmt.Print("response not success. status:" + tea.ToString(statusCode)) fmt.Println("Error:", _err) } } }
Node.js SDK
注意事項
ソースコードリファレンス:詳細については、「Node.js SDK ソースコード」をご参照ください。
サポートされている機能:SDK は、以下の 3 種類の画像検出をサポートしています。
これらの API 操作によって返される Label フィールドの値と説明の詳細については、「リスクラベル説明表」をご参照ください。
パブリックにアクセス可能な画像の検出
シナリオ
審査が必要な画像がパブリック URL を使用してアクセス可能な場合、画像審査 V2.0 サービスは画像 URL からファイルを取得して審査できます。
Node.js SDK をインストールします。
次のコマンドを実行して、関連する依存関係をインポートします。
npm install @alicloud/green20220302@2.2.10Node.js SDK を統合します。
同期 API 統合の例
const RPCClient = require("@alicloud/pop-core"); const { v4: uuidv4 } = require('uuid'); async function main() { // 注:検出パフォーマンスを向上させるため、インスタンス化されたクライアントをできるだけ再利用し、接続の繰り返し確立を避けてください。 var client = new RPCClient({ /** * Alibaba Cloud アカウントの AccessKey は、すべての API 操作に対する完全な権限を持っています。API 呼び出しや日常の O&M には RAM ユーザーを使用することを推奨します。 * プロジェクトコードに AccessKey ID と AccessKey Secret を保存しないことを強く推奨します。そうしないと、AccessKey ペアが漏洩し、アカウント内のすべてのリソースのセキュリティを脅かす可能性があります。 * 環境変数を取得する一般的な方法: * RAM ユーザーの AccessKey ID を取得する:process.env['ALIBABA_CLOUD_ACCESS_KEY_ID'] * RAM ユーザーの AccessKey Secret を取得する:process.env['ALIBABA_CLOUD_ACCESS_KEY_SECRET'] */ accessKeyId: '環境変数から RAM ユーザーの AccessKey ID を取得することを推奨します', accessKeySecret: '環境変数から RAM ユーザーの AccessKey Secret を取得することを推奨します', // 必要に応じてリージョンとエンドポイントを変更します。 endpoint: "https://green-cip.ap-southeast-1.aliyuncs.com", apiVersion: '2022-03-02', // HTTP プロキシを設定します。 // httpProxy: "http://xx.xx.xx.xx:xxxx", // HTTPS プロキシを設定します。 // httpsProxy: "https://username:password@xxx.xxx.xxx.xxx:9999", }); // API リクエストを作成し、パラメーターを設定します。 var params = { // 画像審査サービス:Content Moderation コンソールで画像審査 Pro ルールに設定された serviceCode。例:baselineCheck_global "Service": "baselineCheck_global", "ServiceParameters": JSON.stringify({ // データの一意の識別子。 "dataId": uuidv4(), // 検出対象の画像の URL。パブリックにアクセス可能である必要があります。 "imageUrl": "https://img.alicdn.com/tfs/xxxxxxxxxx001.png" }) } var requestOption = { method: 'POST', formatParams: false, }; try { // API 操作を呼び出して検出結果を取得します。 var response = await client.request('ImageModeration', params, requestOption) } catch (err) { console.log(err); } return response; } main().then(function (response) { console.log(JSON.stringify(response)) });
ローカル画像の検出
シナリオ
ローカルマシン上にあり、パブリックにアクセス可能な URL を持たない画像を審査するには、Content Moderation が提供する Object Storage Service (OSS) バケットにアップロードします。その後、画像審査 バージョン 2.0 サービスは OSS に直接アクセスして画像コンテンツを取得し、審査できます。
Node.js SDK をインストールします。
Content Moderation SDK をインストールします:
npm install @alicloud/green20220302@2.2.10OSS 依存関係をインストールします:
npm install ali-oss --saveNode.js SDK を統合します。
同期 API 統合の例
const RPCClient = require("@alicloud/pop-core"); const OSS = require('ali-oss'); const { v4: uuidv4 } = require('uuid'); const path = require("path"); // サービスが VPC にデプロイされているかどうかを指定します。 var isVPC = false; // ファイルアップロードトークン。 var tokenDic = new Array(); // ファイルアップロード用のクライアント。 var ossClient; // ファイルアップロード用のクライアントを作成します。 function createClient(accessKeyId, accessKeySecret, endpoint) { return new RPCClient({ accessKeyId: accessKeyId, accessKeySecret: accessKeySecret, endpoint: endpoint, apiVersion: '2022-03-02', // HTTP プロキシを設定します。 // httpProxy: "http://xx.xx.xx.xx:xxxx", // HTTPS プロキシを設定します。 // httpsProxy: "https://username:password@xxx.xxx.xxx.xxx:9999", }); } // ファイルアップロード用のクライアントを作成します。 function getOssClient(tokenData, isVPC) { if (isVPC) { ossClient = new OSS({ accessKeyId: tokenData['AccessKeyId'], accessKeySecret: tokenData['AccessKeySecret'], stsToken: tokenData['SecurityToken'], endpoint: tokenData['OssInternalEndPoint'], bucket: tokenData['BucketName'], }); } else { ossClient = new OSS({ accessKeyId: tokenData['AccessKeyId'], accessKeySecret: tokenData['AccessKeySecret'], stsToken: tokenData['SecurityToken'], endpoint: tokenData['OssInternetEndPoint'], bucket: tokenData['BucketName'], }); } } async function invoke(accessKeyId, accessKeySecret, endpoint) { // 注:検出パフォーマンスを向上させるため、インスタンス化されたクライアントをできるだけ再利用し、接続の繰り返し確立を避けてください。 var client = createClient(accessKeyId, accessKeySecret, endpoint); var requestOption = { method: 'POST', formatParams: false, }; // ローカルファイルの完全なパス、例:D:\\localPath\\exampleFile.png。 var filePath = 'D:\\localPath\\exampleFile.png'; // ファイルアップロードトークンを取得します。 if (tokenDic[endpoint] == null || tokenDic[endpoint]['Expiration'] <= Date.parse(new Date() / 1000)) { var tokenResponse = await client.request('DescribeUploadToken', '', requestOption) tokenDic[endpoint] = tokenResponse.Data; } // ファイルアップロード用のクライアントを取得します。 getOssClient(tokenDic[endpoint], isVPC) var split = filePath.split("."); var objectName; if (split.length > 1) { objectName = tokenDic[endpoint].FileNamePrefix + uuidv4() + "." + split[split.length - 1]; } else { objectName = tokenDic[endpoint].FileNamePrefix + uuidv4(); } // ファイルをアップロードします。 const result = await ossClient.put(objectName, path.normalize(filePath)); // 検出 API リクエストを作成し、パラメーターを設定します。 var params = { // 画像審査サービス:Content Moderation コンソールで画像審査 Pro ルールに設定された serviceCode。例:baselineCheck_global "Service": "baselineCheck_global", // アップロードされたローカル画像の情報。 "ServiceParameters": JSON.stringify({ "ossBucketName": tokenDic[endpoint].BucketName, "ossObjectName": objectName }) } // API 操作を呼び出して検出結果を取得します。 return await client.request('ImageModeration', params, requestOption); } function main() { /** * Alibaba Cloud アカウントの AccessKey は、すべての API 操作に対する完全な権限を持っています。API 呼び出しや日常の O&M には RAM ユーザーを使用することを推奨します。 * プロジェクトコードに AccessKey ID と AccessKey Secret を保存しないことを強く推奨します。そうしないと、AccessKey ペアが漏洩し、アカウント内のすべてのリソースのセキュリティを脅かす可能性があります。 * 環境変数を取得する一般的な方法: * RAM ユーザーの AccessKey ID を取得する:process.env['ALIBABA_CLOUD_ACCESS_KEY_ID'] * RAM ユーザーの AccessKey Secret を取得する:process.env['ALIBABA_CLOUD_ACCESS_KEY_SECRET'] */ const accessKeyId: '環境変数から RAM ユーザーの AccessKey ID を取得することを推奨します' const accessKeySecret: '環境変数から RAM ユーザーの AccessKey Secret を取得することを推奨します' // 必要に応じてリージョンとエンドポイントを変更します。 var endpoint = "https://green-cip.ap-southeast-1.aliyuncs.com" try { // API 操作を呼び出して検出結果を取得します。 invoke(accessKeyId, accessKeySecret, endpoint).then(function (response) { console.log(JSON.stringify(response)) }) } catch (err) { console.log(err); } } main();
OSS 画像の検出
シナリオ
審査したい画像ファイルが Object Storage Service (OSS) に保存されている場合、サービスロールを作成して Content Moderation サービスに OSS リソースへのアクセス権を付与できます。画像審査 バージョン 2.0 サービスはこのサービスロールを使用して、OSS からファイルを取得して審査します。クラウドリソースアクセス承認ページで AliyunCIPScanOSSRole サービスロールを作成できます。
Alibaba Cloud アカウント (ルートアカウント) を使用して、クラウドリソースアクセス承認ページに移動して権限を付与します。
Node.js SDK をインストールします。
npm install @alicloud/green20220302@2.2.10Node.js SDK を統合します。
同期 API 統合の例
const RPCClient = require("@alicloud/pop-core"); const { v4: uuidv4 } = require('uuid'); async function main() { // 注:検出パフォーマンスを向上させるため、インスタンス化されたクライアントをできるだけ再利用し、接続の繰り返し確立を避けてください。 var client = new RPCClient({ /** * Alibaba Cloud アカウントの AccessKey は、すべての API 操作に対する完全な権限を持っています。API 呼び出しや日常の O&M には RAM ユーザーを使用することを推奨します。 * プロジェクトコードに AccessKey ID と AccessKey Secret を保存しないことを強く推奨します。そうしないと、AccessKey ペアが漏洩し、アカウント内のすべてのリソースのセキュリティを脅かす可能性があります。 * 環境変数を取得する一般的な方法: * RAM ユーザーの AccessKey ID を取得する:process.env['ALIBABA_CLOUD_ACCESS_KEY_ID'] * RAM ユーザーの AccessKey Secret を取得する:process.env['ALIBABA_CLOUD_ACCESS_KEY_SECRET'] */ accessKeyId: '環境変数から RAM ユーザーの AccessKey ID を取得することを推奨します', accessKeySecret: '環境変数から RAM ユーザーの AccessKey Secret を取得することを推奨します', // 必要に応じてリージョンとエンドポイントを変更します。 endpoint: "https://green-cip.ap-southeast-1.aliyuncs.com", apiVersion: '2022-03-02', // HTTP プロキシを設定します。 // httpProxy: "http://xx.xx.xx.xx:xxxx", // HTTPS プロキシを設定します。 // httpsProxy: "https://username:password@xxx.xxx.xxx.xxx:9999", }); // API リクエストを作成し、パラメーターを設定します。 var params = { // 画像審査サービス:Content Moderation コンソールで画像審査 Pro ルールに設定された serviceCode。例:baselineCheck_global "Service": "baselineCheck_global", // 検出対象画像の OSS 情報。 "ServiceParameters": JSON.stringify({ // 検出対象ファイルが格納されているバケットのリージョン。例:ap-southeast-1 "ossRegionId": "ap-southeast-1", // 検出対象ファイルが格納されているバケットの名前。例:bucket001 "ossBucketName": "bucket001", // 検出対象ファイル。例:image/001.jpg "ossObjectName": "image/001.jpg", // データの一意の識別子。 "dataId": uuidv4() }) } var requestOption = { method: 'POST', formatParams: false, }; try { // API 操作を呼び出して検出結果を取得します。 var response = await client.request('ImageModeration', params, requestOption) return response; } catch (err) { console.log(err); } } main().then(function (response) { console.log(JSON.stringify(response)) });
C# SDK
注意事項
ソースコードリファレンス:詳細については、「C# SDK ソースコード」をご参照ください。
サポートされている機能:SDK は、以下の 3 種類の画像検出をサポートしています。
これらの API 操作によって返される Label フィールドの値と説明の詳細については、「リスクラベル説明表」をご参照ください。
パブリックにアクセス可能な画像の検出
シナリオ
審査対象の画像がパブリック URL を使用してアクセス可能な場合、画像審査 バージョン 2.0 サービスは画像 URL からファイルを取得して審査を実行できます。
C# SDK をインストールできます。
dotnet add package AlibabaCloud.SDK.Green20220302 --version 2.2.10C# SDK を統合します。
同期 API 統合の例
// このファイルは自動生成されたものです。編集しないでください。ありがとうございます。 using Newtonsoft.Json; namespace AlibabaCloud.SDK.Green20220302 { public class ImageModerationAutoRoute { public static void Main(string[] args) { /** * Alibaba Cloud アカウントの AccessKey は、すべての API 操作に対する完全な権限を持っています。API 呼び出しや日常の O&M には RAM ユーザーを使用することを推奨します。 * プロジェクトコードに AccessKey ID と AccessKey Secret を保存しないことを強く推奨します。そうしないと、AccessKey ペアが漏洩し、アカウント内のすべてのリソースのセキュリティを脅かす可能性があります。 * 環境変数を取得する一般的な方法: * RAM ユーザーの AccessKey ID を取得する:Environment.GetEnvironmentVariable("ALIBABA_CLOUD_ACCESS_KEY_ID") * RAM ユーザーの AccessKey Secret を取得する:Environment.GetEnvironmentVariable("ALIBABA_CLOUD_ACCESS_KEY_SECRET") */ String accessKeyId = "環境変数から RAM ユーザーの AccessKey ID を取得することを推奨します"; String accessKeySecret = "環境変数から RAM ユーザーの AccessKey Secret を取得することを推奨します"; // 必要に応じてリージョンとエンドポイントを変更します。 String endpoint = "green-cip.ap-southeast-1.aliyuncs.com"; // 注:検出パフォーマンスを向上させるため、インスタンス化されたクライアントをできるだけ再利用し、接続の繰り返し確立を避けてください。 Client client = createClient(accessKeyId, accessKeySecret, endpoint); // 実行時パラメーターを設定します。これは、この実行時パラメーターインスタンスを使用するリクエストに対してのみ有効です。 AlibabaCloud.TeaUtil.Models.RuntimeOptions runtimeOptions = new AlibabaCloud.TeaUtil.Models.RuntimeOptions(); // 画像検出リクエストを構築します。 Models.ImageModerationRequest imageModerationRequest = new Models.ImageModerationRequest(); // 画像審査サービス:Content Moderation コンソールで画像審査 Pro ルールに設定された serviceCode。例: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 { // API 操作を呼び出して検出結果を取得します。 Models.ImageModerationResponse response = client.ImageModerationWithOptions( imageModerationRequest, runtimeOptions ); Console.WriteLine(response.Body.RequestId); Console.WriteLine(JsonConvert.SerializeObject(response.Body)); } catch (Exception _err) { Console.WriteLine(_err); } } // リクエストクライアントを作成します。 public static Client createClient( String accessKeyId, String accessKeySecret, String endpoint ) { AlibabaCloud.OpenApiClient.Models.Config config = new AlibabaCloud.OpenApiClient.Models.Config { AccessKeyId = accessKeyId, AccessKeySecret = accessKeySecret, // HTTP プロキシを設定します。 // HttpProxy = "http://10.10.xx.xx:xxxx", // HTTPS プロキシを設定します。 // HttpsProxy = "https://username:password@xxx.xxx.xxx.xxx:9999", // アクセスするドメイン名。 Endpoint = endpoint, }; return new Client(config); } } }
ローカル画像の検出
シナリオ
ローカルマシン上にあり、パブリックにアクセス可能な URL を持たない画像を審査するには、Content Moderation が提供する Object Storage Service (OSS) バケットにアップロードします。その後、画像審査 V2.0 サービスは OSS に直接アクセスして画像を取得し、審査を実行できます。
C# SDK をインストールします。
Content Moderation SDK をインストールします:
dotnet add package AlibabaCloud.SDK.Green20220302 --version 2.2.10OSS SDK をインストールします:
//. dotnet add package AlibabaCloud.SDK.Green20220302 --version 2.2.8 //. NuGet 経由でインストール 1. Visual Studio に NuGet がインストールされていない場合は、まずインストールしてください。 2. Visual Studio で、新しいプロジェクトを作成するか、既存のプロジェクトを開きます。ツール > NuGet パッケージマネージャー > ソリューションの NuGet パッケージの管理 を選択します。 3. aliyun.oss.sdk を検索します。結果から Aliyun.OSS.SDK (.NET Framework 用) または Aliyun.OSS.SDK.NetCore (.Net Core 用) を見つけ、最新バージョンを選択してインストールをクリックします。C# SDK を統合します。
同期 API 統合の例
// このファイルは自動生成されたものです。編集しないでください。ありがとうございます。 using System; using Newtonsoft.Json; using Aliyun.OSS; namespace AlibabaCloud.SDK.Green20220302 { public class ImageModerationAutoRoute { // ファイルアップロードトークン。 public static Dictionary<String, Models.DescribeUploadTokenResponse> tokenDic = new Dictionary<String, Models.DescribeUploadTokenResponse>(); // ファイルアップロード用のクライアント。 public static OssClient ossClient = null; // サービスが VPC にデプロイされているかどうかを指定します。 public static Boolean isVPC = false; public static void Main(string[] args) { /** * Alibaba Cloud アカウントの AccessKey は、すべての API 操作に対する完全な権限を持っています。API 呼び出しや日常の O&M には RAM ユーザーを使用することを推奨します。 * プロジェクトコードに AccessKey ID と AccessKey Secret を保存しないことを強く推奨します。そうしないと、AccessKey ペアが漏洩し、アカウント内のすべてのリソースのセキュリティを脅かす可能性があります。 * 環境変数を取得する一般的な方法: * RAM ユーザーの AccessKey ID を取得する:Environment.GetEnvironmentVariable("ALIBABA_CLOUD_ACCESS_KEY_ID") * RAM ユーザーの AccessKey Secret を取得する:Environment.GetEnvironmentVariable("ALIBABA_CLOUD_ACCESS_KEY_SECRET") */ String accessKeyId = "環境変数から RAM ユーザーの AccessKey ID を取得することを推奨します"; String accessKeySecret = "環境変数から RAM ユーザーの AccessKey Secret を取得することを推奨します"; // 必要に応じてリージョンとエンドポイントを変更します。 String endpoint = "green-cip.ap-southeast-1.aliyuncs.com"; Models.ImageModerationResponse response = invoke( accessKeyId, accessKeySecret, endpoint ); Console.WriteLine(response.Body.RequestId); Console.WriteLine(JsonConvert.SerializeObject(response.Body)); } // リクエストクライアントを作成します。 public static Client createClient( String accessKeyId, String accessKeySecret, String endpoint ) { AlibabaCloud.OpenApiClient.Models.Config config = new AlibabaCloud.OpenApiClient.Models.Config { AccessKeyId = accessKeyId, AccessKeySecret = accessKeySecret, // HTTP プロキシを設定します。 // HttpProxy = "http://10.10.xx.xx:xxxx", // HTTPS プロキシを設定します。 // HttpsProxy = "https://username:password@xxx.xxx.xxx.xxx:9999", // アクセスするドメイン名。 Endpoint = endpoint, }; return new Client(config); } // ファイルアップロード用のクライアントを作成します。 private static OssClient getOssClient( Models.DescribeUploadTokenResponse tokenResponse, Boolean isVPC ) { var tokenData = tokenResponse.Body.Data; if (isVPC) { return new OssClient( tokenData.OssInternalEndPoint, tokenData.AccessKeyId, tokenData.AccessKeySecret, tokenData.SecurityToken ); } else { return new OssClient( tokenData.OssInternetEndPoint, tokenData.AccessKeyId, tokenData.AccessKeySecret, tokenData.SecurityToken ); } } // ファイルをアップロードします。 public static String uploadFile( String filePath, Models.DescribeUploadTokenResponse tokenResponse ) { // OssClient インスタンスを構築します。 ossClient = getOssClient(tokenResponse, isVPC); var tokenData = tokenResponse.Body.Data; String objectName = tokenData.FileNamePrefix + Guid.NewGuid().ToString() + "." + filePath.Split(".").GetValue(1); // ファイルをアップロードします。 ossClient.PutObject(tokenData.BucketName, objectName, filePath); return objectName; } // 検出リクエストを送信します。 public static Models.ImageModerationResponse invoke( String accessKeyId, String accessKeySecret, String endpoint ) { // 注:検出パフォーマンスを向上させるため、インスタンス化されたクライアントをできるだけ再利用し、接続の繰り返し確立を避けてください。 Client client = createClient(accessKeyId, accessKeySecret, endpoint); // 実行時パラメーターを設定します。これは、この実行時パラメーターインスタンスを使用するリクエストに対してのみ有効です。 AlibabaCloud.TeaUtil.Models.RuntimeOptions runtimeOptions = new AlibabaCloud.TeaUtil.Models.RuntimeOptions(); // ローカルファイルの完全なパス、例:D:\localPath\exampleFile.png。 String filePath = "D:\\localPath\\exampleFile.png."; try { // ファイルアップロード用の一時トークンを取得します。 if ( !tokenDic.ContainsKey(endpoint) || tokenDic[endpoint].Body.Data.Expiration <= DateTimeOffset.Now.ToUnixTimeSeconds() ) { var tokenResponse = client.DescribeUploadToken(); tokenDic[endpoint] = tokenResponse; } // ファイルをアップロードします。 String objectName = uploadFile(filePath, tokenDic[endpoint]); // 画像検出リクエストを構築します。 Models.ImageModerationRequest imageModerationRequest = new Models.ImageModerationRequest(); // 画像審査サービス:Content Moderation コンソールで画像審査 Pro ルールに設定された serviceCode。例:baselineCheck_global imageModerationRequest.Service = "baselineCheck_global"; Dictionary<string, object> task = new Dictionary<string, object>(); // 検出対象の画像の情報。 task.Add("ossBucketName", tokenDic[endpoint].Body.Data.BucketName); task.Add("ossObjectName", objectName); // 検出対象のデータの ID。 task.Add("dataId", Guid.NewGuid().ToString()); imageModerationRequest.ServiceParameters = JsonConvert.SerializeObject(task); // API 操作を呼び出して検出結果を取得します。 Models.ImageModerationResponse response = client.ImageModerationWithOptions( imageModerationRequest, runtimeOptions ); return response; } catch (Exception _err) { Console.WriteLine(_err); return null; } } } }
OSS 画像の検出
シナリオ
審査が必要な画像ファイルが Alibaba Cloud Object Storage Service (OSS) に保存されている場合、サービスロールを作成して Content Moderation サービスに OSS リソースへのアクセスを許可できます。画像審査 バージョン 2.0 サービスはこのサービスロールを使用して、OSS からファイルを取得して審査します。クラウドリソースアクセス承認ページで AliyunCIPScanOSSRole サービスロールを作成できます。
Alibaba Cloud アカウント (ルートアカウント) を使用して、クラウドリソースアクセス承認ページに移動して権限を付与します。
C# SDK をインストールします。
dotnet add package AlibabaCloud.SDK.Green20220302 --version 2.2.10C# SDK を統合します。
同期 API 統合の例
// このファイルは自動生成されたものです。編集しないでください。ありがとうございます。 using Newtonsoft.Json; namespace AlibabaCloud.SDK.Green20220302 { public class OssScanDemo { public static void Main(string[] args) { /** * Alibaba Cloud アカウントの AccessKey は、すべての API 操作に対する完全な権限を持っています。API 呼び出しや日常の O&M には RAM ユーザーを使用することを推奨します。 * プロジェクトコードに AccessKey ID と AccessKey Secret を保存しないことを強く推奨します。そうしないと、AccessKey ペアが漏洩し、アカウント内のすべてのリソースのセキュリティを脅かす可能性があります。 * 環境変数を取得する一般的な方法: * RAM ユーザーの AccessKey ID を取得する:Environment.GetEnvironmentVariable("ALIBABA_CLOUD_ACCESS_KEY_ID") * RAM ユーザーの AccessKey Secret を取得する:Environment.GetEnvironmentVariable("ALIBABA_CLOUD_ACCESS_KEY_SECRET") */ String accessKeyId = "環境変数から RAM ユーザーの AccessKey ID を取得することを推奨します"; String accessKeySecret = "環境変数から RAM ユーザーの AccessKey Secret を取得することを推奨します"; // 必要に応じてリージョンとエンドポイントを変更します。 String endpoint = "green-cip.ap-southeast-1.aliyuncs.com"; // 注:検出パフォーマンスを向上させるため、インスタンス化されたクライアントをできるだけ再利用し、接続の繰り返し確立を避けてください。 Client client = createClient(accessKeyId, accessKeySecret, endpoint); // 実行時パラメーターを設定します。これは、この実行時パラメーターインスタンスを使用するリクエストに対してのみ有効です。 AlibabaCloud.TeaUtil.Models.RuntimeOptions runtimeOptions = new AlibabaCloud.TeaUtil.Models.RuntimeOptions(); // 画像検出リクエストを構築します。 Models.ImageModerationRequest imageModerationRequest = new Models.ImageModerationRequest(); // 画像審査サービス:Content Moderation コンソールで画像審査 Pro ルールに設定された serviceCode。例:baselineCheck_global imageModerationRequest.Service = "baselineCheck_global"; Dictionary<string, object> task = new Dictionary<string, object>(); // 検出対象画像のバケットが所在するリージョン。例:ap-southeast-1 task.Add("ossRegionId", "ap-southeast-1"); // 検出対象画像のバケット名。例:bucket001 task.Add("ossBucketName", "bucket001"); // 検出対象画像のオブジェクト名。例:image/001.jpg task.Add("ossObjectName", "image/001.jpg"); // 検出対象データの ID。 task.Add("dataId", Guid.NewGuid().ToString()); imageModerationRequest.ServiceParameters = JsonConvert.SerializeObject(task); try { // API 操作を呼び出して検出結果を取得します。 Models.ImageModerationResponse response = client.ImageModerationWithOptions( imageModerationRequest, runtimeOptions ); Console.WriteLine(response.Body.RequestId); Console.WriteLine(JsonConvert.SerializeObject(response.Body)); } catch (Exception _err) { Console.WriteLine(_err); } } // リクエストクライアントを作成します。 public static Client createClient( String accessKeyId, String accessKeySecret, String endpoint ) { AlibabaCloud.OpenApiClient.Models.Config config = new AlibabaCloud.OpenApiClient.Models.Config { AccessKeyId = accessKeyId, AccessKeySecret = accessKeySecret, // HTTP プロキシを設定します。 // HttpProxy = "http://10.10.xx.xx:xxxx", // HTTPS プロキシを設定します。 // HttpsProxy = "https://username:password@xxx.xxx.xxx.xxx:9999", // アクセスするドメイン名。 Endpoint = endpoint, }; return new Client(config); } } }
HTTPS ネイティブ呼び出し
Content Moderation バージョン 2.0 API サービスは、ネイティブ HTTPS 呼び出しもサポートしています。この方法では、リクエストの署名と検証を手動で処理し、URL、本文、ヘッダー、パラメーターを含むリクエストを組み立てる必要があります。ネイティブ HTTPS 呼び出しは、通常、次の 2 つのシナリオでのみ必要です。ユースケースがこれら 2 つのシナリオのいずれでもない場合は、SDK を使用して呼び出しを行うことを推奨します。
クライアントサイズに対する要件が高いアプリでの直接使用。
アップグレードが不便な特定のライブラリパッケージへの特定の依存関係。
呼び出し方法
サービスリクエストエンドポイント:https://green-cip.{region}.aliyuncs.com
プロトコル:HTTPS
メソッド:POST
共通リクエストパラメーター
画像審査 V2.0 API 操作のリクエストパラメーターは、共通リクエストパラメーターと 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 標準に従い、UTC である必要があります。形式は yyyy-MM-ddTHH:mm:ssZ です。例えば、2022年12月12日 09:13:14 (UTC+8) は 2022-12-12T01:13:14Z と表されます。
SignatureVersion
String
はい
署名アルゴリズムのバージョン。値は 1.0 です。
SignatureNonce
String
はい
ネットワークリプレイ攻撃を防ぐために使用される一意の乱数。異なるリクエストでは、異なるランダムな値を使用する必要があります。
Action
String
はい
同期画像 API:ImageModeration
非同期画像 API:ImageAsyncModeration
非同期画像審査結果取得 API:DescribeImageModerationResult
複数サービス同期画像 API:ImageBatchModeration
共通レスポンスパラメーター
送信する各 API 呼び出しに対して、システムは呼び出しが成功したかどうかに関わらず、一意の識別子 RequestId を返します。その他のレスポンスパラメーターには、ラベルと信頼度スコアが含まれます。返されるパラメーターはサービスによって異なります。詳細については、特定のサービスのドキュメントをご参照ください。
説明これらの API 操作によって返される
Labelフィールドの値と説明の詳細については、「リスクラベル説明表」をご参照ください。コード例
以下の応答例は、読みやすさのためにフォーマットされています。実際の応答は、改行やインデントでフォーマットされていません。
以下は、画像審査 V2.0 - 一般ベースライン検出サービス同期 API のリクエスト例です。その他の API 操作については、ビジネスリクエストパラメーターに関する特定の API ドキュメントをご参照ください:
https://green-cip.ap-southeast-1.aliyuncs.com/ ?Format=JSON &Version=2022-03-02 &Signature=vpEEL0zFHfxXYzSFV0n7%2FZiFL9o%3D &SignatureMethod=Hmac-SHA1 &SignatureNonce=15215528852396 &SignatureVersion=1.0 &Action=ImageModeration &AccessKeyId=123****cip &Timestamp=2022-12-12T12:00:00Z &Service=baselineCheck_global &ServiceParameters={"imageUrl": "https://img.alicdn.com/tfs/TB1U4r9AeH2gK0jSZJnXXaT1FXa-2880-480.png", "dataId": "img1234567"}以下は、画像審査 バージョン 2.0 - 一般ベースライン検出サービス同期 API の返されるパラメーターの 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" }署名方法
画像審査 V2.0 サービスは、すべてのリクエストを認証します。したがって、各リクエストには署名を含める必要があります。画像審査 V2.0 サービスは、AccessKey ID と AccessKey Secret を使用した対称暗号化によって送信者の ID を検証します。
AccessKey ID と AccessKey Secret は Alibaba Cloud によって発行されます。Alibaba Cloud のウェブサイトで申請および管理できます。AccessKey ID はユーザーを識別するために使用されます。AccessKey Secret は、署名文字列を暗号化し、サーバー側で署名文字列を検証するために使用されるキーです。厳重に機密を保持する必要があります。
サービスにアクセスするには、次の方法でリクエストに署名します:
リクエストパラメーターから正規化されたクエリ文字列を構築します。
すべてのリクエストパラメーター (共通リクエストパラメーターと API 固有のリクエストパラメーターを含むが、Signature パラメーターは除く) を名前のアルファベット順にソートします。
リクエストパラメーターの名前と値をエンコードします。名前と値は、UTF-8 文字セットを使用して URL エンコードする必要があります。
説明Java の java.net.URLEncoder など、URL エンコーディングをサポートするライブラリは、通常、application/x-www-form-urlencoded MIME タイプのルールに基づいてエンコードします。この方法でエンコードできます。エンコードされた文字列のプラス記号 (+) を %20 に、アスタリスク (*) を %2A に、%7E をチルダ (~) に置き換えて、前述のルールで記述されたエンコード文字列を取得します。
URL エンコーディングのルールは次のとおりです:
文字 A-Z、a-z、0-9、および文字ハイフン (-)、アンダースコア (_)、ピリオド (.)、チルダ (~) はエンコードされません。
その他の文字は、
%XYの形式でエンコードされます。XY は文字の ASCII コードの 16 進数表現です。例えば、英語の二重引用符 (") は%22としてエンコードされます。拡張 UTF-8 文字は、
%XY%ZA…の形式でエンコードされます。英語のスペース ( ) は、プラス記号 (+) ではなく
%20としてエンコードする必要があることに注意してください。
エンコードされたパラメーター名と値を等号 (=) で連結します。
等号で結合された文字列を、パラメーター名のアルファベット順にアンパサンド (&) で連結して、正規化されたクエリ文字列を取得します。
ステップ a.i の正規化された文字列から、次のルールに基づいて署名する文字列を作成します。
StringToSign= HTTPMethod + "&" + percentEncode("/") + "&" + percentEncode(CanonicalizedQueryString)説明この形式では、HTTPMethod はリクエストを送信するために使用される HTTP メソッド (POST など) です。percentEncode(/) は、前のステップで説明した URL エンコーディングルールに基づいて文字 (/) をエンコードして得られる値で、
%2Fです。percentEncode(CanonicalizedQueryString) は、前のステップの正規化されたクエリ文字列を同じ URL エンコーディングルールに基づいてエンコードして得られる文字列です。RFC 2104 で定義されているように、署名用の文字列を使用して HMAC 署名値を計算します。
説明署名計算に使用されるキーは、AccessKey Secret の末尾にアンパサンド (
&) 文字 (ASCII コード 38) を追加したものです。ハッシュアルゴリズムは SHA1 です。HMAC 値を Base64 エンコーディングルールに基づいて文字列にエンコードし、署名値 (Signature) を取得します。
署名値を Signature パラメーターとしてリクエストパラメーターに追加します。
説明署名値が最終的なリクエストパラメーターとして Content Moderation サーバーに送信される場合、他のパラメーターと同様に、RFC 3986 のルールに基づいて URL エンコードする必要があります。