Voice Moderation 2.0 API は、SDK または HTTPS リクエストを使用して呼び出すことができます。署名検証や HTTPS リクエストボディの構築など、いくつかの操作を省略できるため、SDK を使用して API を呼び出すことをお勧めします。このトピックでは、Voice Moderation 2.0 の使用方法について説明します。
ステップ 1:Voice Moderation 2.0 を有効化する
サービス有効化 ページを開き、Voice Moderation 2.0 サービスを有効化します。API 操作を呼び出すと、課金システムによって使用量に基づいて自動的に課金されます。
Voice Moderation 2.0 サービスを有効化すると、デフォルトの課金方法は従量課金になります。日額料金は実際の使用量に基づいて計算されます。サービスが呼び出されない場合、料金は発生しません。
ステップ 2:RAM ユーザーに権限を付与する
Resource Access Management(RAM)ユーザーとして API 操作を呼び出したり、SDK を使用したりする前に、RAM ユーザーに権限を付与する必要があります。Alibaba Cloud アカウントと RAM ユーザーの AccessKey ペアを作成できます。API 操作を呼び出すときは、AccessKey ペアを使用して ID 検証を完了する必要があります。AccessKey ペアの取得方法については、「AccessKey ペアを取得する」をご参照ください。
手順
RAM 管理者として [RAM コンソール] にログインします。
RAM ユーザーを作成します。
詳細については、「RAM ユーザーを作成する」をご参照ください。
RAM ユーザーに
AliyunYundunGreenWebFullAccessシステムポリシーを付与します。詳細については、「RAM ユーザーに権限を付与する」をご参照ください。
上記の手順を完了すると、RAM ユーザーとして Content Moderation API を呼び出すことができます。
ステップ 3:SDK をインストールし、SDK を使用して Voice Moderation 2.0 サービスを呼び出す
次の表は、サポートされているリージョンを示しています。
リージョン | パブリックエンドポイント | 内部エンドポイント |
シンガポール | green-cip.ap-southeast-1.aliyuncs.com | green-cip-vpc.ap-southeast-1.aliyuncs.com |
他のプログラミング言語の SDK サンプルコードが必要な場合は、[OpenAPI Explorer] で API 操作を呼び出すことができます。OpenAPI Explorer は、さまざまな SDK の操作のサンプルコードを動的に生成します。次の API 操作はオンラインデバッグに使用できます。
Alibaba Cloud SDK コードでは、ALIBABA_CLOUD_ACCESS_KEY_ID と ALIBABA_CLOUD_ACCESS_KEY_SECRET 環境変数を定義することで、デフォルトのアクセス認証情報を作成できます。Alibaba Cloud サービスの API 操作を呼び出すと、システムは認証情報に直接アクセスし、AccessKey ペアを読み取って、自動的に認証を完了します。SDK サンプルコードを使用する前に、環境変数を構成する必要があります。詳細については、「認証情報を構成する」をご参照ください。
Java 用 SDK
Java のバージョンは 1.8 以降である必要があります。
ソースコードの詳細については、「Java 用 SDK ソースコード」または「オープンソースソフトウェア(OSS)の Java 用 SDK ソースコード」をご参照ください。
音声モデレーションでは、次の 3 つのタイプがサポートされています。
インターネット上で公開されている音声のモデレーションインターネット上で公開されている音声
シナリオ
レビュー対象のオーディオがインターネットからアクセス可能な場合、音声モデレーション 2.0 は、URL を介してオーディオファイルを取得し、モデレーションを実行できます。
dependencies フィールドに次の依存関係を追加します。
<dependency> <groupId>com.aliyun</groupId> <artifactId>green20220302</artifactId> <version>2.2.11</version> </dependency>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 操作に対する権限を持っています。セキュリティリスクを回避するために、RAM ユーザーを使用して API 操作を呼び出したり、日常的な O&M を実行したりすることをお勧めします。 * 環境変数を取得する一般的な方法: * 方法 1: * RAM ユーザーの AccessKey ID を取得します:System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID"); * RAM ユーザーの AccessKey シークレットを取得します:System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET"); * 方法 2: * RAM ユーザーの AccessKey ID を取得します:System.getProperty("ALIBABA_CLOUD_ACCESS_KEY_ID"); * RAM ユーザーの AccessKey シークレットを取得します:System.getProperty("ALIBABA_CLOUD_ACCESS_KEY_SECRET"); */ config.setAccessKeyId("RAM ユーザーの AccessKey ID を環境変数から取得することをお勧めします"); config.setAccessKeySecret("RAM ユーザーの AccessKey シークレットを環境変数から取得することをお勧めします"); // ビジネス要件に基づいてアクセスリージョン ID とエンドポイントを変更します。 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 操作に対する権限を持っています。セキュリティリスクを回避するために、RAM ユーザーを使用して API 操作を呼び出したり、日常的な O&M を実行したりすることをお勧めします。 * 環境変数を取得する一般的な方法: * 方法 1: * RAM ユーザーの AccessKey ID を取得します:System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID"); * RAM ユーザーの AccessKey シークレットを取得します:System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET"); * 方法 2: * RAM ユーザーの AccessKey ID を取得します:System.getProperty("ALIBABA_CLOUD_ACCESS_KEY_ID"); * RAM ユーザーの AccessKey シークレットを取得します:System.getProperty("ALIBABA_CLOUD_ACCESS_KEY_SECRET"); */ config.setAccessKeyId("RAM ユーザーの AccessKey ID を環境変数から取得することをお勧めします"); config.setAccessKeySecret("RAM ユーザーの AccessKey シークレットを環境変数から取得することをお勧めします"); // ビジネス要件に基づいてアクセスリージョン ID とエンドポイントを変更します。 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(); // 音声モデレーションタスクが提出されたときに返されるタスク ID。 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(); } } }
ローカル音声のモデレーション ローカル音声の
シナリオ
モデレーション対象の音声がローカルマシンにあり、インターネットからアクセスできない場合、音声ファイルを Content Moderation が提供する Object Storage Service (OSS) バケットにアップロードできます。音声モデレーション アップロードできます 音声 ファイルを Content Moderation によって提供される Object Storage Service (OSS) バケットにアップロードします。音声モデレーション 2.0 は OSS に直接アクセスし、音声コンテンツを取得して、モデレーションを実行できます。
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>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; /**ファイルをアップロードするために使用されるトークン。キーは Content Moderation のエンドポイント、値はトークンです。*/ public static Map<String, DescribeUploadTokenResponseBody.DescribeUploadTokenResponseBodyData> tokenMap = new HashMap<>(); /**ファイルをアップロードするクライアント。*/ public static OSS ossClient = null; /** * 画像モデレーションリクエストを開始するクライアントを作成します。 * * @param accessKeyId * @param accessKeySecret * @param endpoint * @return * @throws Exception */ public static Client createClient(String accessKeyId, String accessKeySecret, String endpoint) throws Exception { Config config = new Config(); config.setAccessKeyId(accessKeyId); config.setAccessKeySecret(accessKeySecret); // ビジネス要件に基づいてリージョン ID とエンドポイントを変更します。 config.setEndpoint(endpoint); return new Client(config); } /** * ファイルをアップロードするクライアントを作成します。 * * @param tokenData * @param isVPC */ public static void getOssClient(DescribeUploadTokenResponseBody.DescribeUploadTokenResponseBodyData tokenData, boolean isVPC) { //注:インスタンス化されたクライアントは、可能な限り再利用して、接続の繰り返し確立を避け、モデレーションのパフォーマンスを向上させることをお勧めします。 if (isVPC) { ossClient = new OSSClientBuilder().build(tokenData.ossInternalEndPoint, tokenData.getAccessKeyId(), tokenData.getAccessKeySecret(), tokenData.getSecurityToken()); } else { ossClient = new OSSClientBuilder().build(tokenData.ossInternetEndPoint, tokenData.getAccessKeyId(), tokenData.getAccessKeySecret(), tokenData.getSecurityToken()); } } /** * ファイルをアップロードします。 * * @param filePath * @param tokenData * @return * @throws Exception */ public static String uploadFile(String filePath, DescribeUploadTokenResponseBody.DescribeUploadTokenResponseBodyData tokenData) throws Exception { String[] split = filePath.split("\\."); String objectName; if (split.length > 1) { objectName = tokenData.getFileNamePrefix() + UUID.randomUUID() + "." + split[split.length - 1]; } else { objectName = tokenData.getFileNamePrefix() + UUID.randomUUID(); } PutObjectRequest putObjectRequest = new PutObjectRequest(tokenData.getBucketName(), objectName, new File(filePath)); ossClient.putObject(putObjectRequest); return objectName; } public static 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 操作に対する権限を持っています。これらの認証情報を使用して操作を実行することは、リスクの高い操作です。RAM ユーザーを使用して API 操作を呼び出したり、日常的な O&M を実行したりすることをお勧めします。 * 環境変数を取得する一般的な方法: * 方法 1: * RAM ユーザーの AccessKey ID を取得します:System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID"); * RAM ユーザーの AccessKey シークレットを取得します:System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET"); * 方法 2: * RAM ユーザーの AccessKey ID を取得します:System.getProperty("ALIBABA_CLOUD_ACCESS_KEY_ID"); * RAM ユーザーの AccessKey シークレットを取得します:System.getProperty("ALIBABA_CLOUD_ACCESS_KEY_SECRET"); */ String accessKeyId = "RAM ユーザーの AccessKey ID を環境変数から取得することをお勧めします"; String accessKeySecret = "RAM ユーザーの AccessKey シークレットを環境変数から取得することをお勧めします"; // ビジネス要件に基づいてリージョン ID とエンドポイントを変更します。 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 操作に対する権限を持っています。これらの認証情報を使用して操作を実行することは、リスクの高い操作です。RAM ユーザーを使用して API 操作を呼び出したり、日常的な O&M を実行したりすることをお勧めします。 * 環境変数を取得する一般的な方法: * 方法 1: * RAM ユーザーの AccessKey ID を取得します:System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID"); * RAM ユーザーの AccessKey シークレットを取得します:System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET"); * 方法 2: * RAM ユーザーの AccessKey ID を取得します:System.getProperty("ALIBABA_CLOUD_ACCESS_KEY_ID"); * RAM ユーザーの AccessKey シークレットを取得します:System.getProperty("ALIBABA_CLOUD_ACCESS_KEY_SECRET"); */ config.setAccessKeyId("RAM ユーザーの AccessKey ID を環境変数から取得することをお勧めします"); config.setAccessKeySecret("RAM ユーザーの AccessKey シークレットを環境変数から取得することをお勧めします"); // ビジネス要件に基づいてリージョン ID とエンドポイントを変更します。 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(); // 音声モデレーションタスクが提出されたときに返されるタスク ID。 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 に保存されている音声のモデレーション OSS に保存されている音声の
シナリオ
モデレーション対象のオーディオファイルがすでに OSS に保存されている場合は、Content Moderation が OSS にアクセスできるようにサービスロールを作成する権限を付与できます。 音声モデレーション 2.0 は、サービスロールを介して OSS からファイルを取得し、モデレーションを実行できます。サービスロールを作成するには、クラウド リソースアクセス承認にアクセスしてください。
dependencies フィールドに次の依存関係を追加します。
<dependency> <groupId>com.aliyun</groupId> <artifactId>green20220302</artifactId> <version>2.2.11</version> </dependency>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 操作に対する権限を持っています。これらの認証情報を使用して操作を実行することは、リスクの高い操作です。RAM ユーザーを使用して API 操作を呼び出したり、日常的な O&M を実行したりすることをお勧めします。 * 環境変数を取得する一般的な方法: * 方法 1: * RAM ユーザーの AccessKey ID を取得します:System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID"); * RAM ユーザーの AccessKey シークレットを取得します:System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET"); * 方法 2: * RAM ユーザーの AccessKey ID を取得します:System.getProperty("ALIBABA_CLOUD_ACCESS_KEY_ID"); * RAM ユーザーの AccessKey シークレットを取得します:System.getProperty("ALIBABA_CLOUD_ACCESS_KEY_SECRET"); */ config.setAccessKeyId("RAM ユーザーの AccessKey ID を環境変数から取得することをお勧めします"); config.setAccessKeySecret("RAM ユーザーの AccessKey シークレットを環境変数から取得することをお勧めします"); // ビジネス要件に基づいてリージョン ID とエンドポイントを変更します。 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 操作に対する権限を持っています。これらの認証情報を使用して操作を実行することは、リスクの高い操作です。RAM ユーザーを使用して API 操作を呼び出したり、日常的な O&M を実行したりすることをお勧めします。 * 環境変数を取得する一般的な方法: * 方法 1: * RAM ユーザーの AccessKey ID を取得します:System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID"); * RAM ユーザーの AccessKey シークレットを取得します:System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET"); * 方法 2: * RAM ユーザーの AccessKey ID を取得します:System.getProperty("ALIBABA_CLOUD_ACCESS_KEY_ID"); * RAM ユーザーの AccessKey シークレットを取得します:System.getProperty("ALIBABA_CLOUD_ACCESS_KEY_SECRET"); */ config.setAccessKeyId("RAM ユーザーの AccessKey ID を環境変数から取得することをお勧めします"); config.setAccessKeySecret("RAM ユーザーの AccessKey シークレットを環境変数から取得することをお勧めします"); // ビジネス要件に基づいてリージョン ID とエンドポイントを変更します。 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(); // 音声モデレーションタスクが提出されたときに返されるタスク ID。 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 ソースコード」をご参照ください。
音声モデレーションでは、次の 3 つのタイプがサポートされています。
インターネット上で公開されている音声のモデレーションインターネット上で公開されている音声の
シナリオ
レビュー対象のオーディオがインターネットからアクセス可能な場合、音声モデレーション 2.0 は、URL を介して音声ファイルを取得し、モデレーションを実行できます。
次のコマンドを実行して、関連する依存関係をインストールします。
pip install alibabacloud_green20220302==2.2.11Python 用 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 操作に対する権限を持っています。セキュリティリスクを回避するために、RAM ユーザーを使用して API 操作を呼び出したり、日常的な O&M を実行したりすることをお勧めします。 # AccessKey ID と AccessKey シークレットをプロジェクトコードに保存しないことをお勧めします。そうしないと、AccessKey ペアが漏洩し、アカウント内のリソースのセキュリティが侵害される可能性があります。 # 環境変数を取得する一般的な方法: # RAM ユーザーの AccessKey ID を取得します:os.environ['ALIBABA_CLOUD_ACCESS_KEY_ID'] # RAM ユーザーの AccessKey シークレットを取得します:os.environ['ALIBABA_CLOUD_ACCESS_KEY_SECRET'] access_key_id='RAM ユーザーの AccessKey ID を環境変数から取得することをお勧めします', access_key_secret='RAM ユーザーの AccessKey シークレットを環境変数から取得することをお勧めします', # 接続タイムアウト期間。単位:ミリ秒。 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 操作に対する権限を持っています。セキュリティリスクを回避するために、RAM ユーザーを使用して API 操作を呼び出したり、日常的な O&M を実行したりすることをお勧めします。 # AccessKey ID と AccessKey シークレットをプロジェクトコードに保存しないことをお勧めします。そうしないと、AccessKey ペアが漏洩し、アカウント内のリソースのセキュリティが侵害される可能性があります。 # 環境変数を取得する一般的な方法: # RAM ユーザーの AccessKey ID を取得します:os.environ['ALIBABA_CLOUD_ACCESS_KEY_ID'] # RAM ユーザーの AccessKey シークレットを取得します:os.environ['ALIBABA_CLOUD_ACCESS_KEY_SECRET'] access_key_id='RAM ユーザーの AccessKey ID を環境変数から取得することをお勧めします', access_key_secret='RAM ユーザーの AccessKey シークレットを環境変数から取得することをお勧めします', # 接続タイムアウト期間。単位:ミリ秒。 connect_timeout=10000, # 読み取りタイムアウト期間。単位:ミリ秒。 read_timeout=3000, region_id='ap-southeast-1', endpoint='green-cip.ap-southeast-1.aliyuncs.com' ) # 注:インスタンス化されたクライアントは、可能な限り再利用することをお勧めします。これにより、モデレーションのパフォーマンスが向上し、クライアント接続の繰り返しを回避できます。 clt = Client(config) # 音声モデレーションタスクが提出されたときに返されるタスク ID。 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)ライブストリームモデレーションタスクをキャンセルするためのサンプルコード
ローカル音声のモデレーション ローカル音声の
シナリオ
モデレーション対象の音声がローカルマシンにあり、パブリックネットワークアクセスリンクがない場合、音声を Content Moderation が提供する Object Storage Service (OSS) バケットにアップロードできます。音声モデレーション 2.0 は OSS に直接アクセスし、音声コンテンツを取得して、モデレーションを実行できます。
次のコマンドを実行して、関連する依存関係をインストールします。
pip install alibabacloud_green20220302==2.2.11OSS SDK をインストールします。
pip install oss2Python 用 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 # ファイルのアップロードに使用されるトークン。キーは Content Moderation のエンドポイント、値はトークンです。 token_dict = dict() # ファイルをアップロードするためのクライアントを取得します。 bucket = None # 画像モデレーションリクエストを開始するクライアントを作成します。 def create_client(access_key_id, access_key_secret, endpoint): config = Config( access_key_id=access_key_id, access_key_secret=access_key_secret, # HTTP プロキシを構成します。 # http_proxy='http://10.10.xx.xx:xxxx', # HTTPS プロキシを構成します。 # https_proxy='https://10.10.xx.xx:xxxx', # ビジネス要件に基づいてリージョン ID とエンドポイントを変更します。 endpoint=endpoint ) return Client(config) # ファイルをアップロードするクライアントを作成します。 def create_oss_bucket(is_vpc, upload_token): global token_dict global bucket auth = oss2.StsAuth(upload_token.access_key_id, upload_token.access_key_secret, upload_token.security_token) if (is_vpc): end_point = upload_token.oss_internal_end_point else: end_point = upload_token.oss_internet_end_point # 注:インスタンス化されたバケットは、可能な限り再利用して、接続の繰り返し確立を避け、モデレーションのパフォーマンスを向上させることをお勧めします。 bucket = oss2.Bucket(auth, end_point, upload_token.bucket_name) # ファイルをアップロードします。 def upload_file(file_name, upload_token): create_oss_bucket(is_vpc, upload_token) object_name = upload_token.file_name_prefix + str(uuid.uuid1()) + '.' + file_name.split('.')[-1] bucket.put_object_from_file(object_name, file_name) return object_name def invoke_function(access_key_id, access_key_secret, endpoint): # 注:インスタンス化されたクライアントは、可能な限り再利用して、接続の繰り返し確立を避け、モデレーションのパフォーマンスを向上させることをお勧めします。 client = create_client(access_key_id, access_key_secret, endpoint) # ランタイム構成オブジェクトを構築し、ランタイムパラメータを指定します。 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( # 音声モデレーションサービス:Content Moderation コンソールの音声モデレーション 2.0 のルール設定の serviceCode。例: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 操作に対する権限を持っています。これらの認証情報を使用して操作を実行することは、リスクの高い操作です。RAM ユーザーを使用して API 操作を呼び出したり、日常的な O&M を実行したりすることをお勧めします。 # AccessKey ID と AccessKey シークレットをプロジェクトコードに保存しないことをお勧めします。そうしないと、AccessKey ペアが漏洩し、アカウントに属するすべてのリソースのセキュリティが侵害される可能性があります。 # 環境変数を取得する一般的な方法: # RAM ユーザーの AccessKey ID を取得します:os.environ['ALIBABA_CLOUD_ACCESS_KEY_ID'] # RAM ユーザーの AccessKey シークレットを取得します:os.environ['ALIBABA_CLOUD_ACCESS_KEY_SECRET'] access_key_id = 'RAM ユーザーの AccessKey ID を環境変数から取得することをお勧めします' access_key_secret = 'RAM ユーザーの AccessKey シークレットを環境変数から取得することをお勧めします' # ビジネス要件に基づいてリージョン ID とエンドポイントを変更します。 response = invoke_function(access_key_id, access_key_secret, 'green-cip.ap-southeast-1.aliyuncs.com') if response.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 操作に対する権限を持っています。これらの認証情報を使用して操作を実行することは、リスクの高い操作です。RAM ユーザーを使用して API 操作を呼び出したり、日常的な O&M を実行したりすることをお勧めします。 # AccessKey ID と AccessKey シークレットをプロジェクトコードに保存しないことをお勧めします。そうしないと、AccessKey ペアが漏洩し、アカウントに属するすべてのリソースのセキュリティが侵害される可能性があります。 # 環境変数を取得する一般的な方法: # RAM ユーザーの AccessKey ID を取得します:os.environ['ALIBABA_CLOUD_ACCESS_KEY_ID'] # RAM ユーザーの AccessKey シークレットを取得します:os.environ['ALIBABA_CLOUD_ACCESS_KEY_SECRET'] access_key_id='RAM ユーザーの AccessKey ID を環境変数から取得することをお勧めします', access_key_secret='RAM ユーザーの AccessKey シークレットを環境変数から取得することをお勧めします', # 接続タイムアウト期間。単位:ミリ秒。 connect_timeout=10000, # 読み取りタイムアウト期間。単位:ミリ秒。 read_timeout=3000, region_id='ap-southeast-1', endpoint='green-cip.ap-southeast-1.aliyuncs.com' ) # 注:インスタンス化されたクライアントは、可能な限り再利用して、接続の繰り返し確立を避け、モデレーションのパフォーマンスを向上させることをお勧めします。 clt = Client(config) # 音声モデレーションタスクが提出されたときに返されるタスク ID。 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 に保存されている音声のモデレーション OSS に保存されている音声の
シナリオ
モデレーション対象のオーディオファイルがすでに OSS に保存されている場合は、Content Moderation が OSS にアクセスできるようにサービスロールを作成する権限を付与できます。 音声モデレーション 2.0 は、サービスロールを介して OSS からファイルを取得し、モデレーションを実行できます。サービスロールを作成するには、[Cloud Resource Access Authorization] にアクセスしてください。
次のコマンドを実行して、関連する依存関係をインストールします。
pip install alibabacloud_green20220302==2.2.11Python 用 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 操作に対する権限を持っています。これらの認証情報を使用して操作を実行することは、リスクの高い操作です。RAM ユーザーを使用して API 操作を呼び出したり、日常的な O&M を実行したりすることをお勧めします。 # AccessKey ID と AccessKey シークレットをプロジェクトコードに保存しないことをお勧めします。そうしないと、AccessKey ペアが漏洩し、アカウントに属するすべてのリソースのセキュリティが侵害される可能性があります。 # 環境変数を取得する一般的な方法: # RAM ユーザーの AccessKey ID を取得します:os.environ['ALIBABA_CLOUD_ACCESS_KEY_ID'] # RAM ユーザーの AccessKey シークレットを取得します:os.environ['ALIBABA_CLOUD_ACCESS_KEY_SECRET'] access_key_id='RAM ユーザーの AccessKey ID を環境変数から取得することをお勧めします', access_key_secret='RAM ユーザーの AccessKey シークレットを環境変数から取得することをお勧めします', # 接続タイムアウト期間。単位:ミリ秒。 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 操作に対する権限を持っています。これらの認証情報を使用して操作を実行することは、リスクの高い操作です。RAM ユーザーを使用して API 操作を呼び出したり、日常的な O&M を実行したりすることをお勧めします。 # AccessKey ID と AccessKey シークレットをプロジェクトコードに保存しないことをお勧めします。そうしないと、AccessKey ペアが漏洩し、アカウントに属するすべてのリソースのセキュリティが侵害される可能性があります。 # 環境変数を取得する一般的な方法: # RAM ユーザーの AccessKey ID を取得します:os.environ['ALIBABA_CLOUD_ACCESS_KEY_ID'] # RAM ユーザーの AccessKey シークレットを取得します:os.environ['ALIBABA_CLOUD_ACCESS_KEY_SECRET'] access_key_id='RAM ユーザーの AccessKey ID を環境変数から取得することをお勧めします', access_key_secret='RAM ユーザーの AccessKey シークレットを環境変数から取得することをお勧めします', # 接続タイムアウト期間。単位:ミリ秒。 connect_timeout=10000, # 読み取りタイムアウト期間。単位:ミリ秒。 read_timeout=3000, region_id='ap-southeast-1', endpoint='green-cip.ap-southeast-1.aliyuncs.com' ) # 注:インスタンス化されたクライアントは、可能な限り再利用して、接続の繰り返し確立を避け、モデレーションのパフォーマンスを向上させることをお勧めします。 clt = Client(config) # 音声モデレーションタスクが提出されたときに返されるタスク ID。 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 ソースコード」をご参照ください。
音声モデレーションでは、次の 3 つのタイプがサポートされています。
インターネット上で公開されている音声のモデレーション
シナリオ
レビュー対象のオーディオがインターネットからアクセス可能な場合、音声モデレーション 2.0 は、URL を介してオーディオファイルを取得し、モデレーションを実行できます。
次のコマンドを実行して、関連する依存関係をインストールします。
composer require alibabacloud/green-20220302 2.2.10PHP 用 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 操作に対する権限を持っています。これらの認証情報を使用して操作を実行することは、リスクの高い操作です。RAM ユーザーを使用して API 操作を呼び出したり、日常的な O&M を実行したりすることをお勧めします。 * AccessKey ID と AccessKey シークレットをプロジェクトコードに保存しないことをお勧めします。そうしないと、AccessKey ペアが漏洩し、アカウントに属するすべてのリソースのセキュリティが侵害される可能性があります。 * 環境変数を取得する一般的な方法: * RAM ユーザーの AccessKey ID を取得します:getenv("ALIBABA_CLOUD_ACCESS_KEY_ID"); * RAM ユーザーの AccessKey シークレットを取得します:getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET"); */ $config->accessKeyId = "RAM ユーザーの AccessKey ID を環境変数から取得することをお勧めします"; $config->accessKeySecret = "RAM ユーザーの AccessKey シークレットを環境変数から取得することをお勧めします"; // ビジネス要件に基づいてリージョン ID とエンドポイントを変更します。 $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 操作に対する権限を持っています。これらの認証情報を使用して操作を実行することは、リスクの高い操作です。RAM ユーザーを使用して API 操作を呼び出したり、日常的な O&M を実行したりすることをお勧めします。 * AccessKey ID と AccessKey シークレットをプロジェクトコードに保存しないことをお勧めします。そうしないと、AccessKey ペアが漏洩し、アカウントに属するすべてのリソースのセキュリティが侵害される可能性があります。 * 環境変数を取得する一般的な方法: * RAM ユーザーの AccessKey ID を取得します:getenv("ALIBABA_CLOUD_ACCESS_KEY_ID"); * RAM ユーザーの AccessKey シークレットを取得します:getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET"); */ $config->accessKeyId = "RAM ユーザーの AccessKey ID を環境変数から取得することをお勧めします"; $config->accessKeySecret = "RAM ユーザーの AccessKey シークレットを環境変数から取得することをお勧めします"; // ビジネス要件に基づいてリージョン ID とエンドポイントを変更します。 $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"; // 音声モデレーションタスクが提出されたときに返されるタスク ID。 $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()); }
ローカル音声のモデレーション
シナリオ
モデレーション対象の音声がローカルマシンにあり、パブリックネットワークアクセスリンクがない場合、音声を Content Moderation が提供する Object Storage Service (OSS) バケットにアップロードできます。音声モデレーション 2.0 は OSS に直接アクセスし、音声コンテンツを取得して、モデレーションを実行できます。
次のコマンドを実行して、関連する依存関係をインストールします。
composer require alibabacloud/green-20220302 2.2.10OSS SDK をインストールします。
composer require aliyuncs/oss-sdk-phpPHP 用 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); // ランタイム構成オブジェクトを構築し、ランタイムパラメータを指定します。 $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 操作に対する権限を持っています。これらの認証情報を使用して操作を実行することは、リスクの高い操作です。RAM ユーザーを使用して API 操作を呼び出したり、日常的な O&M を実行したりすることをお勧めします。 * AccessKey ID と AccessKey シークレットをプロジェクトコードに保存しないことをお勧めします。そうしないと、AccessKey ペアが漏洩し、アカウントに属するすべてのリソースのセキュリティが侵害される可能性があります。 * 環境変数を取得する一般的な方法: * RAM ユーザーの AccessKey ID を取得します:getenv("ALIBABA_CLOUD_ACCESS_KEY_ID"); * RAM ユーザーの AccessKey シークレットを取得します:getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET"); */ $accessKeyId = 'RAM ユーザーの AccessKey ID を環境変数から取得することをお勧めします'; $accessKeySecret = 'RAM ユーザーの AccessKey シークレットを環境変数から取得することをお勧めします'; // ビジネス要件に基づいてリージョン ID とエンドポイントを変更します。 $endpoint = "green-cip.ap-southeast-1.aliyuncs.com"; try { $response = invoke($accessKeyId, $accessKeySecret, $endpoint); print_r(json_encode($response->body, JSON_UNESCAPED_UNICODE)); } catch (Exception $e) { var_dump($e->getMessage()); var_dump($e->getErrorInfo()); var_dump($e->getLastException()); var_dump($e->getLastRequest()); }音声モデレーション結果を取得するためのサンプルコード
<?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 操作に対する権限を持っています。これらの認証情報を使用して操作を実行することは、リスクの高い操作です。RAM ユーザーを使用して API 操作を呼び出したり、日常的な O&M を実行したりすることをお勧めします。 * AccessKey ID と AccessKey シークレットをプロジェクトコードに保存しないことをお勧めします。そうしないと、AccessKey ペアが漏洩し、アカウントに属するすべてのリソースのセキュリティが侵害される可能性があります。 * 環境変数を取得する一般的な方法: * RAM ユーザーの AccessKey ID を取得します:getenv("ALIBABA_CLOUD_ACCESS_KEY_ID"); * RAM ユーザーの AccessKey シークレットを取得します:getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET"); */ $config->accessKeyId = "RAM ユーザーの AccessKey ID を環境変数から取得することをお勧めします"; $config->accessKeySecret = "RAM ユーザーの AccessKey シークレットを環境変数から取得することをお勧めします"; // ビジネス要件に基づいてリージョン ID とエンドポイントを変更します。 $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"; // 音声モデレーションタスクが提出されたときに返されるタスク ID。 $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 に保存されている音声のモデレーション
シナリオ
モデレーション対象のオーディオファイルがすでに OSS に保存されている場合は、Content Moderation が OSS にアクセスできるようにサービスロールを作成する権限を付与できます。 音声モデレーション 2.0 は、サービスロールを通じて OSS からファイルを取得し、モデレーションを実行できます。サービスロールを作成するには、クラウド リソースアクセス承認 にアクセスしてください。
次のコマンドを実行して、関連する依存関係をインストールします。
composer require alibabacloud/green-20220302 2.2.10PHP 用 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 操作に対する権限を持っています。これらの認証情報を使用して操作を実行することは、リスクの高い操作です。RAM ユーザーを使用して API 操作を呼び出したり、日常的な O&M を実行したりすることをお勧めします。 * AccessKey ID と AccessKey シークレットをプロジェクトコードに保存しないことをお勧めします。そうしないと、AccessKey ペアが漏洩し、アカウントに属するすべてのリソースのセキュリティが侵害される可能性があります。 * 環境変数を取得する一般的な方法: * RAM ユーザーの AccessKey ID を取得します:getenv("ALIBABA_CLOUD_ACCESS_KEY_ID"); * RAM ユーザーの AccessKey シークレットを取得します:getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET"); */ $config->accessKeyId = "RAM ユーザーの AccessKey ID を環境変数から取得することをお勧めします"; $config->accessKeySecret = "RAM ユーザーの AccessKey シークレットを環境変数から取得することをお勧めします"; // ビジネス要件に基づいてリージョン ID とエンドポイントを変更します。 $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 操作に対する権限を持っています。これらの認証情報を使用して操作を実行することは、リスクの高い操作です。RAM ユーザーを使用して API 操作を呼び出したり、日常的な O&M を実行したりすることをお勧めします。 * AccessKey ID と AccessKey シークレットをプロジェクトコードに保存しないことをお勧めします。そうしないと、AccessKey ペアが漏洩し、アカウントに属するすべてのリソースのセキュリティが侵害される可能性があります。 * 環境変数を取得する一般的な方法: * RAM ユーザーの AccessKey ID を取得します:getenv("ALIBABA_CLOUD_ACCESS_KEY_ID"); * RAM ユーザーの AccessKey シークレットを取得します:getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET"); */ $config->accessKeyId = "RAM ユーザーの AccessKey ID を環境変数から取得することをお勧めします"; $config->accessKeySecret = "RAM ユーザーの AccessKey シークレットを環境変数から取得することをお勧めします"; // ビジネス要件に基づいてリージョン ID とエンドポイントを変更します。 $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"; // 音声モデレーションタスクが提出されたときに返されるタスク ID。 $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
音声モデレーションでは、次の 3 つのタイプがサポートされています。
インターネット上で公開されている音声のモデレーション
シナリオ
レビュー対象のオーディオがインターネットからアクセス可能な場合、音声モデレーション 2.0 は、URL を介してオーディオファイルを取得し、モデレーションを実行できます。
次のコマンドを実行して、関連する依存関係をインストールします。
go git clone --branch v2.2.11 github.com/alibabacloud-go/green-20220302/v2Go 用 SDK
音声モデレーションタスクを送信するためのサンプルコード
package main import ( "encoding/json" "fmt" openapi "github.com/alibabacloud-go/darabonba-openapi/v2/client" green "github.com/alibabacloud-go/green-20220302/client" "github.com/alibabacloud-go/tea/tea" "net/http" ) func main() { config := &openapi.Config{ /** * Alibaba Cloud アカウントの AccessKey ペアは、すべての API 操作に対する権限を持っています。これらの認証情報を使用して操作を実行することは、リスクの高い操作です。RAM ユーザーを使用して API 操作を呼び出したり、日常的な O&M を実行したりすることをお勧めします。 * AccessKey ID と AccessKey シークレットをプロジェクトコードに保存しないことをお勧めします。そうしないと、AccessKey ペアが漏洩し、アカウントに属するすべてのリソースのセキュリティが侵害される可能性があります。 * 環境変数を取得する一般的な方法: * RAM ユーザーの AccessKey ID を取得します:os.Getenv("ALIBABA_CLOUD_ACCESS_KEY_ID") * RAM ユーザーの AccessKey シークレットを取得します:os.Getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET") */ AccessKeyId: tea.String("RAM ユーザーの AccessKey ID を環境変数から取得することをお勧めします"), AccessKeySecret: tea.String("RAM ユーザーの AccessKey シークレットを環境変数から取得することをお勧めします"), // リージョン ID とエンドポイントを入力します。 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 秒です。 * 読み取りタイムアウトを 10 秒未満に設定すると、リクエスト処理中にサーバーで読み取りタイムアウトエラーが発生する可能性があります。 */ 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/client" "github.com/alibabacloud-go/tea/tea" "net/http" ) func main() { config := &openapi.Config{ /** * Alibaba Cloud アカウントの AccessKey ペアは、すべての API 操作に対する権限を持っています。これらの認証情報を使用して操作を実行することは、リスクの高い操作です。RAM ユーザーを使用して API 操作を呼び出したり、日常的な O&M を実行したりすることをお勧めします。 * AccessKey ID と AccessKey シークレットをプロジェクトコードに保存しないことをお勧めします。そうしないと、AccessKey ペアが漏洩し、アカウントに属するすべてのリソースのセキュリティが侵害される可能性があります。 * 環境変数を取得する一般的な方法: * RAM ユーザーの AccessKey ID を取得します:os.Getenv("ALIBABA_CLOUD_ACCESS_KEY_ID") * RAM ユーザーの AccessKey シークレットを取得します:os.Getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET") */ AccessKeyId: tea.String("RAM ユーザーの AccessKey ID を環境変数から取得することをお勧めします"), AccessKeySecret: tea.String("RAM ユーザーの AccessKey シークレットを環境変数から取得することをお勧めします"), // リージョン ID とエンドポイントを入力します。 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 秒です。 * 読み取りタイムアウトを 10 秒未満に設定すると、リクエスト処理中にサーバーで読み取りタイムアウトエラーが発生する可能性があります。 */ 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": "<タスク 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)) } }
ローカル音声のモデレーション
シナリオ
モデレーション対象の音声がローカルマシンにあり、パブリックネットワークアクセスリンクがない場合、音声を Content Moderation が提供する Object Storage Service (OSS) バケットにアップロードできます。音声モデレーション 2.0 は OSS に直接アクセスし、音声コンテンツを取得して、モデレーションを実行できます。
次のコマンドを実行して、関連する依存関係をインストールします。
go git clone --branch v2.2.11 github.com/alibabacloud-go/green-20220302/v2OSS SDK をインストールします。
go get github.com/aliyun/aliyun-oss-go-sdk/ossGo 用 SDK
音声モデレーションタスクを送信するためのサンプルコード
package main import ( "encoding/json" "fmt" openapi "github.com/alibabacloud-go/darabonba-openapi/v2/client" green20220302 "github.com/alibabacloud-go/green-20220302/client" util "github.com/alibabacloud-go/tea-utils/v2/service" "github.com/alibabacloud-go/tea/tea" "github.com/aliyun/aliyun-oss-go-sdk/oss" "github.com/google/uuid" "net/http" "os" "strings" "time" ) // ファイルをアップロードするための一時トークンを取得します。 var TokenMap = make(map[string]*green20220302.DescribeUploadTokenResponseBodyData) // ファイルをアップロードするクライアント。 var Bucket *oss.Bucket // サービスが VPC にデプロイされているかどうかを指定します。 var isVPC = false // 画像モデレーションリクエストを開始するクライアントを作成します。 func createClient(accessKeyId string, accessKeySecret string, endpoint string) (*green20220302.Client, error) { config := &openapi.Config{ AccessKeyId: tea.String(accessKeyId), AccessKeySecret: tea.String(accessKeySecret), // HTTP プロキシを構成します。 // HttpProxy: tea.String("http://10.10.xx.xx:xxxx"), // HTTPS プロキシを構成します。 // HttpsProxy: tea.String("https://username:password@xxx.xxx.xxx.xxx:9999"), Endpoint: tea.String(endpoint), } // 注:インスタンス化されたクライアントは、可能な限り再利用して、接続の繰り返し確立を避け、モデレーションのパフォーマンスを向上させることをお勧めします。 return green20220302.NewClient(config) } // ファイルをアップロードするためのクライアントを取得します。 func createOssClient(tokenData *green20220302.DescribeUploadTokenResponseBodyData) { if isVPC { ossClient, err := oss.New(tea.StringValue(tokenData.OssInternalEndPoint), tea.StringValue(tokenData.AccessKeyId), tea.StringValue(tokenData.AccessKeySecret), oss.SecurityToken(tea.StringValue(tokenData.SecurityToken))) if err != nil { fmt.Println("Error:", err) os.Exit(-1) } Bucket, _ = ossClient.Bucket(tea.StringValue(tokenData.BucketName)) } else { ossClient, err := oss.New(tea.StringValue(tokenData.OssInternetEndPoint), tea.StringValue(tokenData.AccessKeyId), tea.StringValue(tokenData.AccessKeySecret), oss.SecurityToken(tea.StringValue(tokenData.SecurityToken))) if err != nil { fmt.Println("Error:", err) os.Exit(-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 } // RuntimeOptions インスタンスを作成し、ランタイムパラメータを指定します。設定は、RuntimeOptions インスタンスを使用するリクエストにのみ有効です。 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 操作に対する権限を持っています。これらの認証情報を使用して操作を実行することは、リスクの高い操作です。RAM ユーザーを使用して API 操作を呼び出したり、日常的な O&M を実行したりすることをお勧めします。 * AccessKey ID と AccessKey シークレットをプロジェクトコードに保存しないことをお勧めします。そうしないと、AccessKey ペアが漏洩し、アカウントに属するすべてのリソースのセキュリティが侵害される可能性があります。 * 環境変数を取得する一般的な方法: * RAM ユーザーの AccessKey ID を取得します:os.Getenv("ALIBABA_CLOUD_ACCESS_KEY_ID") * RAM ユーザーの AccessKey シークレットを取得します:os.Getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET") */ var accessKeyId = "RAM ユーザーの AccessKey ID を環境変数から取得することをお勧めします" var accessKeySecret = "RAM ユーザーの AccessKey シークレットを環境変数から取得することをお勧めします" // ビジネス要件に基づいてリージョン ID とエンドポイントを変更します。 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/client" "github.com/alibabacloud-go/tea/tea" "net/http" ) func main() { config := &openapi.Config{ /** * Alibaba Cloud アカウントの AccessKey ペアは、すべての API 操作に対する権限を持っています。これらの認証情報を使用して操作を実行することは、リスクの高い操作です。RAM ユーザーを使用して API 操作を呼び出したり、日常的な O&M を実行したりすることをお勧めします。 * AccessKey ID と AccessKey シークレットをプロジェクトコードに保存しないことをお勧めします。そうしないと、AccessKey ペアが漏洩し、アカウントに属するすべてのリソースのセキュリティが侵害される可能性があります。 * 環境変数を取得する一般的な方法: * RAM ユーザーの AccessKey ID を取得します:os.Getenv("ALIBABA_CLOUD_ACCESS_KEY_ID") * RAM ユーザーの AccessKey シークレットを取得します:os.Getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET") */ AccessKeyId: tea.String("RAM ユーザーの AccessKey ID を環境変数から取得することをお勧めします"), AccessKeySecret: tea.String("RAM ユーザーの AccessKey シークレットを環境変数から取得することをお勧めします"), // リージョン ID とエンドポイントを入力します。 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 秒です。 * 読み取りタイムアウトを 10 秒未満に設定すると、リクエスト処理中にサーバーで読み取りタイムアウトエラーが発生する可能性があります。 */ 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": "<タスク 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 に保存されている音声のモデレーション
シナリオ
モデレーション対象のオーディオファイルがすでに OSS に保存されている場合は、Content Moderation が OSS にアクセスできるようにサービスロールを作成する権限を付与できます。 音声モデレーション 2.0 は、サービスロールを介して OSS からファイルを取得し、モデレーションを実行できます。サービスロールを作成するには、クラウド リソースアクセス承認にアクセスしてください。
次のコマンドを実行して、関連する依存関係をインストールします。
go git clone --branch v2.2.11 github.com/alibabacloud-go/green-20220302/v2Go 用 SDK
音声モデレーションタスクを送信するためのサンプルコード
package main import ( "encoding/json" "fmt" openapi "github.com/alibabacloud-go/darabonba-openapi/v2/client" green "github.com/alibabacloud-go/green-20220302/client" "github.com/alibabacloud-go/tea/tea" "net/http" ) func main() { config := &openapi.Config{ /** * Alibaba Cloud アカウントの AccessKey ペアは、すべての API 操作に対する権限を持っています。これらの認証情報を使用して操作を実行することは、リスクの高い操作です。RAM ユーザーを使用して API 操作を呼び出したり、日常的な O&M を実行したりすることをお勧めします。 * AccessKey ID と AccessKey シークレットをプロジェクトコードに保存しないことをお勧めします。そうしないと、AccessKey ペアが漏洩し、アカウントに属するすべてのリソースのセキュリティが侵害される可能性があります。 * 環境変数を取得する一般的な方法: * RAM ユーザーの AccessKey ID を取得します:os.Getenv("ALIBABA_CLOUD_ACCESS_KEY_ID") * RAM ユーザーの AccessKey シークレットを取得します:os.Getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET") */ AccessKeyId: tea.String("RAM ユーザーの AccessKey ID を環境変数から取得することをお勧めします"), AccessKeySecret: tea.String("RAM ユーザーの AccessKey シークレットを環境変数から取得することをお勧めします"), // リージョン ID とエンドポイントを入力します。 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 秒です。 * 読み取りタイムアウトを 10 秒未満に設定すると、リクエスト処理中にサーバーで読み取りタイムアウトエラーが発生する可能性があります。 */ 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/client" "github.com/alibabacloud-go/tea/tea" "net/http" ) func main() { config := &openapi.Config{ /** * Alibaba Cloud アカウントの AccessKey ペアは、すべての API 操作に対する権限を持っています。これらの認証情報を使用して操作を実行することは、リスクの高い操作です。RAM ユーザーを使用して API 操作を呼び出したり、日常的な O&M を実行したりすることをお勧めします。 * AccessKey ID と AccessKey シークレットをプロジェクトコードに保存しないことをお勧めします。そうしないと、AccessKey ペアが漏洩し、アカウントに属するすべてのリソースのセキュリティが侵害される可能性があります。 * 環境変数を取得する一般的な方法: * RAM ユーザーの AccessKey ID を取得します:os.Getenv("ALIBABA_CLOUD_ACCESS_KEY_ID") * RAM ユーザーの AccessKey シークレットを取得します:os.Getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET") */ AccessKeyId: tea.String("RAM ユーザーの AccessKey ID を環境変数から取得することをお勧めします"), AccessKeySecret: tea.String("RAM ユーザーの AccessKey シークレットを環境変数から取得することをお勧めします"), // リージョン ID とエンドポイントを入力します。 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 秒です。 * 読み取りタイムアウトを 10 秒未満に設定すると、リクエスト処理中にサーバーで読み取りタイムアウトエラーが発生する可能性があります。 */ 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": "<タスク 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 ソースコード をご参照ください。
音声モデレーションでは、次の 3 つのタイプがサポートされています。
インターネット上で公開されている音声のモデレーション
シナリオ
レビュー対象のオーディオがインターネットからアクセス可能な場合、音声モデレーション 2.0 は、URL を介してオーディオファイルを取得し、モデレーションを実行できます。
次のコマンドを実行して、関連する依存関係をインストールします。
dotnet add package AlibabaCloud.SDK.Green20220302 --version 2.2.10C# 用 SDK を使用します。
音声モデレーションタスクを送信するためのサンプルコード
using Newtonsoft.Json; using Tea; namespace AlibabaCloud.SDK.Sample { public class Sample { /** * AccessKey ID と AccessKey シークレットを使用してクライアントを初期化します。 * @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 ペアが漏洩し、アカウント内のリソースのセキュリティが侵害される可能性があります。次のサンプルコードは参照用です。STS を使用することをお勧めします。 /** * Alibaba Cloud アカウントの AccessKey ペアは、すべての API 操作に対する権限を持っています。これらの認証情報を使用して操作を実行することは、リスクの高い操作です。RAM ユーザーを使用して API 操作を呼び出したり、日常的な O&M を実行したりすることをお勧めします。 * AccessKey ID と AccessKey シークレットをプロジェクトコードに保存しないことをお勧めします。そうしないと、AccessKey ペアが漏洩し、アカウントに属するすべてのリソースのセキュリティが侵害される可能性があります。 * 環境変数を取得する一般的な方法: * RAM ユーザーの AccessKey ID を取得します:Environment.GetEnvironmentVariable("ALIBABA_CLOUD_ACCESS_KEY_ID") * RAM ユーザーの AccessKey シークレットを取得します:Environment.GetEnvironmentVariable("ALIBABA_CLOUD_ACCESS_KEY_SECRET") */ string accessKeyId = "RAM ユーザーの AccessKey ID を環境変数から取得することをお勧めします"; string accessKeySecret = "RAM ユーザーの AccessKey シークレットを環境変数から取得することをお勧めします"; // 注:インスタンス化されたクライアントは、可能な限り再利用して、接続の繰り返し確立を避け、モデレーションのパフォーマンスを向上させることをお勧めします。 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。インターネット経由でアクセスできます。 task.Add("url", "https://xxxx/xxx/sample.wav"); voiceModerationRequest.ServiceParameters = JsonConvert.SerializeObject(task); // ランタイム構成オブジェクトを構築し、ランタイムパラメータを指定します。 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 シークレットを使用してクライアントを初期化します。 * @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 ペアが漏洩し、アカウント内のリソースのセキュリティが侵害される可能性があります。次のサンプルコードは参照用です。STS を使用することをお勧めします。 /** * Alibaba Cloud アカウントの AccessKey ペアは、すべての API 操作に対する権限を持っています。これらの認証情報を使用して操作を実行することは、リスクの高い操作です。RAM ユーザーを使用して API 操作を呼び出したり、日常的な O&M を実行したりすることをお勧めします。 * AccessKey ID と AccessKey シークレットをプロジェクトコードに保存しないことをお勧めします。そうしないと、AccessKey ペアが漏洩し、アカウントに属するすべてのリソースのセキュリティが侵害される可能性があります。 * 環境変数を取得する一般的な方法: * RAM ユーザーの AccessKey ID を取得します:Environment.GetEnvironmentVariable("ALIBABA_CLOUD_ACCESS_KEY_ID") * RAM ユーザーの AccessKey シークレットを取得します:Environment.GetEnvironmentVariable("ALIBABA_CLOUD_ACCESS_KEY_SECRET") */ string accessKeyId = "RAM ユーザーの AccessKey ID を環境変数から取得することをお勧めします"; string accessKeySecret = "RAM ユーザーの AccessKey シークレットを環境変数から取得することをお勧めします"; // 注:インスタンス化されたクライアントは、可能な限り再利用して、接続の繰り返し確立を避け、モデレーションのパフォーマンスを向上させることをお勧めします。 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); // ランタイム構成オブジェクトを構築し、ランタイムパラメータを指定します。 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); } } } }
ローカル音声のモデレーション
シナリオ
モデレーション対象の音声がローカルマシンにあり、パブリックネットワークアクセスリンクがない場合、音声を Content Moderation が提供する Object Storage Service (OSS) バケットにアップロードできます。音声モデレーション 2.0 は OSS に直接アクセスし、音声コンテンツを取得して、モデレーションを実行できます。
関連する依存関係をインストールするには、次のコマンドを実行します。
dotnet add package AlibabaCloud.SDK.Green20220302 --version 2.2.10OSS SDK をインストールします。
NuGet を使用して SDK をインストールします。 1. Visual Studio に NuGet がインストールされていない場合は、最初に NuGet をインストールする必要があります。 2. NuGet をインストールした後、Visual Studio でプロジェクトを作成するか、既存のプロジェクトを開きます。次に、[ツール] > [NuGet パッケージ マネージャー] > [ソリューションの NuGet パッケージの管理] を選択します。 3. 検索ボックスに aliyun.oss.sdk と入力し、[検索] をクリックします。検索結果で、Aliyun.OSS.SDK(.NET Framework に適用可能)または Aliyun.OSS.SDK.NetCore(.Net Core に適用可能)を見つけます。最新バージョンを選択し、[インストール] をクリックします。C# 用 SDK を使用します。
音声モデレーションタスクを送信するためのサンプルコード
// This file is auto-generated, don't edit it. Thanks. using System; using Newtonsoft.Json; using Aliyun.OSS; namespace AlibabaCloud.SDK.Green20220302 { public class VoiceModerationAutoRoute { //Obtain a temporary token for uploading the file. public static Dictionary<String, Models.DescribeUploadTokenResponse> tokenDic = new Dictionary<String, Models.DescribeUploadTokenResponse>(); //The client that uploads the file. public static OssClient ossClient = null; //Specifies whether the service is deployed in a VPC. public static Boolean isVPC = false; public static void Main(string[] args) { /** * The AccessKey pair of an Alibaba Cloud account has permissions on all API operations. Using these credentials to perform operations is a high-risk operation. We recommend that you use a RAM user to call API operations or perform routine O&M. * We recommend that you do not save the AccessKey ID and AccessKey Secret in your project code. Otherwise, the AccessKey pair may be leaked and the security of all the resources that belong to your account may be compromised. * Common ways to obtain environment variables: * Obtain the AccessKey ID of your RAM user: Environment.GetEnvironmentVariable("ALIBABA_CLOUD_ACCESS_KEY_ID") * Obtain the AccessKey Secret of your RAM user: Environment.GetEnvironmentVariable("ALIBABA_CLOUD_ACCESS_KEY_SECRET") */ String accessKeyId = "We recommend that you obtain the AccessKey ID of your RAM user from environment variables"; String accessKeySecret = "We recommend that you obtain the AccessKey secret of your RAM user from environment variables"; // Change the region ID and endpoint based on your business requirements. String endpoint = "green-cip.ap-southeast-1.aliyuncs.com"; Models.VoiceModerationResponse response = invoke( accessKeyId, accessKeySecret, endpoint ); //Automatic routing. The region is switched to 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)); } //Create the client that initiates image moderation requests. public static Client createClient( String accessKeyId, String accessKeySecret, String endpoint ) { AlibabaCloud.OpenApiClient.Models.Config config = new AlibabaCloud.OpenApiClient.Models.Config { AccessKeyId = accessKeyId, AccessKeySecret = accessKeySecret, //Configure an HTTP proxy. //HttpProxy = "http://10.10.xx.xx:xxxx", //Configure an HTTPS proxy. //HttpsProxy = "https://username:password@xxx.xxx.xxx.xxx:9999", //The endpoint of the service. Endpoint = endpoint, }; return new Client(config); } //Create the client that uploads the file. 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 ); } } //Upload a file. public static String uploadFile( String filePath, Models.DescribeUploadTokenResponse tokenResponse ) { // Create an OssClient instance. ossClient = getOssClient(tokenResponse, isVPC); var tokenData = tokenResponse.Body.Data; String objectName = tokenData.FileNamePrefix + Guid.NewGuid().ToString() + "." + filePath.Split(".").GetValue(1); //Upload a file. ossClient.PutObject(tokenData.BucketName, objectName, filePath); return objectName; } //Submit the image moderation request. public static Models.VoiceModerationResponse invoke( String accessKeyId, String accessKeySecret, String endpoint ) { //Note: We recommend that you reuse the instantiated client as much as possible to avoid repeatedly establishing connections and improve the moderation performance. Client client = createClient(accessKeyId, accessKeySecret, endpoint); //Create a RuntimeOptions instance and specify runtime parameters. The settings take effect only on the requests that use the RuntimeOptions instance. AlibabaCloud.TeaUtil.Models.RuntimeOptions runtimeOptions = new AlibabaCloud.TeaUtil.Models.RuntimeOptions(); //The full path of the local file. Example: D:\localPath\exampleFile.wav. String filePath = "D:\localPath\exampleFile.wav"; try { //Obtain a temporary token for uploading the file. if ( !tokenDic.ContainsKey(endpoint) || tokenDic[endpoint].Body.Data.Expiration <= DateTimeOffset.Now.ToUnixTimeSeconds() ) { var tokenResponse = client.DescribeUploadToken(); tokenDic[endpoint] = tokenResponse; } //Upload a file. String objectName = uploadFile(filePath, tokenDic[endpoint]); //Construct an audio moderation request. Models.VoiceModerationRequest voiceModerationRequest = new Models.VoiceModerationRequest(); //Audio moderation service Example: audio_multilingual_global voiceModerationRequest.Service = "audio_multilingual_global"; Dictionary<string, object> task = new Dictionary<string, object>(); //The information of audio to be moderated. task.Add("ossBucketName", tokenDic[endpoint].Body.Data.BucketName); task.Add("ossObjectName", objectName); //The ID of the data to be moderated. task.Add("dataId", Guid.NewGuid().ToString()); voiceModerationRequest.ServiceParameters = JsonConvert.SerializeObject(task); //Call the API to obtain the moderation results. 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 { /** * Use your AccessKey ID and AccessKey secret to initialize the client. * @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, }; // The endpoint of the service. config.Endpoint = "green-cip.ap-southeast-1.aliyuncs.com"; return new AlibabaCloud.SDK.Green20220302.Client(config); } public static void Main(string[] args) { // If the project code is leaked, the AccessKey pair may be leaked and the security of resources within your account may be compromised. The following sample code is for reference only. We recommend that you use STS. /** * The AccessKey pair of an Alibaba Cloud account has permissions on all API operations. Using these credentials to perform operations is a high-risk operation. We recommend that you use a RAM user to call API operations or perform routine O&M. * We recommend that you do not save the AccessKey ID and AccessKey Secret in your project code. Otherwise, the AccessKey pair may be leaked and the security of all the resources that belong to your account may be compromised. * Common ways to obtain environment variables: * Obtain the AccessKey ID of your RAM user: Environment.GetEnvironmentVariable("ALIBABA_CLOUD_ACCESS_KEY_ID") * Obtain the AccessKey Secret of your RAM user: Environment.GetEnvironmentVariable("ALIBABA_CLOUD_ACCESS_KEY_SECRET") */ string accessKeyId = "We recommend that you obtain the AccessKey ID of your RAM user from environment variables", string accessKeySecret = 'We recommend that you obtain the AccessKey secret of your RAM user from environment variables', // Note: We recommend that you reuse the instantiated client as much as possible to avoid repeatedly establishing connections and improve the moderation performance. AlibabaCloud.SDK.Green20220302.Client client = CreateClient(accessKeyId, accessKeySecret); // Construct an audio moderation request. AlibabaCloud.SDK.Green20220302.Models.VoiceModerationResultRequest voiceModerationResultRequest = new AlibabaCloud.SDK.Green20220302.Models.VoiceModerationResultRequest(); // Voice moderation service. voiceModerationResultRequest.Service="audio_multilingual_global"; Dictionary<String,Object> task=new Dictionary<string, object>(); // The ID of the task whose results you want to query. task.Add("taskId","<The ID of the task whose results you want to query.>"); voiceModerationResultRequest.ServiceParameters=JsonConvert.SerializeObject(task); // Construct the runtime configuration object and specify runtime parameters. AlibabaCloud.TeaUtil.Models.RuntimeOptions runtime = new AlibabaCloud.TeaUtil.Models.RuntimeOptions(); runtime.ReadTimeout = 10000; runtime.ConnectTimeout = 10000; try { // Submits audio moderation tasks. 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) { // Print the error if necessary. AlibabaCloud.TeaUtil.Common.AssertAsString(error.Message); Console.WriteLine("error : " + error); } catch (Exception _error) { TeaException error = new TeaException(new Dictionary<string, object> { { "message", _error.Message } }); // Print the error if necessary. AlibabaCloud.TeaUtil.Common.AssertAsString(error.Message); Console.WriteLine("error : " + error); } } } }
OSS に保存されている音声のモデレーション
シナリオ
モデレーション対象のオーディオファイルがすでに OSS に保存されている場合は、Content Moderation が OSS にアクセスできるようにサービスロールを作成する権限を付与できます。 音声モデレーション 2.0 は、サービスロールを通じて OSS からファイルを取得し、モデレーションを実行できます。サービスロールを作成するには、Cloud Resource Access Authorization にアクセスしてください。
次のコマンドを実行して、関連する依存関係をインストールします。
dotnet add package AlibabaCloud.SDK.Green20220302 --version 2.2.10C# 用 SDK を使用します。
音声モデレーションタスクを送信するためのサンプルコード
using Newtonsoft.Json; using Tea; namespace AlibabaCloud.SDK.Sample { public class Sample { /** * AccessKey ID と AccessKey シークレットを使用してクライアントを初期化します。 * @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 ペアが漏洩し、アカウント内のリソースのセキュリティが侵害される可能性があります。次のサンプルコードは参照用です。 STS の使用をお勧めします。 /** * Alibaba Cloud アカウントの AccessKey ペアは、すべての API 操作に対する権限を持っています。これらの資格情報を使用して操作を実行することは、リスクの高い操作です。 RAM ユーザーを使用して API 操作を呼び出したり、日常的な O&M を実行することをお勧めします。 * プロジェクトコードに AccessKey ID と AccessKey シークレットを保存しないことをお勧めします。そうしないと、AccessKey ペアが漏洩し、アカウントに属するすべてのリソースのセキュリティが侵害される可能性があります。 * 環境変数を取得する一般的な方法: * RAM ユーザーの AccessKey ID を取得する: Environment.GetEnvironmentVariable("ALIBABA_CLOUD_ACCESS_KEY_ID") * RAM ユーザーの AccessKey シークレットを取得する: Environment.GetEnvironmentVariable("ALIBABA_CLOUD_ACCESS_KEY_SECRET") */ string accessKeyId = "RAM ユーザーの AccessKey ID を環境変数から取得することをお勧めします", string accessKeySecret = "RAM ユーザーの AccessKey シークレットを環境変数から取得することをお勧めします", // 注: 接続の繰り返し確立を避け、モデレーションのパフォーマンスを向上させるために、インスタンス化されたクライアントをできるだけ再利用することをお勧めします。 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); // ランタイム構成オブジェクトを構築し、ランタイムパラメータを指定します。 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 シークレットを使用してクライアントを初期化します。 * @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 ペアが漏洩し、アカウント内のリソースのセキュリティが侵害される可能性があります。次のサンプルコードは参照用です。 STS の使用をお勧めします。 /** * Alibaba Cloud アカウントの AccessKey ペアは、すべての API 操作に対する権限を持っています。これらの資格情報を使用して操作を実行することは、リスクの高い操作です。 RAM ユーザーを使用して API 操作を呼び出したり、日常的な O&M を実行することをお勧めします。 * プロジェクトコードに AccessKey ID と AccessKey シークレットを保存しないことをお勧めします。そうしないと、AccessKey ペアが漏洩し、アカウントに属するすべてのリソースのセキュリティが侵害される可能性があります。 * 環境変数を取得する一般的な方法: * RAM ユーザーの AccessKey ID を取得する: Environment.GetEnvironmentVariable("ALIBABA_CLOUD_ACCESS_KEY_ID") * RAM ユーザーの AccessKey シークレットを取得する: Environment.GetEnvironmentVariable("ALIBABA_CLOUD_ACCESS_KEY_SECRET") */ string accessKeyId = "RAM ユーザーの AccessKey ID を環境変数から取得することをお勧めします", string accessKeySecret = "RAM ユーザーの AccessKey シークレットを環境変数から取得することをお勧めします", // 注: 接続の繰り返し確立を避け、モデレーションのパフォーマンスを向上させるために、インスタンス化されたクライアントをできるだけ再利用することをお勧めします。 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); // ランタイム構成オブジェクトを構築し、ランタイムパラメータを指定します。 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); } } } }
SDK for Python
The Python version must be 3.6 or later. ソースコードの詳細については、「ソースコード」をご参照ください。Node.js 用 SDK ソースコード
音声モデレーションでは、次の 3 つのタイプがサポートされています。
インターネット上で公開されている音声のモデレーション
シナリオ
レビュー対象の音声がインターネットからアクセス可能な場合、音声モデレーション 2.0 は URL を介して音声ファイルを取得し、モデレーションを実行できます。
関連する依存関係をインストールするには、次のコマンドを実行します。
npm install @alicloud/green20220302@2.2.10Node.js 用 SDK を使用します。
音声モデレーションタスクを送信するためのサンプルコード
const Green20220302 = require('@alicloud/green20220302'); const OpenApi = require('@alicloud/openapi-client'); const Util = require('@alicloud/tea-util'); // Note: We recommend that you reuse the instantiated client as much as possible to avoid repeatedly establishing connections and improve the moderation performance. // If the project code is leaked, the AccessKey pair may be leaked and the security of all resources within your account may be compromised. The following sample code is provided for reference only. class Client { static createClient() { const config = new OpenApi.Config({ // Required. Make sure that the ALIBABA_CLOUD_ACCESS_KEY_ID environment variable is configured. accessKeyId: process.env['ALIBABA_CLOUD_ACCESS_KEY_ID'], // Required. Make sure that the ALIBABA_CLOUD_ACCESS_KEY_SECRET environment variable is configured. 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(); // Create a request object. const voiceModerationRequest = new Green20220302.VoiceModerationRequest({ // 音声モデレーションサービス。 "service": "audio_multilingual_global", // モデレーション対象の音声の URL。 "serviceParameters": JSON.stringify({"url":"http://aliyundoc.com/test.flv"}) }); // Create a runtime configuration object. const runtime = new Util.RuntimeOptions(); try { // Initiate a request and obtain a response. const response = await client.voiceModerationWithOptions(voiceModerationRequest, runtime); console.log(JSON.stringify(response.body)); } catch (error) { // Handle exceptions with caution in your actual business scenario and never ignore exceptions in your project. In this example, error messages are printed to the screen. // Print an error message. 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'); // Note: We recommend that you reuse the instantiated client as much as possible to avoid repeatedly establishing connections and improve the moderation performance. // If the project code is leaked, the AccessKey pair may be leaked and the security of all resources within your account may be compromised. The following sample code is provided for reference only. class Client { static createClient() { const config = new OpenApi.Config({ // Required. Make sure that the ALIBABA_CLOUD_ACCESS_KEY_ID environment variable is configured. accessKeyId: process.env['ALIBABA_CLOUD_ACCESS_KEY_ID'], // Required. Make sure that the ALIBABA_CLOUD_ACCESS_KEY_SECRET environment variable is configured. 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(); // Create a request object. const voiceModerationResultRequest = new Green20220302.VoiceModerationResultRequest({ // 音声モデレーションサービス。 "service": "audio_multilingual_global", "serviceParameters": JSON.stringify({"taskId":"<The ID of the task for which you want to obtain moderation results>"}) }); // Create a runtime configuration object. const runtime = new Util.RuntimeOptions(); try { // Initiate a request and obtain a response. const response = await client.voiceModerationResultWithOptions(voiceModerationResultRequest, runtime); console.log(JSON.stringify(response.body)); } catch (error) { // Handle exceptions with caution in your actual business scenario and never ignore exceptions in your project. In this example, error messages are printed to the screen. // Print an error message. console.log('Error occurred:', error.message); } } } Client.main();
ローカル音声のモデレーション
シナリオ
モデレーション対象の音声がローカルマシンにあり、パブリックネットワークアクセスリンクがない場合は、コンテンツモデレーションが提供する Object Storage Service (OSS) バケットに音声をアップロードできます。音声モデレーション 2.0 は OSS に直接アクセスし、音声コンテンツを取得して、モデレーションを実行できます。
関連する依存関係をインストールするには、次のコマンドを実行します。
npm install @alicloud/green20220302@2.2.10OSS 依存関係をインストールします。
npm install ali-oss --saveNode.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"); // Note: We recommend that you reuse the instantiated client as much as possible to avoid repeatedly establishing connections and improve the moderation performance. // If the project code is leaked, the AccessKey pair may be leaked and the security of all resources within your account may be compromised. The following sample code is provided for reference only. //Specifies whether the service is deployed in a VPC. var isVPC = false; //Obtain a temporary token for uploading the file. var tokenDic = new Array(); //The client that uploads the file. var ossClient; //Configure endpoint. var endpoint = 'green-cip.ap-southeast-1.aliyuncs.com' //The path of the local file. var filePath = 'D:\\test\\voice\\cf02.wav' //モデレーションサービス var service = 'audio_multilingual_global' class Client { static createClient() { const config = new OpenApi.Config({ // Required. Make sure that the ALIBABA_CLOUD_ACCESS_KEY_ID environment variable is configured. accessKeyId: "We recommend that you obtain the AccessKey ID of your RAM user from environment variables", // Required. Make sure that the ALIBABA_CLOUD_ACCESS_KEY_SECRET environment variable is configured. accessKeySecret: "We recommend that you obtain the AccessKey secret of your RAM user from environment variables", endpoint: endpoint, }); return new Green20220302.default(config); } //Create the client that uploads the file. 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(); // Create a runtime configuration object. const runtime = new Util.RuntimeOptions(); //Obtain a temporary token for uploading a file. if (tokenDic[endpoint] == null || tokenDic[endpoint]['expiration'] <= Date.parse(new Date() / 1000)) { var tokenResponse = await client.describeUploadTokenWithOptions(runtime) tokenDic[endpoint] = tokenResponse.body.data; } //Obtain the client for uploading the file. 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(); } //Upload a file. const result = await ossClient.put(objectName, path.normalize(filePath)); // Create a request object. const voiceModerationRequest = new Green20220302.VoiceModerationRequest({ // モデレーションサービス。 "service": service, // The URL to be moderated. "serviceParameters": JSON.stringify({ "ossBucketName": tokenDic[endpoint].bucketName, "ossObjectName": objectName, }) }); try { // Initiate a request and obtain a response. const response = await client.voiceModerationWithOptions(voiceModerationRequest, runtime); console.log(JSON.stringify(response.body)); } catch (error) { // Handle exceptions with caution in your actual business scenario and never ignore exceptions in your project. In this example, error messages are printed to the screen. // Print an error message. 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'); // Note: We recommend that you reuse the instantiated client as much as possible to avoid repeatedly establishing connections and improve the moderation performance. // If the project code is leaked, the AccessKey pair may be leaked and the security of all resources within your account may be compromised. The following sample code is provided for reference only. class Client { static createClient() { const config = new OpenApi.Config({ // Required. Make sure that the ALIBABA_CLOUD_ACCESS_KEY_ID environment variable is configured. accessKeyId: process.env['ALIBABA_CLOUD_ACCESS_KEY_ID'], // Required. Make sure that the ALIBABA_CLOUD_ACCESS_KEY_SECRET environment variable is configured. 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(); // Create a request object. const voiceModerationResultRequest = new Green20220302.VoiceModerationResultRequest({ // 音声モデレーションサービス。 "service": "audio_multilingual_global", "serviceParameters": JSON.stringify({"taskId":"<The ID of the task for which you want to obtain moderation results>"}) }); // Create a runtime configuration object. const runtime = new Util.RuntimeOptions(); try { // Initiate a request and obtain a response. const response = await client.voiceModerationResultWithOptions(voiceModerationResultRequest, runtime); console.log(JSON.stringify(response.body)); } catch (error) { // Handle exceptions with caution in your actual business scenario and never ignore exceptions in your project. In this example, error messages are printed to the screen. // Print an error message. console.log('Error occurred:', error.message); } } } Client.main();
OSS に保存されている音声のモデレーション
シナリオ
モデレーション対象のオーディオファイルが既に OSS に保存されている場合は、サービスロールを作成してコンテンツモデレーションが OSS にアクセスできるようにすることを承認できます。 音声モデレーション 2.0 は、サービスロールを介して OSS からファイルを取得し、モデレーションを実行できます。サービスロールを作成するには、クラウドリソースアクセス承認にアクセスしてください。
関連する依存関係をインストールするには、次のコマンドを実行します。
npm install @alicloud/green20220302@2.2.10Node.js 用 SDK を使用します。
音声モデレーションタスクを送信するためのサンプルコード
const Green20220302 = require('@alicloud/green20220302'); const OpenApi = require('@alicloud/openapi-client'); const Util = require('@alicloud/tea-util'); // Note: We recommend that you reuse the instantiated client as much as possible to avoid repeatedly establishing connections and improve the moderation performance. // If the project code is leaked, the AccessKey pair may be leaked and the security of all resources within your account may be compromised. The following sample code is provided for reference only. class Client { static createClient() { const config = new OpenApi.Config({ // Required. Make sure that the ALIBABA_CLOUD_ACCESS_KEY_ID environment variable is configured. accessKeyId: process.env['ALIBABA_CLOUD_ACCESS_KEY_ID'], // Required. Make sure that the ALIBABA_CLOUD_ACCESS_KEY_SECRET environment variable is configured. 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(); // Create a request object. 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 { // Initiate a request and obtain a response. const response = await client.voiceModerationWithOptions(voiceModerationRequest, runtime); console.log(JSON.stringify(response.body)); } catch (error) { // Handle exceptions with caution in your actual business scenario and never ignore exceptions in your project. In this example, error messages are printed to the screen. // Print an error message. 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'); // Note: We recommend that you reuse the instantiated client as much as possible to avoid repeatedly establishing connections and improve the moderation performance. // If the project code is leaked, the AccessKey pair may be leaked and the security of all resources within your account may be compromised. The following sample code is provided for reference only. class Client { static createClient() { const config = new OpenApi.Config({ // Required. Make sure that the ALIBABA_CLOUD_ACCESS_KEY_ID environment variable is configured. accessKeyId: process.env['ALIBABA_CLOUD_ACCESS_KEY_ID'], // Required. Make sure that the ALIBABA_CLOUD_ACCESS_KEY_SECRET environment variable is configured. 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(); // Create a request object. const voiceModerationResultRequest = new Green20220302.VoiceModerationResultRequest({ // 音声モデレーションサービス。 "service": "audio_multilingual_global", "serviceParameters": JSON.stringify({"taskId":"<The ID of the task for which you want to obtain moderation results>"}) }); // Create a runtime configuration object. const runtime = new Util.RuntimeOptions(); try { // Initiate a request and obtain a response. const response = await client.voiceModerationResultWithOptions(voiceModerationResultRequest, runtime); console.log(JSON.stringify(response.body)); } catch (error) { // Handle exceptions with caution in your actual business scenario and never ignore exceptions in your project. In this example, error messages are printed to the screen. // Print an error message. console.log('Error occurred:', error.message); } } } Client.main();
HTTPS 経由の呼び出し
呼び出し方法
サービスリクエスト URL:https://green-cip.{region}.aliyuncs.com
プロトコル:HTTPS
メソッド:POST
共通リクエストパラメーター
音声モデレーション 2.0 API の入力パラメーターには、共通リクエストパラメーターと操作固有のリクエストパラメーターが含まれます。共通リクエストパラメーターは、各 API 操作で使用されます。次の表に、共通リクエストパラメーターを示します。
パラメーター
タイプ
必須
説明
フォーマット
文字列
はい
レスポンスを返す形式。有効な値:
JSON(デフォルト)
XML
バージョン
文字列
はい
Content Moderation 2.0 API のバージョン番号。値は YYYY-MM-DD 形式です。値を 2022-03-02 に設定します。
AccessKeyId
文字列
はい
Alibaba Cloud によって提供される AccessKey ID。
署名
文字列
はい
現在のリクエストの署名文字列。署名の計算方法の詳細については、以下の署名メソッドを参照してください。
SignatureMethod
文字列
はい
署名文字列の暗号化方式。値を HMAC-SHA1 に設定します。
タイムスタンプ
文字列
はい
リクエストのタイムスタンプ。yyyy-MM-ddTHH:mm:ssZ 形式の ISO 8601 標準で時間を指定します。
時間は協定世界時(UTC)である必要があります。
たとえば、2022 年 12 月 12 日 09:13:14(UTC + 08:00)は 2022-12-12T01:13:14Z と記述します。
SignatureVersion
文字列
はい
署名暗号化アルゴリズムのバージョン。値を 1.0 に設定します。
SignatureNonce
文字列
はい
リプレイ攻撃を防ぐために使用される一意の乱数。異なるリクエストには異なる番号を使用する必要があります。
アクション
文字列
はい
有効な値:
VoiceModeration
VoiceModerationResult
共通レスポンスパラメーター
呼び出しが成功したかどうかにかかわらず、システムは各 API リクエストに対して一意の RequestId を返します。その他のレスポンスパラメーターは、呼び出すサービスによって異なります。
{ "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":"it's a nice day today.", "Labels":"", "Url":"http://xxxx.aliyuncs.com/cip-media/voice/****.wav" } ] }, "Code":200 }
署名メソッド
音声モデレーション 2.0 サービスは、各アクセスリクエストを認証します。したがって、各リクエストには署名情報が含まれている必要があります。音声モデレーション 2.0 は、AccessKey ペアを使用した対称暗号化を実装して、リクエスト送信者を認証します。
AccessKey ペアは、Alibaba Cloud によって正式に発行されます。 Alibaba Cloud 公式 Web サイトで申請および管理できます。 AccessKey ペアは、AccessKey ID と AccessKey シークレットで構成されます。 AccessKey ID はユーザーの ID を検証するために使用され、AccessKey シークレットは署名文字列の暗号化と検証に使用されます。 AccessKey シークレットは厳重に管理する必要があります。
リクエストに署名するには、次の手順を実行します。
リクエストパラメーターを使用して、正規化されたクエリ文字列を作成します。
リクエストパラメーターをパラメーター名のアルファベット順に並べ替えます。これらのパラメーターには、共通リクエストパラメーターと操作固有のパラメーターが含まれます。ただし、共通リクエストパラメーターの 署名 パラメーターは含まれません。
関連するリクエストパラメーターの名前と値をエンコードします。パラメーター名と値は、UTF-8 文字セットを使用して URL エンコードする必要があります。
説明java.net.URLEncoder など、URL エンコードをサポートするほとんどのライブラリは、application/x-www-form-urlencoded の MIME(Multipurpose Internet Mail Extensions)エンコード規則に準拠しています。このエンコード方式を使用する場合は、エンコードされた文字列のプラス記号(+)を %20 に、アスタリスク(*)を %2A に、%7E をチルダ(〜)に置き換えます。このようにして、上記のエンコード規則に基づいて作成されたエンコード文字列を取得できます。
次のエンコード規則に注意してください。
大文字、小文字、数字、およびハイフン(-)、アンダースコア(_)、ピリオド(.)、チルダ(〜)などの特殊文字をエンコードする必要はありません。
その他の文字は、
%XY形式でエンコードする必要があります。ここで、XY は 16 進表記の文字の ASCII コードを表します。たとえば、二重引用符(")は%22としてエンコードされます。拡張 UTF-8 文字は、
%XY%ZA...形式でエンコードする必要があります。スペースは
%20としてエンコードする必要があります。スペースをプラス記号(+)としてエンコードしないでください。
エンコードされたパラメーター名と値を等号(=)でつなぎます。
等号でつながれた文字列をパラメーター名のアルファベット順に並べ替え、アンパサンド(&)でつなげて、正規化されたクエリ文字列を取得します。
手順 a.i で作成した正規化されたクエリ文字列を使用して、次の規則に基づいて署名する文字列を作成します。
StringToSign= HTTPMethod + "&" + percentEncode("/") + "&" + percentEncode(CanonicalizedQueryString)説明HTTPMethod は、リクエストの作成に使用される HTTP メソッド(POST など)を示します。 percentEncode("/") は、手順 a.ii で説明されている URL エンコード規則に基づいてスラッシュ(/)をエンコードします。スラッシュ(/)のエンコード値は
%2Fです。 percentEncode(CanonicalizedQueryString) は、手順 a.i で構築された正規化されたクエリ文字列のエンコードされた文字列を指定します。エンコードされた文字列は、手順 a.ii で説明されている URL エンコード規則に従って取得されます。RFC 2104 で説明されている HMAC アルゴリズムに基づいて、署名する文字列の HMAC(Hash-Based Message Authentication Code)値を計算します。
説明SHA1(Secure Hash Algorithm 1)アルゴリズムを使用して、署名する文字列の HMAC 値を計算します。アンパサンド(
&)(ASCII:38)が付加された AccessKey シークレットは、HMAC 計算のキーとして使用されます。HMAC 値を Base64 でエンコードして、署名文字列を取得します。
署名文字列を 署名 パラメーターとしてリクエストに追加します。これにより、API リクエストが署名されます。
説明署名文字列が最終的なリクエストパラメーター値として Content Moderation サービスに送信される場合、値は RFC 3986 で定義されている規則に基づいて他のパラメーターと同様に URL エンコードする必要があります。