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

Content Moderation:Voice Moderation 2.0 SDK と統合

最終更新日:Jan 07, 2026

Voice Moderation 2.0 は、SDK またはネイティブ HTTPS リクエストを使用して呼び出すことができます。 SDK は署名検証やリクエストボディの構築などのタスクを処理してプロセスを簡素化するため、SDK の使用をお勧めします。 この Topic では、Voice Moderation 2.0 へのアクセス方法について説明します。

ステップ 1:サービスの有効化

サービスの有効化ページに移動して、Voice Moderation バージョン 2.0 サービスを有効化します。デフォルトの課金方法は従量課金です。API を統合して使用すると、使用量に基づいて自動的に課金されます。日次料金は、実際の使用量に基づいて決済されます。サービスを呼び出さない場合、料金は発生しません。

Content Moderation (音声) バージョン 2.0 サービスを有効化すると、デフォルトの課金方法は従量課金です。この方法では、実際の使用量に基づいて毎日課金されます。サービスの呼び出しがない場合、料金は発生しません。

ステップ 2:RAM ユーザーへの権限付与

SDK を使用したり API 操作を呼び出したりする前に、Resource Access Management (RAM) ユーザーに権限を付与する必要があります。Alibaba Cloud アカウントまたは RAM ユーザーの AccessKey ペアを作成できます。Alibaba Cloud API 操作を呼び出す際には、ID を検証するために AccessKey ペアを使用する必要があります。詳細については、「AccessKey ペアの作成」をご参照ください。

手順

  1. RAM 管理者として RAM コンソールにログインします。

  2. RAM ユーザーを作成します。

    詳細については、「RAM ユーザーの作成」をご参照ください。

  3. AliyunYundunGreenWebFullAccess システムポリシーを RAM ユーザーに付与します。

    詳細については、「RAM ユーザーへの権限付与」をご参照ください。

    上記の手順を完了すると、RAM ユーザーとして Content Moderation API を呼び出すことができます。

ステップ 3:音声審査サービスのインストールと接続

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

リージョン

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

VPC エンドポイント

シンガポール

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

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

説明

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

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

Java SDK

Java 1.8 以降がサポートされています。

ソースコードの詳細については、Java SDK ソースコードまたはJava SDK ソースコード (OSS パス) をご参照ください。

この SDK は、以下の 3 つの音声審査シナリオをサポートしています。

パブリックにアクセス可能な音声の検出

シナリオ

審査対象のオーディオファイルがパブリック URL からアクセス可能な場合、音声コンテンツ審査 バージョン 2.0 サービスは、URL からファイルを取得して審査できます。

  1. 次の依存関係を dependencies ファイルに追加します:

    <dependency>
      <groupId>com.aliyun</groupId>
      <artifactId>green20220302</artifactId>
      <version>2.2.11</version>
    </dependency>
  2. Java SDK を使用します。

    • 音声審査タスクを送信するためのサンプルコード

      import com.alibaba.fastjson.JSON;
      import com.alibaba.fastjson.JSONObject;
      import com.aliyun.green20220302.Client;
      import com.aliyun.green20220302.models.VoiceModerationRequest;
      import com.aliyun.green20220302.models.VoiceModerationResponse;
      import com.aliyun.green20220302.models.VoiceModerationResponseBody;
      import com.aliyun.teaopenapi.models.Config;
      
      
      public class VoiceModerationDemo {
      
          public static void main(String[] args) throws Exception {
              Config config = new Config();
              /**
               * 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");
               */
              config.setAccessKeyId("環境変数から RAM ユーザーの AccessKey ID を取得することを推奨します");
              config.setAccessKeySecret("環境変数から RAM ユーザーの AccessKey Secret を取得することを推奨します");
              // 必要に応じてリージョンとエンドポイントを変更します。
              config.setRegionId("ap-southeast-1");
              config.setEndpoint("green-cip.ap-southeast-1.aliyuncs.com");
              // 接続タイムアウト期間 (ミリ秒)。
              config.setReadTimeout(6000);
              // 読み取りタイムアウト期間 (ミリ秒)。
              config.setConnectTimeout(3000);
         
              // 注:審査性能を向上させるため、クライアントインスタンスを再利用してください。これにより、接続の繰り返し作成を回避できます。
              Client client = new Client(config);
      
              JSONObject serviceParameters = new JSONObject();
              serviceParameters.put("url", "https://xxxx/xxx/sample.wav");
      
              VoiceModerationRequest voiceModerationRequest = new VoiceModerationRequest();
              // 審査タイプ:audio_multilingual_global は多言語音声審査用です。
              voiceModerationRequest.setService("audio_multilingual_global");
              voiceModerationRequest.setServiceParameters(serviceParameters.toJSONString());
      
              try {
                  VoiceModerationResponse response = client.voiceModeration(voiceModerationRequest);
                  if (response.getStatusCode() == 200) {
                      VoiceModerationResponseBody result = response.getBody();
                      System.out.println(JSON.toJSONString(result));
                      System.out.println("requestId = " + result.getRequestId());
                      System.out.println("code = " + result.getCode());
                      System.out.println("msg = " + result.getMessage());
                      Integer code = result.getCode();
                      if (200 == code) {
                          VoiceModerationResponseBody.VoiceModerationResponseBodyData data = result.getData();
                          System.out.println("taskId = [" + data.getTaskId() + "]");
                      } else {
                          System.out.println("voice moderation not success. code:" + code);
                      }
                  } else {
                      System.out.println("response not success. status:" + response.getStatusCode());
                  }
              } catch (Exception e) {
                  e.printStackTrace();
              }
          }
      }
    • 音声審査タスクの結果を照会するためのサンプルコード

      import com.alibaba.fastjson.JSON;
      import com.alibaba.fastjson.JSONObject;
      import com.aliyun.green20220302.Client;
      import com.aliyun.green20220302.models.VoiceModerationResultRequest;
      import com.aliyun.green20220302.models.VoiceModerationResultResponse;
      import com.aliyun.green20220302.models.VoiceModerationResultResponseBody;
      import com.aliyun.teaopenapi.models.Config;
      
      
      public class VoiceModerationResultDemo {
      
          public static void main(String[] args) throws Exception {
              Config config = new Config();
              /**
               * 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");
               */
              config.setAccessKeyId("環境変数から RAM ユーザーの AccessKey ID を取得することを推奨します");
              config.setAccessKeySecret("環境変数から RAM ユーザーの AccessKey Secret を取得することを推奨します");
              // 必要に応じてリージョンとエンドポイントを変更します。
              config.setRegionId("ap-southeast-1");
              config.setEndpoint("green-cip.ap-southeast-1.aliyuncs.com");
              // 接続タイムアウト期間 (ミリ秒)。
              config.setReadTimeout(6000);
              // 読み取りタイムアウト期間 (ミリ秒)。
              config.setConnectTimeout(3000);
      
              // 注:審査性能を向上させるため、クライアントインスタンスを再利用してください。これにより、接続の繰り返し作成を回避できます。
              Client client = new Client(config);
      
              JSONObject serviceParameters = new JSONObject();
              // タスク送信時に返された taskId。
              serviceParameters.put("taskId", "審査タスクに対して返されたタスク ID。");
      
      
              VoiceModerationResultRequest voiceModerationResultRequest = new VoiceModerationResultRequest();
              // 審査タイプ:audio_multilingual_global は多言語音声審査用です。
              voiceModerationResultRequest.setService("audio_multilingual_global");
              voiceModerationResultRequest.setServiceParameters(serviceParameters.toJSONString());
      
              try {
                  VoiceModerationResultResponse response = client.voiceModerationResult(voiceModerationResultRequest);
                  if (response.getStatusCode() == 200) {
                      VoiceModerationResultResponseBody result = response.getBody();
                      System.out.println("requestId=" + result.getRequestId());
                      System.out.println("code=" + result.getCode());
                      System.out.println("msg=" + result.getMessage());
                      if (200 == result.getCode()) {
                          VoiceModerationResultResponseBody.VoiceModerationResultResponseBodyData data = result.getData();
                          System.out.println("sliceDetails = " + JSON.toJSONString(data.getSliceDetails()));
                          System.out.println("taskId = " + data.getTaskId());
                          System.out.println("url = " + data.getUrl());
                      } else {
                          System.out.println("voice moderation result not success. code:" + result.getCode());
                      }
                  } else {
                      System.out.println("response not success. status:" + response.getStatusCode());
                  }
              } catch (Exception e) {
                  e.printStackTrace();
              }
          }
      }

ローカル音声の検出

シナリオ

審査が必要なオーディオがローカルマシンに保存されており、パブリック URL を持たない場合、Content Moderation が提供する Object Storage Service (OSS) バケットにオーディオをアップロードできます。オーディオ審査 バージョン 2.0 サービスは、その後 OSS に直接アクセスしてオーディオコンテンツを取得し、審査できます。

  1. 次の依存関係を dependencies ファイルに追加します:

    <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.VoiceModerationRequest;
      import com.aliyun.green20220302.models.VoiceModerationResponse;
      import com.aliyun.green20220302.models.VoiceModerationResponseBody;
      import com.aliyun.green20220302.models.VoiceModerationResponseBody.VoiceModerationResponseBodyData;
      import com.aliyun.green20220302.models.VoiceModerationResponseBody.VoiceModerationResponseBodyDataResult;
      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 LocalVoiceModerationDemo {
          /**サービスが VPC にデプロイされているかどうかを指定します。*/
          public static boolean isVPC = false;
      
          /**ファイルをアップロードするために使用されるトークン。キーはエンドポイント、値はトークンです。*/
          public static Map<String, DescribeUploadTokenResponseBody.DescribeUploadTokenResponseBodyData> tokenMap = new HashMap<>();
      
          /**ファイルをアップロードするために使用されるクライアント。*/
          public static OSS ossClient = null;
      
          /**
           * クライアントを作成します。
           *
           * @param accessKeyId
           * @param accessKeySecret
           * @param endpoint
           * @return
           * @throws Exception
           */
          public static Client createClient(String accessKeyId, String accessKeySecret, String endpoint) throws Exception {
              Config config = new Config();
              config.setAccessKeyId(accessKeyId);
              config.setAccessKeySecret(accessKeySecret);
              // 必要に応じてエンドポイントを変更します。
              config.setEndpoint(endpoint);
              return new Client(config);
          }
      
          /**
           * ファイルをアップロードするためのクライアントを作成します。
           *
           * @param tokenData
           * @param isVPC
           */
          public static void getOssClient(DescribeUploadTokenResponseBody.DescribeUploadTokenResponseBodyData tokenData, boolean isVPC) {
              //注:審査性能を向上させるため、クライアントインスタンスを再利用してください。これにより、接続の繰り返し作成を回避できます。
              if (isVPC) {
                  ossClient = new OSSClientBuilder().build(tokenData.ossInternalEndPoint, tokenData.getAccessKeyId(), tokenData.getAccessKeySecret(), tokenData.getSecurityToken());
              } else {
                  ossClient = new OSSClientBuilder().build(tokenData.ossInternetEndPoint, tokenData.getAccessKeyId(), tokenData.getAccessKeySecret(), tokenData.getSecurityToken());
              }
          }
      
          /**
           * ファイルをアップロードします。
           *
           * @param filePath
           * @param tokenData
           * @return
           * @throws Exception
           */
          public static String uploadFile(String filePath, DescribeUploadTokenResponseBody.DescribeUploadTokenResponseBodyData tokenData) throws Exception {
              String[] split = filePath.split("\\.");
              String objectName;
              if (split.length > 1) {
                  objectName = tokenData.getFileNamePrefix() + UUID.randomUUID() + "." + split[split.length - 1];
              } else {
                  objectName = tokenData.getFileNamePrefix() + UUID.randomUUID();
              }
              PutObjectRequest putObjectRequest = new PutObjectRequest(tokenData.getBucketName(), objectName, new File(filePath));
              ossClient.putObject(putObjectRequest);
              return objectName;
          }
      
          public static VoiceModerationResponse invokeFunction(String accessKeyId, String accessKeySecret, String endpoint) throws Exception {
              //注:審査性能を向上させるため、クライアントインスタンスを再利用してください。これにより、接続の繰り返し作成を回避できます。
              Client client = createClient(accessKeyId, accessKeySecret, endpoint);
              RuntimeOptions runtime = new RuntimeOptions();
      
              //ローカルファイルのフルパス。例:D:/localPath/exampleFile.mp3。
              String filePath = "D:/localPath/exampleFile.mp3";
              //ファイルをアップロードするための一時トークンを取得します。
              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());
      
              VoiceModerationRequest request = new VoiceModerationRequest();
              // 審査タイプ。audio_media_detection は音声ファイル審査を示します。
              request.setService("audio_multilingual_global");
              request.setServiceParameters(JSON.toJSONString(serviceParameters));
      
              VoiceModerationResponse response = null;
              try {
                  response = client.voiceModerationWithOptions(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 を取得することを推奨します";
              // 必要に応じてリージョンとエンドポイントを変更します。
              VoiceModerationResponse response = invokeFunction(accessKeyId, accessKeySecret, "green-cip.ap-southeast-1.aliyuncs.com");
              try {
                  // 審査結果を出力します。
                  if (response != null) {
                      if (response.getStatusCode() == 200) {
                          VoiceModerationResponseBody body = response.getBody();
                          System.out.println(JSON.toJSONString(body));
                          System.out.println("requestId = " + body.getRequestId());
                          System.out.println("code = " + body.getCode());
                          System.out.println("msg = " + body.getMessage());
                          Integer code = body.getCode();
                          if (200 == code) {
                              VoiceModerationResponseBody.VoiceModerationResponseBodyData data = body.getData();
                              System.out.println("taskId = [" + data.getTaskId() + "]");
                          } else {
                              System.out.println("voice moderation not success. code:" + code);
                          }
                      } else {
                          System.out.println("response not success. status:" + response.getStatusCode());
                      }
                  }
              } catch (Exception e) {
                  e.printStackTrace();
              }
          }   
      }
    • 音声検出タスク:コード例

      import com.alibaba.fastjson.JSON;
      import com.alibaba.fastjson.JSONObject;
      import com.aliyun.green20220302.Client;
      import com.aliyun.green20220302.models.VoiceModerationResultRequest;
      import com.aliyun.green20220302.models.VoiceModerationResultResponse;
      import com.aliyun.green20220302.models.VoiceModerationResultResponseBody;
      import com.aliyun.teaopenapi.models.Config;
      
      
      public class VoiceModerationResultDemo {
      
          public static void main(String[] args) throws Exception {
              Config config = new Config();
              /**
               * 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");
               */
              config.setAccessKeyId("環境変数から RAM ユーザーの AccessKey ID を取得することを推奨します");
              config.setAccessKeySecret("環境変数から RAM ユーザーの AccessKey Secret を取得することを推奨します");
              // 必要に応じてリージョンとエンドポイントを変更します。
              config.setRegionId("ap-southeast-1");
              config.setEndpoint("green-cip.ap-southeast-1.aliyuncs.com");
              // 接続タイムアウト期間 (ミリ秒)。
              config.setReadTimeout(6000);
              // 読み取りタイムアウト期間 (ミリ秒)。
              config.setConnectTimeout(3000);
      
              // 注:審査性能を向上させるため、クライアントインスタンスを再利用してください。これにより、接続の繰り返し作成を回避できます。
              Client client = new Client(config);
      
              JSONObject serviceParameters = new JSONObject();
              // タスク送信時に返された taskId。
              serviceParameters.put("taskId", "審査タスクに対して返されたタスク ID。");
      
      
              VoiceModerationResultRequest voiceModerationResultRequest = new VoiceModerationResultRequest();
              // 審査タイプ:audio_multilingual_global は多言語音声審査用です。
              voiceModerationResultRequest.setService("audio_multilingual_global");
              voiceModerationResultRequest.setServiceParameters(serviceParameters.toJSONString());
      
              try {
                  VoiceModerationResultResponse response = client.voiceModerationResult(voiceModerationResultRequest);
                  if (response.getStatusCode() == 200) {
                      VoiceModerationResultResponseBody result = response.getBody();
                      System.out.println("requestId=" + result.getRequestId());
                      System.out.println("code=" + result.getCode());
                      System.out.println("msg=" + result.getMessage());
                      if (200 == result.getCode()) {
                          VoiceModerationResultResponseBody.VoiceModerationResultResponseBodyData data = result.getData();
                          System.out.println("sliceDetails = " + JSON.toJSONString(data.getSliceDetails()));
                          System.out.println("taskId = " + data.getTaskId());
                          System.out.println("url = " + data.getUrl());
                          System.out.println("riskLevel = " + data.getRiskLevel());
                      } else {
                          System.out.println("voice moderation result not success. code:" + result.getCode());
                      }
                  } else {
                      System.out.println("response not success. status:" + response.getStatusCode());
                  }
              } catch (Exception e) {
                  e.printStackTrace();
              }
          }
      }

OSS 内の音声ファイルの審査

シナリオ

審査が必要な音声ファイルがすでに Alibaba Cloud Object Storage Service (OSS) に保存されている場合、サービスロールを作成して Content Moderation サービスに OSS へのアクセスを許可できます。 音声審査 バージョン 2.0 サービスは、このサービスロールを使用して OSS からファイルを取得し、審査します。 サービスロールを作成するには、クラウドリソースアクセス承認ページに移動します。

  1. 次の依存関係を dependencies ファイルに追加します:

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

  2. Java SDK を使用します。

    • 音声審査タスクを送信するためのサンプルコード

      import com.alibaba.fastjson.JSON;
      import com.alibaba.fastjson.JSONObject;
      import com.aliyun.green20220302.Client;
      import com.aliyun.green20220302.models.VoiceModerationRequest;
      import com.aliyun.green20220302.models.VoiceModerationResponse;
      import com.aliyun.green20220302.models.VoiceModerationResponseBody;
      import com.aliyun.teaopenapi.models.Config;
      
      
      public class OssVoiceModerationDemo {
      
          public static void main(String[] args) throws Exception {
              Config config = new Config();
              /**
               * 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");
               */
              config.setAccessKeyId("環境変数から RAM ユーザーの AccessKey ID を取得することを推奨します");
              config.setAccessKeySecret("環境変数から RAM ユーザーの AccessKey Secret を取得することを推奨します");
              // 必要に応じてリージョンとエンドポイントを変更します。
              config.setRegionId("ap-southeast-1");
              config.setEndpoint("green-cip.ap-southeast-1.aliyuncs.com");
              // 接続タイムアウト期間 (ミリ秒)。
              config.setReadTimeout(6000);
              // 読み取りタイムアウト期間 (ミリ秒)。
              config.setConnectTimeout(3000);
         
              // 注:審査性能を向上させるため、クライアントインスタンスを再利用してください。これにより、接続の繰り返し作成を回避できます。
              Client client = new Client(config);
      
              JSONObject serviceParameters = new JSONObject();
              serviceParameters.put("ossBucketName", "bucket_01");
              serviceParameters.put("ossObjectName", "test/test.flv");
              serviceParameters.put("ossRegionId", "ap-southeast-1");
      
              VoiceModerationRequest voiceModerationRequest = new VoiceModerationRequest();
              // 審査タイプ。audio_media_detection は音声ファイル審査を示し、live_stream_detection は音声ライブストリーム審査を示します。
              voiceModerationRequest.setService("audio_media_detection");
              voiceModerationRequest.setServiceParameters(serviceParameters.toJSONString());
      
              try {
                  VoiceModerationResponse response = client.voiceModeration(voiceModerationRequest);
                  if (response.getStatusCode() == 200) {
                      VoiceModerationResponseBody result = response.getBody();
                      System.out.println(JSON.toJSONString(result));
                      System.out.println("requestId = " + result.getRequestId());
                      System.out.println("code = " + result.getCode());
                      System.out.println("msg = " + result.getMessage());
                      Integer code = result.getCode();
                      if (200 == code) {
                          VoiceModerationResponseBody.VoiceModerationResponseBodyData data = result.getData();
                          System.out.println("taskId = [" + data.getTaskId() + "]");
                      } else {
                          System.out.println("voice moderation not success. code:" + code);
                      }
                  } else {
                      System.out.println("response not success. status:" + response.getStatusCode());
                  }
              } catch (Exception e) {
                  e.printStackTrace();
              }
          }
      }
    • 音声検出タスクのコードサンプルを取得できます。

      import com.alibaba.fastjson.JSON;
      import com.alibaba.fastjson.JSONObject;
      import com.aliyun.green20220302.Client;
      import com.aliyun.green20220302.models.VoiceModerationResultRequest;
      import com.aliyun.green20220302.models.VoiceModerationResultResponse;
      import com.aliyun.green20220302.models.VoiceModerationResultResponseBody;
      import com.aliyun.teaopenapi.models.Config;
      
      
      public class VoiceModerationResultDemo {
      
          public static void main(String[] args) throws Exception {
              Config config = new Config();
              /**
               * 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");
               */
              config.setAccessKeyId("環境変数から RAM ユーザーの AccessKey ID を取得することを推奨します");
              config.setAccessKeySecret("環境変数から RAM ユーザーの AccessKey Secret を取得することを推奨します");
              // 必要に応じてリージョンとエンドポイントを変更します。
              config.setRegionId("ap-southeast-1");
              config.setEndpoint("green-cip.ap-southeast-1.aliyuncs.com");
              // 接続タイムアウト期間 (ミリ秒)。
              config.setReadTimeout(6000);
              // 読み取りタイムアウト期間 (ミリ秒)。
              config.setConnectTimeout(3000);
      
              // 注:審査性能を向上させるため、クライアントインスタンスを再利用してください。これにより、接続の繰り返し作成を回避できます。
              Client client = new Client(config);
      
              JSONObject serviceParameters = new JSONObject();
              // タスク送信時に返された taskId。
              serviceParameters.put("taskId", "審査タスクに対して返されたタスク ID。");
      
      
              VoiceModerationResultRequest voiceModerationResultRequest = new VoiceModerationResultRequest();
              // 審査タイプ:audio_multilingual_global は多言語音声審査用です。
              voiceModerationResultRequest.setService("audio_multilingual_global");
              voiceModerationResultRequest.setServiceParameters(serviceParameters.toJSONString());
      
              try {
                  VoiceModerationResultResponse response = client.voiceModerationResult(voiceModerationResultRequest);
                  if (response.getStatusCode() == 200) {
                      VoiceModerationResultResponseBody result = response.getBody();
                      System.out.println("requestId=" + result.getRequestId());
                      System.out.println("code=" + result.getCode());
                      System.out.println("msg=" + result.getMessage());
                      if (200 == result.getCode()) {
                          VoiceModerationResultResponseBody.VoiceModerationResultResponseBodyData data = result.getData();
                          System.out.println("sliceDetails = " + JSON.toJSONString(data.getSliceDetails()));
                          System.out.println("taskId = " + data.getTaskId());
                          System.out.println("url = " + data.getUrl());
                          System.out.println("riskLevel = " + data.getRiskLevel());
                      } else {
                          System.out.println("voice moderation result not success. code:" + result.getCode());
                      }
                  } else {
                      System.out.println("response not success. status:" + response.getStatusCode());
                  }
              } catch (Exception e) {
                  e.printStackTrace();
              }
          }
      }

Python SDK

Python 3.6 以降がサポートされています。

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

この SDK は、以下の 3 つの音声審査シナリオをサポートしています。

パブリックにアクセス可能な音声の検出

シナリオ

モデレーション用のオーディオファイルがパブリック URL からアクセス可能な場合、Audio Moderation V2.0 サービスは、その URL からファイルを取得してモデレートできます。

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

    pip install alibabacloud_green20220302==2.2.11

  2. Python SDK を使用します。

    • 音声審査タスクを送信するためのサンプルコード

      # coding=utf-8
      # python version >= 3.6
      from alibabacloud_green20220302.client import Client
      from alibabacloud_green20220302 import models
      from alibabacloud_tea_openapi.models import Config
      import json
      
      config = Config(
          # 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 を取得することを推奨します',
          # 接続タイムアウト期間 (ミリ秒)。
          connect_timeout=10000,
          # 読み取りタイムアウト期間 (ミリ秒)。
          read_timeout=3000,
          region_id='ap-southeast-1',
          endpoint='green-cip.ap-southeast-1.aliyuncs.com'
      )
      
      # 注:審査性能を向上させるため、クライアントインスタンスを再利用してください。これにより、接続の繰り返し作成を回避できます。
      clt = Client(config)
      
      serviceParameters = {
          'url': 'https://xxxx/xxx/sample.wav',
      }
      voiceModerationRequest = models.VoiceModerationRequest(
          # 審査タイプ:audio_multilingual_global は多言語音声審査用です。
          service='audio_multilingual_global',
          service_parameters=json.dumps(serviceParameters)
      )
      
      try:
          response = clt.voice_moderation(voiceModerationRequest)
          if response.status_code == 200:
              # 呼び出しは成功しました。
              # 審査結果を取得します。
              result = response.body
              print('response success. result:{}'.format(result))
          else:
              print('response not success. status:{} ,result:{}'.format(response.status_code, response))
      except Exception as err:
          print(err)
    • 音声検出タスクの結果の取得

      # coding=utf-8
      # python version >= 3.6
      from alibabacloud_green20220302.client import Client
      from alibabacloud_green20220302 import models
      from alibabacloud_tea_openapi.models import Config
      import json
      
      config = Config(
          # 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 を取得することを推奨します',
          # 接続タイムアウト期間 (ミリ秒)。
          connect_timeout=10000,
          # 読み取りタイムアウト期間 (ミリ秒)。
          read_timeout=3000,
          region_id='ap-southeast-1',
          endpoint='green-cip.ap-southeast-1.aliyuncs.com'
      )
      
      # 注:審査性能を向上させるため、クライアントインスタンスを再利用してください。これにより、接続の繰り返し作成を回避できます。
      clt = Client(config)
      
      # タスク送信時に返された taskId。
      serviceParameters = {
          "taskId": '審査タスクに対して返されたタスク ID'
      }
      voiceModerationResultRequest = models.VoiceModerationResultRequest(
          # 審査タイプ:audio_multilingual_global は多言語音声審査用です。
          service='audio_multilingual_global',
          service_parameters=json.dumps(serviceParameters)
      )
      
      try:
          response = clt.voice_moderation_result(voiceModerationResultRequest)
          if response.status_code == 200:
              # 呼び出しは成功しました。
              # 審査結果を取得します。
              result = response.body
              print('response success. result:{}'.format(result))
          else:
              print('response not success. status:{} ,result:{}'.format(response.status_code, response))
      except Exception as err:
          print(err)

      ライブストリーム検出ジョブのキャンセル

ローカル音声の検出

シナリオ

審査が必要なオーディオがローカルマシンに保存されており、パブリック URL を持たない場合、Content Moderation が提供する Object Storage Service (OSS) バケットにオーディオをアップロードできます。 音声審査 バージョン 2.0 サービスは、その後 OSS に直接アクセスして、審査のために音声コンテンツを取得できます。

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

    pip install alibabacloud_green20220302==2.2.11

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

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

    • 音声審査タスクを送信するためのサンプルコード

      # coding=utf-8
      # python version >= 3.6
      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
      # ファイルをアップロードするために使用されるトークン。キーはエンドポイント、値はトークンです。
      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.mp3
          file_path = 'D:\localPath\exampleFile.mp3'
      
          #ファイルをアップロードするための一時トークンを取得します。
          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.uuid4())
          }
      
          voice_moderation_request = models.VoiceModerationRequest(
              # 音声審査サービス。Voice Moderation 2.0 コンソールでルールに設定されたサービスコードです。例:audio_multilingual_global。
              service='audio_multilingual_global',
              service_parameters=json.dumps(service_parameters)
          )
      
          try:
              return client.voice_moderation_with_options(voice_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.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))
      
    • 音声検出ジョブの結果を取得する

      # coding=utf-8
      # python version >= 3.6
      from alibabacloud_green20220302.client import Client
      from alibabacloud_green20220302 import models
      from alibabacloud_tea_openapi.models import Config
      import json
      
      config = Config(
          # 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 を取得することを推奨します',
          # 接続タイムアウト期間 (ミリ秒)。
          connect_timeout=10000,
          # 読み取りタイムアウト期間 (ミリ秒)。
          read_timeout=3000,
          region_id='ap-southeast-1',
          endpoint='green-cip.ap-southeast-1.aliyuncs.com'
      )
      
      # 注:審査性能を向上させるため、クライアントインスタンスを再利用してください。これにより、接続の繰り返し作成を回避できます。
      clt = Client(config)
      
      # タスク送信時に返された taskId。
      serviceParameters = {
          "taskId": '審査タスクに対して返されたタスク ID'
      }
      voiceModerationResultRequest = models.VoiceModerationResultRequest(
          # 審査タイプ:audio_multilingual_global は多言語音声審査用です。
          service='audio_multilingual_global',
          service_parameters=json.dumps(serviceParameters)
      )
      
      try:
          response = clt.voice_moderation_result(voiceModerationResultRequest)
          if response.status_code == 200:
              # 呼び出しは成功しました。
              # 審査結果を取得します。
              result = response.body
              print('response success. result:{}'.format(result))
          else:
              print('response not success. status:{} ,result:{}'.format(response.status_code, response))
      except Exception as err:
          print(err)

OSS 内の音声ファイルの審査

シナリオ

審査が必要な音声ファイルが Alibaba Cloud Object Storage Service (OSS) に保存されている場合、サービスロールを作成して、Content Moderation サービスに OSS へのアクセスを許可できます。音声審査V2.0 サービスは、このサービスロールを使用して、審査のために OSS からファイルを取得します。サービスロールを作成するには、「クラウド資源アクセス承認ページ」にアクセスしてください。

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

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

    • 音声審査タスクを送信するためのサンプルコード

      # coding=utf-8
      # python version >= 3.6
      from alibabacloud_green20220302.client import Client
      from alibabacloud_green20220302 import models
      from alibabacloud_tea_openapi.models import Config
      import json
      
      config = Config(
          # 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 を取得することを推奨します',
          # 接続タイムアウト期間 (ミリ秒)。
          connect_timeout=10000,
          # 読み取りタイムアウト期間 (ミリ秒)。
          read_timeout=3000,
          region_id='ap-southeast-1',
          endpoint='green-cip.ap-southeast-1.aliyuncs.com'
      )
      
      # 注:審査性能を向上させるため、クライアントインスタンスを再利用してください。これにより、接続の繰り返し作成を回避できます。
      clt = Client(config)
      
      serviceParameters = {
          'ossBucketName': 'bucket_01',
          'ossObjectName': 'test/test.mp3',
          'ossRegionId': 'cn-shanghai'
      }
      voiceModerationRequest = models.VoiceModerationRequest(
          # 審査タイプ:audio_multilingual_global は多言語音声審査用です。
          service='audio_multilingual_global',
          service_parameters=json.dumps(serviceParameters)
      )
      
      try:
          response = clt.voice_moderation(voiceModerationRequest)
          if response.status_code == 200:
              # 呼び出しは成功しました。
              # 審査結果を取得します。
              result = response.body
              print('response success. result:{}'.format(result))
          else:
              print('response not success. status:{} ,result:{}'.format(response.status_code, response))
      except Exception as err:
          print(err)
    • 音声検出タスクの結果を取得する

      # coding=utf-8
      # python version >= 3.6
      from alibabacloud_green20220302.client import Client
      from alibabacloud_green20220302 import models
      from alibabacloud_tea_openapi.models import Config
      import json
      
      config = Config(
          # 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 を取得することを推奨します',
          # 接続タイムアウト期間 (ミリ秒)。
          connect_timeout=10000,
          # 読み取りタイムアウト期間 (ミリ秒)。
          read_timeout=3000,
          region_id='ap-southeast-1',
          endpoint='green-cip.ap-southeast-1.aliyuncs.com'
      )
      
      # 注:審査性能を向上させるため、クライアントインスタンスを再利用してください。これにより、接続の繰り返し作成を回避できます。
      clt = Client(config)
      
      # タスク送信時に返された taskId。
      serviceParameters = {
          "taskId": '審査タスクに対して返されたタスク ID'
      }
      voiceModerationResultRequest = models.VoiceModerationResultRequest(
          # 審査タイプ:audio_multilingual_global は多言語音声審査用です。
          service='audio_multilingual_global',
          service_parameters=json.dumps(serviceParameters)
      )
      
      try:
          response = clt.voice_moderation_result(voiceModerationResultRequest)
          if response.status_code == 200:
              # 呼び出しは成功しました。
              # 審査結果を取得します。
              result = response.body
              print('response success. result:{}'.format(result))
          else:
              print('response not success. status:{} ,result:{}'.format(response.status_code, response))
      except Exception as err:
          print(err)

      ライブストリーム審査タスクのキャンセル

PHP SDK

PHP 5.6 以降がサポートされています。

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

この SDK は、以下の 3 つの音声審査シナリオをサポートしています。

パブリックにアクセス可能な音声をスキャンする

シナリオ

モデレーション用のオーディオファイルがパブリック URL からアクセス可能な場合、 Audio Moderation バージョン 2.0サービスは、モデレーションのために URL からファイルを取得できます。

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

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

    • 音声審査タスクを送信するためのサンプルコード

      <?php
        require('vendor/autoload.php');
      
      use AlibabaCloud\SDK\Green\V20220302\Models\VoiceModerationRequest;
      use AlibabaCloud\Tea\Exception\TeaUnableRetryError;
      use Darabonba\OpenApi\Models\Config;
      use AlibabaCloud\Tea\Utils\Utils\RuntimeOptions;
      use AlibabaCloud\SDK\Green\V20220302\Green;
      
      $config = new Config([]);
      /**
       * 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");
       */
      $config->accessKeyId = "環境変数から RAM ユーザーの AccessKey ID を取得することを推奨します";
      $config->accessKeySecret = "環境変数から RAM ユーザーの AccessKey Secret を取得することを推奨します";
      // 必要に応じてリージョンとエンドポイントを変更します。
      $config->regionId = "ap-southeast-1";
      $config->endpoint = "green-cip.ap-southeast-1.aliyuncs.com";
      // HTTP プロキシを設定します。
      // $config->httpProxy = "http://10.10.xx.xx:xxxx";
      // HTTPS プロキシを設定します。
      // $config->httpsProxy = "http://10.10.xx.xx:xxxx";
      // 注:審査性能を向上させるため、クライアントインスタンスを再利用してください。これにより、接続の繰り返し作成を回避できます。
      $client = new Green($config);
      
      $request = new VoiceModerationRequest();
      // 審査タイプ:audio_multilingual_global は多言語音声審査用です。
      $request->service = "audio_multilingual_global";
      $serviceParameters = array('url' => 'https://xxxx/xxx/sample.wav');
      
      $request->serviceParameters = json_encode($serviceParameters);
      
      $runtime = new RuntimeOptions();
      $runtime->readTimeout = 6000;
      $runtime->connectTimeout = 3000;
      
      try {
        $response = $client->voiceModeration($request, $runtime);
        print_r($response->body);
        if (200 == $response->statusCode) {
          $body = $response->body;
          print_r("requestId = " . $body->requestId);
          print_r("code = " . $body->code);
          print_r("message = " . $body->message);
          if (200 == $body->code) {
            $data = $body->data;
            print_r("taskId = " . $data->taskId);
          } else {
            print_r("voice moderation not success. code:" . $body->code);
          }
        } else {
          print_r("response not success. code:" . $response->statusCode);
        }
      } catch (TeaUnableRetryError $e) {
        var_dump($e->getMessage());
        var_dump($e->getErrorInfo());
        var_dump($e->getLastException());
        var_dump($e->getLastRequest());
      }
    • 音声審査タスクの結果を照会するためのサンプルコード

      <?php
      require('vendor/autoload.php');
      
      use AlibabaCloud\SDK\Green\V20220302\Models\VoiceModerationResultRequest;
      use AlibabaCloud\Tea\Exception\TeaUnableRetryError;
      use Darabonba\OpenApi\Models\Config;
      use AlibabaCloud\Tea\Utils\Utils\RuntimeOptions;
      use AlibabaCloud\SDK\Green\V20220302\Green;
      
      $config = new Config([]);
      /**
       * 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");
       */
      $config->accessKeyId = "環境変数から RAM ユーザーの AccessKey ID を取得することを推奨します";
      $config->accessKeySecret = "環境変数から RAM ユーザーの AccessKey Secret を取得することを推奨します";
      // 必要に応じてリージョンとエンドポイントを変更します。
      $config->regionId = "ap-southeast-1";
      $config->endpoint = "green-cip.ap-southeast-1.aliyuncs.com";
      // HTTP プロキシを設定します。
      // $config->httpProxy = "http://10.10.xx.xx:xxxx";
      // HTTPS プロキシを設定します。
      // $config->httpsProxy = "http://10.10.xx.xx:xxxx";
      // 注:審査性能を向上させるため、クライアントインスタンスを再利用してください。これにより、接続の繰り返し作成を回避できます。
      $client = new Green($config);
      
      $request = new VoiceModerationResultRequest();
      // 審査タイプ:audio_multilingual_global は多言語音声審査用です。
      $request->service = "audio_multilingual_global";
      // タスク送信時に返された taskId。
      $serviceParameters = array('taskId' => 'au_f_O5z5iaIis3iI0X2oNYj7qa-1x****');
      
      $request->serviceParameters = json_encode($serviceParameters);
      
      $runtime = new RuntimeOptions();
      $runtime->readTimeout = 6000;
      $runtime->connectTimeout = 3000;
      
      try {
          $response = $client->voiceModerationResult($request, $runtime);
          print_r($response->body);
          if (200 == $response->statusCode) {
              $body = $response->body;
              print_r("requestId = " . $body->requestId);
              print_r("code = " . $body->code);
              print_r("message = " . $body->message);
              if (200 == $body->code) {
                  $data = $body->data;
                  print_r("liveId = " . $data->liveId);
                  print_r("sliceDetails = " . $data->sliceDetails);
                  print_r("riskLevel = " . $data->riskLevel);
                  print_r("taskId = " . $data->taskId);
                  print_r("url = " . $data->url);
              } else {
                  print_r("voice moderation result not success. code:" . $body->code);
              }
          } else {
              print_r("response not success. code:" . $response->statusCode);
          }
      } catch (TeaUnableRetryError $e) {
          var_dump($e->getMessage());
          var_dump($e->getErrorInfo());
          var_dump($e->getLastException());
          var_dump($e->getLastRequest());
      }

ローカル音声の検出

シナリオ

ローカルマシン上にあり、パブリック URL を持たない音声ファイルを審査するには、Content Moderation が提供する Object Storage Service (OSS) バケットにファイルをアップロードできます。音声審査 Version 2.0 サービスは、OSS に直接アクセスして審査用の音声コンテンツを取得できます。

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

    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\VoiceModerationResponse;
      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\VoiceModerationRequest;
      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 VoiceModerationResponse
       * @throws \OSS\Core\OssException
       */
      function invoke($accessKeyId, $accessKeySecret, $endpoint): VoiceModerationResponse
      {
          global $tokenArray;
          // 注:審査性能を向上させるため、クライアントインスタンスを再利用してください。これにより、接続の繰り返し作成を回避できます。
          $client = create_client($accessKeyId, $accessKeySecret, $endpoint);
          // RuntimeObject インスタンスを作成し、ランタイムパラメーターを設定します。
          $runtime = new RuntimeOptions([]);
          // ローカルファイルのフルパス。例:D:\\localPath\\exampleFile.mp3。
          $filePath = "D:\\localPath\\exampleFile.mp3";
      
          //ファイルをアップロードするための一時トークンを取得します。
          if (!isset($tokenArray[$endpoint]) || $tokenArray[$endpoint]->expiration <= time()) {
              $token = $client->describeUploadToken();
              $tokenArray[$endpoint] = $token->body->data;
          }
      
          // ファイルをアップロードします。
          $objectName = upload_file($filePath, $tokenArray[$endpoint]);
      
          // 審査パラメーターを構築します。
          $request = new VoiceModerationRequest();
          // 審査タイプ:audio_multilingual_global は多言語音声審査用です。
            $request->service = "audio_multilingual_global";
          // 審査対象の音声ファイルに関する OSS 情報。
          $serviceParameters = array(
              'ossObjectName' => $objectName,
              'ossBucketName' => $tokenArray[$endpoint]->bucketName,
              'dataId' => uniqid());
          $request->serviceParameters = json_encode($serviceParameters);
          // 審査タスクを送信します。
          return $client->voiceModerationWithOptions($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());
      }
    • 音声審査タスクの結果を照会するためのサンプルコード

      <?php
      require('vendor/autoload.php');
      
      use AlibabaCloud\SDK\Green\V20220302\Models\VoiceModerationResultRequest;
      use AlibabaCloud\Tea\Exception\TeaUnableRetryError;
      use Darabonba\OpenApi\Models\Config;
      use AlibabaCloud\Tea\Utils\Utils\RuntimeOptions;
      use AlibabaCloud\SDK\Green\V20220302\Green;
      
      $config = new Config([]);
      /**
       * 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");
       */
      $config->accessKeyId = "環境変数から RAM ユーザーの AccessKey ID を取得することを推奨します";
      $config->accessKeySecret = "環境変数から RAM ユーザーの AccessKey Secret を取得することを推奨します";
      // 必要に応じてリージョンとエンドポイントを変更します。
      $config->regionId = "ap-southeast-1";
      $config->endpoint = "green-cip.ap-southeast-1.aliyuncs.com";
      // HTTP プロキシを設定します。
      // $config->httpProxy = "http://10.10.xx.xx:xxxx";
      // HTTPS プロキシを設定します。
      // $config->httpsProxy = "http://10.10.xx.xx:xxxx";
      // 注:審査性能を向上させるため、クライアントインスタンスを再利用してください。これにより、接続の繰り返し作成を回避できます。
      $client = new Green($config);
      
      $request = new VoiceModerationResultRequest();
      // 審査タイプ:audio_multilingual_global は多言語音声審査用です。
      $request->service = "audio_multilingual_global";
      // タスク送信時に返された taskId。
      $serviceParameters = array('taskId' => 'au_f_O5z5iaIis3iI0X2oNYj7qa-1x****');
      
      $request->serviceParameters = json_encode($serviceParameters);
      
      $runtime = new RuntimeOptions();
      $runtime->readTimeout = 6000;
      $runtime->connectTimeout = 3000;
      
      try {
          $response = $client->voiceModerationResult($request, $runtime);
          print_r($response->body);
          if (200 == $response->statusCode) {
              $body = $response->body;
              print_r("requestId = " . $body->requestId);
              print_r("code = " . $body->code);
              print_r("message = " . $body->message);
              if (200 == $body->code) {
                  $data = $body->data;
                  print_r("liveId = " . $data->liveId);
                  print_r("sliceDetails = " . $data->sliceDetails);
                  print_r("taskId = " . $data->taskId);
                  print_r("url = " . $data->url);
              } else {
                  print_r("voice moderation result not success. code:" . $body->code);
              }
          } else {
              print_r("response not success. code:" . $response->statusCode);
          }
      } catch (TeaUnableRetryError $e) {
          var_dump($e->getMessage());
          var_dump($e->getErrorInfo());
          var_dump($e->getLastException());
          var_dump($e->getLastRequest());
      }

OSS 内の音声ファイルの審査

シナリオ

Alibaba Cloud Object Storage Service (OSS) に保存されている音声ファイルを審査するには、サービスロールを作成して Content Moderation サービスに OSS へのアクセス権を付与します。 Audio Moderation V2.0 サービスは、このサービスロールを使用して OSS からファイルを取得し、審査します。 サービスロールを作成するには、クラウドリソースアクセス承認ページにアクセスしてください。

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

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

    • 音声審査タスクを送信するためのサンプルコード

      <?php
        require('vendor/autoload.php');
      
      use AlibabaCloud\SDK\Green\V20220302\Models\VoiceModerationRequest;
      use AlibabaCloud\Tea\Exception\TeaUnableRetryError;
      use Darabonba\OpenApi\Models\Config;
      use AlibabaCloud\Tea\Utils\Utils\RuntimeOptions;
      use AlibabaCloud\SDK\Green\V20220302\Green;
      
      $config = new Config([]);
      /**
       * 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");
       */
      $config->accessKeyId = "環境変数から RAM ユーザーの AccessKey ID を取得することを推奨します";
      $config->accessKeySecret = "環境変数から RAM ユーザーの AccessKey Secret を取得することを推奨します";
      // 必要に応じてリージョンとエンドポイントを変更します。
      $config->regionId = "ap-southeast-1";
      $config->endpoint = "green-cip.ap-southeast-1.aliyuncs.com";
      // HTTP プロキシを設定します。
      // $config->httpProxy = "http://10.10.xx.xx:xxxx";
      // HTTPS プロキシを設定します。
      // $config->httpsProxy = "http://10.10.xx.xx:xxxx";
      // 注:審査性能を向上させるため、クライアントインスタンスを再利用してください。これにより、接続の繰り返し作成を回避できます。
      $client = new Green($config);
      
      $request = new VoiceModerationRequest();
      // 審査タイプ:audio_multilingual_global は多言語音声審査用です。
      $request->service = "audio_multilingual_global";
      $serviceParameters = array(
                // 審査対象のファイル。例:voice/001.wav
              'ossObjectName' => 'voice/001.wav',
              // 審査対象のファイルのバケットが配置されているリージョン。例:cn-shanghai
              'ossRegionId' => 'cn-shanghai',
                // 審査対象のファイルを保存するバケットの名前。例:bucket001
              'ossBucketName' => 'bucket001',
              // データの一意の ID。
              'dataId' => uniqid());
      
      $request->serviceParameters = json_encode($serviceParameters);
      
      $runtime = new RuntimeOptions();
      $runtime->readTimeout = 6000;
      $runtime->connectTimeout = 3000;
      
      try {
        $response = $client->voiceModeration($request, $runtime);
        print_r($response->body);
        if (200 == $response->statusCode) {
          $body = $response->body;
          print_r("requestId = " . $body->requestId);
          print_r("code = " . $body->code);
          print_r("message = " . $body->message);
          if (200 == $body->code) {
            $data = $body->data;
            print_r("taskId = " . $data->taskId);
          } else {
            print_r("voice moderation not success. code:" . $body->code);
          }
        } else {
          print_r("response not success. code:" . $response->statusCode);
        }
      } catch (TeaUnableRetryError $e) {
        var_dump($e->getMessage());
        var_dump($e->getErrorInfo());
        var_dump($e->getLastException());
        var_dump($e->getLastRequest());
      }
    • 音声審査タスクの結果を照会するためのサンプルコード

      <?php
      require('vendor/autoload.php');
      
      use AlibabaCloud\SDK\Green\V20220302\Models\VoiceModerationResultRequest;
      use AlibabaCloud\Tea\Exception\TeaUnableRetryError;
      use Darabonba\OpenApi\Models\Config;
      use AlibabaCloud\Tea\Utils\Utils\RuntimeOptions;
      use AlibabaCloud\SDK\Green\V20220302\Green;
      
      $config = new Config([]);
      /**
       * 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");
       */
      $config->accessKeyId = "環境変数から RAM ユーザーの AccessKey ID を取得することを推奨します";
      $config->accessKeySecret = "環境変数から RAM ユーザーの AccessKey Secret を取得することを推奨します";
      // 必要に応じてリージョンとエンドポイントを変更します。
      $config->regionId = "ap-southeast-1";
      $config->endpoint = "green-cip.ap-southeast-1.aliyuncs.com";
      // HTTP プロキシを設定します。
      // $config->httpProxy = "http://10.10.xx.xx:xxxx";
      // HTTPS プロキシを設定します。
      // $config->httpsProxy = "http://10.10.xx.xx:xxxx";
      // 注:審査性能を向上させるため、クライアントインスタンスを再利用してください。これにより、接続の繰り返し作成を回避できます。
      $client = new Green($config);
      
      $request = new VoiceModerationResultRequest();
      // 審査タイプ:audio_multilingual_global は多言語音声審査用です。
      $request->service = "audio_multilingual_global";
      // タスク送信時に返された taskId。
      $serviceParameters = array('taskId' => 'au_f_O5z5iaIis3iI0X2oNYj7qa-1x****');
      
      $request->serviceParameters = json_encode($serviceParameters);
      
      $runtime = new RuntimeOptions();
      $runtime->readTimeout = 6000;
      $runtime->connectTimeout = 3000;
      
      try {
          $response = $client->voiceModerationResult($request, $runtime);
          print_r($response->body);
          if (200 == $response->statusCode) {
              $body = $response->body;
              print_r("requestId = " . $body->requestId);
              print_r("code = " . $body->code);
              print_r("message = " . $body->message);
              if (200 == $body->code) {
                  $data = $body->data;
                  print_r("liveId = " . $data->liveId);
                  print_r("sliceDetails = " . $data->sliceDetails);
                  print_r("taskId = " . $data->taskId);
                  print_r("url = " . $data->url);
              } else {
                  print_r("voice moderation result not success. code:" . $body->code);
              }
          } else {
              print_r("response not success. code:" . $response->statusCode);
          }
      } catch (TeaUnableRetryError $e) {
          var_dump($e->getMessage());
          var_dump($e->getErrorInfo());
          var_dump($e->getLastException());
          var_dump($e->getLastRequest());
      }

Go SDK

この SDK は、以下の 3 つの音声審査シナリオをサポートしています。

パブリックにアクセス可能な音声の検出

シナリオ

審査対象のオーディオファイルがパブリック URL からアクセス可能な場合、Audio Moderation バージョン 2.0 サービスは、URL から審査のためにファイルを取得できます。

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

    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"
          green "github.com/alibabacloud-go/green-20220302/v3/client"
          "github.com/alibabacloud-go/tea/tea"
          "net/http"
      )
      
      func main() {
          config := &openapi.Config{
              /**
               * 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")
               */
              AccessKeyId: tea.String("環境変数から RAM ユーザーの AccessKey ID を取得することを推奨します"),
              AccessKeySecret: tea.String("環境変数から RAM ユーザーの AccessKey Secret を取得することを推奨します"),
              // リージョンを指定します。
              RegionId: tea.String("ap-southeast-1"),
              Endpoint: tea.String("green-cip.ap-southeast-1.aliyuncs.com"),
              // HTTP プロキシを設定します。
              //HttpProxy: tea.String("http://xx.xx.xx.xx:xxxx"),
              // HTTPS プロキシを設定します。
              //HttpsProxy: tea.String("https://xx.xx.xx.xx:xxxx"),
              /**
               * タイムアウト期間を設定します。サーバー側のリンク全体のタイムアウト期間は 10 秒です。それに応じてタイムアウト期間を設定してください。
               * ReadTimeout の値がサーバー側の処理時間より短い場合、ReadTimeout 例外が返されます。
               */
              ConnectTimeout: tea.Int(3000),
              ReadTimeout:    tea.Int(6000),
          }
          // 注:審査性能を向上させるため、クライアントインスタンスを再利用してください。これにより、接続の繰り返し作成を回避できます。
          client, _err := green.NewClient(config)
          if _err != nil {
              panic(_err)
          }
          // 審査対象の音声ファイルの URL。
          serviceParameters, _ := json.Marshal(
              map[string]interface{}{
                  "url": "https://xxxx/xxx/sample.wav",
              },
          )
          request := green.VoiceModerationRequest{
              // 音声審査サービス。
              Service:           tea.String("audio_multilingual_global"),
              ServiceParameters: tea.String(string(serviceParameters)),
          }
          result, _err := client.VoiceModeration(&request)
          if _err != nil {
              panic(_err)
          }
          statusCode := tea.IntValue(tea.ToInt(result.StatusCode))
          if statusCode == http.StatusOK {
              voiceModerationResponse := result.Body
              fmt.Println("response success. response:" + voiceModerationResponse.String())
              if tea.IntValue(tea.ToInt(voiceModerationResponse.Code)) == 200 {
                  voiceModerationResponseData := voiceModerationResponse.Data
                  fmt.Println("response taskId:" + tea.StringValue(voiceModerationResponseData.TaskId))
              } else {
                  fmt.Println("voice moderation not success. code:" + tea.ToString(tea.Int32Value(voiceModerationResponse.Code)))
              }
          } else {
              fmt.Println("response not success. status:" + tea.ToString(statusCode))
          }
      }
    • 音声審査タスクの結果を照会するためのサンプルコード

      package main
      
      import (
          "encoding/json"
          "fmt"
          openapi "github.com/alibabacloud-go/darabonba-openapi/v2/client"
          green "github.com/alibabacloud-go/green-20220302/v3/client"
          "github.com/alibabacloud-go/tea/tea"
          "net/http"
      )
      
      func main() {
          config := &openapi.Config{
              /**
               * 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")
               */
              AccessKeyId: tea.String("環境変数から RAM ユーザーの AccessKey ID を取得することを推奨します"),
              AccessKeySecret: tea.String("環境変数から RAM ユーザーの AccessKey Secret を取得することを推奨します"),
              // リージョンを指定します。
              RegionId: tea.String("ap-southeast-1"),
              Endpoint: tea.String("green-cip.ap-southeast-1.aliyuncs.com"),
              // HTTP プロキシを設定します。
              // HttpProxy: tea.String("http://xx.xx.xx.xx:xxxx"),
              // HTTPS プロキシを設定します。
              // HttpsProxy: tea.String("https://xx.xx.xx.xx:xxxx"),
              /**
               * タイムアウト期間を設定します。サーバー側のリンク全体のタイムアウト期間は 10 秒です。それに応じてタイムアウト期間を設定してください。
               * ReadTimeout の値がサーバー側の処理時間より短い場合、ReadTimeout 例外が返されます。
               */
              ConnectTimeout: tea.Int(3000),
              ReadTimeout:    tea.Int(6000),
          }
          // 注:審査性能を向上させるため、クライアントインスタンスを再利用してください。これにより、接続の繰り返し作成を回避できます。
          client, _err := green.NewClient(config)
          if _err != nil {
              panic(_err)
          }
      
          serviceParameters, _ := json.Marshal(
              map[string]interface{}{
                  "taskId": "<Task ID>",
              },
          )
          request := green.VoiceModerationResultRequest{
              // 音声審査サービス。
              Service:           tea.String("audio_multilingual_global"),
              ServiceParameters: tea.String(string(serviceParameters)),
          }
          result, _err := client.VoiceModerationResult(&request)
          if _err != nil {
              panic(_err)
          }
          statusCode := tea.IntValue(tea.ToInt(result.StatusCode))
          if statusCode == http.StatusOK {
              voiceModerationResponse := result.Body
              fmt.Println("response success. response:" + voiceModerationResponse.String())
              if tea.IntValue(tea.ToInt(voiceModerationResponse.Code)) == 200 {
                  resultResponseBodyData := voiceModerationResponse.Data
                  fmt.Println("response liveId:" + tea.StringValue(resultResponseBodyData.LiveId))
                  fmt.Println("response sliceDetails:" + tea.ToString(resultResponseBodyData.SliceDetails))
              } else {
                  fmt.Println("get voice moderation result not success. code:" + tea.ToString(tea.Int32Value(voiceModerationResponse.Code)))
              }
          } else {
              fmt.Println("response not success. status:" + tea.ToString(statusCode))
          }
      }
                                      

ローカル音声の検出

シナリオ

審査が必要なオーディオがローカルマシンに保存されており、パブリック URL を持たない場合は、Content Moderation が提供する Object Storage Service (OSS) のバケットにオーディオをアップロードできます。 Audio Moderation 2.0 サービスは、OSS に直接アクセスして、審査用のオーディオコンテンツを取得できます。

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

    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/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.VoiceModerationResponse, _err error) {
          //注:審査性能を向上させるため、クライアントインスタンスを再利用してください。これにより、接続の繰り返し作成を回避できます。
          client, _err := createClient(accessKeyId, accessKeySecret, endpoint)
          if _err != nil {
          return nil,_err
          }
          //ランタイムパラメーターを設定します。この設定は、このランタイムパラメーターインスタンスを使用するリクエストにのみ有効です。
          runtime := &util.RuntimeOptions{}
          //ローカルファイルのフルパス。例:D:\localPath\exampleFile.wav。
          var filePath = "D:\\localPath\\exampleFile.wav"
          //ファイルをアップロードするための一時トークンを取得します。
          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(),
          },
          )
          voiceModerationRequest := &green20220302.VoiceModerationRequest{
          // 音声審査サービス。
            Service:           tea.String("audio_multilingual_global"),
          ServiceParameters: tea.String(string(serviceParameters)),
          }
      
          return client.VoiceModerationWithOptions(voiceModerationRequest, 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)
          
          flag := false
          if _err != nil {
          var err = &tea.SDKError{}
          if _t, ok := _err.(*tea.SDKError); ok {
          err = _t
          if *err.StatusCode == 500 {
          flag = true
          }
          }
          }
          if response == nil || *response.StatusCode == 500 || *response.Body.Code == 500 {
          flag = true
          }
          //自動ルーティング。リージョンは ap-southeast-1 に切り替えられます。
          if flag {
          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
          voiceModerationResponseData := 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 := voiceModerationResponseData.Result
          fmt.Println("response dataId:" + tea.StringValue(voiceModerationResponseData.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("voice moderation not success. status" + tea.ToString(body.Code))
          }
          } else {
          fmt.Print("response not success. status:" + tea.ToString(statusCode))
          }
          }
      }
    • 音声審査タスクの結果を照会するためのサンプルコード

      package main
      
      import (
          "encoding/json"
          "fmt"
          openapi "github.com/alibabacloud-go/darabonba-openapi/v2/client"
          green "github.com/alibabacloud-go/green-20220302/v3/client"
          "github.com/alibabacloud-go/tea/tea"
          "net/http"
      )
      
      func main() {
          config := &openapi.Config{
              /**
               * 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")
               */
              AccessKeyId: tea.String("環境変数から RAM ユーザーの AccessKey ID を取得することを推奨します"),
              AccessKeySecret: tea.String("環境変数から RAM ユーザーの AccessKey Secret を取得することを推奨します"),
              // リージョンを指定します。
              RegionId: tea.String("ap-southeast-1"),
              Endpoint: tea.String("green-cip.ap-southeast-1.aliyuncs.com"),
              // HTTP プロキシを設定します。
              // HttpProxy: tea.String("http://xx.xx.xx.xx:xxxx"),
              // HTTPS プロキシを設定します。
              // HttpsProxy: tea.String("https://xx.xx.xx.xx:xxxx"),
              /**
               * タイムアウト期間を設定します。サーバー側のリンク全体のタイムアウト期間は 10 秒です。それに応じてタイムアウト期間を設定してください。
               * ReadTimeout の値がサーバー側の処理時間より短い場合、ReadTimeout 例外が返されます。
               */
              ConnectTimeout: tea.Int(3000),
              ReadTimeout:    tea.Int(6000),
          }
          // 注:審査性能を向上させるため、クライアントインスタンスを再利用してください。これにより、接続の繰り返し作成を回避できます。
          client, _err := green.NewClient(config)
          if _err != nil {
              panic(_err)
          }
      
          serviceParameters, _ := json.Marshal(
              map[string]interface{}{
                  "taskId": "<Task ID>",
              },
          )
          request := green.VoiceModerationResultRequest{
              // 音声審査サービス。
              Service:           tea.String("audio_multilingual_global"),
              ServiceParameters: tea.String(string(serviceParameters)),
          }
          result, _err := client.VoiceModerationResult(&request)
          if _err != nil {
              panic(_err)
          }
          statusCode := tea.IntValue(tea.ToInt(result.StatusCode))
          if statusCode == http.StatusOK {
              voiceModerationResponse := result.Body
              fmt.Println("response success. response:" + voiceModerationResponse.String())
              if tea.IntValue(tea.ToInt(voiceModerationResponse.Code)) == 200 {
                  resultResponseBodyData := voiceModerationResponse.Data
                  fmt.Println("response liveId:" + tea.StringValue(resultResponseBodyData.LiveId))
                  fmt.Println("response sliceDetails:" + tea.ToString(resultResponseBodyData.SliceDetails))
              } else {
                  fmt.Println("get voice moderation result not success. code:" + tea.ToString(tea.Int32Value(voiceModerationResponse.Code)))
              }
          } else {
              fmt.Println("response not success. status:" + tea.ToString(statusCode))
          }
      }
                                      

OSS 内の音声ファイルの審査

シナリオ

審査が必要な音声ファイルがすでに Alibaba Cloud Object Storage Service (OSS) に保存されている場合、サービスロールを作成して Content Moderation サービスに OSS へのアクセス権を付与できます。 音声審査 バージョン 2.0 サービスは、サービスロールを使用して OSS からファイルを取得し、審査を実行します。 サービスロールを作成するには、クラウド リソースアクセス承認ページにアクセスしてください。

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

    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"
          green "github.com/alibabacloud-go/green-20220302/v3/client"
          "github.com/alibabacloud-go/tea/tea"
          "net/http"
      )
      
      func main() {
          config := &openapi.Config{
              /**
               * 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")
               */
              AccessKeyId: tea.String("環境変数から RAM ユーザーの AccessKey ID を取得することを推奨します"),
              AccessKeySecret: tea.String("環境変数から RAM ユーザーの AccessKey Secret を取得することを推奨します"),
              // リージョンを指定します。
              RegionId: tea.String("ap-southeast-1"),
              Endpoint: tea.String("green-cip.ap-southeast-1.aliyuncs.com"),
              // HTTP プロキシを設定します。
              //HttpProxy: tea.String("http://xx.xx.xx.xx:xxxx"),
              // HTTPS プロキシを設定します。
              //HttpsProxy: tea.String("https://xx.xx.xx.xx:xxxx"),
              /**
               * タイムアウト期間を設定します。サーバー側のリンク全体のタイムアウト期間は 10 秒です。それに応じてタイムアウト期間を設定してください。
               * ReadTimeout の値がサーバー側の処理時間より短い場合、ReadTimeout 例外が返されます。
               */
              ConnectTimeout: tea.Int(3000),
              ReadTimeout:    tea.Int(6000),
          }
          // 注:審査性能を向上させるため、クライアントインスタンスを再利用してください。これにより、接続の繰り返し作成を回避できます。
          client, _err := green.NewClient(config)
          if _err != nil {
              panic(_err)
          }
          // 審査対象の音声ファイルの URL。
          serviceParameters, _ := json.Marshal(
              map[string]interface{}{
                  	//音声ファイルを保存する OSS バケットが配置されているリージョン。例:cn-shanghai。
      		"ossRegionId": "cn-shanghai",
      		//音声ファイルを保存する OSS バケットの名前。例:bucket001。
      		"ossBucketName":"bucket001",
      		//音声ファイルオブジェクトの名前。例:voice/001.wav。
      		"ossObjectName":"voice/001.wav",
      		//審査対象のデータの ID。
      		"dataId":   uuid.New().String(),
              },
          )
          request := green.VoiceModerationRequest{
              // 音声審査サービス。
              Service:           tea.String("audio_multilingual_global"),
              ServiceParameters: tea.String(string(serviceParameters)),
          }
          result, _err := client.VoiceModeration(&request)
          if _err != nil {
              panic(_err)
          }
          statusCode := tea.IntValue(tea.ToInt(result.StatusCode))
          if statusCode == http.StatusOK {
              voiceModerationResponse := result.Body
              fmt.Println("response success. response:" + voiceModerationResponse.String())
              if tea.IntValue(tea.ToInt(voiceModerationResponse.Code)) == 200 {
                  voiceModerationResponseData := voiceModerationResponse.Data
                  fmt.Println("response taskId:" + tea.StringValue(voiceModerationResponseData.TaskId))
              } else {
                  fmt.Println("voice moderation not success. code:" + tea.ToString(tea.Int32Value(voiceModerationResponse.Code)))
              }
          } else {
              fmt.Println("response not success. status:" + tea.ToString(statusCode))
          }
      }
    • 音声審査タスクの結果を照会するためのサンプルコード

      package main
      
      import (
          "encoding/json"
          "fmt"
          openapi "github.com/alibabacloud-go/darabonba-openapi/v2/client"
          green "github.com/alibabacloud-go/green-20220302/v3/client"
          "github.com/alibabacloud-go/tea/tea"
          "net/http"
      )
      
      func main() {
          config := &openapi.Config{
              /**
               * 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")
               */
              AccessKeyId: tea.String("環境変数から RAM ユーザーの AccessKey ID を取得することを推奨します"),
              AccessKeySecret: tea.String("環境変数から RAM ユーザーの AccessKey Secret を取得することを推奨します"),
              // リージョンを指定します。
              RegionId: tea.String("ap-southeast-1"),
              Endpoint: tea.String("green-cip.ap-southeast-1.aliyuncs.com"),
              // HTTP プロキシを設定します。
              // HttpProxy: tea.String("http://xx.xx.xx.xx:xxxx"),
              // HTTPS プロキシを設定します。
              // HttpsProxy: tea.String("https://xx.xx.xx.xx:xxxx"),
              /**
               * タイムアウト期間を設定します。サーバー側のリンク全体のタイムアウト期間は 10 秒です。それに応じてタイムアウト期間を設定してください。
               * ReadTimeout の値がサーバー側の処理時間より短い場合、ReadTimeout 例外が返されます。
               */
              ConnectTimeout: tea.Int(3000),
              ReadTimeout:    tea.Int(6000),
          }
          // 注:審査性能を向上させるため、クライアントインスタンスを再利用してください。これにより、接続の繰り返し作成を回避できます。
          client, _err := green.NewClient(config)
          if _err != nil {
              panic(_err)
          }
      
          serviceParameters, _ := json.Marshal(
              map[string]interface{}{
                  "taskId": "<Task ID>",
              },
          )
          request := green.VoiceModerationResultRequest{
              // 音声審査サービス。
              Service:           tea.String("audio_multilingual_global"),
              ServiceParameters: tea.String(string(serviceParameters)),
          }
          result, _err := client.VoiceModerationResult(&request)
          if _err != nil {
              panic(_err)
          }
          statusCode := tea.IntValue(tea.ToInt(result.StatusCode))
          if statusCode == http.StatusOK {
              voiceModerationResponse := result.Body
              fmt.Println("response success. response:" + voiceModerationResponse.String())
              if tea.IntValue(tea.ToInt(voiceModerationResponse.Code)) == 200 {
                  resultResponseBodyData := voiceModerationResponse.Data
                  fmt.Println("response liveId:" + tea.StringValue(resultResponseBodyData.LiveId))
                  fmt.Println("response sliceDetails:" + tea.ToString(resultResponseBodyData.SliceDetails))
              } else {
                  fmt.Println("get voice moderation result not success. code:" + tea.ToString(tea.Int32Value(voiceModerationResponse.Code)))
              }
          } else {
              fmt.Println("response not success. status:" + tea.ToString(statusCode))
          }
      }
                                      

C# SDK

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

この SDK は、以下の 3 つの音声審査シナリオをサポートしています。

公開アクセス可能な音声ファイルの審査

シナリオ

審査対象の音声ファイルが公開 URL からアクセス可能な場合、音声審査 バージョン 2.0 サービスはその URL からファイルを取得して審査できます。

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

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

    • 音声審査タスクを送信するためのサンプルコード

      using Newtonsoft.Json;
      using Tea;
      
      namespace AlibabaCloud.SDK.Sample
      {
          public class Sample
          {
      
              /**
               * AccessKey ID と AccessKey Secret を使用してクライアントを初期化します。
               * @param accessKeyId
               * @param accessKeySecret
               * @return Client
               * @throws Exception
               */
              public static AlibabaCloud.SDK.Green20220302.Client CreateClient(string accessKeyId, string accessKeySecret)
              {
                  AlibabaCloud.OpenApiClient.Models.Config config = new AlibabaCloud.OpenApiClient.Models.Config
                  {
                     	AccessKeyId = accessKeyId,
      				AccessKeySecret = accessKeySecret,
                  };
                  // サービスのエンドポイント。
                  config.Endpoint = "green-cip.ap-southeast-1.aliyuncs.com";
                  
                  return new AlibabaCloud.SDK.Green20220302.Client(config);
              }
      
              public static void Main(string[] args)
              {
                  // プロジェクトコードに AccessKey ペアをハードコーディングすると、AccessKey ペアが漏洩し、アカウント内のすべてのリソースのセキュリティが損なわれる可能性があります。以下のコードは参考用です。セキュリティトークンサービス (STS) トークンなどのより安全な方法を使用することを推奨します。
                  /**
                  * Alibaba Cloud アカウントの AccessKey ペアは、すべての API 操作に対する権限を持っています。これらの認証情報を使用して操作を実行することは、リスクの高い操作です。RAM ユーザーを使用して API 操作を呼び出すか、日常の O&M を実行することを推奨します。
                  * 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 を環境変数から取得することを推奨します',
                  // 注:審査パフォーマンスを向上させるため、クライアントインスタンスを再利用してください。これにより、接続の繰り返し作成を避けることができます。
                  AlibabaCloud.SDK.Green20220302.Client client = CreateClient(accessKeyId, accessKeySecret);
                  // 音声審査リクエストを構築します。
                  AlibabaCloud.SDK.Green20220302.Models.VoiceModerationRequest voiceModerationRequest = new AlibabaCloud.SDK.Green20220302.Models.VoiceModerationRequest();
                  // 音声審査サービス。
                  voiceModerationRequest.Service="audio_multilingual_global";
                  Dictionary<String,Object> task=new Dictionary<string, object>();
                  // 審査対象の音声ファイルの URL。URL は公開アクセス可能である必要があります。
                  task.Add("url","https://xxxx/xxx/sample.wav");
                  voiceModerationRequest.ServiceParameters=JsonConvert.SerializeObject(task);
                  // RuntimeObject インスタンスを作成し、実行時パラメーターを設定します。
                  AlibabaCloud.TeaUtil.Models.RuntimeOptions runtime = new AlibabaCloud.TeaUtil.Models.RuntimeOptions();
                  runtime.ReadTimeout = 10000;
                  runtime.ConnectTimeout = 10000;
                  try
                  {
                      // 音声審査タスクを送信します。
                    AlibabaCloud.SDK.Green20220302.Models.VoiceModerationResponse response= client.VoiceModerationWithOptions(voiceModerationRequest, runtime);
                  if(response is not null){
                      Console.WriteLine("response statusCode : "+response.StatusCode);
                      if (response.Body is not null){
                      Console.WriteLine("requestId : " + response.Body.RequestId);
                      Console.WriteLine("code : " + response.Body.Code);
                      Console.WriteLine("message : " + response.Body.Message);
                          if(response.Body.Data is not null){
                              Console.WriteLine("taskId : " + response.Body.Data.TaskId);
                          }
                      }
                  }
                  }
                  catch (TeaException error)
                  {
                      // 必要に応じてエラーを出力します。
                      AlibabaCloud.TeaUtil.Common.AssertAsString(error.Message);
                      Console.WriteLine("error : " + error);
                  }
                  catch (Exception _error)
                  {
                      TeaException error = new TeaException(new Dictionary<string, object>
                      {
                          { "message", _error.Message }
                      });
                      // 必要に応じてエラーを出力します。
                      AlibabaCloud.TeaUtil.Common.AssertAsString(error.Message);
                      Console.WriteLine("error : " + error);
                  }
              }
          }
      }
    • 音声審査タスクの結果をクエリするためのサンプルコード

      using Newtonsoft.Json;
      using Tea;
      
      namespace AlibabaCloud.SDK.Sample
      {
          public class Sample
          {
      
              /**
               * AccessKey ID と AccessKey Secret を使用してクライアントを初期化します。
               * @param accessKeyId
               * @param accessKeySecret
               * @return Client
               * @throws Exception
               */
              public static AlibabaCloud.SDK.Green20220302.Client CreateClient(string accessKeyId, string accessKeySecret)
              {
                  AlibabaCloud.OpenApiClient.Models.Config config = new AlibabaCloud.OpenApiClient.Models.Config
                  {
                      AccessKeyId = accessKeyId,
                      AccessKeySecret = accessKeySecret,
                  };
                  // サービスのエンドポイント。
                  config.Endpoint = "green-cip.ap-southeast-1.aliyuncs.com";
                  return new AlibabaCloud.SDK.Green20220302.Client(config);
              }
      
              public static void Main(string[] args)
              {
                  // プロジェクトコードに AccessKey ペアをハードコーディングすると、AccessKey ペアが漏洩し、アカウント内のすべてのリソースのセキュリティが損なわれる可能性があります。以下のコードは参考用です。セキュリティトークンサービス (STS) トークンなどのより安全な方法を使用することを推奨します。
                  /**
                  * Alibaba Cloud アカウントの AccessKey ペアは、すべての API 操作に対する権限を持っています。これらの認証情報を使用して操作を実行することは、リスクの高い操作です。RAM ユーザーを使用して API 操作を呼び出すか、日常の O&M を実行することを推奨します。
                  * 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 を環境変数から取得することを推奨します',  
                	// 注:審査パフォーマンスを向上させるため、クライアントインスタンスを再利用してください。これにより、接続の繰り返し作成を避けることができます。
                  AlibabaCloud.SDK.Green20220302.Client client = CreateClient(accessKeyId, accessKeySecret);
                  // 音声審査リクエストを構築します。
                  AlibabaCloud.SDK.Green20220302.Models.VoiceModerationResultRequest voiceModerationResultRequest = new AlibabaCloud.SDK.Green20220302.Models.VoiceModerationResultRequest();
                  // 音声審査サービス。
                  voiceModerationResultRequest.Service="audio_multilingual_global";
                  Dictionary<String,Object> task=new Dictionary<string, object>();
                  // 結果をクエリしたいタスクの ID。
                  task.Add("taskId","<結果をクエリしたいタスクの ID>");
                  voiceModerationResultRequest.ServiceParameters=JsonConvert.SerializeObject(task);
                  // RuntimeObject インスタンスを作成し、実行時パラメーターを設定します。
                  AlibabaCloud.TeaUtil.Models.RuntimeOptions runtime = new AlibabaCloud.TeaUtil.Models.RuntimeOptions();
                  runtime.ReadTimeout = 10000;
                  runtime.ConnectTimeout = 10000;
                  try
                  {
                      // 音声審査タスクを送信します。
                    AlibabaCloud.SDK.Green20220302.Models.VoiceModerationResultResponse response= client.VoiceModerationResultWithOptions(voiceModerationResultRequest, runtime);
                  if(response is not null){
                      Console.WriteLine("response statusCode : "+response.StatusCode);
                      if (response.Body is not null){
                      Console.WriteLine("requestId : " + response.Body.RequestId);
                      Console.WriteLine("code : " + response.Body.Code);
                      Console.WriteLine("message : " + response.Body.Message);
                          if(response.Body.Data is not null){
                              Console.WriteLine("taskId : " + response.Body.Data.TaskId);
                              Console.WriteLine("liveId : " + response.Body.Data.LiveId);
                              Console.WriteLine("url : " + response.Body.Data.Url);
                              Console.WriteLine("sliceDetails : " + JsonConvert.SerializeObject(response.Body.Data.SliceDetails));
                          }
                      }
                  }
                  }
                  catch (TeaException error)
                  {
                      // 必要に応じてエラーを出力します。
                      AlibabaCloud.TeaUtil.Common.AssertAsString(error.Message);
                      Console.WriteLine("error : " + error);
                  }
                  catch (Exception _error)
                  {
                      TeaException error = new TeaException(new Dictionary<string, object>
                      {
                          { "message", _error.Message }
                      });
                      // 必要に応じてエラーを出力します。
                      AlibabaCloud.TeaUtil.Common.AssertAsString(error.Message);
                      Console.WriteLine("error : " + error);
                  }
              }
          }
      }

ローカル音声の検出

シナリオ

審査が必要な音声がローカルマシンに保存されており、公開 URL がない場合、Content Moderation が提供する Object Storage Service (OSS) バケットに音声をアップロードできます。その後、音声審査2.0 サービスは直接 OSS にアクセスして音声コンテンツを取得し、審査を行います。

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

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

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

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

    • 音声審査タスクを送信するためのサンプルコード

      // このファイルは自動生成されたものです。編集しないでください。Thanks.
      
      using System;
      using Newtonsoft.Json;
      using Aliyun.OSS;
      
      namespace AlibabaCloud.SDK.Green20220302
      {
          public class VoiceModerationAutoRoute
          {
              //ファイルをアップロードするために使用されるトークン。
              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 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.VoiceModerationResponse response = invoke(
                      accessKeyId,
                      accessKeySecret,
                      endpoint
                  );
                  //自動ルーティング。リージョンは ap-southeast-1 に切り替えられます。
                  if (
                      response is null
                      || response.Body is null
                      || AlibabaCloud.TeaUtil.Common.EqualNumber(
                          500,
                          AlibabaCloud.TeaUtil.Common.AssertAsNumber(response.StatusCode)
                      )
                      || AlibabaCloud.TeaUtil.Common.EqualString(
                          "500",
                          Convert.ToString(response.Body.Code)
                      )
                  )
                  {
                      endpoint = "green-cip.ap-southeast-1.aliyuncs.com";
                      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.VoiceModerationResponse 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.wav。
                  String filePath = "D:\localPath\exampleFile.wav";
                  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.VoiceModerationRequest voiceModerationRequest =
                          new Models.VoiceModerationRequest();
                      //音声審査サービス。例:audio_multilingual_global。
                        voiceModerationRequest.Service = "audio_multilingual_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());
                      voiceModerationRequest.ServiceParameters = JsonConvert.SerializeObject(task);
                      //API 操作を呼び出して審査結果をクエリします。
                      Models.VoiceModerationResponse response = client.VoiceModerationWithOptions(
                          voiceModerationRequest,
                          runtimeOptions
                      );
                      return response;
                  }
                  catch (Exception _err)
                  {
                      Console.WriteLine(_err);
                      return null;
                  }
              }
          }
      }
    • 音声審査タスクの結果をクエリするためのサンプルコード

      using Newtonsoft.Json;
      using Tea;
      
      namespace AlibabaCloud.SDK.Sample
      {
          public class Sample
          {
      
              /**
               * AccessKey ID と AccessKey Secret を使用してクライアントを初期化します。
               * @param accessKeyId
               * @param accessKeySecret
               * @return Client
               * @throws Exception
               */
              public static AlibabaCloud.SDK.Green20220302.Client CreateClient(string accessKeyId, string accessKeySecret)
              {
                  AlibabaCloud.OpenApiClient.Models.Config config = new AlibabaCloud.OpenApiClient.Models.Config
                  {
                      AccessKeyId = accessKeyId,
                      AccessKeySecret = accessKeySecret,
                  };
                  // サービスのエンドポイント。
                  config.Endpoint = "green-cip.ap-southeast-1.aliyuncs.com";
                  return new AlibabaCloud.SDK.Green20220302.Client(config);
              }
      
              public static void Main(string[] args)
              {
                  // プロジェクトコードに AccessKey ペアをハードコーディングすると、AccessKey ペアが漏洩し、アカウント内のすべてのリソースのセキュリティが損なわれる可能性があります。以下のコードは参考用です。セキュリティトークンサービス (STS) トークンなどのより安全な方法を使用することを推奨します。
                  /**
                  * Alibaba Cloud アカウントの AccessKey ペアは、すべての API 操作に対する権限を持っています。これらの認証情報を使用して操作を実行することは、リスクの高い操作です。RAM ユーザーを使用して API 操作を呼び出すか、日常の O&M を実行することを推奨します。
                  * 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 を環境変数から取得することを推奨します',  
                	// 注:審査パフォーマンスを向上させるため、クライアントインスタンスを再利用してください。これにより、接続の繰り返し作成を避けることができます。
                  AlibabaCloud.SDK.Green20220302.Client client = CreateClient(accessKeyId, accessKeySecret);
                  // 音声審査リクエストを構築します。
                  AlibabaCloud.SDK.Green20220302.Models.VoiceModerationResultRequest voiceModerationResultRequest = new AlibabaCloud.SDK.Green20220302.Models.VoiceModerationResultRequest();
                  // 音声審査サービス。
                  voiceModerationResultRequest.Service="audio_multilingual_global";
                  Dictionary<String,Object> task=new Dictionary<string, object>();
                  // 結果をクエリしたいタスクの ID。
                  task.Add("taskId","<結果をクエリしたいタスクの ID>");
                  voiceModerationResultRequest.ServiceParameters=JsonConvert.SerializeObject(task);
                  // RuntimeObject インスタンスを作成し、実行時パラメーターを設定します。
                  AlibabaCloud.TeaUtil.Models.RuntimeOptions runtime = new AlibabaCloud.TeaUtil.Models.RuntimeOptions();
                  runtime.ReadTimeout = 10000;
                  runtime.ConnectTimeout = 10000;
                  try
                  {
                      // 音声審査タスクを送信します。
                    AlibabaCloud.SDK.Green20220302.Models.VoiceModerationResultResponse response= client.VoiceModerationResultWithOptions(voiceModerationResultRequest, runtime);
                  if(response is not null){
                      Console.WriteLine("response statusCode : "+response.StatusCode);
                      if (response.Body is not null){
                      Console.WriteLine("requestId : " + response.Body.RequestId);
                      Console.WriteLine("code : " + response.Body.Code);
                      Console.WriteLine("message : " + response.Body.Message);
                          if(response.Body.Data is not null){
                              Console.WriteLine("taskId : " + response.Body.Data.TaskId);
                              Console.WriteLine("liveId : " + response.Body.Data.LiveId);
                              Console.WriteLine("url : " + response.Body.Data.Url);
                              Console.WriteLine("sliceDetails : " + JsonConvert.SerializeObject(response.Body.Data.SliceDetails));
                          }
                      }
                  }
                  }
                  catch (TeaException error)
                  {
                      // 必要に応じてエラーを出力します。
                      AlibabaCloud.TeaUtil.Common.AssertAsString(error.Message);
                      Console.WriteLine("error : " + error);
                  }
                  catch (Exception _error)
                  {
                      TeaException error = new TeaException(new Dictionary<string, object>
                      {
                          { "message", _error.Message }
                      });
                      // 必要に応じてエラーを出力します。
                      AlibabaCloud.TeaUtil.Common.AssertAsString(error.Message);
                      Console.WriteLine("error : " + error);
                  }
              }
          }
      }

OSS 内の音声ファイルの審査

シナリオ

審査が必要な音声ファイルが Alibaba Cloud の Object Storage Service (OSS) に保存されている場合、サービスロールを作成して Content Moderation サービスに OSS へのアクセス権を付与できます。音声審査バージョン 2.0 サービスは、このサービスロールを使用して OSS からファイルを取得し、審査を行います。サービスロールを作成するには、「クラウドリソースアクセス承認ページ」にアクセスしてください。

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

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

    • 音声審査タスクを送信するためのサンプルコード

      using Newtonsoft.Json;
      using Tea;
      
      namespace AlibabaCloud.SDK.Sample
      {
          public class Sample
          {
      
              /**
               * AccessKey ID と AccessKey Secret を使用してクライアントを初期化します。
               * @param accessKeyId
               * @param accessKeySecret
               * @return Client
               * @throws Exception
               */
              public static AlibabaCloud.SDK.Green20220302.Client CreateClient(string accessKeyId, string accessKeySecret)
              {
                  AlibabaCloud.OpenApiClient.Models.Config config = new AlibabaCloud.OpenApiClient.Models.Config
                  {
                     	AccessKeyId = accessKeyId,
      				AccessKeySecret = accessKeySecret,
                  };
                  // サービスのエンドポイント。
                  config.Endpoint = "green-cip.ap-southeast-1.aliyuncs.com";
                  
                  return new AlibabaCloud.SDK.Green20220302.Client(config);
              }
      
              public static void Main(string[] args)
              {
                  // プロジェクトコードに AccessKey ペアをハードコーディングすると、AccessKey ペアが漏洩し、アカウント内のすべてのリソースのセキュリティが損なわれる可能性があります。以下のコードは参考用です。セキュリティトークンサービス (STS) トークンなどのより安全な方法を使用することを推奨します。
                  /**
                  * Alibaba Cloud アカウントの AccessKey ペアは、すべての API 操作に対する権限を持っています。これらの認証情報を使用して操作を実行することは、リスクの高い操作です。RAM ユーザーを使用して API 操作を呼び出すか、日常の O&M を実行することを推奨します。
                  * 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 を環境変数から取得することを推奨します',
                  // 注:審査パフォーマンスを向上させるため、クライアントインスタンスを再利用してください。これにより、接続の繰り返し作成を避けることができます。
                  AlibabaCloud.SDK.Green20220302.Client client = CreateClient(accessKeyId, accessKeySecret);
                  // 音声審査リクエストを構築します。
                  AlibabaCloud.SDK.Green20220302.Models.VoiceModerationRequest voiceModerationRequest = new AlibabaCloud.SDK.Green20220302.Models.VoiceModerationRequest();
                  // 音声審査サービス。
                  voiceModerationRequest.Service="audio_multilingual_global";
                  Dictionary<String,Object> task=new Dictionary<string, object>();
                  // OSS ファイルパラメーターを渡す例。
                  task.Add("ossBucketName","bucket_01");
                  task.Add("ossObjectName","test/sample.wav");
                  task.Add("ossRegionId","cn-shanghai");
                  voiceModerationRequest.ServiceParameters=JsonConvert.SerializeObject(task);
                  // RuntimeObject インスタンスを作成し、実行時パラメーターを設定します。
                  AlibabaCloud.TeaUtil.Models.RuntimeOptions runtime = new AlibabaCloud.TeaUtil.Models.RuntimeOptions();
                  runtime.ReadTimeout = 10000;
                  runtime.ConnectTimeout = 10000;
                  try
                  {
                      // 音声審査タスクを送信します。
                    AlibabaCloud.SDK.Green20220302.Models.VoiceModerationResponse response= client.VoiceModerationWithOptions(voiceModerationRequest, runtime);
                  if(response is not null){
                      Console.WriteLine("response statusCode : "+response.StatusCode);
                      if (response.Body is not null){
                      Console.WriteLine("requestId : " + response.Body.RequestId);
                      Console.WriteLine("code : " + response.Body.Code);
                      Console.WriteLine("message : " + response.Body.Message);
                          if(response.Body.Data is not null){
                              Console.WriteLine("taskId : " + response.Body.Data.TaskId);
                          }
                      }
                  }
                  }
                  catch (TeaException error)
                  {
                      // 必要に応じてエラーを出力します。
                      AlibabaCloud.TeaUtil.Common.AssertAsString(error.Message);
                      Console.WriteLine("error : " + error);
                  }
                  catch (Exception _error)
                  {
                      TeaException error = new TeaException(new Dictionary<string, object>
                      {
                          { "message", _error.Message }
                      });
                      // 必要に応じてエラーを出力します。
                      AlibabaCloud.TeaUtil.Common.AssertAsString(error.Message);
                      Console.WriteLine("error : " + error);
                  }
              }
          }
      }
    • 音声審査タスクの結果をクエリするためのサンプルコード

      using Newtonsoft.Json;
      using Tea;
      
      namespace AlibabaCloud.SDK.Sample
      {
          public class Sample
          {
      
              /**
               * AccessKey ID と AccessKey Secret を使用してクライアントを初期化します。
               * @param accessKeyId
               * @param accessKeySecret
               * @return Client
               * @throws Exception
               */
              public static AlibabaCloud.SDK.Green20220302.Client CreateClient(string accessKeyId, string accessKeySecret)
              {
                  AlibabaCloud.OpenApiClient.Models.Config config = new AlibabaCloud.OpenApiClient.Models.Config
                  {
                      AccessKeyId = accessKeyId,
                      AccessKeySecret = accessKeySecret,
                  };
                  // サービスのエンドポイント。
                  config.Endpoint = "green-cip.ap-southeast-1.aliyuncs.com";
                  return new AlibabaCloud.SDK.Green20220302.Client(config);
              }
      
              public static void Main(string[] args)
              {
                  // プロジェクトコードに AccessKey ペアをハードコーディングすると、AccessKey ペアが漏洩し、アカウント内のすべてのリソースのセキュリティが損なわれる可能性があります。以下のコードは参考用です。セキュリティトークンサービス (STS) トークンなどのより安全な方法を使用することを推奨します。
                  /**
                  * Alibaba Cloud アカウントの AccessKey ペアは、すべての API 操作に対する権限を持っています。これらの認証情報を使用して操作を実行することは、リスクの高い操作です。RAM ユーザーを使用して API 操作を呼び出すか、日常の O&M を実行することを推奨します。
                  * 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 を環境変数から取得することを推奨します',  
                	// 注:審査パフォーマンスを向上させるため、クライアントインスタンスを再利用してください。これにより、接続の繰り返し作成を避けることができます。
                  AlibabaCloud.SDK.Green20220302.Client client = CreateClient(accessKeyId, accessKeySecret);
                  // 音声審査リクエストを構築します。
                  AlibabaCloud.SDK.Green20220302.Models.VoiceModerationResultRequest voiceModerationResultRequest = new AlibabaCloud.SDK.Green20220302.Models.VoiceModerationResultRequest();
                  // 音声審査サービス。
                  voiceModerationResultRequest.Service="audio_multilingual_global";
                  Dictionary<String,Object> task=new Dictionary<string, object>();
                  // 結果をクエリしたいタスクの ID。
                  task.Add("taskId","<結果をクエリしたいタスクの ID>");
                  voiceModerationResultRequest.ServiceParameters=JsonConvert.SerializeObject(task);
                  // RuntimeObject インスタンスを作成し、実行時パラメーターを設定します。
                  AlibabaCloud.TeaUtil.Models.RuntimeOptions runtime = new AlibabaCloud.TeaUtil.Models.RuntimeOptions();
                  runtime.ReadTimeout = 10000;
                  runtime.ConnectTimeout = 10000;
                  try
                  {
                      // 音声審査タスクを送信します。
                    AlibabaCloud.SDK.Green20220302.Models.VoiceModerationResultResponse response= client.VoiceModerationResultWithOptions(voiceModerationResultRequest, runtime);
                  if(response is not null){
                      Console.WriteLine("response statusCode : "+response.StatusCode);
                      if (response.Body is not null){
                      Console.WriteLine("requestId : " + response.Body.RequestId);
                      Console.WriteLine("code : " + response.Body.Code);
                      Console.WriteLine("message : " + response.Body.Message);
                          if(response.Body.Data is not null){
                              Console.WriteLine("taskId : " + response.Body.Data.TaskId);
                              Console.WriteLine("liveId : " + response.Body.Data.LiveId);
                              Console.WriteLine("url : " + response.Body.Data.Url);
                              Console.WriteLine("sliceDetails : " + JsonConvert.SerializeObject(response.Body.Data.SliceDetails));
                          }
                      }
                  }
                  }
                  catch (TeaException error)
                  {
                      // 必要に応じてエラーを出力します。
                      AlibabaCloud.TeaUtil.Common.AssertAsString(error.Message);
                      Console.WriteLine("error : " + error);
                  }
                  catch (Exception _error)
                  {
                      TeaException error = new TeaException(new Dictionary<string, object>
                      {
                          { "message", _error.Message }
                      });
                      // 必要に応じてエラーを出力します。
                      AlibabaCloud.TeaUtil.Common.AssertAsString(error.Message);
                      Console.WriteLine("error : " + error);
                  }
              }
          }
      }

Node.js SDK

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

この SDK は、以下の 3 つの音声審査シナリオをサポートしています。

パブリックにアクセス可能な音声ファイルの審査

利用シーン

審査対象の音声ファイルがパブリック URL からアクセス可能な場合、音声コンテンツ審査 バージョン 2.0 サービスはその URL からファイルを取得して審査を実行できます。

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

    npm install @alicloud/green20220302@2.2.10

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

    • 音声審査タスクを送信するためのサンプルコード

      const Green20220302 = require('@alicloud/green20220302');
      const OpenApi = require('@alicloud/openapi-client');
      const Util = require('@alicloud/tea-util');
      // 注:審査のパフォーマンスを向上させるため、クライアントインスタンスを再利用してください。これにより、繰り返し接続が作成されるのを回避できます。
      // プロジェクトコードに AccessKey ペアをハードコーディングすると、AccessKey ペアが漏洩し、アカウント内のすべてのリソースのセキュリティが損なわれる可能性があります。以下のコードは参照用です。
      class Client {
          static createClient() {
              const config = new OpenApi.Config({
                  // 必須。ALIBABA_CLOUD_ACCESS_KEY_ID 環境変数が設定されていることを確認してください。
                  accessKeyId: process.env['ALIBABA_CLOUD_ACCESS_KEY_ID'],
                  // 必須。ALIBABA_CLOUD_ACCESS_KEY_SECRET 環境変数が設定されていることを確認してください。
                  accessKeySecret: process.env['ALIBABA_CLOUD_ACCESS_KEY_SECRET'],
                  endpoint: `green-cip.ap-southeast-1.aliyuncs.com`,
              });
              return new Green20220302.default(config);
          }
      
          static async main() {
              const client = Client.createClient();
              // リクエストオブジェクトを構築します。
              const voiceModerationRequest = new Green20220302.VoiceModerationRequest({
                  // 音声審査サービス。
                  "service": "audio_multilingual_global",
                  // 審査対象の音声ファイルの URL。
                  "serviceParameters": JSON.stringify({"url":"http://aliyundoc.com/test.flv"})
              });
              // ランタイム設定オブジェクトを作成します。
              const runtime = new Util.RuntimeOptions();
              try {
                  // リクエストを送信し、応答を取得します。
                  const response = await client.voiceModerationWithOptions(voiceModerationRequest, runtime);
                  console.log(JSON.stringify(response.body));
              } catch (error) {
                  // このセクションは出力専用です。プロジェクトでは例外を慎重に処理し、例外を無視しないでください。
                  // エラーメッセージ
                  console.log('Error occurred:', error.message);
              }
          }
      }
      
      Client.main();
    • 音声審査タスクの結果を照会するためのサンプルコード

      const Green20220302 = require('@alicloud/green20220302');
      const OpenApi = require('@alicloud/openapi-client');
      const Util = require('@alicloud/tea-util');
      // 注:審査のパフォーマンスを向上させるため、クライアントインスタンスを再利用してください。これにより、繰り返し接続が作成されるのを回避できます。
      // プロジェクトコードに AccessKey ペアをハードコーディングすると、AccessKey ペアが漏洩し、アカウント内のすべてのリソースのセキュリティが損なわれる可能性があります。以下のコードは参照用です。
      class Client {
          static createClient() {
              const config = new OpenApi.Config({
                  // 必須。ALIBABA_CLOUD_ACCESS_KEY_ID 環境変数が設定されていることを確認してください。
                  accessKeyId: process.env['ALIBABA_CLOUD_ACCESS_KEY_ID'],
                  // 必須。ALIBABA_CLOUD_ACCESS_KEY_SECRET 環境変数が設定されていることを確認してください。
                  accessKeySecret: process.env['ALIBABA_CLOUD_ACCESS_KEY_SECRET'],
                  endpoint: `green-cip.ap-southeast-1.aliyuncs.com`,
              });
              return new Green20220302.default(config);
          }
      
          static async main() {
              const client = Client.createClient();
              // リクエストオブジェクトを構築します。
              const voiceModerationResultRequest = new Green20220302.VoiceModerationResultRequest({
                  // 音声審査サービス。
                  "service": "audio_multilingual_global",
                  "serviceParameters": JSON.stringify({"taskId":"<審査結果を照会したいタスクの ID>"})
              });
              // ランタイム設定オブジェクトを作成します。
              const runtime = new Util.RuntimeOptions();
              try {
                  // リクエストを送信し、応答を取得します。
                  const response = await client.voiceModerationResultWithOptions(voiceModerationResultRequest, runtime);
                  console.log(JSON.stringify(response.body));
              } catch (error) {
                  // このセクションは出力専用です。プロジェクトでは例外を慎重に処理し、例外を無視しないでください。
                  // エラーメッセージ
                  console.log('Error occurred:', error.message);
              }
          }
      }
      
      Client.main();

ローカル音声の検出

利用シーン

審査が必要な音声がローカルマシンに保存されており、パブリック URL を持たない場合、Content Moderation が提供する Object Storage Service (OSS) のバケットに音声をアップロードできます。これにより、音声コンテンツ審査 バージョン 2.0 サービスが直接 OSS にアクセスし、音声コンテンツを取得して審査を実行できます。

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

    npm install @alicloud/green20220302@2.2.10

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

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

    • 音声審査タスクを送信するためのサンプルコード

      const Green20220302 = require('@alicloud/green20220302');
      const OpenApi = require('@alicloud/openapi-client');
      const { v4: uuidv4 } = require('uuid');
      const OSS = require('ali-oss');
      const Util = require('@alicloud/tea-util');
      const path = require("path");
      // 注:審査のパフォーマンスを向上させるため、クライアントインスタンスを再利用してください。これにより、繰り返し接続が作成されるのを回避できます。
      // プロジェクトコードに AccessKey ペアをハードコーディングすると、AccessKey ペアが漏洩し、アカウント内のすべてのリソースのセキュリティが損なわれる可能性があります。以下のコードは参照用です。
      
      //サービスが VPC にデプロイされているかどうかを指定します。
      var isVPC = false;
      //ファイルのアップロードに使用されるトークン。
      var tokenDic = new Array();
      //ファイルのアップロードに使用されるクライアント。
      var ossClient;
      //エンドポイントを設定します。
      var endpoint = 'green-cip.ap-southeast-1.aliyuncs.com'
      //ローカルファイルのパス。
      var filePath = 'D:\\test\\voice\\cf02.wav'
      //審査サービス。
      var service = 'audio_multilingual_global'
      
      class Client {
          static createClient() {
              const config = new OpenApi.Config({
                  // 必須。ALIBABA_CLOUD_ACCESS_KEY_ID 環境変数が設定されていることを確認してください。
                  accessKeyId: "RAM ユーザーの AccessKey ID は環境変数から取得することを推奨します",
                  // 必須。ALIBABA_CLOUD_ACCESS_KEY_SECRET 環境変数が設定されていることを確認してください。
                  accessKeySecret: "RAM ユーザーの AccessKey Secret は環境変数から取得することを推奨します",
                  endpoint: endpoint,
              });
              return new Green20220302.default(config);
          }
      
          //ファイルをアップロードするためのクライアントを作成します。
          static 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'],
                  });
              }
          }
      
          static async main() {
              const client = Client.createClient();
              // ランタイム設定オブジェクトを作成します。
              const runtime = new Util.RuntimeOptions();
              
              //ファイルをアップロードするための一時的なトークンを取得します。
              if (tokenDic[endpoint] == null || tokenDic[endpoint]['expiration'] <= Date.parse(new Date() / 1000)) {
                  var tokenResponse = await client.describeUploadTokenWithOptions(runtime)
                  tokenDic[endpoint] = tokenResponse.body.data;
              }
      
              //ファイルのアップロードに使用されるクライアントを取得します。
          this.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));
      
              // リクエストオブジェクトを構築します。
              const voiceModerationRequest = new Green20220302.VoiceModerationRequest({
                  // 審査サービス。
                  "service": service,
                  // サービスに必要なパラメーター。
                  "serviceParameters": JSON.stringify({
                      "ossBucketName": tokenDic[endpoint].bucketName,
                      "ossObjectName": objectName,
                  })
                  });
      
              try {
                  // リクエストを送信し、応答を取得します。
                  const response = await client.voiceModerationWithOptions(voiceModerationRequest, runtime);
                  console.log(JSON.stringify(response.body));
              } catch (error) {
                  // このセクションは出力専用です。プロジェクトでは例外を慎重に処理し、例外を無視しないでください。
                  // エラーメッセージ
                  console.log('Error occurred:', error.message);
              }
          }
      }
      
      Client.main();
    • 音声審査タスクの結果を照会するためのサンプルコード

      const Green20220302 = require('@alicloud/green20220302');
      const OpenApi = require('@alicloud/openapi-client');
      const Util = require('@alicloud/tea-util');
      // 注:審査のパフォーマンスを向上させるため、クライアントインスタンスを再利用してください。これにより、繰り返し接続が作成されるのを回避できます。
      // プロジェクトコードに AccessKey ペアをハードコーディングすると、AccessKey ペアが漏洩し、アカウント内のすべてのリソースのセキュリティが損なわれる可能性があります。以下のコードは参照用です。
      class Client {
          static createClient() {
              const config = new OpenApi.Config({
                  // 必須。ALIBABA_CLOUD_ACCESS_KEY_ID 環境変数が設定されていることを確認してください。
                  accessKeyId: process.env['ALIBABA_CLOUD_ACCESS_KEY_ID'],
                  // 必須。ALIBABA_CLOUD_ACCESS_KEY_SECRET 環境変数が設定されていることを確認してください。
                  accessKeySecret: process.env['ALIBABA_CLOUD_ACCESS_KEY_SECRET'],
                  endpoint: `green-cip.ap-southeast-1.aliyuncs.com`,
              });
              return new Green20220302.default(config);
          }
      
          static async main() {
              const client = Client.createClient();
              // リクエストオブジェクトを構築します。
              const voiceModerationResultRequest = new Green20220302.VoiceModerationResultRequest({
                  // 音声審査サービス。
                  "service": "audio_multilingual_global",
                  "serviceParameters": JSON.stringify({"taskId":"<審査結果を照会したいタスクの ID>"})
              });
              // ランタイム設定オブジェクトを作成します。
              const runtime = new Util.RuntimeOptions();
              try {
                  // リクエストを送信し、応答を取得します。
                  const response = await client.voiceModerationResultWithOptions(voiceModerationResultRequest, runtime);
                  console.log(JSON.stringify(response.body));
              } catch (error) {
                  // このセクションは出力専用です。プロジェクトでは例外を慎重に処理し、例外を無視しないでください。
                  // エラーメッセージ
                  console.log('Error occurred:', error.message);
              }
          }
      }
      
      Client.main();

OSS 内の音声ファイルの審査

利用シーン

審査が必要な音声ファイルがすでに Alibaba Cloud の Object Storage Service (OSS) に保存されている場合、サービスロールを作成して Content Moderation サービスに OSS へのアクセス権を付与できます。音声コンテンツ審査 V2.0 サービスは、このサービスロールを使用して OSS からファイルを取得し、審査を実行します。サービスロールを作成するには、「クラウドリソースアクセス承認ページ」にアクセスしてください。

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

    npm install @alicloud/green20220302@2.2.10

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

    • 音声審査タスクを送信するためのサンプルコード

      const Green20220302 = require('@alicloud/green20220302');
      const OpenApi = require('@alicloud/openapi-client');
      const Util = require('@alicloud/tea-util');
      // 注:審査のパフォーマンスを向上させるため、クライアントインスタンスを再利用してください。これにより、繰り返し接続が作成されるのを回避できます。
      // プロジェクトコードに AccessKey ペアをハードコーディングすると、AccessKey ペアが漏洩し、アカウント内のすべてのリソースのセキュリティが損なわれる可能性があります。以下のコードは参照用です。
      class Client {
          static createClient() {
              const config = new OpenApi.Config({
                  // 必須。ALIBABA_CLOUD_ACCESS_KEY_ID 環境変数が設定されていることを確認してください。
                  accessKeyId: process.env['ALIBABA_CLOUD_ACCESS_KEY_ID'],
                  // 必須。ALIBABA_CLOUD_ACCESS_KEY_SECRET 環境変数が設定されていることを確認してください。
                  accessKeySecret: process.env['ALIBABA_CLOUD_ACCESS_KEY_SECRET'],
                  endpoint: `green-cip.ap-southeast-1.aliyuncs.com`,
              });
              return new Green20220302.default(config);
          }
      
          static async main() {
              const client = Client.createClient();
              // リクエストオブジェクトを構築します。
              const voiceModerationRequest = new Green20220302.VoiceModerationRequest({
                  // 音声審査サービス。
                  "service": "audio_multilingual_global",
                  "serviceParameters": JSON.stringify({
                  // 審査対象のファイルを保存するバケットが配置されているリージョン。例:cn-shanghai
                  "ossRegionId": "cn-shanghai",
                  // 審査対象のファイルを保存するバケットの名前。例:bucket001
                  "ossBucketName": "bucket001",
                  // 審査対象のファイル。例:voice/001.wav
                  "ossObjectName": "voice/001.wav"})
              });
              // ランタイム設定オブジェクトを作成します。
              const runtime = new Util.RuntimeOptions();
              try {
                  // リクエストを送信し、応答を取得します。
                  const response = await client.voiceModerationWithOptions(voiceModerationRequest, runtime);
                  console.log(JSON.stringify(response.body));
              } catch (error) {
                  // このセクションは出力専用です。プロジェクトでは例外を慎重に処理し、例外を無視しないでください。
                  // エラーメッセージ
                  console.log('Error occurred:', error.message);
              }
          }
      }
      
      Client.main();
    • 音声審査タスクの結果を照会するためのサンプルコード

      const Green20220302 = require('@alicloud/green20220302');
      const OpenApi = require('@alicloud/openapi-client');
      const Util = require('@alicloud/tea-util');
      // 注:審査のパフォーマンスを向上させるため、クライアントインスタンスを再利用してください。これにより、繰り返し接続が作成されるのを回避できます。
      // プロジェクトコードに AccessKey ペアをハードコーディングすると、AccessKey ペアが漏洩し、アカウント内のすべてのリソースのセキュリティが損なわれる可能性があります。以下のコードは参照用です。
      class Client {
          static createClient() {
              const config = new OpenApi.Config({
                  // 必須。ALIBABA_CLOUD_ACCESS_KEY_ID 環境変数が設定されていることを確認してください。
                  accessKeyId: process.env['ALIBABA_CLOUD_ACCESS_KEY_ID'],
                  // 必須。ALIBABA_CLOUD_ACCESS_KEY_SECRET 環境変数が設定されていることを確認してください。
                  accessKeySecret: process.env['ALIBABA_CLOUD_ACCESS_KEY_SECRET'],
                  endpoint: `green-cip.ap-southeast-1.aliyuncs.com`,
              });
              return new Green20220302.default(config);
          }
      
          static async main() {
              const client = Client.createClient();
              // リクエストオブジェクトを構築します。
              const voiceModerationResultRequest = new Green20220302.VoiceModerationResultRequest({
                  // 音声審査サービス。
                  "service": "audio_multilingual_global",
                  "serviceParameters": JSON.stringify({"taskId":"<審査結果を照会したいタスクの ID>"})
              });
              // ランタイム設定オブジェクトを作成します。
              const runtime = new Util.RuntimeOptions();
              try {
                  // リクエストを送信し、応答を取得します。
                  const response = await client.voiceModerationResultWithOptions(voiceModerationResultRequest, runtime);
                  console.log(JSON.stringify(response.body));
              } catch (error) {
                  // このセクションは出力専用です。プロジェクトでは例外を慎重に処理し、例外を無視しないでください。
                  // エラーメッセージ
                  console.log('Error occurred:', error.message);
              }
          }
      }
      
      Client.main();

ネイティブ HTTPS 呼び出し

  • リクエストメソッド

    サービスリクエスト URL: https://green-cip.{region}.aliyuncs.com

    プロトコル: HTTPS

    メソッド: POST

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

    Voice Moderation 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 標準に準拠し、UTC である必要があります。

    フォーマットは yyyy-MM-ddTHH:mm:ssZ です。

    たとえば、2022年12月12日 09:13:14 (UTC+08:00) は 2022-12-12T01:13:14Z と表されます。

    SignatureVersion

    String

    はい

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

    SignatureNonce

    String

    はい

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

    Action

    String

    はい

    有効な値:

    • VoiceModeration

    • VoiceModerationResult

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

    呼び出しが成功したかどうかにかかわらず、システムは API リクエストごとに一意の RequestId を返します。その他のレスポンスパラメーターは API 操作によって異なります。

    {
        "RequestId":"20B935A9-XXXXXXXX-XXXXXXXX0C2",
        "Message":"SUCCESS",
        "Data":{
            "TaskId":"au_f_O5xxxxxxxxxxxxxxqa-1****"
        },
        "Code":200
    }
  • コード例

    以下のレスポンス例は、可読性を高めるためにフォーマットされています。実際のレスポンスは、改行やインデントでフォーマットされていません。

    • 審査タスクの例

      リクエストの例

      http://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=VoiceModeration
      &AccessKeyId=123****cip
      &Timestamp=2023-02-03T12:00:00Z
      &Service=audio_multilingual_global
      &ServiceParameters={"url": "https://xxxxxx.aliyuncs.com/sample/****.wav"}

      成功レスポンスの例

      {
          "RequestId":"20B935A9-XXXXXXXX-XXXXXXXX0C2",
          "Message":"SUCCESS",
          "Data":{
              "TaskId":"au_f_O5xxxxxxxxxxxxxxqa-1x****"
          },
          "Code":200
      }
    • クエリタスクの例

      リクエストの例

      http://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=VoiceModerationResult
      &AccessKeyId=123****cip
      &Timestamp=2023-02-03T12:00:00Z
      &Service=audio_multilingual_global
      &ServiceParameters={"taskId": "au_f_O5zxxxxxxxxxxxxxxxx-1x****"}

      成功レスポンスの例

      {
          "RequestId":"926AD581-XXXXXXXXXXXXXX-7902AE",
          "Message":"success finished",
          "Data":{
              "SliceDetails":[
                  {
                      "EndTime":6,
                      "StartTime":0,
                      "Text":"The weather is nice today.",
                      "Labels":"",
                      "Url":"http://xxxx.aliyuncs.com/cip-media/voice/****.wav"
                  }
              ]
          },
          "Code":200
      }
  • 署名メソッド

    Voice Moderation 2.0 サービスは、各アクセスリクエストを認証します。したがって、各リクエストに署名情報を含める必要があります。Voice Moderation 2.0 は、AccessKey ペアによる対称暗号化を使用してリクエスト送信者を認証します。

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

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

    1. 正規化されたクエリ文字列を作成します。

      1. すべてのリクエストパラメーター (Signature パラメーターを除く、共通パラメーターと操作固有パラメーターを含む) をパラメーター名のアルファベット順に並べ替えます。

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

        説明

        Java の java.net.URLEncoder など、URL エンコードをサポートするほとんどのライブラリは、application/x-www-form-urlencoded MIME タイプに従ってデータをエンコードします。前述のルールに準拠したエンコード済み文字列を生成するには、このエンコード方法を使用し、出力文字列で次の置き換えを行います。プラス記号 (+) を %20 に、アスタリスク (*) を %2A に、%7E をチルダ (~) に置き換えます。

        URL エンコードルールは次のとおりです。

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

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

        • 拡張 UTF-8 文字は %XY%ZA… 形式でエンコードされます。

        • スペースはプラス記号 (+) ではなく、%20 としてエンコードされます。

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

      4. キーと値のペアをアンパサンド (&) で連結して、正規化されたクエリ文字列を作成します。

    2. 手順 a.i で作成した正規化された文字列を使用して、次のルールに従って署名対象の文字列を構築します。

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

      HTTPMethod は、POST などのリクエストの HTTP メソッドです。percentEncode("/") は、手順 1.b で説明した URL エンコードルールに従ったスラッシュ (/) 文字のエンコード値です。エンコード値は %2F です。percentEncode(CanonicalizedQueryString) は、手順 1.d で作成した正規化されたクエリ文字列を、手順 1.b で説明した URL エンコードルールに従ってエンコードした文字列です。

    3. RFC 2104 に従って、署名対象の文字列の HMAC 値を計算します。

      説明

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

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

    5. 署名文字列を Signature パラメーターとしてリクエストに追加します。

      説明

      Signature の値は、リクエストに追加する前に RFC 3986 に従って URL エンコードする必要があります。