SDK または HTTPS 経由でビデオモデレーション 2.0 API を呼び出すことができます。署名検証や本文形式の構築など、いくつかの操作をスキップできるため、SDK を使用して API を呼び出すことをお勧めします。このトピックでは、ビデオモデレーション 2.0 の使用方法について説明します。
ステップ 1:ビデオモデレーション 2.0 を有効にする
Content Moderation V2.0 ページを開き、ビデオモデレーション 2.0 サービスを有効にします。API 操作を呼び出すと、課金システムによって使用量に基づいて自動的に課金されます。詳細については、「課金方法」をご参照ください。
ビデオモデレーション 2.0 サービスを有効にすると、デフォルトの課金方法は従量課金になります。日額料金は、実際のご使用量に基づいて計算されます。サービスが呼び出されない場合、料金は発生しません。
ステップ 2:RAM ユーザーに権限を付与する
Resource Access Management(RAM)ユーザーとして API 操作を呼び出したり、SDK を使用したりする前に、RAM ユーザーに権限を付与する必要があります。RAM ユーザーの AccessKey ペアを作成できます。API 操作を呼び出すときは、AccessKey ペアを使用して ID 検証を完了する必要があります。 AccessKey ペアを取得する方法については、「AccessKey ペアを取得する」をご参照ください。
手順
RAM 管理者として RAM コンソール にログインします。
- RAM ユーザーを作成します。
詳細については、「RAM ユーザーを作成する」をご参照ください。
AliyunYundunGreenWebFullAccess
システムポリシーを RAM ユーザーに付与します。詳細については、「RAM ユーザーに権限を付与する」をご参照ください。
上記の手順を完了すると、RAM ユーザーとして Content Moderation API を呼び出すことができます。
ステップ 3:SDK をインストールし、SDK を使用してビデオモデレーション 2.0 サービスを呼び出す
次の表は、サポートされているリージョンを示しています。
リージョン | パブリックエンドポイント | 内部エンドポイント | サポートされているサービス |
シンガポール | green-cip.ap-southeast-1.aliyuncs.com | green-cip-vpc.ap-southeast-1.aliyuncs.com | videoDetection_global、liveStreamDetection_global |
他のプログラミング言語の 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 サンプルコードを使用する前に、環境変数を構成する必要があります。詳細については、「認証情報を構成する」をご参照ください。
API フィールドの説明については、「ビデオファイルモデレーション 2.0 API」および「ライブストリームモデレーション 2.0 API」をご参照ください。
Java 用 SDK
Java のバージョンは 1.8 以降である必要があります。
ソースコードの詳細については、「Java 用 SDK ソースコード」または「オープンソースソフトウェア(OSS)の Java 用 SDK ソースコード」をご参照ください。
ビデオモデレーションでは、次の 3 つのタイプがサポートされています。
インターネット上で公開されているビデオのモデレーション
シナリオ
モデレートするビデオがインターネットからアクセス可能な場合、ビデオモデレーション 2.0 は、URL を介してビデオファイルを取得し、モデレーションを実行できます。
pom.xml フィールドに次の依存関係を追加すると、Maven プロジェクトで SDK を使用できます。Maven プロジェクトで SDK を使用できます。
<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.VideoModerationRequest; import com.aliyun.green20220302.models.VideoModerationResponse; import com.aliyun.green20220302.models.VideoModerationResponseBody; import com.aliyun.teaopenapi.models.Config; public class VideoModerationDemo { public static void main(String[] args) throws Exception { Config config = new Config(); /** * Alibaba Cloud アカウントの AccessKey ペアは、すべての API 操作に対する権限を持っています。これらの認証情報を使用して OSS で操作を実行することは、リスクの高い操作です。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); //HTTP プロキシを構成します。 //config.setHttpProxy("http://10.10.xx.xx:xxxx"); //HTTPS プロキシを構成します。 //config.setHttpsProxy("https://10.10.xx.xx:xxxx"); Client client = new Client(config); JSONObject serviceParameters = new JSONObject(); serviceParameters.put("url", "https://xxx.oss.aliyuncs.com/xxx.mp4"); VideoModerationRequest videoModerationRequest = new VideoModerationRequest(); // モデレーションタイプ:videoDetection_global videoModerationRequest.setService("videoDetection_global"); videoModerationRequest.setServiceParameters(serviceParameters.toJSONString()); try { VideoModerationResponse response = client.videoModeration(videoModerationRequest); if (response.getStatusCode() == 200) { VideoModerationResponseBody 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) { VideoModerationResponseBody.VideoModerationResponseBodyData data = result.getData(); System.out.println("taskId = [" + data.getTaskId() + "]"); } else { System.out.println("ビデオモデレーションは成功しませんでした。 code:" + code); } } else { System.out.println("レスポンスは成功しませんでした。 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.VideoModerationResultRequest; import com.aliyun.green20220302.models.VideoModerationResultResponse; import com.aliyun.green20220302.models.VideoModerationResultResponseBody; import com.aliyun.teaopenapi.models.Config; public class VideoModerationResultDemo { public static void main(String[] args) throws Exception { Config config = new Config(); /** * Alibaba Cloud アカウントの AccessKey ペアは、すべての API 操作に対する権限を持っています。これらの認証情報を使用して OSS で操作を実行することは、リスクの高い操作です。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); //HTTP プロキシを構成します。 //config.setHttpProxy("http://10.10.xx.xx:xxxx"); //HTTPS プロキシを構成します。 //config.setHttpsProxy("https://10.10.xx.xx:xxxx"); Client client = new Client(config); JSONObject serviceParameters = new JSONObject(); // ビデオモデレーションタスクの送信時に返されるタスク ID。 serviceParameters.put("taskId", "vi_f_O5z5iaIis3iI0X2oNYj7qa-1x****"); VideoModerationResultRequest videoModerationResultRequest = new VideoModerationResultRequest(); // モデレーションタイプ:videoDetection_global videoModerationResultRequest.setService("videoDetection_global"); videoModerationResultRequest.setServiceParameters(serviceParameters.toJSONString()); try { VideoModerationResultResponse response = client.videoModerationResult(videoModerationResultRequest); if (response.getStatusCode() == 20) { VideoModerationResultResponseBody 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()) { VideoModerationResultResponseBody.VideoModerationResultResponseBodyData data = result.getData(); System.out.println("dataId = " + data.getDataId()); System.out.println("riskLevel = " + data.getRiskLevel()); System.out.println("videoResult = " + JSON.toJSONString(data.getvideoResult())); System.out.println("frameResult = " + JSON.toJSONString(data.getFrameResult())); } else { System.out.println("ビデオモデレーションの結果は成功しませんでした。 code:" + result.getCode()); } } else { System.out.println("レスポンスは成功しませんでした。 status:" + response.getStatusCode()); } } catch (Exception e) { e.printStackTrace(); } } }
ビデオライブストリームモデレーションタスクをキャンセルするためのサンプルコード
import com.alibaba.fastjson.JSONObject; import com.aliyun.green20220302.Client; import com.aliyun.green20220302.models.VideoModerationCancelRequest; import com.aliyun.green20220302.models.VideoModerationCancelResponse; import com.aliyun.green20220302.models.VideoModerationCancelResponseBody; import com.aliyun.teaopenapi.models.Config; public class VideoModerationCancelDemo { public static void main(String[] args) throws Exception { Config config = new Config(); /** * Alibaba Cloud アカウントの AccessKey ペアは、すべての API 操作に対する権限を持っています。これらの認証情報を使用して OSS で操作を実行することは、リスクの高い操作です。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); //HTTP プロキシを構成します。 //config.setHttpProxy("http://xx.xx.xx.xx:xxxx"); //HTTPS プロキシを構成します。 //config.setHttpsProxy("https://xx.xx.xx.xx:xxxx"); Client client = new Client(config); JSONObject serviceParameters = new JSONObject(); // 送信時に返されるタスク ID。 serviceParameters.put("taskId", "vi_f_O5z5iaIis3iI0X2oNYj7qa-1x****"); VideoModerationCancelRequest videoModerationCancelRequest = new VideoModerationCancelRequest(); videoModerationCancelRequest.setService("liveStreamDetection_global"); videoModerationCancelRequest.setServiceParameters(serviceParameters.toJSONString()); try { VideoModerationCancelResponse response = client.videoModerationCancel(videoModerationCancelRequest); if (response.getStatusCode() == 200) { VideoModerationCancelResponseBody 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()) { System.out.println("ビデオモデレーションのキャンセルは成功しませんでした。 code:" + result.getCode()); } } else { System.out.println("レスポンスは成功しませんでした。 status:" + response.getStatusCode()); } } catch (Exception e) { e.printStackTrace(); } } }
ローカルビデオのモデレーション
シナリオ
モデレーション対象のビデオがローカルマシンにあり、インターネットからアクセスできない場合、ビデオファイルを Content Moderation が提供する Object Storage Service (OSS) バケットにアップロードできます。ビデオモデレーション アップロードできます ビデオ ファイルを Content Moderation によって提供される Object Storage Service (OSS) バケットにアップロードします。ビデオモデレーション 2.0 は OSS に直接アクセスし、ビデオコンテンツを取得してモデレーションを実行できます。
pom.xml フィールドに次の依存関係を追加すると、Maven プロジェクトで SDK を使用できます。Maven プロジェクトで SDK を使用できます。
<dependency> <groupId>com.aliyun</groupId> <artifactId>green20220302</artifactId> <version>2.2.11</version> </dependency>
OSS SDK をインストールします。
<dependency> <groupId>com.aliyun.oss</groupId> <artifactId>aliyun-sdk-oss</artifactId> <version>3.16.3</version> </dependency>
Java 用 SDK を使用します。
ビデオモデレーションタスクを送信するためのサンプルコード
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.VideoModerationRequest; import com.aliyun.green20220302.models.VideoModerationResponse; import com.aliyun.green20220302.models.VideoModerationResponseBody; 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.Map; import java.util.UUID; public class LocalVideoModeration { //サービスが 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 VideoModerationResponse invokeFunction(String accessKeyId, String accessKeySecret, String endpoint) throws Exception { //注:インスタンス化されたクライアントは、接続の繰り返し確立を避けてモデレーションのパフォーマンスを向上させるために、できるだけ再利用することをお勧めします。 Client client = createClient(accessKeyId, accessKeySecret, endpoint); RuntimeOptions runtime = new RuntimeOptions(); //ローカルファイルのフルパス。例:D:\localPath\exampleFile.mp4。 String filePath = "D:\\localPath\\exampleFile.mp4"; //ファイルをアップロードするための一時トークンを取得します。 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()); VideoModerationRequest request = new VideoModerationRequest(); // モデレーションタイプ:videoDetection_global request.setService("videoDetection_global"); request.setServiceParameters(JSON.toJSONString(serviceParameters)); VideoModerationResponse response = null; try { response = client.videoModerationWithOptions(request, runtime); } catch (Exception e) { e.printStackTrace(); } return response; } public static void main(String[] args) throws Exception { /** * Alibaba Cloud アカウントの AccessKey ペアは、すべての API 操作に対する権限を持っています。これらの認証情報を使用して OSS で操作を実行することは、リスクの高い操作です。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 とエンドポイントを変更します。 VideoModerationResponse response = invokeFunction(accessKeyId, accessKeySecret, "green-cip.ap-southeast-1.aliyuncs.com"); try { // モデレーションの結果を出力します。 if (response != null) { if (response.getStatusCode() == 200) { VideoModerationResponseBody 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) { VideoModerationResponseBody.VideoModerationResponseBodyData data = body.getData(); System.out.println("taskId = [" + data.getTaskId() + "]"); } else { System.out.println("ビデオモデレーションは成功しませんでした。 code:" + code); } } else { System.out.println("レスポンスは成功しませんでした。 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.VideoModerationResultRequest; import com.aliyun.green20220302.models.VideoModerationResultResponse; import com.aliyun.green20220302.models.VideoModerationResultResponseBody; import com.aliyun.teaopenapi.models.Config; public class VideoModerationResultDemo { public static void main(String[] args) throws Exception { Config config = new Config(); /** * Alibaba Cloud アカウントの AccessKey ペアは、すべての API 操作に対する権限を持っています。これらの認証情報を使用して OSS で操作を実行することは、リスクの高い操作です。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); //HTTP プロキシを構成します。 //config.setHttpProxy("http://10.10.xx.xx:xxxx"); //HTTPS プロキシを構成します。 //config.setHttpsProxy("https://10.10.xx.xx:xxxx"); Client client = new Client(config); JSONObject serviceParameters = new JSONObject(); // ビデオモデレーションタスクの送信時に返されるタスク ID。 serviceParameters.put("taskId", "vi_f_O5z5iaIis3iI0X2oNYj7qa-1x****"); VideoModerationResultRequest videoModerationResultRequest = new VideoModerationResultRequest(); // モデレーションタイプ:videoDetection_global videoModerationResultRequest.setService("videoDetection_global"); videoModerationResultRequest.setServiceParameters(serviceParameters.toJSONString()); try { VideoModerationResultResponse response = client.videoModerationResult(videoModerationResultRequest); if (response.getStatusCode() == 200) { VideoModerationResultResponseBody 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()) { VideoModerationResultResponseBody.VideoModerationResultResponseBodyData data = result.getData(); System.out.println("dataId = " + data.getDataId()); System.out.println("riskLevel = " + data.getRiskLevel()); System.out.println("videoResult = " + JSON.toJSONString(data.getvideoResult())); System.out.println("frameResult = " + JSON.toJSONString(data.getFrameResult())); } else { System.out.println("ビデオモデレーションの結果は成功しませんでした。 code:" + result.getCode()); } } else { System.out.println("レスポンスは成功しませんでした。 status:" + response.getStatusCode()); } } catch (Exception e) { e.printStackTrace(); } } }
ビデオライブストリームモデレーションタスクをキャンセルするためのサンプルコード
import com.alibaba.fastjson.JSONObject; import com.aliyun.green20220302.Client; import com.aliyun.green20220302.models.VideoModerationCancelRequest; import com.aliyun.green20220302.models.VideoModerationCancelResponse; import com.aliyun.green20220302.models.VideoModerationCancelResponseBody; import com.aliyun.teaopenapi.models.Config; public class VideoModerationCancelDemo { public static void main(String[] args) throws Exception { Config config = new Config(); /** * Alibaba Cloud アカウントの AccessKey ペアは、すべての API 操作に対する権限を持っています。これらの認証情報を使用して OSS で操作を実行することは、リスクの高い操作です。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); //HTTP プロキシを構成します。 //config.setHttpProxy("http://xx.xx.xx.xx:xxxx"); //HTTPS プロキシを構成します。 //config.setHttpsProxy("https://xx.xx.xx.xx:xxxx"); Client client = new Client(config); JSONObject serviceParameters = new JSONObject(); // 送信時に返されるタスク ID。 serviceParameters.put("taskId", "vi_f_O5z5iaIis3iI0X2oNYj7qa-1x****"); VideoModerationCancelRequest videoModerationCancelRequest = new VideoModerationCancelRequest(); videoModerationCancelRequest.setService("liveStreamDetection_global"); videoModerationCancelRequest.setServiceParameters(serviceParameters.toJSONString()); try { VideoModerationCancelResponse response = client.videoModerationCancel(videoModerationCancelRequest); if (response.getStatusCode() == 200) { VideoModerationCancelResponseBody 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()) { System.out.println("ビデオモデレーションのキャンセルは成功しませんでした。 code:" + result.getCode()); } } else { System.out.println("レスポンスは成功しませんでした。 status:" + response.getStatusCode()); } } catch (Exception e) { e.printStackTrace(); } } }
OSS に保存されているビデオのモデレーション
シナリオ
モデレーション対象の動画ファイルが既に OSS に保存されている場合は、Content Moderation が OSS にアクセスできるようにサービスロールを作成する権限を付与できます。動画モデレーション 2.0 は、サービスロールを介して OSS からファイルを取得し、モデレーションを実行できます。サービスロールを作成するには、Cloud Resource Access Authorization にアクセスしてください。
pom.xml フィールドに次の依存関係を追加すると、Maven プロジェクトで SDK を使用できます。Maven プロジェクトで SDK を使用できます。
<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.VideoModerationRequest; import com.aliyun.green20220302.models.VideoModerationResponse; import com.aliyun.green20220302.models.VideoModerationResponseBody; import com.aliyun.teaopenapi.models.Config; public class VideoModerationDemo { public static void main(String[] args) throws Exception { Config config = new Config(); /** * Alibaba Cloud アカウントの AccessKey ペアは、すべての API 操作に対する権限を持っています。これらの認証情報を使用して OSS で操作を実行することは、リスクの高い操作です。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); //HTTP プロキシを構成します。 //config.setHttpProxy("http://10.10.xx.xx:xxxx"); //HTTPS プロキシを構成します。 //config.setHttpsProxy("https://10.10.xx.xx:xxxx"); Client client = new Client(config); JSONObject serviceParameters = new JSONObject(); serviceParameters.put("ossBucketName", "bucket_01"); serviceParameters.put("ossObjectName", "20240307/07/28/test.flv"); serviceParameters.put("ossRegionId", "ap-southeast-1"); VideoModerationRequest videoModerationRequest = new VideoModerationRequest(); // モデレーションタイプ:videoDetection_global videoModerationRequest.setService("videoDetection_global"); videoModerationRequest.setServiceParameters(serviceParameters.toJSONString()); try { VideoModerationResponse response = client.videoModeration(videoModerationRequest); if (response.getStatusCode() == 200) { VideoModerationResponseBody 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) { VideoModerationResponseBody.VideoModerationResponseBodyData data = result.getData(); System.out.println("taskId = [" + data.getTaskId() + "]"); } else { System.out.println("ビデオモデレーションは成功しませんでした。 code:" + code); } } else { System.out.println("レスポンスは成功しませんでした。 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.VideoModerationResultRequest; import com.aliyun.green20220302.models.VideoModerationResultResponse; import com.aliyun.green20220302.models.VideoModerationResultResponseBody; import com.aliyun.teaopenapi.models.Config; public class VideoModerationResultDemo { public static void main(String[] args) throws Exception { Config config = new Config(); /** * Alibaba Cloud アカウントの AccessKey ペアは、すべての API 操作に対する権限を持っています。これらの認証情報を使用して OSS で操作を実行することは、リスクの高い操作です。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); //HTTP プロキシを構成します。 //config.setHttpProxy("http://10.10.xx.xx:xxxx"); //HTTPS プロキシを構成します。 //config.setHttpsProxy("https://10.10.xx.xx:xxxx"); Client client = new Client(config); JSONObject serviceParameters = new JSONObject(); // ビデオモデレーションタスクの送信時に返されるタスク ID。 serviceParameters.put("taskId", "vi_f_O5z5iaIis3iI0X2oNYj7qa-1x****"); VideoModerationResultRequest videoModerationResultRequest = new VideoModerationResultRequest(); // モデレーションタイプ:videoDetection_global videoModerationResultRequest.setService("videoDetection_global"); videoModerationResultRequest.setServiceParameters(serviceParameters.toJSONString()); try { VideoModerationResultResponse response = client.videoModerationResult(videoModerationResultRequest); if (response.getStatusCode() == 200) { VideoModerationResultResponseBody 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()) { VideoModerationResultResponseBody.VideoModerationResultResponseBodyData data = result.getData(); System.out.println("dataId = " + data.getDataId()); System.out.println("riskLevel = " + data.getRiskLevel()); System.out.println("videoResult = " + JSON.toJSONString(data.getvideoResult())); System.out.println("frameResult = " + JSON.toJSONString(data.getFrameResult())); } else { System.out.println("ビデオモデレーションの結果は成功しませんでした。 code:" + result.getCode()); } } else { System.out.println("レスポンスは成功しませんでした。 status:" + response.getStatusCode()); } } catch (Exception e) { e.printStackTrace(); } } }
ビデオライブストリームモデレーションタスクをキャンセルするためのサンプルコード
import com.alibaba.fastjson.JSONObject; import com.aliyun.green20220302.Client; import com.aliyun.green20220302.models.VideoModerationCancelRequest; import com.aliyun.green20220302.models.VideoModerationCancelResponse; import com.aliyun.green20220302.models.VideoModerationCancelResponseBody; import com.aliyun.teaopenapi.models.Config; public class VideoModerationCancelDemo { public static void main(String[] args) throws Exception { Config config = new Config(); /** * Alibaba Cloud アカウントの AccessKey ペアは、すべての API 操作に対する権限を持っています。これらの認証情報を使用して OSS で操作を実行することは、リスクの高い操作です。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); //HTTP プロキシを構成します。 //config.setHttpProxy("http://xx.xx.xx.xx:xxxx"); //HTTPS プロキシを構成します。 //config.setHttpsProxy("https://xx.xx.xx.xx:xxxx"); Client client = new Client(config); JSONObject serviceParameters = new JSONObject(); // 送信時に返されるタスク ID。 serviceParameters.put("taskId", "vi_f_O5z5iaIis3iI0X2oNYj7qa-1x****"); VideoModerationCancelRequest videoModerationCancelRequest = new VideoModerationCancelRequest(); videoModerationCancelRequest.setService("liveStreamDetection_global"); videoModerationCancelRequest.setServiceParameters(serviceParameters.toJSONString()); try { VideoModerationCancelResponse response = client.videoModerationCancel(videoModerationCancelRequest); if (response.getStatusCode() == 200) { VideoModerationCancelResponseBody 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()) { System.out.println("ビデオモデレーションのキャンセルは成功しませんでした。 code:" + result.getCode()); } } else { System.out.println("レスポンスは成功しませんでした。 status:" + response.getStatusCode()); } } catch (Exception e) { e.printStackTrace(); } } }
Python 用 SDK
Python のバージョンは 3.6 以降である必要があります。
ソースコードの詳細については、「Python 用 SDK ソースコード」をご参照ください。
ビデオモデレーションでは、次の 3 つのタイプがサポートされています。
インターネット上で公開されているビデオのモデレーション
シナリオ
モデレートするビデオがインターネットからアクセス可能な場合、ビデオモデレーション 2.0 は、URL を介してビデオファイルを取得し、モデレーションを実行できます。
次のコマンドを実行して pip をインストールします。
pip install alibabacloud_green20220302==2.2.11
Python 用 SDK を使用します。
ビデオモデレーションタスクを送信するためのサンプルコード
#encoding: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 操作に対する権限を持っています。これらの認証情報を使用して OSS で操作を実行することは、リスクの高い操作です。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=3000, # 読み取りタイムアウト期間。単位:ミリ秒。 read_timeout=6000, # ビジネス要件に基づいてリージョン ID とエンドポイントを変更します。 region_id='ap-southeast-1', endpoint='green-cip.ap-southeast-1.aliyuncs.com' ) clt = Client(config) serviceParameters = { 'url': 'https://xxx.oss.aliyuncs.com/xxx.mp4' } videoModerationRequest = models.VideoModerationRequest( # モデレーションタイプ:videoDetection_global service='videoDetection_global', service_parameters=json.dumps(serviceParameters) ) try: response = clt.video_moderation(videoModerationRequest) 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 操作に対する権限を持っています。これらの認証情報を使用して OSS で操作を実行することは、リスクの高い操作です。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=3000, # 読み取りタイムアウト期間。単位:ミリ秒。 read_timeout=6000, # ビジネス要件に基づいてリージョン ID とエンドポイントを変更します。 region_id='ap-southeast-1', endpoint='green-cip.ap-southeast-1.aliyuncs.com' ) clt = Client(config) # ビデオモデレーションタスクの送信時に返されるタスク ID。 serviceParameters = { "taskId": 'vi_f_11w5THcbVYctjdxz2C0Afa-1x****' } videoModerationResultRequest = models.VideoModerationResultRequest( # モデレーションタイプ:videoDetection_global service='videoDetection_global', service_parameters=json.dumps(serviceParameters) ) try: response = clt.video_moderation_result(videoModerationResultRequest) 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 操作に対する権限を持っています。これらの認証情報を使用して OSS で操作を実行することは、リスクの高い操作です。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": 'vi_f_O5z5iaIis3iI0X2oNYj7qa-1x****' } videoModerationCancelRequest = models.VideoModerationCancelRequest( # モデレーションタイプ service='liveStreamDetection_global', service_parameters=json.dumps(serviceParameters) ) try: response = clt.video_moderation_cancel(videoModerationCancelRequest) 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 をインストールします。
pip install alibabacloud_green20220302==2.2.11
OSS SDK をインストールします。
pip install oss2
Python 用 SDK を使用します。
ビデオモデレーションタスクを送信するためのサンプルコード
from alibabacloud_green20220302.client import Client from alibabacloud_green20220302 import models from alibabacloud_tea_openapi.models import Config from alibabacloud_tea_util.client import Client as UtilClient from alibabacloud_tea_util import models as util_models import json import uuid import oss2 import time config = Config( # Alibaba Cloud アカウントの AccessKey ペアは、すべての API 操作に対する権限を持っています。これらの認証情報を使用して OSS で操作を実行することは、リスクの高い操作です。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=10000, # ビジネス要件に基づいてリージョン ID とエンドポイントを変更します。 region_id='ap-southeast-1', endpoint='green-cip.ap-southeast-1.aliyuncs.com' ) # 注:インスタンス化されたクライアントは、接続の繰り返し確立を避けてモデレーションのパフォーマンスを向上させるために、できるだけ再利用することをお勧めします。 client =Client(config) bucket = None upload_token = None def get_oss_client(is_vpc): global upload_token global bucket if (upload_token == None) or int(upload_token.expiration) <= int(time.time()): response = client.describe_upload_token() upload_token = response.body.data auth = oss2.StsAuth(upload_token.access_key_id, upload_token.access_key_secret, upload_token.security_token) end_point = upload_token.oss_internet_end_point if (is_vpc): end_point = upload_token.oss_internal_end_point bucket = oss2.Bucket(auth, end_point, upload_token.bucket_name) def upload_file(file_name, is_vpc): get_oss_client(is_vpc) object_name = upload_token.file_name_prefix + str(uuid.uuid4()) + '.' + file_name.split('.')[-1] bucket.put_object_from_file(object_name, file_name) return object_name def video_moderation_by_local_file(file_path, is_vpc): # 1. ファイルをアップロードします object_name = upload_file(file_path, is_vpc) # 2. ビデオモデレーション service_parameters = { 'dataId': str(uuid.uuid4()), 'ossBucketName': upload_token.bucket_name, 'ossObjectName': object_name } video_moderation_request = models.VideoModerationRequest( # モデレーションタイプ:videoDetection_global service='videoDetection_global', service_parameters=json.dumps(service_parameters) ) # RuntimeObject インスタンスを作成し、ランタイムパラメータを構成します。 runtime = util_models.RuntimeOptions() runtime.read_timeout = 10000 runtime.connect_timeout = 10000 try: global client response = client.video_moderation_with_options(video_moderation_request, runtime) 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)) except Exception as err: print(err) if __name__ == '__main__': # ローカルファイルのパス。 file_path = 'D:/test/video/b652.mp4' # サービスが VPC にデプロイされているかどうかを指定します。 is_vpc = False # True video_moderation_by_local_file(file_path, is_vpc)
ビデオモデレーションの結果を取得するためのサンプルコード
# 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 操作に対する権限を持っています。これらの認証情報を使用して OSS で操作を実行することは、リスクの高い操作です。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=3000, # 読み取りタイムアウト期間。単位:ミリ秒。 read_timeout=6000, # ビジネス要件に基づいてリージョン ID とエンドポイントを変更します。 region_id='ap-southeast-1', endpoint='green-cip.ap-southeast-1.aliyuncs.com' ) clt = Client(config) # ビデオモデレーションタスクの送信時に返されるタスク ID。 serviceParameters = { "taskId": 'vi_f_11w5THcbVYctjdxz2C0Afa-1x****' } videoModerationResultRequest = models.VideoModerationResultRequest( # モデレーションタイプ:videoDetection_global service='videoDetection_global', service_parameters=json.dumps(serviceParameters) ) try: response = clt.video_moderation_result(videoModerationResultRequest) 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 操作に対する権限を持っています。これらの認証情報を使用して OSS で操作を実行することは、リスクの高い操作です。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": 'vi_f_O5z5iaIis3iI0X2oNYj7qa-1x****' } videoModerationCancelRequest = models.VideoModerationCancelRequest( # モデレーションタイプ service='liveStreamDetection_global', service_parameters=json.dumps(serviceParameters) ) try: response = clt.video_moderation_cancel(videoModerationCancelRequest) 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 に保存されている場合は、Content Moderation が OSS にアクセスできるようにサービスロールを作成する権限を付与できます。ビデオモデレーション 2.0 は、サービスロールを介して OSS からファイルを取得し、モデレーションを実行できます。サービスロールを作成するには、Cloud Resource Access Authorization にアクセスしてください。
次のコマンドを実行して pip をインストールします。
pip install alibabacloud_green20220302==2.2.11
Python 用 SDK を使用します。
ビデオモデレーションタスクを送信するためのサンプルコード
#encoding: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 操作に対する権限を持っています。これらの認証情報を使用して OSS で操作を実行することは、リスクの高い操作です。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=3000, # 読み取りタイムアウト期間。単位:ミリ秒。 read_timeout=6000, # ビジネス要件に基づいてリージョン ID とエンドポイントを変更します。 region_id='ap-southeast-1', endpoint='green-cip.ap-southeast-1.aliyuncs.com' ) clt = Client(config) serviceParameters = { 'ossBucketName': 'bucket_01', 'ossObjectName': '20240307/07/28/test.flv', 'ossRegionId': 'ap-southeast-1' } videoModerationRequest = models.VideoModerationRequest( # モデレーションタイプ:videoDetection_global service='videoDetection_global', service_parameters=json.dumps(serviceParameters) ) try: response = clt.video_moderation(videoModerationRequest) 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 操作に対する権限を持っています。これらの認証情報を使用して OSS で操作を実行することは、リスクの高い操作です。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=3000, # 読み取りタイムアウト期間。単位:ミリ秒。 read_timeout=6000, # ビジネス要件に基づいてリージョン ID とエンドポイントを変更します。 region_id='ap-southeast-1', endpoint='green-cip.ap-southeast-1.aliyuncs.com' ) clt = Client(config) # ビデオモデレーションタスクの送信時に返されるタスク ID。 serviceParameters = { "taskId": 'vi_f_11w5THcbVYctjdxz2C0Afa-1x****' } videoModerationResultRequest = models.VideoModerationResultRequest( # モデレーションタイプ:videoDetection_global service='videoDetection_global', service_parameters=json.dumps(serviceParameters) ) try: response = clt.video_moderation_result(videoModerationResultRequest) 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 操作に対する権限を持っています。これらの認証情報を使用して OSS で操作を実行することは、リスクの高い操作です。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": 'vi_f_O5z5iaIis3iI0X2oNYj7qa-1x****' } videoModerationCancelRequest = models.VideoModerationCancelRequest( # モデレーションタイプ service='liveStreamDetection_global', service_parameters=json.dumps(serviceParameters) ) try: response = clt.video_moderation_cancel(videoModerationCancelRequest) 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 つのタイプがサポートされています。
インターネット上で公開されているビデオのモデレーション
シナリオ
モデレート対象の動画がインターネットからアクセス可能な場合、Video Moderation 2.0 は、URL から動画ファイルを取得し、モデレーションを実行できます。
次のコマンドを実行して関連する依存関係をインストールします。
composer require alibabacloud/green-20220302 2.2.10
PHP 用 SDK を使用します。
ビデオモデレーションタスクを送信するためのサンプルコード
<?php require('vendor/autoload.php'); use AlibabaCloud\SDK\Green\V20220302\Models\VideoModerationRequest; 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 操作に対する権限を持っています。これらの認証情報を使用して OSS で操作を実行することは、リスクの高い操作です。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 シークレットを取得することをお勧めします', // HTTP プロキシを構成します。 // "httpProxy" => "http://10.10.xx.xx:xxxx", // HTTPS プロキシを構成します。 // "httpsProxy" => "https://10.10.xx.xx:xxxx", "endpoint" => "green-cip.ap-southeast-1.aliyuncs.com", "regionId" => "ap-southeast-1" ]); // 注:インスタンス化されたクライアントは、接続の繰り返し確立を避けてモデレーションのパフォーマンスを向上させるために、できるだけ再利用することをお勧めします。 $client = new Green($config); $request = new VideoModerationRequest(); // モデレーションタイプ:videoDetection_global。ビデオファイル検出の場合は videoDetection_global、ビデオライブストリーム検出の場合は liveStreamDetection_global。 $request->service = "videoDetection_global"; $serviceParameters = array("url" => "https://xxx.oss.aliyuncs.com/xxx.mp4"); $request->serviceParameters = json_encode($serviceParameters); $runtime = new RuntimeOptions(); $runtime->readTimeout = 6000; $runtime->connectTimeout = 3000; try { $response = $client->videoModerationWithOptions($request, $runtime); print_r($response->body); if (200 != $response->statusCode) { print_r("response not success. code:" . $response->statusCode); return; } $body = $response->body; print_r("requestId = " . $body->requestId . "\n"); print_r("code = " . $body->code . "\n"); print_r("message = " . $body->message . "\n"); if (200 != $body->code) { print_r("ビデオモデレーションは成功しませんでした。 code:" . $body->code); } $data = $body->data; print_r("taskId = " . $data->taskId); } 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\VideoModerationResultRequest; 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 操作に対する権限を持っています。これらの認証情報を使用して OSS で操作を実行することは、リスクの高い操作です。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 シークレットを取得することをお勧めします', // HTTP プロキシを構成します。 // "httpProxy" => "http://10.10.xx.xx:xxxx", // HTTPS プロキシを構成します。 // "httpsProxy" => "https://10.10.xx.xx:xxxx", "endpoint" => "green-cip.ap-southeast-1.aliyuncs.com", "regionId" => "ap-southeast-1" ]); // 注:インスタンス化されたクライアントは、接続の繰り返し確立を避けてモデレーションのパフォーマンスを向上させるために、できるだけ再利用することをお勧めします。 $client = new Green($config); $request = new VideoModerationResultRequest(); // モデレーションタイプ:videoDetection_global。ビデオファイルモデレーションの場合は videoDetection_global、ライブストリームモデレーションの場合は liveStreamDetection_global。 $request->service = "videoDetection_global"; $serviceParameters = array("taskId" => "vi_f_O5z5iaIis3iI0X2oNYj7qa-1x****"); $request->serviceParameters = json_encode($serviceParameters); $runtime = new RuntimeOptions(); $runtime->readTimeout = 6000; $runtime->connectTimeout = 3000; try { $response = $client->videoModerationResultWithOptions($request, $runtime); if (200 != $response->statusCode) { print_r("response not success. code:" . $response->statusCode); return; } $body = $response->body; print_r("requestId = " . $body->requestId . "\n"); print_r("code = " . $body->code . "\n"); print_r("message = " . $body->message . "\n"); if (280 == $body->code) { print_r("ビデオモデレーションを処理中です。 code:" . $body->code); return; } if (200 != $body->code) { print_r("ビデオモデレーションの結果は成功しませんでした。 code:" . $body->code); return; } $data = $body->data; print_r("liveId = " . $data->liveId . "\n"); print_r("dataId = " . $data->dataId . "\n"); print_r("riskLevel = " . $data->RiskLevel . "\n"); print_r("videoResult = " . json_encode($data->videoResult) . "\n"); print_r("frameResult = " . json_encode($data->frameResult) . "\n"); } 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\VideoModerationCancelRequest; 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 操作に対する権限を持っています。これらの認証情報を使用して OSS で操作を実行することは、リスクの高い操作です。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 シークレットを取得することをお勧めします', // HTTP プロキシを構成します。 // "httpProxy" => "http://10.10.xx.xx:xxxx", // HTTPS プロキシを構成します。 // "httpsProxy" => "https://10.10.xx.xx:xxxx", "endpoint" => "green-cip.ap-southeast-1.aliyuncs.com", "regionId" => "ap-southeast-1" ]); // 注:インスタンス化されたクライアントは、接続の繰り返し確立を避けてモデレーションのパフォーマンスを向上させるために、できるだけ再利用することをお勧めします。 $client = new Green($config); $request = new VideoModerationCancelRequest(); // モデレーションタイプ:videoDetection。ビデオファイルモデレーションの場合は videoDetection、ライブストリームモデレーションの場合は liveStreamDetection。 $request->service = "liveStreamDetection_global"; $serviceParameters = array('taskId' => 'vi_s_lyxBXzWhSsxuJjiNHcpQ0N-*****'); $request->serviceParameters = json_encode($serviceParameters); $runtime = new RuntimeOptions(); $runtime->readTimeout = 6000; $runtime->connectTimeout = 3000; try { $response = $client->videoModerationCancel($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) { print_r("ビデオモデレーションのキャンセルは成功しませんでした。 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.10
OSS SDK をインストールします。
composer require aliyuncs/oss-sdk-php
PHP 用 SDK を使用します。
ビデオモデレーションタスクを送信するためのサンプルコード
<?php require('vendor/autoload.php'); use AlibabaCloud\SDK\Green\V20220302\Models\VideoModerationResponse; 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\VideoModerationRequest; 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 VideoModerationResponse * @throws \OSS\Core\OssException */ function invoke($accessKeyId, $accessKeySecret, $endpoint): VideoModerationResponse { global $tokenArray; // 注:インスタンス化されたクライアントは、接続の繰り返し確立を避けてモデレーションのパフォーマンスを向上させるために、できるだけ再利用することをお勧めします。 $client = create_client($accessKeyId, $accessKeySecret, $endpoint); // RuntimeObject インスタンスを作成し、ランタイムパラメータを構成します。 $runtime = new RuntimeOptions([]); // ローカルファイルのフルパス。例:D:\\localPath\\exampleFile.mp4。 $filePath = "D:\\test\\video\\b652.mp4"; //ファイルをアップロードするための一時トークンを取得します。 if (!isset($tokenArray[$endpoint]) || $tokenArray[$endpoint]->expiration <= time()) { $token = $client->describeUploadToken(); $tokenArray[$endpoint] = $token->body->data; } // ファイルをアップロードします $objectName = upload_file($filePath, $tokenArray[$endpoint]); // モデレーションパラメータを構築します。 $request = new VideoModerationRequest(); // 例:videoDetection_global $request->service = "videoDetection_global"; // モデレート対象ファイルの OSS 情報。 $serviceParameters = array( 'ossObjectName' => $objectName, 'ossBucketName' => $tokenArray[$endpoint]->bucketName, 'dataId' => uniqid()); $request->serviceParameters = json_encode($serviceParameters); // モデレーションタスクを送信します。 return $client->videoModerationWithOptions($request, $runtime); } /** * Alibaba Cloud アカウントの AccessKey ペアは、すべての API 操作に対する権限を持っています。これらの認証情報を使用して OSS で操作を実行することは、リスクの高い操作です。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\VideoModerationResultRequest; 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 操作に対する権限を持っています。これらの認証情報を使用して OSS で操作を実行することは、リスクの高い操作です。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 シークレットを取得することをお勧めします', // HTTP プロキシを構成します。 // "httpProxy" => "http://10.10.xx.xx:xxxx", // HTTPS プロキシを構成します。 // "httpsProxy" => "https://10.10.xx.xx:xxxx", "endpoint" => "green-cip.ap-southeast-1.aliyuncs.com", "regionId" => "ap-southeast-1" ]); // 注:インスタンス化されたクライアントは、接続の繰り返し確立を避けてモデレーションのパフォーマンスを向上させるために、できるだけ再利用することをお勧めします。 $client = new Green($config); $request = new VideoModerationResultRequest(); // モデレーションタイプ:videoDetection_global。ビデオファイルモデレーションの場合は videoDetection_global、ライブストリームモデレーションの場合は liveStreamDetection_global。 $request->service = "videoDetection_global"; $serviceParameters = array("taskId" => "vi_f_O5z5iaIis3iI0X2oNYj7qa-1x****"); $request->serviceParameters = json_encode($serviceParameters); $runtime = new RuntimeOptions(); $runtime->readTimeout = 6000; $runtime->connectTimeout = 3000; try { $response = $client->videoModerationResultWithOptions($request, $runtime); if (200 != $response->statusCode) { print_r("response not success. code:" . $response->statusCode); return; } $body = $response->body; print_r("requestId = " . $body->requestId . "\n"); print_r("code = " . $body->code . "\n"); print_r("message = " . $body->message . "\n"); if (280 == $body->code) { print_r("ビデオモデレーションを処理中です。 code:" . $body->code); return; } if (200 != $body->code) { print_r("ビデオモデレーションの結果は成功しませんでした。 code:" . $body->code); return; } $data = $body->data; print_r("liveId = " . $data->liveId . "\n"); print_r("dataId = " . $data->dataId . "\n"); print_r("riskLevel = " . $data->RiskLevel . "\n"); print_r("videoResult = " . json_encode($data->videoResult) . "\n"); print_r("frameResult = " . json_encode($data->frameResult) . "\n"); } 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\VideoModerationCancelRequest; 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 操作に対する権限を持っています。これらの認証情報を使用して OSS で操作を実行することは、リスクの高い操作です。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 シークレットを取得することをお勧めします', // HTTP プロキシを構成します。 // "httpProxy" => "http://10.10.xx.xx:xxxx", // HTTPS プロキシを構成します。 // "httpsProxy" => "https://10.10.xx.xx:xxxx", "endpoint" => "green-cip.ap-southeast-1.aliyuncs.com", "regionId" => "ap-southeast-1" ]); // 注:インスタンス化されたクライアントは、接続の繰り返し確立を避けてモデレーションのパフォーマンスを向上させるために、できるだけ再利用することをお勧めします。 $client = new Green($config); $request = new VideoModerationCancelRequest(); // モデレーションタイプ:videoDetection。ビデオファイルモデレーションの場合は videoDetection、ライブストリームモデレーションの場合は liveStreamDetection。 $request->service = "liveStreamDetection_global"; $serviceParameters = array('taskId' => 'vi_s_lyxBXzWhSsxuJjiNHcpQ0N-*****'); $request->serviceParameters = json_encode($serviceParameters); $runtime = new RuntimeOptions(); $runtime->readTimeout = 6000; $runtime->connectTimeout = 3000; try { $response = $client->videoModerationCancel($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) { print_r("ビデオモデレーションのキャンセルは成功しませんでした。 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 からファイルを取得し、モデレーションを実行できます。サービスロールを作成するには、Cloud Resource Access Authorization にアクセスしてください。
次のコマンドを実行して関連する依存関係をインストールします。
composer require alibabacloud/green-20220302 2.2.10
PHP 用 SDK を使用します。
ビデオモデレーションタスクを送信するためのサンプルコード
<?php require('vendor/autoload.php'); use AlibabaCloud\SDK\Green\V20220302\Models\VideoModerationRequest; 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 操作に対する権限を持っています。これらの認証情報を使用して OSS で操作を実行することは、リスクの高い操作です。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 シークレットを取得することをお勧めします', // HTTP プロキシを構成します。 // "httpProxy" => "http://10.10.xx.xx:xxxx", // HTTPS プロキシを構成します。 // "httpsProxy" => "https://10.10.xx.xx:xxxx", "endpoint" => "green-cip.ap-southeast-1.aliyuncs.com", "regionId" => "ap-southeast-1" ]); // 注:インスタンス化されたクライアントは、接続の繰り返し確立を避けてモデレーションのパフォーマンスを向上させるために、できるだけ再利用することをお勧めします。 $client = new Green($config); $request = new VideoModerationRequest(); // モデレーションタイプ:videoDetection_global。ビデオファイル検出の場合は videoDetection_global、ビデオライブストリーム検出の場合は liveStreamDetection_global。 $request->service = "videoDetection_global"; $serviceParameters = array( // モデレート対象のファイル。例:video/001.mp4 'ossObjectName' => 'video/001.mp4', // モデレート対象ファイルが配置されているバケットのリージョン。例:cn-shanghai 'ossRegionId' => 'ap-southeast-1', // モデレート対象ファイルが配置されているバケットの名前。例:bucket001 'ossBucketName' => 'bucket001', // データの一意の ID。 'dataId' => uniqid()); $request->serviceParameters = json_encode($serviceParameters); $runtime = new RuntimeOptions(); $runtime->readTimeout = 6000; $runtime->connectTimeout = 3000; try { $response = $client->videoModerationWithOptions($request, $runtime); print_r($response->body); if (200 != $response->statusCode) { print_r("response not success. code:" . $response->statusCode); return; } $body = $response->body; print_r("requestId = " . $body->requestId . "\n"); print_r("code = " . $body->code . "\n"); print_r("message = " . $body->message . "\n"); if (200 != $body->code) { print_r("ビデオモデレーションは成功しませんでした。 code:" . $body->code); } $data = $body->data; print_r("taskId = " . $data->taskId); } 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\VideoModerationResultRequest; 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 操作に対する権限を持っています。これらの認証情報を使用して OSS で操作を実行することは、リスクの高い操作です。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 シークレットを取得することをお勧めします', // HTTP プロキシを構成します。 // "httpProxy" => "http://10.10.xx.xx:xxxx", // HTTPS プロキシを構成します。 // "httpsProxy" => "https://10.10.xx.xx:xxxx", "endpoint" => "green-cip.ap-southeast-1.aliyuncs.com", "regionId" => "ap-southeast-1" ]); // 注:インスタンス化されたクライアントは、接続の繰り返し確立を避けてモデレーションのパフォーマンスを向上させるために、できるだけ再利用することをお勧めします。 $client = new Green($config); $request = new VideoModerationResultRequest(); // モデレーションタイプ:videoDetection_global。ビデオファイルモデレーションの場合は videoDetection_global、ライブストリームモデレーションの場合は liveStreamDetection_global。 $request->service = "videoDetection_global"; $serviceParameters = array("taskId" => "vi_f_O5z5iaIis3iI0X2oNYj7qa-1x****"); $request->serviceParameters = json_encode($serviceParameters); $runtime = new RuntimeOptions(); $runtime->readTimeout = 6000; $runtime->connectTimeout = 3000; try { $response = $client->videoModerationResultWithOptions($request, $runtime); if (200 != $response->statusCode) { print_r("response not success. code:" . $response->statusCode); return; } $body = $response->body; print_r("requestId = " . $body->requestId . "\n"); print_r("code = " . $body->code . "\n"); print_r("message = " . $body->message . "\n"); if (280 == $body->code) { print_r("ビデオモデレーションを処理中です。 code:" . $body->code); return; } if (200 != $body->code) { print_r("ビデオモデレーションの結果は成功しませんでした。 code:" . $body->code); return; } $data = $body->data; print_r("liveId = " . $data->liveId . "\n"); print_r("dataId = " . $data->dataId . "\n"); print_r("riskLevel = " . $data->RiskLevel . "\n"); print_r("videoResult = " . json_encode($data->videoResult) . "\n"); print_r("frameResult = " . json_encode($data->frameResult) . "\n"); } 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\VideoModerationCancelRequest; 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 操作に対する権限を持っています。これらの認証情報を使用して OSS で操作を実行することは、リスクの高い操作です。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 シークレットを取得することをお勧めします', // HTTP プロキシを構成します。 // "httpProxy" => "http://10.10.xx.xx:xxxx", // HTTPS プロキシを構成します。 // "httpsProxy" => "https://10.10.xx.xx:xxxx", "endpoint" => "green-cip.ap-southeast-1.aliyuncs.com", "regionId" => "ap-southeast-1" ]); // 注:インスタンス化されたクライアントは、接続の繰り返し確立を避けてモデレーションのパフォーマンスを向上させるために、できるだけ再利用することをお勧めします。 $client = new Green($config); $request = new VideoModerationCancelRequest(); // モデレーションタイプ:videoDetection。ビデオファイルモデレーションの場合は videoDetection、ライブストリームモデレーションの場合は liveStreamDetection。 $request->service = "liveStreamDetection_global"; $serviceParameters = array('taskId' => 'vi_s_lyxBXzWhSsxuJjiNHcpQ0N-*****'); $request->serviceParameters = json_encode($serviceParameters); $runtime = new RuntimeOptions(); $runtime->readTimeout = 6000; $runtime->connectTimeout = 3000; try { $response = $client->videoModerationCancel($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) { print_r("ビデオモデレーションのキャンセルは成功しませんでした。 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/v2
Go 用 SDK を使用します。
ビデオモデレーションタスクを送信するためのサンプルコード
package main import ( "encoding/json" "fmt" openapi "github.com/alibabacloud-go/darabonba-openapi/v2/client" green20220302 "github.com/alibabacloud-go/green-20220302/client" util "github.com/alibabacloud-go/tea-utils/v2/service" "github.com/alibabacloud-go/tea/tea" "net/http" ) func main() { // プロジェクトコードが漏洩した場合、AccessKey ペアが漏洩し、アカウント内のリソースのセキュリティが侵害される可能性があります。次のサンプルコードは参照用です。 config := &openapi.Config{ /** * Alibaba Cloud アカウントの AccessKey ペアは、すべての API 操作に対する権限を持っています。これらの認証情報を使用して OSS で操作を実行することは、リスクの高い操作です。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 シークレットを取得することをお勧めします"), // HTTP プロキシを構成します。 // HttpProxy: tea.String("http://xx.xx.xx.xx:xxxx"), // HTTPS プロキシを構成します。 // HttpsProxy: tea.String("https://username:password@xxx.xxx.xxx.xxx:9999"), RegionId: tea.String("ap-southeast-1"), Endpoint: tea.String("green-cip.ap-southeast-1.aliyuncs.com"), /** * 接続タイムアウトと読み取りタイムアウトを指定します。サーバーがファイルモデレーションリクエストを完了するまでのタイムアウト期間は 10 秒です。 * 読み取りタイムアウトを 10 秒未満に設定すると、リクエスト処理中にサーバーが読み取りタイムアウトエラーを生成する可能性があります。 */ ConnectTimeout: tea.Int(3000), ReadTimeout: tea.Int(6000), } client, _err := green20220302.NewClient(config) if _err != nil { panic(_err) } // RuntimeObject インスタンスを作成し、ランタイムパラメータを構成します。 runtime := &util.RuntimeOptions{} runtime.ReadTimeout = tea.Int(10000) runtime.ConnectTimeout = tea.Int(10000) serviceParameters, _ := json.Marshal( map[string]interface{}{ "url": "https://xxx.oss.aliyuncs.com/xxx.mp4", }, ) request := green20220302.VideoModerationRequest{ Service: tea.String("videoDetection_global"), ServiceParameters: tea.String(string(serviceParameters)), } result, _err := client.VideoModerationWithOptions(&request, runtime) if _err != nil { panic(_err) } if *result.StatusCode != http.StatusOK { fmt.Printf("response not success. status:%d\n", *result.StatusCode) return } body := result.Body fmt.Printf("response success. requestId:%s, code:%d, msg:%s\n", *body.RequestId, *body.Code, *body.Message) if *body.Code != http.StatusOK { fmt.Printf("ビデオモデレーションは成功しませんでした。 code:%d\n", *body.Code) return } data := body.Data fmt.Printf("ビデオモデレーション taskId:%s\n", *data.TaskId) }
ビデオモデレーションの結果を取得するためのサンプルコード
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" "net/http" ) func main() { // プロジェクトコードが漏洩した場合、AccessKey ペアが漏洩し、アカウント内のリソースのセキュリティが侵害される可能性があります。次のサンプルコードは参照用です。 config := &openapi.Config{ /** * Alibaba Cloud アカウントの AccessKey ペアは、すべての API 操作に対する権限を持っています。これらの認証情報を使用して OSS で操作を実行することは、リスクの高い操作です。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 シークレットを取得することをお勧めします"), // HTTP プロキシを構成します。 // HttpProxy: tea.String("http://xx.xx.xx.xx:xxxx"), // HTTPS プロキシを構成します。 // HttpsProxy: tea.String("https://username:password@xxx.xxx.xxx.xxx:9999"), RegionId: tea.String("ap-southeast-1"), Endpoint: tea.String("green-cip.ap-southeast-1.aliyuncs.com"), /** * 接続タイムアウトと読み取りタイムアウトを指定します。サーバーがファイルモデレーションリクエストを完了するまでのタイムアウト期間は 10 秒です。 * 読み取りタイムアウトを 10 秒未満に設定すると、リクエスト処理中にサーバーが読み取りタイムアウトエラーを生成する可能性があります。 */ ConnectTimeout: tea.Int(3000), ReadTimeout: tea.Int(6000), } client, _err := green20220302.NewClient(config) if _err != nil { panic(_err) } // RuntimeObject インスタンスを作成し、ランタイムパラメータを構成します。 runtime := &util.RuntimeOptions{} runtime.ReadTimeout = tea.Int(10000) runtime.ConnectTimeout = tea.Int(10000) serviceParameters, _ := json.Marshal( map[string]interface{}{ "taskId": "vi_f_O5z5iaIis3iI0X2oNYj7qa-1x****", }, ) request := green20220302.VideoModerationResultRequest{ Service: tea.String("videoDetection_global"), ServiceParameters: tea.String(string(serviceParameters)), } result, _err := client.VideoModerationResultWithOptions(&request, runtime) if _err != nil { panic(_err) } if *result.StatusCode != http.StatusOK { fmt.Printf("response not success. status:%d\n", *result.StatusCode) return } body := result.Body fmt.Printf("response success. requestId:%s, code:%d, msg:%s\n", *body.RequestId, *body.Code, *body.Message) if *body.Code == 280 { fmt.Printf("ビデオモデレーションを処理中です。 code:%d\n", *body.Code) return } if *body.Code != http.StatusOK { fmt.Printf("ビデオモデレーションの結果は成功しませんでした。 code:%d\n", *body.Code) return } data := body.Data fmt.Printf("ビデオモデレーション result:%s\n", data) fmt.Printf("ビデオモデレーション result videoResult:%s\n", data.videoResult) fmt.Printf("ビデオモデレーション result frameResult:%s\n", data.FrameResult) }
ビデオライブストリームモデレーションタスクをキャンセルするためのサンプルコード
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" "net/http" ) func main() { // プロジェクトコードが漏洩した場合、AccessKey ペアが漏洩し、アカウント内のリソースのセキュリティが侵害される可能性があります。次のサンプルコードは参照用です。 config := &openapi.Config{ /** * Alibaba Cloud アカウントの AccessKey ペアは、すべての API 操作に対する権限を持っています。これらの認証情報を使用して OSS で操作を実行することは、リスクの高い操作です。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 シークレットを取得することをお勧めします"), // HTTP プロキシを構成します。 // HttpProxy: tea.String("http://xx.xx.xx.xx:xxxx"), // HTTPS プロキシを構成します。 // HttpsProxy: tea.String("https://username:password@xxx.xxx.xxx.xxx:9999"), RegionId: tea.String("ap-southeast-1"), Endpoint: tea.String("green-cip.ap-southeast-1.aliyuncs.com"), /** * 接続タイムアウトと読み取りタイムアウトを指定します。サーバーがファイルモデレーションリクエストを完了するまでのタイムアウト期間は 10 秒です。 * 読み取りタイムアウトを 10 秒未満に設定すると、リクエスト処理中にサーバーが読み取りタイムアウトエラーを生成する可能性があります。 */ ConnectTimeout: tea.Int(3000), ReadTimeout: tea.Int(6000), } client, _err := green20220302.NewClient(config) if _err != nil { panic(_err) } // RuntimeObject インスタンスを作成し、ランタイムパラメータを構成します。 runtime := &util.RuntimeOptions{} runtime.ReadTimeout = tea.Int(10000) runtime.ConnectTimeout = tea.Int(10000) serviceParameters, _ := json.Marshal( map[string]interface{}{ "taskId": "vi_s_lyxBXzWhSsxuJjiNHcpQ0N-*****", }, ) request := green20220302.VideoModerationCancelRequest{ Service: tea.String("liveStreamDetection_global"), ServiceParameters: tea.String(string(serviceParameters)), } result, _err := client.VideoModerationCancelWithOptions(&request, runtime) if _err != nil { panic(_err) } if *result.StatusCode != http.StatusOK { fmt.Printf("response not success. status:%d\n", *result.StatusCode) return } body := result.Body fmt.Printf("response success. requestId:%s, code:%d, msg:%s\n", *body.RequestId, *body.Code, *body.Message) if *body.Code != http.StatusOK { fmt.Printf("ビデオモデレーションのキャンセルは成功しませんでした。 code:%d\n", *body.Code) } }
ローカルビデオのモデレーション
シナリオ
モデレーション対象のビデオがローカルマシンにあり、パブリックネットワークアクセスリンクがない場合、ビデオを Content Moderation が提供する Object Storage Service (OSS) バケットにアップロードできます。ビデオモデレーション 2.0 は OSS に直接アクセスし、ビデオコンテンツを取得してモデレーションを実行できます。
次のコマンドを実行して関連する依存関係をインストールします。
go git clone --branch v2.2.11 github.com/alibabacloud-go/green-20220302/v2
OSS SDK をインストールします。
go get github.com/aliyun/aliyun-oss-go-sdk/oss
Go 用 SDK を使用します。
ビデオモデレーションタスクを送信するためのサンプルコード
package main import ( "encoding/json" "fmt" openapi "github.com/alibabacloud-go/darabonba-openapi/v2/client" green20220302 "github.com/alibabacloud-go/green-20220302/client" util "github.com/alibabacloud-go/tea-utils/v2/service" "github.com/alibabacloud-go/tea/tea" "github.com/aliyun/aliyun-oss-go-sdk/oss" "github.com/google/uuid" "net/http" "os" "strings" "time" ) // ファイルをアップロードするための一時トークンを取得します。 var TokenMap = make(map[string]*green20220302.DescribeUploadTokenResponseBodyData) // ファイルをアップロードするクライアント。 var Bucket *oss.Bucket // サービスが VPC にデプロイされているかどうかを指定します。 var isVPC = false // ビデオモデレーションリクエストを開始するクライアントを作成します。 func createClient(accessKeyId string, accessKeySecret string, endpoint string) (*green20220302.Client, error) { config := &openapi.Config{ AccessKeyId: tea.String(accessKeyId), AccessKeySecret: tea.String(accessKeySecret), // HTTP プロキシを構成します。 // HttpProxy: tea.String("http://10.10.xx.xx:xxxx"), // HTTPS プロキシを構成します。 // HttpsProxy: tea.String("https://username:password@xxx.xxx.xxx.xxx:9999"), Endpoint: tea.String(endpoint), } // 注:インスタンス化されたクライアントは、接続の繰り返し確立を避けてモデレーションのパフォーマンスを向上させるために、できるだけ再利用することをお勧めします。 return green20220302.NewClient(config) } // ファイルをアップロードするクライアントを作成します。 func createOssClient(tokenData *green20220302.DescribeUploadTokenResponseBodyData) { if isVPC { ossClient, err := oss.New(tea.StringValue(tokenData.OssInternalEndPoint), tea.StringValue(tokenData.AccessKeyId), tea.StringValue(tokenData.AccessKeySecret), oss.SecurityToken(tea.StringValue(tokenData.SecurityToken))) if err != nil { fmt.Println("Error:", err) os.Exit(-1) } Bucket, _ = ossClient.Bucket(tea.StringValue(tokenData.BucketName)) } else { ossClient, err := oss.New(tea.StringValue(tokenData.OssInternetEndPoint), tea.StringValue(tokenData.AccessKeyId), tea.StringValue(tokenData.AccessKeySecret), oss.SecurityToken(tea.StringValue(tokenData.SecurityToken))) if err != nil { fmt.Println("Error:", err) os.Exit(-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.VideoModerationResponse, _err error) { // 注:インスタンス化されたクライアントは、接続の繰り返し確立を避けてモデレーションのパフォーマンスを向上させるために、できるだけ再利用することをお勧めします。 client, _err := createClient(accessKeyId, accessKeySecret, endpoint) if _err != nil { return nil, _err } // RuntimeOptions インスタンスを作成し、ランタイムパラメータを指定します。設定は、RuntimeOptions インスタンスを使用するリクエストにのみ有効です。 runtime := &util.RuntimeOptions{} // ローカルファイルのフルパス。例:D:\localPath\exampleFile.mp4。 var filePath = "D:\\localPath\\exampleFile.mp4" // ファイルをアップロードするための一時トークンを取得します。 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(), }, ) videoModerationRequest := &green20220302.VideoModerationRequest{ // 例:videoDetection_global Service: tea.String("videoDetection_global"), ServiceParameters: tea.String(string(serviceParameters)), } return client.VideoModerationWithOptions(videoModerationRequest, runtime) } func main() { /** * Alibaba Cloud アカウントの AccessKey ペアは、すべての API 操作に対する権限を持っています。これらの認証情報を使用して OSS で操作を実行することは、リスクの高い操作です。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 } // 自動ルーティング。リージョンを cn-beijing に切り替えます。 if flag { endpoint = "green-cip.cn-beijing.aliyuncs.com" response, _err = invoke(accessKeyId, accessKeySecret, endpoint) } if response != nil { statusCode := tea.IntValue(tea.ToInt(response.StatusCode)) body := response.Body videoModerationResponseData := 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 := videoModerationResponseData.Result fmt.Println("response dataId:" + tea.StringValue(videoModerationResponseData.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("videomoderation 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" green20220302 "github.com/alibabacloud-go/green-20220302/client" util "github.com/alibabacloud-go/tea-utils/v2/service" "github.com/alibabacloud-go/tea/tea" "net/http" ) func main() { // プロジェクトコードが漏洩した場合、AccessKey ペアが漏洩し、アカウント内のリソースのセキュリティが侵害される可能性があります。次のサンプルコードは参照用です。 config := &openapi.Config{ /** * Alibaba Cloud アカウントの AccessKey ペアは、すべての API 操作に対する権限を持っています。これらの認証情報を使用して OSS で操作を実行することは、リスクの高い操作です。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 シークレットを取得することをお勧めします"), // HTTP プロキシを構成します。 // HttpProxy: tea.String("http://xx.xx.xx.xx:xxxx"), // HTTPS プロキシを構成します。 // HttpsProxy: tea.String("https://username:password@xxx.xxx.xxx.xxx:9999"), RegionId: tea.String("ap-southeast-1"), Endpoint: tea.String("green-cip.ap-southeast-1.aliyuncs.com"), /** * 接続タイムアウトと読み取りタイムアウトを指定します。サーバーがファイルモデレーションリクエストを完了するまでのタイムアウト期間は 10 秒です。 * 読み取りタイムアウトを 10 秒未満に設定すると、リクエスト処理中にサーバーが読み取りタイムアウトエラーを生成する可能性があります。 */ ConnectTimeout: tea.Int(3000), ReadTimeout: tea.Int(6000), } client, _err := green20220302.NewClient(config) if _err != nil { panic(_err) } // RuntimeObject インスタンスを作成し、ランタイムパラメータを構成します。 runtime := &util.RuntimeOptions{} runtime.ReadTimeout = tea.Int(10000) runtime.ConnectTimeout = tea.Int(10000) serviceParameters, _ := json.Marshal( map[string]interface{}{ "taskId": "vi_f_O5z5iaIis3iI0X2oNYj7qa-1x****", }, ) request := green20220302.VideoModerationResultRequest{ Service: tea.String("videoDetection_global"), ServiceParameters: tea.String(string(serviceParameters)), } result, _err := client.VideoModerationResultWithOptions(&request, runtime) if _err != nil { panic(_err) } if *result.StatusCode != http.StatusOK { fmt.Printf("response not success. status:%d\n", *result.StatusCode) return } body := result.Body fmt.Printf("response success. requestId:%s, code:%d, msg:%s\n", *body.RequestId, *body.Code, *body.Message) if *body.Code == 280 { fmt.Printf("ビデオモデレーションを処理中です。 code:%d\n", *body.Code) return } if *body.Code != http.StatusOK { fmt.Printf("ビデオモデレーションの結果は成功しませんでした。 code:%d\n", *body.Code) return } data := body.Data fmt.Printf("ビデオモデレーション result:%s\n", data) fmt.Printf("ビデオモデレーション result videoResult:%s\n", data.videoResult) fmt.Printf("ビデオモデレーション result frameResult:%s\n", data.FrameResult) }
ビデオライブストリームモデレーションタスクをキャンセルするためのサンプルコード
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" "net/http" ) func main() { // プロジェクトコードが漏洩した場合、AccessKey ペアが漏洩し、アカウント内のリソースのセキュリティが侵害される可能性があります。次のサンプルコードは参照用です。 config := &openapi.Config{ /** * Alibaba Cloud アカウントの AccessKey ペアは、すべての API 操作に対する権限を持っています。これらの認証情報を使用して OSS で操作を実行することは、リスクの高い操作です。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 シークレットを取得することをお勧めします"), // HTTP プロキシを構成します。 // HttpProxy: tea.String("http://xx.xx.xx.xx:xxxx"), // HTTPS プロキシを構成します。 // HttpsProxy: tea.String("https://username:password@xxx.xxx.xxx.xxx:9999"), RegionId: tea.String("ap-southeast-1"), Endpoint: tea.String("green-cip.ap-southeast-1.aliyuncs.com"), /** * 接続タイムアウトと読み取りタイムアウトを指定します。サーバーがファイルモデレーションリクエストを完了するまでのタイムアウト期間は 10 秒です。 * 読み取りタイムアウトを 10 秒未満に設定すると、リクエスト処理中にサーバーが読み取りタイムアウトエラーを生成する可能性があります。 */ ConnectTimeout: tea.Int(3000), ReadTimeout: tea.Int(6000), } client, _err := green20220302.NewClient(config) if _err != nil { panic(_err) } // RuntimeObject インスタンスを作成し、ランタイムパラメータを構成します。 runtime := &util.RuntimeOptions{} runtime.ReadTimeout = tea.Int(10000) runtime.ConnectTimeout = tea.Int(10000) serviceParameters, _ := json.Marshal( map[string]interface{}{ "taskId": "vi_s_lyxBXzWhSsxuJjiNHcpQ0N-*****", }, ) request := green20220302.VideoModerationCancelRequest{ Service: tea.String("liveStreamDetection_global"), ServiceParameters: tea.String(string(serviceParameters)), } result, _err := client.VideoModerationCancelWithOptions(&request, runtime) if _err != nil { panic(_err) } if *result.StatusCode != http.StatusOK { fmt.Printf("response not success. status:%d\n", *result.StatusCode) return } body := result.Body fmt.Printf("response success. requestId:%s, code:%d, msg:%s\n", *body.RequestId, *body.Code, *body.Message) if *body.Code != http.StatusOK { fmt.Printf("ビデオモデレーションのキャンセルは成功しませんでした。 code:%d\n", *body.Code) } }
OSS に保存されているビデオのモデレーション
シナリオ
モデレーション対象の動画ファイルが既に OSS に保存されている場合は、Content Moderation が OSS にアクセスできるようにサービスロールを作成する権限を付与できます。動画モデレーション 2.0 は、サービスロールを介して OSS からファイルを取得し、モデレーションを実行できます。サービスロールを作成するには、クラウド リソースアクセス承認にアクセスしてください。
次のコマンドを実行して関連する依存関係をインストールします。
go git clone --branch v2.2.11 github.com/alibabacloud-go/green-20220302/v2
Go 用 SDK を使用します。
ビデオモデレーションタスクを送信するためのサンプルコード
package main import ( "encoding/json" "fmt" openapi "github.com/alibabacloud-go/darabonba-openapi/v2/client" green20220302 "github.com/alibabacloud-go/green-20220302/client" util "github.com/alibabacloud-go/tea-utils/v2/service" "github.com/alibabacloud-go/tea/tea" "net/http" ) func main() { // プロジェクトコードが漏洩した場合、AccessKey ペアが漏洩し、アカウント内のリソースのセキュリティが侵害される可能性があります。次のサンプルコードは参照用です。 config := &openapi.Config{ /** * Alibaba Cloud アカウントの AccessKey ペアは、すべての API 操作に対する権限を持っています。これらの認証情報を使用して OSS で操作を実行することは、リスクの高い操作です。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 シークレットを取得することをお勧めします"), // HTTP プロキシを構成します。 // HttpProxy: tea.String("http://xx.xx.xx.xx:xxxx"), // HTTPS プロキシを構成します。 // HttpsProxy: tea.String("https://username:password@xxx.xxx.xxx.xxx:9999"), RegionId: tea.String("ap-southeast-1"), Endpoint: tea.String("green-cip.ap-southeast-1.aliyuncs.com"), /** * 接続タイムアウトと読み取りタイムアウトを指定します。サーバーがファイルモデレーションリクエストを完了するまでのタイムアウト期間は 10 秒です。 * 読み取りタイムアウトを 10 秒未満に設定すると、リクエスト処理中にサーバーが読み取りタイムアウトエラーを生成する可能性があります。 */ ConnectTimeout: tea.Int(3000), ReadTimeout: tea.Int(6000), } client, _err := green20220302.NewClient(config) if _err != nil { panic(_err) } // RuntimeObject インスタンスを作成し、ランタイムパラメータを構成します。 runtime := &util.RuntimeOptions{} runtime.ReadTimeout = tea.Int(10000) runtime.ConnectTimeout = tea.Int(10000) serviceParameters, _ := json.Marshal( map[string]interface{}{ "ossBucketName": "bucket_01", "ossObjectName": "conect/xxx.mp4", "ossRegionId": "ap-southeast-1", }, ) request := green20220302.VideoModerationRequest{ Service: tea.String("videoDetection_global"), ServiceParameters: tea.String(string(serviceParameters)), } result, _err := client.VideoModerationWithOptions(&request, runtime) if _err != nil { panic(_err) } if *result.StatusCode != http.StatusOK { fmt.Printf("response not success. status:%d\n", *result.StatusCode) return } body := result.Body fmt.Printf("response success. requestId:%s, code:%d, msg:%s\n", *body.RequestId, *body.Code, *body.Message) if *body.Code != http.StatusOK { fmt.Printf("ビデオモデレーションは成功しませんでした。 code:%d\n", *body.Code) return } data := body.Data fmt.Printf("ビデオモデレーション taskId:%s\n", *data.TaskId) }
ビデオモデレーションの結果を取得するためのサンプルコード
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" "net/http" ) func main() { // プロジェクトコードが漏洩した場合、AccessKey ペアが漏洩し、アカウント内のリソースのセキュリティが侵害される可能性があります。次のサンプルコードは参照用です。 config := &openapi.Config{ /** * Alibaba Cloud アカウントの AccessKey ペアは、すべての API 操作に対する権限を持っています。これらの認証情報を使用して OSS で操作を実行することは、リスクの高い操作です。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 シークレットを取得することをお勧めします"), // HTTP プロキシを構成します。 // HttpProxy: tea.String("http://xx.xx.xx.xx:xxxx"), // HTTPS プロキシを構成します。 // HttpsProxy: tea.String("https://username:password@xxx.xxx.xxx.xxx:9999"), RegionId: tea.String("ap-southeast-1"), Endpoint: tea.String("green-cip.ap-southeast-1.aliyuncs.com"), /** * 接続タイムアウトと読み取りタイムアウトを指定します。サーバーがファイルモデレーションリクエストを完了するまでのタイムアウト期間は 10 秒です。 * 読み取りタイムアウトを 10 秒未満に設定すると、リクエスト処理中にサーバーが読み取りタイムアウトエラーを生成する可能性があります。 */ ConnectTimeout: tea.Int(3000), ReadTimeout: tea.Int(6000), } client, _err := green20220302.NewClient(config) if _err != nil { panic(_err) } // RuntimeObject インスタンスを作成し、ランタイムパラメータを構成します。 runtime := &util.RuntimeOptions{} runtime.ReadTimeout = tea.Int(10000) runtime.ConnectTimeout = tea.Int(10000) serviceParameters, _ := json.Marshal( map[string]interface{}{ "taskId": "vi_f_O5z5iaIis3iI0X2oNYj7qa-1x****", }, ) request := green20220302.VideoModerationResultRequest{ Service: tea.String("videoDetection_global"), ServiceParameters: tea.String(string(serviceParameters)), } result, _err := client.VideoModerationResultWithOptions(&request, runtime) if _err != nil { panic(_err) } if *result.StatusCode != http.StatusOK { fmt.Printf("response not success. status:%d\n", *result.StatusCode) return } body := result.Body fmt.Printf("response success. requestId:%s, code:%d, msg:%s\n", *body.RequestId, *body.Code, *body.Message) if *body.Code == 280 { fmt.Printf("ビデオモデレーションを処理中です。 code:%d\n", *body.Code) return } if *body.Code != http.StatusOK { fmt.Printf("ビデオモデレーションの結果は成功しませんでした。 code:%d\n", *body.Code) return } data := body.Data fmt.Printf("ビデオモデレーション result:%s\n", data) fmt.Printf("ビデオモデレーション result videoResult:%s\n", data.videoResult) fmt.Printf("ビデオモデレーション result frameResult:%s\n", data.FrameResult) }
ビデオライブストリームモデレーションタスクをキャンセルするためのサンプルコード
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" "net/http" ) func main() { // プロジェクトコードが漏洩した場合、AccessKey ペアが漏洩し、アカウント内のリソースのセキュリティが侵害される可能性があります。次のサンプルコードは参照用です。 config := &openapi.Config{ /** * Alibaba Cloud アカウントの AccessKey ペアは、すべての API 操作に対する権限を持っています。これらの認証情報を使用して OSS で操作を実行することは、リスクの高い操作です。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 シークレットを取得することをお勧めします"), // HTTP プロキシを構成します。 // HttpProxy: tea.String("http://xx.xx.xx.xx:xxxx"), // HTTPS プロキシを構成します。 // HttpsProxy: tea.String("https://username:password@xxx.xxx.xxx.xxx:9999"), RegionId: tea.String("ap-southeast-1"), Endpoint: tea.String("green-cip.ap-southeast-1.aliyuncs.com"), /** * 接続タイムアウトと読み取りタイムアウトを指定します。サーバーがファイルモデレーションリクエストを完了するまでのタイムアウト期間は 10 秒です。 * 読み取りタイムアウトを 10 秒未満に設定すると、リクエスト処理中にサーバーが読み取りタイムアウトエラーを生成する可能性があります。 */ ConnectTimeout: tea.Int(3000), ReadTimeout: tea.Int(6000), } client, _err := green20220302.NewClient(config) if _err != nil { panic(_err) } // RuntimeObject インスタンスを作成し、ランタイムパラメータを構成します。 runtime := &util.RuntimeOptions{} runtime.ReadTimeout = tea.Int(10000) runtime.ConnectTimeout = tea.Int(10000) serviceParameters, _ := json.Marshal( map[string]interface{}{ "taskId": "vi_s_lyxBXzWhSsxuJjiNHcpQ0N-*****", }, ) request := green20220302.VideoModerationCancelRequest{ Service: tea.String("liveStreamDetection_global"), ServiceParameters: tea.String(string(serviceParameters)), } result, _err := client.VideoModerationCancelWithOptions(&request, runtime) if _err != nil { panic(_err) } if *result.StatusCode != http.StatusOK { fmt.Printf("response not success. status:%d\n", *result.StatusCode) return } body := result.Body fmt.Printf("response success. requestId:%s, code:%d, msg:%s\n", *body.RequestId, *body.Code, *body.Message) if *body.Code != http.StatusOK { fmt.Printf("ビデオモデレーションのキャンセルは成功しませんでした。 code:%d\n", *body.Code) } }
C# 用 SDK
ソースコードの詳細については、C# 用 SDK ソースコード をご参照ください。
ビデオモデレーションでは、次の 3 つのタイプがサポートされています。
インターネット上で公開されているビデオのモデレーション
シナリオ
モデレート対象の動画がインターネットからアクセス可能な場合、動画モデレーション 2.0 は、URL を介して動画ファイルを取得し、モデレーションを実行できます。
次のコマンドを実行して関連する依存関係をインストールします。
dotnet add package AlibabaCloud.SDK.Green20220302 --version 2.2.10
C# 用 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 ペアが漏洩し、アカウント内のリソースのセキュリティが侵害される可能性があります。次のサンプルコードは参照用です。 /** * Alibaba Cloud アカウントの AccessKey ペアは、すべての API 操作に対する権限を持っています。これらの認証情報を使用して OSS で操作を実行することは、リスクの高い操作です。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.VideoModerationRequest videoModerationRequest = new AlibabaCloud.SDK.Green20220302.Models.VideoModerationRequest(); // モデレーションサービス。 videoModerationRequest.Service="videoDetection_global"; Dictionary<String,Object> task=new Dictionary<string, object>(); // モデレート対象のビデオの URL。インターネット経由でアクセスできる URL。 task.Add("url","https://xxxx/xxx/sample.mp4"); videoModerationRequest.ServiceParameters=JsonConvert.SerializeObject(task); // RuntimeObject インスタンスを作成し、ランタイムパラメータを構成します。 AlibabaCloud.TeaUtil.Models.RuntimeOptions runtime = new AlibabaCloud.TeaUtil.Models.RuntimeOptions(); runtime.ReadTimeout = 10000; runtime.ConnectTimeout = 10000; try { // モデレーションタスクを送信します。 AlibabaCloud.SDK.Green20220302.Models.VideoModerationResponse response= client.VideoModerationWithOptions(videoModerationRequest, 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 ペアが漏洩し、アカウント内のリソースのセキュリティが侵害される可能性があります。次のサンプルコードは参照用です。 /** * Alibaba Cloud アカウントの AccessKey ペアは、すべての API 操作に対する権限を持っています。これらの認証情報を使用して OSS で操作を実行することは、リスクの高い操作です。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.VideoModerationResultRequest videoModerationResultRequest = new AlibabaCloud.SDK.Green20220302.Models.VideoModerationResultRequest(); // モデレーションサービス。 videoModerationResultRequest.Service="videoDetection_global"; Dictionary<String,Object> task=new Dictionary<string, object>(); // 結果を取得するタスクの ID。 task.Add("taskId","<結果を取得するタスクの ID>"); videoModerationResultRequest.ServiceParameters=JsonConvert.SerializeObject(task); // RuntimeObject インスタンスを作成し、ランタイムパラメータを構成します。 AlibabaCloud.TeaUtil.Models.RuntimeOptions runtime = new AlibabaCloud.TeaUtil.Models.RuntimeOptions(); runtime.ReadTimeout = 10000; runtime.ConnectTimeout = 10000; try { // モデレーションタスクを送信します。 AlibabaCloud.SDK.Green20220302.Models.VideoModerationResultResponse response= client.VideoModerationResultWithOptions(videoModerationResultRequest, 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("riskLevel : " + response.Body.Data.RiskLevel); 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.10
OSS SDK をインストールします。
NuGet 方式でインストールします 1. Visual Studio に NuGet がインストールされていない場合は、最初に NuGet をインストールします。 2. Visual Studio で新規プロジェクトを作成するか、既存のプロジェクトを開き、[ツール] > [NuGet パッケージマネージャー] > [ソリューションの NuGet パッケージの管理] を選択します。 3. aliyun.oss.sdk を検索し、結果から Aliyun.OSS.SDK(.NET Framework 用)または Aliyun.OSS.SDK.NetCore を見つけます
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 VideoModerationAutoRoute { // ファイルをアップロードするための一時トークンを取得します。 public static Dictionary<String, Models.DescribeUploadTokenResponse> tokenDic = new Dictionary<String, Models.DescribeUploadTokenResponse>(); // ファイルをアップロードするクライアント。 public static OssClient ossClient = null; // サービスが VPC にデプロイされているかどうかを指定します。 public static Boolean isVPC = false; public static void Main(string[] args) { /** * Alibaba Cloud アカウントの AccessKey ペアは、すべての API 操作に対する権限を持っています。これらの認証情報を使用して OSS で操作を実行することは、リスクの高い操作です。RAM ユーザーを使用して API 操作を呼び出したり、日常的な O&M を実行したりすることをお勧めします。 * AccessKey ID と AccessKey シークレットをプロジェクトコードにハードコードしないでください。そうしないと、AccessKey ペアが漏洩し、アカウント内のすべてのリソースのセキュリティが侵害される可能性があります。 * 環境変数を取得する一般的な方法: * RAM ユーザーの AccessKey ID を取得します。Environment.GetEnvironmentVariable("ALIBABA_CLOUD_ACCESS_KEY_ID") * RAM ユーザーの AccessKey シークレットを取得します。Environment.GetEnvironmentVariable("ALIBABA_CLOUD_ACCESS_KEY_SECRET") */ String accessKeyId = "環境変数から RAM ユーザーの AccessKey ID を取得することをお勧めします"; String accessKeySecret = "環境変数から RAM ユーザーの AccessKey シークレットを取得することをお勧めします"; // ビジネス要件に基づいてリージョン ID とエンドポイントを変更します。 String endpoint = "green-cip.ap-southeast-1.aliyuncs.com"; Models.VideoModerationResponse response = invoke( accessKeyId, accessKeySecret, endpoint ); Console.WriteLine(response.Body.RequestId); Console.WriteLine(JsonConvert.SerializeObject(response.Body)); } // ビデオモデレーションリクエストを開始するクライアントを作成します。 public static Client createClient( String accessKeyId, String accessKeySecret, String endpoint ) { AlibabaCloud.OpenApiClient.Models.Config config = new AlibabaCloud.OpenApiClient.Models.Config { AccessKeyId = accessKeyId, AccessKeySecret = accessKeySecret, // HTTP プロキシを構成します。 // HttpProxy = "http://10.10.xx.xx:xxxx", // HTTPS プロキシを構成します。 // HttpsProxy = "https://username:password@xxx.xxx.xxx.xxx:9999", // サービスのエンドポイント。 Endpoint = endpoint, }; return new Client(config); } // ファイルをアップロードするクライアントを作成します。 private static OssClient getOssClient( Models.DescribeUploadTokenResponse tokenResponse, Boolean isVPC ) { var tokenData = tokenResponse.Body.Data; if (isVPC) { return new OssClient( tokenData.OssInternalEndPoint, tokenData.AccessKeyId, tokenData.AccessKeySecret, tokenData.SecurityToken ); } else { return new OssClient( tokenData.OssInternetEndPoint, tokenData.AccessKeyId, tokenData.AccessKeySecret, tokenData.SecurityToken ); } } // ファイルをアップロードします public static String uploadFile( String filePath, Models.DescribeUploadTokenResponse tokenResponse ) { // OssClient インスタンスを作成します。 ossClient = getOssClient(tokenResponse, isVPC); var tokenData = tokenResponse.Body.Data; String objectName = tokenData.FileNamePrefix + Guid.NewGuid().ToString() + "." + filePath.Split(".").GetValue(1); // ファイルをアップロードします ossClient.PutObject(tokenData.BucketName, objectName, filePath); return objectName; } // モデレーションタスクを送信します。リクエスト public static Models.VideoModerationResponse invoke( String accessKeyId, String accessKeySecret, String endpoint ) { // 注:インスタンス化されたクライアントは、接続の繰り返し確立を避けてモデレーションのパフォーマンスを向上させるために、できるだけ再利用することをお勧めします。 Client client = createClient(accessKeyId, accessKeySecret, endpoint); // RuntimeOptions インスタンスを作成し、ランタイムパラメータを指定します。設定は、RuntimeOptions インスタンスを使用するリクエストにのみ有効です。 AlibabaCloud.TeaUtil.Models.RuntimeOptions runtimeOptions = new AlibabaCloud.TeaUtil.Models.RuntimeOptions(); // ローカルファイルのフルパス。例:D:\localPath\exampleFile.mp4。 String filePath = "D:\localPath\exampleFile.mp4"; try { // ファイルをアップロードするための一時トークンを取得します。 if ( !tokenDic.ContainsKey(endpoint) || tokenDic[endpoint].Body.Data.Expiration <= DateTimeOffset.Now.ToUnixTimeSeconds() ) { var tokenResponse = client.DescribeUploadToken(); tokenDic[endpoint] = tokenResponse; } // ファイルをアップロードします String objectName = uploadFile(filePath, tokenDic[endpoint]); // モデレーションリクエストを構築します。 Models.VideoModerationRequest videoModerationRequest = new Models.VideoModerationRequest(); // service の例:videoDetection_global videoModerationRequest.Service = "videoDetection_global"; Dictionary<string, object> task = new Dictionary<string, object>(); // モデレート対象ファイルの情報。 task.Add("ossBucketName", tokenDic[endpoint].Body.Data.BucketName); task.Add("ossObjectName", objectName); // モデレート対象データの ID。 task.Add("dataId", Guid.NewGuid().ToString()); videoModerationRequest.ServiceParameters = JsonConvert.SerializeObject(task); // 操作を呼び出してモデレーションの結果を取得します。 Models.VideoModerationResponse response = client.VideoModerationWithOptions( videoModerationRequest, runtimeOptions ); return response; } catch (Exception _err) { Console.WriteLine(_err); return null; } } } }
ビデオモデレーションの結果を取得するためのサンプルコード
using Newtonsoft.Json; using Tea; namespace AlibabaCloud.SDK.Sample { public class Sample { /** * AccessKey ID と AccessKey シークレットを使用してクライアントを初期化します。 * @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 ペアが漏洩し、アカウント内のリソースのセキュリティが侵害される可能性があります。次のサンプルコードは参照用です。 /** * Alibaba Cloud アカウントの AccessKey ペアは、すべての API 操作に対する権限を持っています。これらの認証情報を使用して OSS で操作を実行することは、リスクの高い操作です。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.VideoModerationResultRequest videoModerationResultRequest = new AlibabaCloud.SDK.Green20220302.Models.VideoModerationResultRequest(); // モデレーションサービス。 videoModerationResultRequest.Service="videoDetection_global"; Dictionary<String,Object> task=new Dictionary<string, object>(); // 結果を取得するタスクの ID。 task.Add("taskId","<結果を取得するタスクの ID>"); videoModerationResultRequest.ServiceParameters=JsonConvert.SerializeObject(task); // RuntimeObject インスタンスを作成し、ランタイムパラメータを構成します。 AlibabaCloud.TeaUtil.Models.RuntimeOptions runtime = new AlibabaCloud.TeaUtil.Models.RuntimeOptions(); runtime.ReadTimeout = 10000; runtime.ConnectTimeout = 10000; try { // モデレーションタスクを送信します。 AlibabaCloud.SDK.Green20220302.Models.VideoModerationResultResponse response= client.VideoModerationResultWithOptions(videoModerationResultRequest, 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("riskLevel : " + response.Body.Data.RiskLevel); Console.WriteLine("liveId : " + response.Body.Data.LiveId); Console.WriteLine("url : " + response.Body.Data.Url); Console.WriteLine("sliceDetails : " + JsonConvert.SerializeObject(response.Body.Data.SliceDetails)); } } } } catch (TeaException error) { // 必要に応じてエラーを出力します。 AlibabaCloud.TeaUtil.Common.AssertAsString(error.Message); Console.WriteLine("error : " + error); } catch (Exception _error) { TeaException error = new TeaException(new Dictionary<string, object> { { "message", _error.Message } }); // 必要に応じてエラーを出力します。 AlibabaCloud.TeaUtil.Common.AssertAsString(error.Message); Console.WriteLine("error : " + error); } } } }
OSS に保存されているビデオのモデレーション
シナリオ
モデレーション対象のビデオファイルが既に OSS に保存されている場合は、Content Moderation が OSS にアクセスできるようにサービスロールを作成する権限を付与できます。ビデオモデレーション 2.0 は、サービスロールを介して OSS からファイルを取得し、モデレーションを実行できます。サービスロールを作成するには、Cloud Resource Access Authorization にアクセスしてください。
次のコマンドを実行して関連する依存関係をインストールします。
dotnet add package AlibabaCloud.SDK.Green20220302 --version 2.2.10
C# 用 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 ペアが漏洩し、アカウント内のリソースのセキュリティが侵害される可能性があります。次のサンプルコードは参照用です。 /** * Alibaba Cloud アカウントの AccessKey ペアは、すべての API 操作に対する権限を持っています。これらの認証情報を使用して OSS で操作を実行することは、リスクの高い操作です。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.VideoModerationRequest videoModerationRequest = new AlibabaCloud.SDK.Green20220302.Models.VideoModerationRequest(); // モデレーションサービス。 videoModerationRequest.Service="videoDetection_global"; Dictionary<String,Object> task=new Dictionary<string, object>(); // OSS ファイルの例。 task.Add("ossBucketName","bucket_01"); task.Add("ossObjectName","test/sample.wav"); task.Add("ossRegionId","ap-southeast-1"); videoModerationRequest.ServiceParameters=JsonConvert.SerializeObject(task); // RuntimeObject インスタンスを作成し、ランタイムパラメータを構成します。 AlibabaCloud.TeaUtil.Models.RuntimeOptions runtime = new AlibabaCloud.TeaUtil.Models.RuntimeOptions(); runtime.ReadTimeout = 10000; runtime.ConnectTimeout = 10000; try { // モデレーションタスクを送信します。 AlibabaCloud.SDK.Green20220302.Models.VideoModerationResponse response= client.VideoModerationWithOptions(videoModerationRequest, 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 ペアが漏洩し、アカウント内のリソースのセキュリティが侵害される可能性があります。次のサンプルコードは参照用です。 /** * Alibaba Cloud アカウントの AccessKey ペアは、すべての API 操作に対する権限を持っています。これらの認証情報を使用して OSS で操作を実行することは、リスクの高い操作です。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.VideoModerationResultRequest videoModerationResultRequest = new AlibabaCloud.SDK.Green20220302.Models.VideoModerationResultRequest(); // モデレーションサービス。 videoModerationResultRequest.Service="videoDetection_global"; Dictionary<String,Object> task=new Dictionary<string, object>(); // 結果を取得するタスクの ID。 task.Add("taskId","<結果を取得するタスクの ID>"); videoModerationResultRequest.ServiceParameters=JsonConvert.SerializeObject(task); // RuntimeObject インスタンスを作成し、ランタイムパラメータを構成します。 AlibabaCloud.TeaUtil.Models.RuntimeOptions runtime = new AlibabaCloud.TeaUtil.Models.RuntimeOptions(); runtime.ReadTimeout = 10000; runtime.ConnectTimeout = 10000; try { // モデレーションタスクを送信します。 AlibabaCloud.SDK.Green20220302.Models.VideoModerationResultResponse response= client.VideoModerationResultWithOptions(videoModerationResultRequest, 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("riskLevel : " + response.Body.Data.RiskLevel); Console.WriteLine("url : " + response.Body.Data.Url); Console.WriteLine("sliceDetails : " + JsonConvert.SerializeObject(response.Body.Data.SliceDetails)); } } } } catch (TeaException error) { // 必要に応じてエラーを出力します。 AlibabaCloud.TeaUtil.Common.AssertAsString(error.Message); Console.WriteLine("error : " + error); } catch (Exception _error) { TeaException error = new TeaException(new Dictionary<string, object> { { "message", _error.Message } }); // 必要に応じてエラーを出力します。 AlibabaCloud.TeaUtil.Common.AssertAsString(error.Message); Console.WriteLine("error : " + error); } } } }
Node.js 用 SDK
ソースコードの詳細については、Node.js 用 SDK ソースコード をご参照ください。
ビデオモデレーションでは、次の 3 つのタイプがサポートされています。
インターネット上で公開されているビデオのモデレーション
シナリオ
モデレートする動画がインターネットからアクセス可能な場合、動画モデレーション 2.0 は、URL を介して動画ファイルを取得し、モデレーションを実行できます。
次のコマンドを実行して関連する依存関係をインストールします。
npm install @alicloud/green20220302@2.2.10
Node.js 用 SDK を使用します。
ビデオモデレーションタスクを送信するためのサンプルコード
const Green20220302 = require('@alicloud/green20220302'); const OpenApi = require('@alicloud/openapi-client'); const Util = require('@alicloud/tea-util'); // 注:インスタンス化されたクライアントは、接続の繰り返し確立を避けてモデレーションのパフォーマンスを向上させるために、できるだけ再利用することをお勧めします。 // プロジェクトコードが漏洩した場合、AccessKey ペアが漏洩し、アカウント内のすべてのリソースのセキュリティが侵害される可能性があります。次のサンプルコードは参照用です。 class Client { static createClient() { const config = new OpenApi.Config({ // 必須。ALIBABA_CLOUD_ACCESS_KEY_ID 環境変数が構成されていることを確認します。 accessKeyId: process.env['ALIBABA_CLOUD_ACCESS_KEY_ID'], // 必須。ALIBABA_CLOUD_ACCESS_KEY_SECRET 環境変数が構成されていることを確認します。 accessKeySecret: process.env['ALIBABA_CLOUD_ACCESS_KEY_SECRET'], endpoint: `green-cip.ap-southeast-1.aliyuncs.com`, }); return new Green20220302.default(config); } static async main() { const client = Client.createClient(); // リクエストオブジェクトを作成します。 const videoModerationRequest = new Green20220302.VideoModerationRequest({ // ビデオモデレーションサービス。 "service": "videoDetection_global", // 検出するビデオリンク。 "serviceParameters": JSON.stringify({"url":"http://aliyundoc.com/test.flv"}) }); // ランタイム構成オブジェクトを作成します。 const runtime = new Util.RuntimeOptions(); try { // リクエストを開始し、レスポンスを取得します。 const response = await client.videoModerationWithOptions(videoModerationRequest, runtime); console.log(JSON.stringify(response.body)); } catch (error) { // 実際のビジネスシナリオでは例外を慎重に処理し、プロジェクトで例外を無視しないでください。この例では、エラーメッセージが出力されます。 // エラーメッセージ。 console.log('Error occurred:', error.message); } } } Client.main();
ビデオモデレーションの結果を取得するためのサンプルコード
const Green20220302 = require('@alicloud/green20220302'); const OpenApi = require('@alicloud/openapi-client'); const Util = require('@alicloud/tea-util'); // 注:インスタンス化されたクライアントは、接続の繰り返し確立を避けてモデレーションのパフォーマンスを向上させるために、できるだけ再利用することをお勧めします。 // プロジェクトコードが漏洩した場合、AccessKey ペアが漏洩し、アカウント内のすべてのリソースのセキュリティが侵害される可能性があります。次のサンプルコードは参照用です。 class Client { static createClient() { const config = new OpenApi.Config({ // 必須。ALIBABA_CLOUD_ACCESS_KEY_ID 環境変数が構成されていることを確認します。 accessKeyId: process.env['ALIBABA_CLOUD_ACCESS_KEY_ID'], // 必須。ALIBABA_CLOUD_ACCESS_KEY_SECRET 環境変数が構成されていることを確認します。 accessKeySecret: process.env['ALIBABA_CLOUD_ACCESS_KEY_SECRET'], endpoint: `green-cip.ap-southeast-1.aliyuncs.com`, }); return new Green20220302.default(config); } static async main() { const client = Client.createClient(); // リクエストオブジェクトを作成します。 const videoModerationResultRequest = new Green20220302.VideoModerationResultRequest({ // ビデオモデレーションサービス。 "service": "videoDetection_global", "serviceParameters": JSON.stringify({"taskId":"<ビデオモデレーションの結果を取得するタスクの ID。>"}) }); // ランタイム構成オブジェクトを作成します。 const runtime = new Util.RuntimeOptions(); try { // リクエストを開始し、レスポンスを取得します。 const response = await client.videoModerationResultWithOptions(videoModerationResultRequest, runtime); console.log(JSON.stringify(response.body)); } catch (error) { // 実際のビジネスシナリオでは例外を慎重に処理し、プロジェクトで例外を無視しないでください。この例では、エラーメッセージが出力されます。 // エラーメッセージ。 console.log('Error occurred:', error.message); } } } Client.main();
ローカルビデオのモデレーション
シナリオ
モデレーション対象のビデオがローカルマシンにあり、パブリックネットワークアクセスリンクがない場合、ビデオを Content Moderation が提供する Object Storage Service (OSS) バケットにアップロードできます。ビデオモデレーション 2.0 は OSS に直接アクセスし、ビデオコンテンツを取得してモデレーションを実行できます。
次のコマンドを実行して関連する依存関係をインストールします。
npm install @alicloud/green20220302@2.2.10
Node.js 用 SDK を使用します。
ビデオモデレーションタスクを送信するためのサンプルコード
const RPCClient = require("@alicloud/pop-core"); const OSS = require('ali-oss'); const { v4: uuidv4 } = require('uuid'); const path = require("path"); // サービスが VPC にデプロイされているかどうかを指定します。 var isVPC = false; // ファイルをアップロードするための一時トークンを取得します。 var tokenDic = new Array(); // ファイルをアップロードするクライアント。 var ossClient; // ファイルをアップロードするクライアントを作成します。 function createClient(accessKeyId, accessKeySecret, endpoint) { return new RPCClient({ accessKeyId: accessKeyId, accessKeySecret: accessKeySecret, endpoint: endpoint, apiVersion: '2022-03-02', // HTTP プロキシを構成します。 // httpProxy: "http://xx.xx.xx.xx:xxxx", // HTTPS プロキシを構成します。 // httpsProxy: "https://username:password@xxx.xxx.xxx.xxx:9999", }); } // ファイルをアップロードするクライアントを作成します。 function getOssClient(tokenData, isVPC) { if (isVPC) { ossClient = new OSS({ accessKeyId: tokenData['AccessKeyId'], accessKeySecret: tokenData['AccessKeySecret'], stsToken: tokenData['SecurityToken'], endpoint: tokenData['OssInternalEndPoint'], bucket: tokenData['BucketName'], }); } else { ossClient = new OSS({ accessKeyId: tokenData['AccessKeyId'], accessKeySecret: tokenData['AccessKeySecret'], stsToken: tokenData['SecurityToken'], endpoint: tokenData['OssInternetEndPoint'], bucket: tokenData['BucketName'], }); } } // モデレーションタスクを送信します。 async function invoke(accessKeyId, accessKeySecret, endpoint) { // 注:インスタンス化されたクライアントは、接続の繰り返し確立を避けてモデレーションのパフォーマンスを向上させるために、できるだけ再利用することをお勧めします。 var client = createClient(accessKeyId, accessKeySecret, endpoint); var requestOption = { method: 'POST', formatParams: false, }; // ローカルファイルのフルパス。例:D:\\localPath\\exampleFile.mp4。 var filePath = 'D:\\localPath\\exampleFile.mp4'; // ファイルをアップロードするためのトークンを取得します if (tokenDic[endpoint] == null || tokenDic[endpoint]['Expiration'] <= Date.parse(new Date() / 1000)) { var tokenResponse = await client.request('DescribeUploadToken', '', requestOption) tokenDic[endpoint] = tokenResponse.Data; } // ファイルをアップロードするクライアントを取得します getOssClient(tokenDic[endpoint], isVPC) var split = filePath.split("."); var objectName; if (split.length > 1) { objectName = tokenDic[endpoint].FileNamePrefix + uuidv4() + "." + split[split.length - 1]; } else { objectName = tokenDic[endpoint].FileNamePrefix + uuidv4(); } // ファイルをアップロードします const result = await ossClient.put(objectName, path.normalize(filePath)); // 次のコードを使用して API リクエストを作成し、パラメータを構成します。 var params = { // ビデオモデレーションサービス。例:videoDetection_global "Service": "videoDetection_global", // ローカルビデオによってアップロードされた情報。 "ServiceParameters": JSON.stringify({ "ossBucketName": tokenDic[endpoint].BucketName, "ossObjectName": objectName }) } // 操作を呼び出してモデレーションの結果を取得します。 return await client.request('VideoModeration', params, requestOption); } function main() { /** * Alibaba Cloud アカウントの AccessKey ペアは、すべての API 操作に対する権限を持っています。これらの認証情報を使用して OSS で操作を実行することは、リスクの高い操作です。RAM ユーザーを使用して API 操作を呼び出したり、日常的な O&M を実行したりすることをお勧めします。 * AccessKey ID と AccessKey シークレットをプロジェクトコードにハードコードしないでください。そうしないと、AccessKey ペアが漏洩し、アカウント内のすべてのリソースのセキュリティが侵害される可能性があります。 * 環境変数を取得する一般的な方法: * RAM ユーザーの AccessKey ID を取得します。process.env['ALIBABA_CLOUD_ACCESS_KEY_ID'] * RAM ユーザーの AccessKey シークレットを取得します。process.env['ALIBABA_CLOUD_ACCESS_KEY_SECRET'] */ const accessKeyId: '環境変数から RAM ユーザーの AccessKey ID を取得することをお勧めします' const accessKeySecret: '環境変数から RAM ユーザーの AccessKey シークレットを取得することをお勧めします' // ビジネス要件に基づいてリージョン ID とエンドポイントを変更します。 var endpoint = "https://green-cip.ap-southeast-1.aliyuncs.com" try { var response; // 操作を呼び出してモデレーションの結果を取得します。 invoke(accessKeyId, accessKeySecret, endpoint).then(function (response) { console.log(JSON.stringify(response)) }) } catch (err) { console.log(err); } } main();
ビデオモデレーションの結果を取得するためのサンプルコード
const Green20220302 = require('@alicloud/green20220302'); const OpenApi = require('@alicloud/openapi-client'); const Util = require('@alicloud/tea-util'); // 注:インスタンス化されたクライアントは、接続の繰り返し確立を避けてモデレーションのパフォーマンスを向上させるために、できるだけ再利用することをお勧めします。 // プロジェクトコードが漏洩した場合、AccessKey ペアが漏洩し、アカウント内のすべてのリソースのセキュリティが侵害される可能性があります。次のサンプルコードは参照用です。 class Client { static createClient() { const config = new OpenApi.Config({ // 必須。ALIBABA_CLOUD_ACCESS_KEY_ID 環境変数が構成されていることを確認します。 accessKeyId: process.env['ALIBABA_CLOUD_ACCESS_KEY_ID'], // 必須。ALIBABA_CLOUD_ACCESS_KEY_SECRET 環境変数が構成されていることを確認します。 accessKeySecret: process.env['ALIBABA_CLOUD_ACCESS_KEY_SECRET'], endpoint: `green-cip.ap-southeast-1.aliyuncs.com`, }); return new Green20220302.default(config); } static async main() { const client = Client.createClient(); // リクエストオブジェクトを作成します。 const videoModerationResultRequest = new Green20220302.VideoModerationResultRequest({ // ビデオモデレーションサービス。 "service": "videoDetection_global", "serviceParameters": JSON.stringify({"taskId":"<ビデオモデレーションの結果を取得するタスクの ID。>"}) }); // ランタイム構成オブジェクトを作成します。 const runtime = new Util.RuntimeOptions(); try { // リクエストを開始し、レスポンスを取得します。 const response = await client.videoModerationResultWithOptions(videoModerationResultRequest, runtime); console.log(JSON.stringify(response.body)); } catch (error) { // 実際のビジネスシナリオでは例外を慎重に処理し、プロジェクトで例外を無視しないでください。この例では、エラーメッセージが出力されます。 // エラーメッセージ。 console.log('Error occurred:', error.message); } } } Client.main();
OSS に保存されているビデオのモデレーション
シナリオ
モデレーション対象のビデオファイルが既に OSS に保存されている場合は、Content Moderation が OSS にアクセスできるようにサービスロールを作成する権限を付与できます。ビデオモデレーション 2.0 は、サービスロールを介して OSS からファイルを取得し、モデレーションを実行できます。サービスロールを作成するには、クラウド リソースアクセス承認にアクセスしてください。
次のコマンドを実行して関連する依存関係をインストールします。
npm install @alicloud/green20220302@2.2.10
Node.js 用 SDK を使用します。
ビデオモデレーションタスクを送信するためのサンプルコード
const Green20220302 = require('@alicloud/green20220302'); const OpenApi = require('@alicloud/openapi-client'); const Util = require('@alicloud/tea-util'); // 注:インスタンス化されたクライアントは、接続の繰り返し確立を避けてモデレーションのパフォーマンスを向上させるために、できるだけ再利用することをお勧めします。 // プロジェクトコードが漏洩した場合、AccessKey ペアが漏洩し、アカウント内のすべてのリソースのセキュリティが侵害される可能性があります。次のサンプルコードは参照用です。 class Client { static createClient() { const config = new OpenApi.Config({ // 必須。ALIBABA_CLOUD_ACCESS_KEY_ID 環境変数が構成されていることを確認します。 accessKeyId: process.env['ALIBABA_CLOUD_ACCESS_KEY_ID'], // 必須。ALIBABA_CLOUD_ACCESS_KEY_SECRET 環境変数が構成されていることを確認します。 accessKeySecret: process.env['ALIBABA_CLOUD_ACCESS_KEY_SECRET'], endpoint: `green-cip.ap-southeast-1.aliyuncs.com`, }); return new Green20220302.default(config); } static async main() { const client = Client.createClient(); // リクエストオブジェクトを作成します。 const videoModerationRequest = new Green20220302.VideoModerationRequest({ // ビデオモデレーションサービス。 "service": "videoDetection_global", // 検出するビデオリンク。 "serviceParameters": JSON.stringify({ // モデレート対象ファイルが配置されているバケットのリージョン。例:cn-shanghai "ossRegionId": "cn-shanghai", // モデレート対象ファイルが配置されているバケットの名前。例:bucket001 "ossBucketName": "bucket001", // モデレート対象のファイル。例:video/001.mp4 "ossObjectName": "video/001.mp4", }) }); // ランタイム構成オブジェクトを作成します。 const runtime = new Util.RuntimeOptions(); try { // リクエストを開始し、レスポンスを取得します。 const response = await client.videoModerationWithOptions(videoModerationRequest, runtime); console.log(JSON.stringify(response.body)); } catch (error) { // 実際のビジネスシナリオでは例外を慎重に処理し、プロジェクトで例外を無視しないでください。この例では、エラーメッセージが出力されます。 // エラーメッセージ。 console.log('Error occurred:', error.message); } } } Client.main();
ビデオモデレーションの結果を取得するためのサンプルコード
const Green20220302 = require('@alicloud/green20220302'); const OpenApi = require('@alicloud/openapi-client'); const Util = require('@alicloud/tea-util'); // 注:インスタンス化されたクライアントは、接続の繰り返し確立を避けてモデレーションのパフォーマンスを向上させるために、できるだけ再利用することをお勧めします。 // プロジェクトコードが漏洩した場合、AccessKey ペアが漏洩し、アカウント内のすべてのリソースのセキュリティが侵害される可能性があります。次のサンプルコードは参照用です。 class Client { static createClient() { const config = new OpenApi.Config({ // 必須。ALIBABA_CLOUD_ACCESS_KEY_ID 環境変数が構成されていることを確認します。 accessKeyId: process.env['ALIBABA_CLOUD_ACCESS_KEY_ID'], // 必須。ALIBABA_CLOUD_ACCESS_KEY_SECRET 環境変数が構成されていることを確認します。 accessKeySecret: process.env['ALIBABA_CLOUD_ACCESS_KEY_SECRET'], endpoint: `green-cip.ap-southeast-1.aliyuncs.com`, }); return new Green20220302.default(config); } static async main() { const client = Client.createClient(); // リクエストオブジェクトを作成します。 const videoModerationResultRequest = new Green20220302.VideoModerationResultRequest({ // ビデオモデレーションサービス。 "service": "videoDetection_global", "serviceParameters": JSON.stringify({"taskId":"<ビデオモデレーションの結果を取得するタスクの ID。>"}) }); // ランタイム構成オブジェクトを作成します。 const runtime = new Util.RuntimeOptions(); try { // リクエストを開始し、レスポンスを取得します。 const response = await client.videoModerationResultWithOptions(videoModerationResultRequest, runtime); console.log(JSON.stringify(response.body)); } catch (error) { // 実際のビジネスシナリオでは例外を慎重に処理し、プロジェクトで例外を無視しないでください。この例では、エラーメッセージが出力されます。 // エラーメッセージ。 console.log('Error occurred:', error.message); } } } Client.main();
HTTPS 経由の呼び出し
呼び出し方法
サービスリクエスト URL:https://green-cip.{region}.aliyuncs.com
プロトコル:HTTPS
メソッド:POST
共通リクエストパラメーター
Video Moderation 2.0 API の入力パラメーターには、共通リクエストパラメーターと操作固有のリクエストパラメーターが含まれます。共通リクエストパラメーターは、各 API 操作で使用されます。次の表に、共通リクエストパラメーターを示します。
パラメーター
タイプ
必須
説明
Format
String
はい
レスポンスを返す形式。有効な値:
JSON(デフォルト)
XML
Version
String
はい
Content Moderation 2.0 API のバージョン番号。値は YYYY-MM-DD 形式です。値を 2022-03-02 に設定します。
AccessKeyId
String
はい
Alibaba Cloud によって提供される AccessKey ID。
Signature
String
はい
現在のリクエストの署名文字列。署名の計算方法については、以下の署名メソッドをご参照ください。
SignatureMethod
String
はい
署名文字列の暗号化方式。値を HMAC-SHA1 に設定します。
Timestamp
String
はい
リクエストのタイムスタンプ。ISO 8601 標準で yyyy-MM-ddTHH:mm:ssZ 形式で時間を指定します。
時間は協定世界時(UTC)である必要があります。
たとえば、2022 年 12 月 12 日 09:13:14(UTC + 08:00)は 2022-12-12T01:13:14Z と記述します。
SignatureVersion
String
はい
署名暗号化アルゴリズムのバージョン。値を 1.0 に設定します。
SignatureNonce
String
はい
リプレイ攻撃を防ぐために使用される一意の乱数。リクエストごとに異なる番号を使用する必要があります。
Action
String
はい
有効な値:
videoModeration
videoModerationResult
共通レスポンスパラメーター
呼び出しが成功したかどうかにかかわらず、システムは各 API リクエストに対して一意の RequestId を返します。その他のレスポンスパラメーターは、呼び出すサービスによって異なります。
{ "RequestId":"20B935A9-XXXXXXXX-XXXXXXXX0C2", "Message":"SUCCESS", "Data":{ "TaskId":"au_f_O5xxxxxxxxxxxxxxqa-1****" }, "Code":200 }
サンプルコード
次のサンプルレスポンスは、読みやすくするためにフォーマットされています。実際のレスポンスは、改行やインデントでフォーマットされていません。
モデレーションタスクのサンプルコード
サンプルリクエスト
http://green-cip.cn-shanghai.aliyuncs.com/ ?Format=JSON &Version=2022-03-02 &Signature=vpEEL0zFHfxXYzSFV0n7%2FZiFL9o%3D &SignatureMethod=Hmac-SHA1 &SignatureNonce=15215528852396 &SignatureVersion=1.0 &Action=videoModeration &AccessKeyId=123****cip &Timestamp=2023-02-03T12:00:00Z &Service=video_media_detection &ServiceParameters={"url": "https://xxxxxx.aliyuncs.com/sample/****.wav"}
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=videoModeration &AccessKeyId=123****cip &Timestamp=2023-02-03T12:00:00Z &Service=video_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.cn-shanghai.aliyuncs.com/ ?Format=JSON &Version=2022-03-02 &Signature=vpEEL0zFHfxXYzSFV0n7%2FZiFL9o%3D &SignatureMethod=Hmac-SHA1 &SignatureNonce=15215528852396 &SignatureVersion=1.0 &Action=videoModerationResult &AccessKeyId=123****cip &Timestamp=2023-02-03T12:00:00Z &Service=video_media_detection &ServiceParameters={"taskId": "au_f_O5zxxxxxxxxxxxxxxxx-1x****"}
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=videoModerationResult &AccessKeyId=123****cip &Timestamp=2023-02-03T12:00:00Z &Service=video_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/video/****.wav" } ] }, "Code":200 }
署名メソッド
Video Moderation 2.0 サービスは、各アクセスリクエストを認証します。したがって、各リクエストには署名情報を含める必要があります。Video Moderation 2.0 は、AccessKey ペアを使用した対称暗号化を実装して、リクエスト送信者を認証します。
AccessKey ペアは、Alibaba Cloud によって正式に発行されます。 Alibaba Cloud 公式 Web サイトで申請および管理できます。 AccessKey ペアは、AccessKey ID と AccessKey シークレットで構成されます。 AccessKey ID はユーザーの ID を検証するために使用され、AccessKey シークレットは署名文字列の暗号化と検証に使用されます。 AccessKey シークレットは厳重に管理する必要があります。
リクエストに署名するには、次の手順を実行します。
リクエストパラメーターを使用して、正規化されたクエリ文字列を作成します。
リクエストパラメーターをパラメーター名のアルファベット順にソートします。これらのパラメーターには、共通リクエストパラメーターと操作固有のパラメーターが含まれます。ただし、共通リクエストパラメーターの Signature パラメーターは含まれません。
関連するリクエストパラメーターの名前と値をエンコードします。パラメーター名と値は、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)値を計算します。
説明セキュアハッシュアルゴリズム 1(SHA1)アルゴリズムを使用して、署名する文字列の HMAC 値を計算します。アンパサンド(
&
)(ASCII:38)が付加された AccessKey シークレットは、HMAC 計算のキーとして使用されます。HMAC 値を Base64 でエンコードして、署名文字列を取得します。
リクエストに署名文字列を Signature パラメーターとして追加します。これにより、API リクエストが署名されます。
説明署名文字列が最終的なリクエストパラメーター値として Content Moderation サービスに送信される場合、値は RFC 3986 で定義されている規則に基づいて他のパラメーターと同様に URL エンコードする必要があります。