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

Content Moderation:ビデオモデレーション 2.0 の使用ガイド

最終更新日:Feb 27, 2025

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 ペアを取得する」をご参照ください。

手順

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

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

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

  3. 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_IDALIBABA_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 を介してビデオファイルを取得し、モデレーションを実行できます。

  1. pom.xml フィールドに次の依存関係を追加すると、Maven プロジェクトで SDK を使用できます。Maven プロジェクトで SDK を使用できます。

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

    • ビデオモデレーションタスクを送信するためのサンプルコード

      import com.alibaba.fastjson.JSON;
      import com.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 に直接アクセスし、ビデオコンテンツを取得してモデレーションを実行できます。

  1. 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>
  2. Java 用 SDK を使用します。

    • ビデオモデレーションタスクを送信するためのサンプルコード

      import com.alibaba.fastjson.JSON;
      import com.aliyun.green20220302.Client;
      import com.aliyun.green20220302.models.DescribeUploadTokenResponse;
      import com.aliyun.green20220302.models.DescribeUploadTokenResponseBody;
      import com.aliyun.green20220302.models.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 にアクセスしてください。

  1. pom.xml フィールドに次の依存関係を追加すると、Maven プロジェクトで SDK を使用できます。Maven プロジェクトで SDK を使用できます。

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

    • ビデオモデレーションタスクを送信するためのサンプルコード

      import com.alibaba.fastjson.JSON;
      import com.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 を介してビデオファイルを取得し、モデレーションを実行できます。

  1. 次のコマンドを実行して pip をインストールします。

    pip install alibabacloud_green20220302==2.2.11
  2. 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 に直接アクセスし、ビデオコンテンツを取得してモデレーションを実行できます。

  1. 次のコマンドを実行して pip をインストールします。

    pip install alibabacloud_green20220302==2.2.11

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

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

    • ビデオモデレーションタスクを送信するためのサンプルコード

      from alibabacloud_green20220302.client import Client
      from alibabacloud_green20220302 import models
      from alibabacloud_tea_openapi.models import Config
      from alibabacloud_tea_util.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 にアクセスしてください。

  1. 次のコマンドを実行して pip をインストールします。

    pip install alibabacloud_green20220302==2.2.11
  2. 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 から動画ファイルを取得し、モデレーションを実行できます。

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

    composer require alibabacloud/green-20220302 2.2.10
  2. 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 に直接アクセスし、ビデオコンテンツを取得してモデレーションを実行できます。

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

    composer require alibabacloud/green-20220302 2.2.10

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

    composer require aliyuncs/oss-sdk-php
  2. PHP 用 SDK を使用します。

    • ビデオモデレーションタスクを送信するためのサンプルコード

      <?php
      require('vendor/autoload.php');
      
      use AlibabaCloud\SDK\Green\V20220302\Models\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 にアクセスしてください。

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

    composer require alibabacloud/green-20220302 2.2.10
  2. 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 を介してビデオファイルを取得し、モデレーションを実行できます。

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

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

    • ビデオモデレーションタスクを送信するためのサンプルコード

      package main
      
      import (
      	"encoding/json"
      	"fmt"
      	openapi "github.com/alibabacloud-go/darabonba-openapi/v2/client"
      	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 に直接アクセスし、ビデオコンテンツを取得してモデレーションを実行できます。

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

    go git clone --branch v2.2.11 github.com/alibabacloud-go/green-20220302/v2

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

    go get github.com/aliyun/aliyun-oss-go-sdk/oss
  2. Go 用 SDK を使用します。

    • ビデオモデレーションタスクを送信するためのサンプルコード

      package main
      
      import (
      	"encoding/json"
      	"fmt"
      	openapi "github.com/alibabacloud-go/darabonba-openapi/v2/client"
      	green20220302 "github.com/alibabacloud-go/green-20220302/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 からファイルを取得し、モデレーションを実行できます。サービスロールを作成するには、クラウド リソースアクセス承認にアクセスしてください。

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

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

    • ビデオモデレーションタスクを送信するためのサンプルコード

      package main
      
      import (
      	"encoding/json"
      	"fmt"
      	openapi "github.com/alibabacloud-go/darabonba-openapi/v2/client"
      	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 を介して動画ファイルを取得し、モデレーションを実行できます。

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

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

    • ビデオモデレーションタスクを送信するためのサンプルコード

      using Newtonsoft.Json;
      using Tea;
      
      namespace AlibabaCloud.SDK.Sample
      {
          public class Sample
          {
      
              /**
               * AccessKey ID と AccessKey シークレットを使用してクライアントを初期化します。
               * @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 に直接アクセスし、ビデオコンテンツを取得してモデレーションを実行できます。

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

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

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

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

    • ビデオモデレーションタスクを送信するためのサンプルコード

      // This file is auto-generated, don't edit it. Thanks.
      
      using System;
      using Newtonsoft.Json;
      using Aliyun.OSS;
      
      namespace AlibabaCloud.SDK.Green20220302
      {
          public class 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 にアクセスしてください。

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

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

    • ビデオモデレーションタスクを送信するためのサンプルコード

      using Newtonsoft.Json;
      using Tea;
      
      namespace AlibabaCloud.SDK.Sample
      {
          public class Sample
          {
      
              /**
               * AccessKey ID と AccessKey シークレットを使用してクライアントを初期化します。
               * @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 を介して動画ファイルを取得し、モデレーションを実行できます。

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

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

    • ビデオモデレーションタスクを送信するためのサンプルコード

      const Green20220302 = require('@alicloud/green20220302');
      const OpenApi = require('@alicloud/openapi-client');
      const Util = require('@alicloud/tea-util');
      // 注:インスタンス化されたクライアントは、接続の繰り返し確立を避けてモデレーションのパフォーマンスを向上させるために、できるだけ再利用することをお勧めします。
      // プロジェクトコードが漏洩した場合、AccessKey ペアが漏洩し、アカウント内のすべてのリソースのセキュリティが侵害される可能性があります。次のサンプルコードは参照用です。
      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 に直接アクセスし、ビデオコンテンツを取得してモデレーションを実行できます。

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

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

    • ビデオモデレーションタスクを送信するためのサンプルコード

      const RPCClient = require("@alicloud/pop-core");
      const OSS = require('ali-oss');
      const { v4: uuidv4 } = require('uuid');
      const path = require("path");
      
      // サービスが VPC にデプロイされているかどうかを指定します。
      var isVPC = false;
      // ファイルをアップロードするための一時トークンを取得します。
      var tokenDic = new Array();
      // ファイルをアップロードするクライアント。
      var ossClient;
      
      // ファイルをアップロードするクライアントを作成します。
      function createClient(accessKeyId, accessKeySecret, endpoint) {
          return new RPCClient({
              accessKeyId: accessKeyId,
              accessKeySecret: accessKeySecret,
              endpoint: endpoint,
              apiVersion: '2022-03-02',
              // HTTP プロキシを構成します。
              // httpProxy: "http://xx.xx.xx.xx:xxxx",
              // HTTPS プロキシを構成します。
              // httpsProxy: "https://username:password@xxx.xxx.xxx.xxx:9999",
          });
      }
      
      // ファイルをアップロードするクライアントを作成します。
      function getOssClient(tokenData, isVPC) {
          if (isVPC) {
              ossClient = new OSS({
                  accessKeyId: tokenData['AccessKeyId'],
                  accessKeySecret: tokenData['AccessKeySecret'],
                  stsToken: tokenData['SecurityToken'],
                  endpoint: tokenData['OssInternalEndPoint'],
                  bucket: tokenData['BucketName'],
              });
          } else {
              ossClient = new OSS({
                  accessKeyId: tokenData['AccessKeyId'],
                  accessKeySecret: tokenData['AccessKeySecret'],
                  stsToken: tokenData['SecurityToken'],
                  endpoint: tokenData['OssInternetEndPoint'],
                  bucket: tokenData['BucketName'],
              });
          }
      }
      
      // モデレーションタスクを送信します。
      async function invoke(accessKeyId, accessKeySecret, endpoint) {
          // 注:インスタンス化されたクライアントは、接続の繰り返し確立を避けてモデレーションのパフォーマンスを向上させるために、できるだけ再利用することをお勧めします。
          var client = createClient(accessKeyId, accessKeySecret, endpoint);
          var requestOption = {
              method: 'POST',
              formatParams: false,
          };
          // ローカルファイルのフルパス。例:D:\\localPath\\exampleFile.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 からファイルを取得し、モデレーションを実行できます。サービスロールを作成するには、クラウド リソースアクセス承認にアクセスしてください。

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

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

    • ビデオモデレーションタスクを送信するためのサンプルコード

      const Green20220302 = require('@alicloud/green20220302');
      const OpenApi = require('@alicloud/openapi-client');
      const Util = require('@alicloud/tea-util');
      // 注:インスタンス化されたクライアントは、接続の繰り返し確立を避けてモデレーションのパフォーマンスを向上させるために、できるだけ再利用することをお勧めします。
      // プロジェクトコードが漏洩した場合、AccessKey ペアが漏洩し、アカウント内のすべてのリソースのセキュリティが侵害される可能性があります。次のサンプルコードは参照用です。
      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 シークレットは厳重に管理する必要があります。

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

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

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

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

        説明

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

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

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

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

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

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

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

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

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

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

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

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

      説明

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

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

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

      説明

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