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

AI Guardrails:Video moderation enhanced 2.0 SDK

最終更新日:May 09, 2026

Video Moderation V2.0 は、SDK およびネイティブ HTTPS を介した呼び出しをサポートしています。署名検証や本文フォーマットの構築などの詳細な手順を省略できるため、統合には SDK の使用を推奨します。このトピックでは、Video Moderation V2.0 の統合方法について説明します。

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

Video Moderation 2.0 サービスを有効化するには、Content Moderation 2.0 の有効化 ページにアクセスします。API 呼び出しは、使用量に基づいて自動的に課金されます。詳細については、「課金」をご参照ください。

Video Moderation 2.0 サービスを有効化すると、デフォルトの課金方法は従量課金になります。システムはご利用の使用量に基づいて日次で課金します。サービスを呼び出さない場合は、料金は発生しません。

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

SDK を統合または API を呼び出す前に、RAM ユーザーに権限を付与する必要があります。Alibaba Cloud API は認証のために AccessKey を必要とします。詳細については、「AccessKey の取得」をご参照ください。

RAM ユーザーへの権限付与

  1. RAM コンソールに Alibaba Cloud アカウントでログインします。

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

  3. RAM ユーザーに AliyunYundunGreenWebFullAccess システムポリシーを付与します。このポリシーにより、Content Moderation へのフルアクセス権限が付与されます。詳細については、「RAM ユーザーへの権限付与」をご参照ください。

    これにより、RAM ユーザーは Content Moderation API を呼び出せるようになります。

ステップ 3:動画モデレーションの設定

動画モデレーションサービスは、以下のリージョンをサポートしています。

リージョン

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

内部エンドポイント

サポートされるサービス

シンガポール

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

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

videoDetection_global, videoDetectionByVL_global, liveStreamDetection_global, liveStreamDetectionByVL_global

米国 (バージニア)

https://green-cip.us-east-1.aliyuncs.com

https://green-cip-vpc.us-east-1.aliyuncs.com

videoDetection_global, liveStreamDetection_global

米国 (シリコンバレー)

https://green-cip.us-west-1.aliyuncs.com

Not available

ドイツ (フランクフルト)

green-cip.eu-central-1.aliyuncs.com

Not available

説明

他の言語の SDK サンプルコードについては、OpenAPI 開発者ポータルをご利用ください。オンラインデバッグツールを使用して API をテストし、対応する SDK サンプルコードを自動生成できます。動画モデレーション API のオンラインデバッガーにアクセスするには、以下のリンクをご利用ください。

Alibaba Cloud SDK は、環境変数 ALIBABA_CLOUD_ACCESS_KEY_ID および ALIBABA_CLOUD_ACCESS_KEY_SECRET を読み取ることで、デフォルトの認証情報を自動的に作成します。API オペレーションを呼び出す際、プログラムはこれらの変数から AccessKey を読み取り、自動的に認証を完了します。SDK サンプルコードを使用する前に、環境変数を設定する必要があります。詳細については、「認証情報の設定」をご参照ください。

API フィールドの詳細については、「動画ファイルモデレーション 2.0 API」および「ライブストリームモデレーション 2.0 API」をご参照ください。

Java SDK

Java 1.8 以降が必要です。

Java SDK ソースコードまたはJava SDK ソースコード (OSS パス)をご参照ください。

このサービスは、以下の 3 種類の動画検出をサポートしています。

公開可能な動画のモデレーション

シナリオ

Video Moderation 2.0 サービスは、パブリック URL からアクセス可能な動画をフェッチしてモデレーションできます。

  1. Maven プロジェクトで SDK を使用するには、pom.xml ファイルに以下の依存関係を追加します。

    <dependency>
      <groupId>com.aliyun</groupId>
      <artifactId>green20220302</artifactId>
      <version>3.2.3</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 オペレーションを呼び出す権限があります。API アクセスおよび日常的な運用管理 (O&M) には、RAM ユーザーの使用を推奨します。
               * 環境変数を取得する一般的な方法:
               * 方法 1:
               *     RAM ユーザーの AccessKey ID を取得:System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID");
               *     RAM ユーザーの AccessKey Secret を取得:System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET");
               * 方法 2:
               *     RAM ユーザーの AccessKey ID を取得:System.getProperty("ALIBABA_CLOUD_ACCESS_KEY_ID");
               *     RAM ユーザーの AccessKey Secret を取得:System.getProperty("ALIBABA_CLOUD_ACCESS_KEY_SECRET");
               */
              config.setAccessKeyId("RAM ユーザーの AccessKey ID は環境変数から取得することを推奨します。");
              config.setAccessKeySecret("RAM ユーザーの AccessKey Secret は環境変数から取得することを推奨します。");
              // 必要に応じてリージョンとエンドポイントを変更します。
              config.setRegionId("ap-southeast-1");
              config.setEndpoint("green-cip.ap-southeast-1.aliyuncs.com");
              // 読み取りタイムアウト。単位:ミリ秒 (ms)。
              config.setReadTimeout(6000);
              // 接続タイムアウト。単位:ミリ秒 (ms)。
              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("video moderation not success. code:" + code);
                      }
                  } else {
                      System.out.println("response not success. status:" + response.getStatusCode());
                  }
              } catch (Exception e) {
                  e.printStackTrace();
              }
          }
      }
    • 動画モデレーションタスクの結果を取得するサンプルコード

      import com.alibaba.fastjson.JSON;
      import com.alibaba.fastjson.JSONObject;
      import com.aliyun.green20220302.Client;
      import com.aliyun.green20220302.models.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 オペレーションを呼び出す権限があります。API アクセスおよび日常的な運用管理 (O&M) には、RAM ユーザーの使用を推奨します。
               * 環境変数を取得する一般的な方法:
               * 方法 1:
               *     RAM ユーザーの AccessKey ID を取得:System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID");
               *     RAM ユーザーの AccessKey Secret を取得:System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET");
               * 方法 2:
               *     RAM ユーザーの AccessKey ID を取得:System.getProperty("ALIBABA_CLOUD_ACCESS_KEY_ID");
               *     RAM ユーザーの AccessKey Secret を取得:System.getProperty("ALIBABA_CLOUD_ACCESS_KEY_SECRET");
               */
              config.setAccessKeyId("RAM ユーザーの AccessKey ID は環境変数から取得することを推奨します。");
              config.setAccessKeySecret("RAM ユーザーの AccessKey Secret は環境変数から取得することを推奨します。");
              // 必要に応じてリージョンとエンドポイントを変更します。
              config.setRegionId("ap-southeast-1");
              config.setEndpoint("green-cip.ap-southeast-1.aliyuncs.com");
              // 読み取りタイムアウト。単位:ミリ秒 (ms)。
              config.setReadTimeout(6000);
              // 接続タイムアウト。単位:ミリ秒 (ms)。
              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("audioResult = " + JSON.toJSONString(data.getAudioResult()));
                          System.out.println("frameResult = " + JSON.toJSONString(data.getFrameResult()));
                      } else {
                          System.out.println("video moderation result not success. code:" + result.getCode());
                      }
                  } else {
                      System.out.println("response not success. 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 オペレーションを呼び出す権限があります。API アクセスおよび日常的な運用管理 (O&M) には、RAM ユーザーの使用を推奨します。
               * 環境変数を取得する一般的な方法:
               * 方法 1:
               *     RAM ユーザーの AccessKey ID を取得:System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID");
               *     RAM ユーザーの AccessKey Secret を取得:System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET");
               * 方法 2:
               *     RAM ユーザーの AccessKey ID を取得:System.getProperty("ALIBABA_CLOUD_ACCESS_KEY_ID");
               *     RAM ユーザーの AccessKey Secret を取得:System.getProperty("ALIBABA_CLOUD_ACCESS_KEY_SECRET");
               */
              config.setAccessKeyId("RAM ユーザーの AccessKey ID は環境変数から取得することを推奨します。");
              config.setAccessKeySecret("RAM ユーザーの AccessKey Secret は環境変数から取得することを推奨します。");
              // 必要に応じてリージョンとエンドポイントを変更します。
              config.setRegionId("ap-southeast-1");
              config.setEndpoint("green-cip.ap-southeast-1.aliyuncs.com");
              // 読み取りタイムアウト。単位:ミリ秒 (ms)。
              config.setReadTimeout(6000);
              // 接続タイムアウト。単位:ミリ秒 (ms)。
              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("videoDetection_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("video moderation cancel not success. code:" + result.getCode());
                      }
                  } else {
                      System.out.println("response not success. status:" + response.getStatusCode());
                  }
              } catch (Exception e) {
                  e.printStackTrace();
              }
          }
      }

ローカル動画の検出

ユースケース

パブリック URL がないローカルマシンに保存されている動画をモデレーションするには、Content Moderation が提供する Object Storage Service (OSS) バケットにアップロードします。その後、Video Moderation 2.0 サービスが OSS から直接動画を取得してモデレーションを行います。

  1. Maven プロジェクトで SDK を使用するには、pom.xml ファイルに以下の依存関係を追加します。

    <dependency>
      <groupId>com.aliyun</groupId>
      <artifactId>green20220302</artifactId>
      <version>3.2.3</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;
      
          // ファイルアップロードトークン。エンドポイントをトークンにマッピングします。
          public static Map<String, DescribeUploadTokenResponseBody.DescribeUploadTokenResponseBodyData> tokenMap = new HashMap<>();
      
          // ファイルアップロードリクエスト用のクライアント。
          public static OSS ossClient = null;
      
          /**
           * リクエストクライアントを作成します。
           *
           * @param accessKeyId
           * @param accessKeySecret
           * @param endpoint
           * @return
           * @throws Exception
           */
          public static Client createClient(String accessKeyId, String accessKeySecret, String endpoint) throws Exception {
              Config config = new Config();
              config.setAccessKeyId(accessKeyId);
              config.setAccessKeySecret(accessKeySecret);
              // リージョンとエンドポイントを設定します。
              config.setEndpoint(endpoint);
              return new Client(config);
          }
      
          /**
           * ファイルアップロードリクエスト用のクライアントを作成します。
           *
           * @param tokenData
           * @param isVPC
           */
          public static void getOssClient(DescribeUploadTokenResponseBody.DescribeUploadTokenResponseBodyData tokenData, boolean isVPC) {
              // 注:パフォーマンス向上のため、クライアントインスタンスを再利用して新しい接続を作成しないようにしてください。
              if (isVPC) {
                  ossClient = new OSSClientBuilder().build(tokenData.ossInternalEndPoint, tokenData.getAccessKeyId(), tokenData.getAccessKeySecret(), tokenData.getSecurityToken());
              } else {
                  ossClient = new OSSClientBuilder().build(tokenData.ossInternetEndPoint, tokenData.getAccessKeyId(), tokenData.getAccessKeySecret(), tokenData.getSecurityToken());
              }
          }
      
          /**
           * ファイルをアップロードします。
           *
           * @param filePath
           * @param tokenData
           * @return
           * @throws Exception
           */
          public static String uploadFile(String filePath, DescribeUploadTokenResponseBody.DescribeUploadTokenResponseBodyData tokenData) throws Exception {
              String[] split = filePath.split("\\.");
              String objectName;
              if (split.length > 1) {
                  objectName = tokenData.getFileNamePrefix() + UUID.randomUUID() + "." + split[split.length - 1];
              } else {
                  objectName = tokenData.getFileNamePrefix() + UUID.randomUUID();
              }
              PutObjectRequest putObjectRequest = new PutObjectRequest(tokenData.getBucketName(), objectName, new File(filePath));
              ossClient.putObject(putObjectRequest);
              return objectName;
          }
      
          public static 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 オペレーションを呼び出す権限があります。セキュリティのため、API 呼び出しおよび日常的な運用管理 (O&M) には RAM ユーザーの使用を推奨します。
               * 環境変数を取得する一般的な方法:
               * 方法 1:
               *     RAM ユーザーの AccessKey ID を取得:System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID");
               *     RAM ユーザーの AccessKey Secret を取得:System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET");
               * 方法 2:
               *     RAM ユーザーの AccessKey ID を取得:System.getProperty("ALIBABA_CLOUD_ACCESS_KEY_ID");
               *     RAM ユーザーの AccessKey Secret を取得:System.getProperty("ALIBABA_CLOUD_ACCESS_KEY_SECRET");
               */
              String accessKeyId = "
    • 動画検出タスクの結果を取得するサンプルコード

      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 オペレーションを呼び出す権限があります。セキュリティのため、API 呼び出しおよび日常的な運用管理 (O&M) には RAM ユーザーの使用を推奨します。
               * 環境変数を取得する一般的な方法:
               * 方法 1:
               *     RAM ユーザーの AccessKey ID を取得:System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID");
               *     RAM ユーザーの AccessKey Secret を取得:System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET");
               * 方法 2:
               *     RAM ユーザーの AccessKey ID を取得:System.getProperty("ALIBABA_CLOUD_ACCESS_KEY_ID");
               *     RAM ユーザーの AccessKey Secret を取得:System.getProperty("ALIBABA_CLOUD_ACCESS_KEY_SECRET");
               */
              config.setAccessKeyId("
    • 動画検出タスクをキャンセルするサンプルコード

      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 オペレーションを呼び出す権限があります。セキュリティのため、API 呼び出しおよび日常的な運用管理 (O&M) には RAM ユーザーの使用を推奨します。
               * 環境変数を取得する一般的な方法:
               * 方法 1:
               *     RAM ユーザーの AccessKey ID を取得:System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID");
               *     RAM ユーザーの AccessKey Secret を取得:System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET");
               * 方法 2:
               *     RAM ユーザーの AccessKey ID を取得:System.getProperty("ALIBABA_CLOUD_ACCESS_KEY_ID");
               *     RAM ユーザーの AccessKey Secret を取得:System.getProperty("ALIBABA_CLOUD_ACCESS_KEY_SECRET");
               */
              config.setAccessKeyId("

OSS に保存された動画の分析

シナリオ

動画ファイルが OSS に保存されている場合、サービスロールを作成して Content Moderation サービスに OSS リソースへのアクセス権限を付与できます。これにより、video moderation V2.0 サービスは、このロールを使用して OSS からファイルを取得し、分析を行います。サービスロールを作成するには、クラウドリソースアクセス認可ページにアクセスします。

  1. SDK を Maven プロジェクトで使用するには、pom.xml に以下の依存関係を追加します。

    <dependency>
      <groupId>com.aliyun</groupId>
      <artifactId>green20220302</artifactId>
      <version>3.2.3</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 を呼び出す権限があります。セキュリティを向上させるため、API の呼び出しや日常的な運用管理 (O&M) には RAM ユーザーの使用を推奨します。
               * 環境変数を取得する一般的な方法:
               * 方法 1:
               *     RAM ユーザーの AccessKey ID を取得:System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID");
               *     RAM ユーザーの AccessKey Secret を取得:System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET");
               * 方法 2:
               *     RAM ユーザーの AccessKey ID を取得:System.getProperty("ALIBABA_CLOUD_ACCESS_KEY_ID");
               *     RAM ユーザーの AccessKey Secret を取得:System.getProperty("ALIBABA_CLOUD_ACCESS_KEY_SECRET");
               */
              config.setAccessKeyId("RAM ユーザーの AccessKey ID は環境変数から取得することを推奨します。");
              config.setAccessKeySecret("RAM ユーザーの AccessKey Secret は環境変数から取得することを推奨します。");
              // 実際の要件に基づいてリージョンとエンドポイントを変更します。
              config.setRegionId("ap-southeast-1");
              config.setEndpoint("green-cip.ap-southeast-1.aliyuncs.com");
              // 読み取りタイムアウト(ミリ秒単位)。
              config.setReadTimeout(6000);
              // 接続タイムアウト(ミリ秒単位)。
              config.setConnectTimeout(3000);
              // 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("video moderation not success. code:" + code);
                      }
                  } else {
                      System.out.println("response not success. status:" + response.getStatusCode());
                  }
              } catch (Exception e) {
                  e.printStackTrace();
              }
          }
      }
    • 動画検出タスクの結果を取得するサンプルコード

      import com.alibaba.fastjson.JSON;
      import com.alibaba.fastjson.JSONObject;
      import com.aliyun.green20220302.Client;
      import com.aliyun.green20220302.models.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 を呼び出す権限があります。セキュリティを向上させるため、API の呼び出しや日常的な運用管理 (O&M) には RAM ユーザーの使用を推奨します。
               * 環境変数を取得する一般的な方法:
               * 方法 1:
               *     RAM ユーザーの AccessKey ID を取得:System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID");
               *     RAM ユーザーの AccessKey Secret を取得:System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET");
               * 方法 2:
               *     RAM ユーザーの AccessKey ID を取得:System.getProperty("ALIBABA_CLOUD_ACCESS_KEY_ID");
               *     RAM ユーザーの AccessKey Secret を取得:System.getProperty("ALIBABA_CLOUD_ACCESS_KEY_SECRET");
               */
              config.setAccessKeyId("RAM ユーザーの AccessKey ID は環境変数から取得することを推奨します。");
              config.setAccessKeySecret("RAM ユーザーの AccessKey Secret は環境変数から取得することを推奨します。");
              // 実際の要件に基づいてリージョンとエンドポイントを変更します。
              config.setRegionId("ap-southeast-1");
              config.setEndpoint("green-cip.ap-southeast-1.aliyuncs.com");
              // 読み取りタイムアウト(ミリ秒単位)。
              config.setReadTimeout(6000);
              // 接続タイムアウト(ミリ秒単位)。
              config.setConnectTimeout(3000);
              // 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();
              // タスクを送信した際に返された taskId。
              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("audioResult = " + JSON.toJSONString(data.getAudioResult()));
                          System.out.println("frameResult = " + JSON.toJSONString(data.getFrameResult()));
                      } else {
                          System.out.println("video moderation result not success. code:" + result.getCode());
                      }
                  } else {
                      System.out.println("response not success. 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 を呼び出す権限があります。セキュリティを向上させるため、API の呼び出しや日常的な運用管理 (O&M) には RAM ユーザーの使用を推奨します。
               * 環境変数を取得する一般的な方法:
               * 方法 1:
               *     RAM ユーザーの AccessKey ID を取得:System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID");
               *     RAM ユーザーの AccessKey Secret を取得:System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET");
               * 方法 2:
               *     RAM ユーザーの AccessKey ID を取得:System.getProperty("ALIBABA_CLOUD_ACCESS_KEY_ID");
               *     RAM ユーザーの AccessKey Secret を取得:System.getProperty("ALIBABA_CLOUD_ACCESS_KEY_SECRET");
               */
              config.setAccessKeyId("RAM ユーザーの AccessKey ID は環境変数から取得することを推奨します。");
              config.setAccessKeySecret("RAM ユーザーの AccessKey Secret は環境変数から取得することを推奨します。");
              // 実際の要件に基づいてリージョンとエンドポイントを変更します。
              config.setRegionId("ap-southeast-1");
              config.setEndpoint("green-cip.ap-southeast-1.aliyuncs.com");
              // 読み取りタイムアウト(ミリ秒単位)。
              config.setReadTimeout(6000);
              // 接続タイムアウト(ミリ秒単位)。
              config.setConnectTimeout(3000);
              // 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();
              // タスクを送信した際に返された taskId。
              serviceParameters.put("taskId", "vi_f_O5z5iaIis3iI0X2oNYj7qa-1x****");
      
              VideoModerationCancelRequest videoModerationCancelRequest = new VideoModerationCancelRequest();
              
              videoModerationCancelRequest.setService("videoDetection_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("video moderation cancel not success. code:" + result.getCode());
                      }
                  } else {
                      System.out.println("response not success. status:" + response.getStatusCode());
                  }
              } catch (Exception e) {
                  e.printStackTrace();
              }
          }
      }

Python SDK

この SDK には Python 3.6 以降が必要です。

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

この SDK は、以下の 3 種類の動画モデレーションをサポートしています。

URL による動画

シナリオ

動画がパブリック URL からアクセス可能な場合、video moderation 2.0 サービスはその URL から動画を取得し、モデレーションを行います。

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

    pip install alibabacloud_green20220302==3.2.3
  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 オペレーションに使用できます。ただし、API アクセスおよび日常的な運用管理 (O&M) には RAM ユーザーの使用を推奨します。
                  # プロジェクトコード内に AccessKey ID または AccessKey Secret をハードコードしないことを強く推奨します。そうしないと、AccessKey ペアが漏洩し、すべてのリソースのセキュリティが侵害される可能性があります。
                  # 環境変数を取得する方法については、以下のサンプルコードをご参照ください:
                  # RAM ユーザーの AccessKey ID を取得:os.environ['ALIBABA_CLOUD_ACCESS_KEY_ID']
                  # RAM ユーザーの AccessKey secret を取得:os.environ['ALIBABA_CLOUD_ACCESS_KEY_SECRET']
                  access_key_id='RAM ユーザーの AccessKey ID は環境変数から取得してください。',
                  access_key_secret='RAM ユーザーの AccessKey Secret は環境変数から取得してください。',
                  # 接続タイムアウト(ミリ秒単位)。
                  connect_timeout=3000,
                  # 読み取りタイムアウト(ミリ秒単位)。
                  read_timeout=6000,
                  # デプロイメントに基づいてリージョンとエンドポイントを変更します。
                  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 オペレーションに使用できます。ただし、API アクセスおよび日常的な運用管理 (O&M) には RAM ユーザーの使用を推奨します。
                  # プロジェクトコード内に AccessKey ID または AccessKey Secret をハードコードしないことを強く推奨します。そうしないと、AccessKey ペアが漏洩し、すべてのリソースのセキュリティが侵害される可能性があります。
                  # 環境変数を取得する方法については、以下のサンプルコードをご参照ください:
                  # RAM ユーザーの AccessKey ID を取得:os.environ['ALIBABA_CLOUD_ACCESS_KEY_ID']
                  # RAM ユーザーの AccessKey secret を取得:os.environ['ALIBABA_CLOUD_ACCESS_KEY_SECRET']
                  access_key_id='RAM ユーザーの AccessKey ID は環境変数から取得してください。',
                  access_key_secret='RAM ユーザーの AccessKey Secret は環境変数から取得してください。',
                  # 接続タイムアウト(ミリ秒単位)。
                  connect_timeout=3000,
                  # 読み取りタイムアウト(ミリ秒単位)。
                  read_timeout=6000,
                  # デプロイメントに基づいてリージョンとエンドポイントを変更します。
                  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 オペレーションに使用できます。ただし、API アクセスおよび日常的な運用管理 (O&M) には RAM ユーザーの使用を推奨します。
          # プロジェクトコード内に AccessKey ID または AccessKey Secret をハードコードしないことを強く推奨します。そうしないと、AccessKey ペアが漏洩し、すべてのリソースのセキュリティが侵害される可能性があります。
          # 環境変数を取得する方法については、以下のサンプルコードをご参照ください:
          # RAM ユーザーの AccessKey ID を取得:os.environ['ALIBABA_CLOUD_ACCESS_KEY_ID']
          # RAM ユーザーの AccessKey secret を取得:os.environ['ALIBABA_CLOUD_ACCESS_KEY_SECRET']
          access_key_id='RAM ユーザーの AccessKey ID は環境変数から取得してください。',
          access_key_secret='RAM ユーザーの AccessKey Secret は環境変数から取得してください。',
          # 接続タイムアウト(ミリ秒単位)。
          connect_timeout=10000,
          # 読み取りタイムアウト(ミリ秒単位)。
          read_timeout=3000,
          region_id='ap-southeast-1',
          endpoint='green-cip.ap-southeast-1.aliyuncs.com'
      )
      
      clt = Client(config)
      
      # タスクを送信後に返されたタスク ID。
      serviceParameters = {
          "taskId": 'vi_f_O5z5iaIis3iI0X2oNYj7qa-1x****'
      }
      videoModerationCancelRequest = models.VideoModerationCancelRequest(
          # モデレーションタイプ
          service='videoDetection_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)

ローカル動画

シナリオ

モデレーション対象の動画がローカルファイルであり、パブリック URL がない場合は、Content Moderation が提供する OSS バケットにアップロードします。その後、video moderation 2.0 サービスが OSS から動画を取得してモデレーションを行います。

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

    pip install alibabacloud_green20220302==3.2.3

    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 オペレーションに使用できます。ただし、API アクセスおよび日常的な運用管理 (O&M) には RAM ユーザーの使用を推奨します。
          # プロジェクトコード内に AccessKey ID または AccessKey Secret をハードコードしないことを強く推奨します。そうしないと、AccessKey ペアが漏洩し、すべてのリソースのセキュリティが侵害される可能性があります。
          # 環境変数を取得する方法については、以下のサンプルコードをご参照ください:
          # RAM ユーザーの AccessKey ID を取得:os.environ['ALIBABA_CLOUD_ACCESS_KEY_ID']
          # RAM ユーザーの AccessKey secret を取得:os.environ['ALIBABA_CLOUD_ACCESS_KEY_SECRET']
          access_key_id='RAM ユーザーの AccessKey ID は環境変数から取得してください。',
          access_key_secret='RAM ユーザーの AccessKey Secret は環境変数から取得してください。',
          # 接続タイムアウト(ミリ秒単位)。
          connect_timeout=10000,
          # 読み取りタイムアウト(ミリ秒単位)。
          read_timeout=10000,
          # デプロイメントに基づいてリージョンとエンドポイントを変更します。
          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)
          )
      
          # RuntimeOptions インスタンスを作成し、実行時パラメーターを設定します。
          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 = '/path/to/your/video.mp4'
          # サービスが VPC にデプロイされているかどうかを指定します。
          is_vpc = False  # サービスが VPC にデプロイされている場合は 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 オペレーションに使用できます。ただし、API アクセスおよび日常的な運用管理 (O&M) には RAM ユーザーの使用を推奨します。
                  # プロジェクトコード内に AccessKey ID または AccessKey Secret をハードコードしないことを強く推奨します。そうしないと、AccessKey ペアが漏洩し、すべてのリソースのセキュリティが侵害される可能性があります。
                  # 環境変数を取得する方法については、以下のサンプルコードをご参照ください:
                  # RAM ユーザーの AccessKey ID を取得:os.environ['ALIBABA_CLOUD_ACCESS_KEY_ID']
                  # RAM ユーザーの AccessKey secret を取得:os.environ['ALIBABA_CLOUD_ACCESS_KEY_SECRET']
                  access_key_id='RAM ユーザーの AccessKey ID は環境変数から取得してください。',
                  access_key_secret='RAM ユーザーの AccessKey Secret は環境変数から取得してください。',
                  # 接続タイムアウト(ミリ秒単位)。
                  connect_timeout=3000,
                  # 読み取りタイムアウト(ミリ秒単位)。
                  read_timeout=6000,
                  # デプロイメントに基づいてリージョンとエンドポイントを変更します。
                  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 オペレーションに使用できます。ただし、API アクセスおよび日常的な運用管理 (O&M) には RAM ユーザーの使用を推奨します。
          # プロジェクトコード内に AccessKey ID または AccessKey Secret をハードコードしないことを強く推奨します。そうしないと、AccessKey ペアが漏洩し、すべてのリソースのセキュリティが侵害される可能性があります。
          # 環境変数を取得する方法については、以下のサンプルコードをご参照ください:
          # RAM ユーザーの AccessKey ID を取得:os.environ['ALIBABA_CLOUD_ACCESS_KEY_ID']
          # RAM ユーザーの AccessKey secret を取得:os.environ['ALIBABA_CLOUD_ACCESS_KEY_SECRET']
          access_key_id='RAM ユーザーの AccessKey ID は環境変数から取得してください。',
          access_key_secret='RAM ユーザーの AccessKey Secret は環境変数から取得してください。',
          # 接続タイムアウト(ミリ秒単位)。
          connect_timeout=10000,
          # 読み取りタイムアウト(ミリ秒単位)。
          read_timeout=3000,
          region_id='ap-southeast-1',
          endpoint='green-cip.ap-southeast-1.aliyuncs.com'
      )
      
      clt = Client(config)
      
      # タスクを送信後に返されたタスク ID。
      serviceParameters = {
          "taskId": 'vi_f_O5z5iaIis3iI0X2oNYj7qa-1x****'
      }
      videoModerationCancelRequest = models.VideoModerationCancelRequest(
          # モデレーションタイプ
          service='videoDetection_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 動画

シナリオ

モデレーション対象の動画がすでに Alibaba Cloud OSS に保存されている場合、サービスロールを作成して Content Moderation に OSS リソースへのアクセス権限を付与できます。その後、video moderation 2.0 サービスがこのロールを使用して OSS からファイルを取得し、モデレーションを行います。サービスロールを作成するには、クラウドリソースアクセス認可ページにアクセスします。

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

    pip install alibabacloud_green20220302==3.2.3
  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 オペレーションに使用できます。ただし、API アクセスおよび日常的な運用管理 (O&M) には RAM ユーザーの使用を推奨します。
                  # プロジェクトコード内に AccessKey ID または AccessKey Secret をハードコードしないことを強く推奨します。そうしないと、AccessKey ペアが漏洩し、すべてのリソースのセキュリティが侵害される可能性があります。
                  # 環境変数を取得する方法については、以下のサンプルコードをご参照ください:
                  # RAM ユーザーの AccessKey ID を取得:os.environ['ALIBABA_CLOUD_ACCESS_KEY_ID']
                  # RAM ユーザーの AccessKey secret を取得:os.environ['ALIBABA_CLOUD_ACCESS_KEY_SECRET']
                  access_key_id='RAM ユーザーの AccessKey ID は環境変数から取得してください。',
                  access_key_secret='RAM ユーザーの AccessKey Secret は環境変数から取得してください。',
                  # 接続タイムアウト(ミリ秒単位)。
                  connect_timeout=3000,
                  # 読み取りタイムアウト(ミリ秒単位)。
                  read_timeout=6000,
                  # デプロイメントに基づいてリージョンとエンドポイントを変更します。
                  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 オペレーションに使用できます。ただし、API アクセスおよび日常的な運用管理 (O&M) には RAM ユーザーの使用を推奨します。
                  # プロジェクトコード内に AccessKey ID または AccessKey Secret をハードコードしないことを強く推奨します。そうしないと、AccessKey ペアが漏洩し、すべてのリソースのセキュリティが侵害される可能性があります。
                  # 環境変数を取得する方法については、以下のサンプルコードをご参照ください:
                  # RAM ユーザーの AccessKey ID を取得:os.environ['ALIBABA_CLOUD_ACCESS_KEY_ID']
                  # RAM ユーザーの AccessKey secret を取得:os.environ['ALIBABA_CLOUD_ACCESS_KEY_SECRET']
                  access_key_id='RAM ユーザーの AccessKey ID は環境変数から取得してください。',
                  access_key_secret='RAM ユーザーの AccessKey Secret は環境変数から取得してください。',
                  # 接続タイムアウト(ミリ秒単位)。
                  connect_timeout=3000,
                  # 読み取りタイムアウト(ミリ秒単位)。
                  read_timeout=6000,
                  # デプロイメントに基づいてリージョンとエンドポイントを変更します。
                  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 オペレーションに使用できます。ただし、API アクセスおよび日常的な運用管理 (O&M) には RAM ユーザーの使用を推奨します。
          # プロジェクトコード内に AccessKey ID または AccessKey Secret をハードコードしないことを強く推奨します。そうしないと、AccessKey ペアが漏洩し、すべてのリソースのセキュリティが侵害される可能性があります。
          # 環境変数を取得する方法については、以下のサンプルコードをご参照ください:
          # RAM ユーザーの AccessKey ID を取得:os.environ['ALIBABA_CLOUD_ACCESS_KEY_ID']
          # RAM ユーザーの AccessKey secret を取得:os.environ['ALIBABA_CLOUD_ACCESS_KEY_SECRET']
          access_key_id='RAM ユーザーの AccessKey ID は環境変数から取得してください。',
          access_key_secret='RAM ユーザーの AccessKey Secret は環境変数から取得してください。',
          # 接続タイムアウト(ミリ秒単位)。
          connect_timeout=10000,
          # 読み取りタイムアウト(ミリ秒単位)。
          read_timeout=3000,
          region_id='ap-southeast-1',
          endpoint='green-cip.ap-southeast-1.aliyuncs.com'
      )
      
      clt = Client(config)
      
      # タスクを送信後に返されたタスク ID。
      serviceParameters = {
          "taskId": 'vi_f_O5z5iaIis3iI0X2oNYj7qa-1x****'
      }
      videoModerationCancelRequest = models.VideoModerationCancelRequest(
          # モデレーションタイプ
          service='videoDetection_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 種類の動画検出をサポートしています。

公開動画のモデレーション

ユースケース

動画がパブリック URL からアクセス可能な場合、Video Moderation 2.0 サービスはその URL から動画をフェッチしてモデレーションできます。

  1. 必要な依存関係を追加するには、以下のコマンドを実行します。

    composer require alibabacloud/green-20220302 3.2.3
  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 オペレーションを呼び出す権限があります。セキュリティを向上させるため、API アクセスおよび日常的な運用管理 (O&M) には RAM ユーザーの使用を推奨します。
           * キーの漏洩およびそれに伴うアカウントリソースの侵害を防ぐため、コード内に AccessKey ID または AccessKey Secret をハードコードしないでください。
           * 環境変数からキーを読み込むことを推奨します:
           * RAM ユーザーの AccessKey ID を取得:getenv("ALIBABA_CLOUD_ACCESS_KEY_ID");
           * RAM ユーザーの AccessKey Secret を取得:getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET");
           */
          "accessKeyId" => 'RAM ユーザーの AccessKey ID は環境変数から取得することを推奨します。',
          "accessKeySecret" => 'RAM ユーザーの AccessKey Secret は環境変数から取得することを推奨します。',
          // 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、動画ライブストリーム検出の場合は 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("video moderation not success. 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 オペレーションを呼び出す権限があります。セキュリティを向上させるため、API アクセスおよび日常的な運用管理 (O&M) には RAM ユーザーの使用を推奨します。
           * キーの漏洩およびそれに伴うアカウントリソースの侵害を防ぐため、コード内に AccessKey ID または AccessKey Secret をハードコードしないでください。
           * 環境変数からキーを読み込むことを推奨します:
           * RAM ユーザーの AccessKey ID を取得:getenv("ALIBABA_CLOUD_ACCESS_KEY_ID");
           * RAM ユーザーの AccessKey Secret を取得:getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET");
           */
          "accessKeyId" => 'RAM ユーザーの AccessKey ID は環境変数から取得することを推奨します。',
          "accessKeySecret" => 'RAM ユーザーの AccessKey Secret は環境変数から取得することを推奨します。',
          // 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、動画ライブストリーム検出の場合は 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("processing video moderation. code:" . $body->code);
              return;
          }
          if (200 != $body->code) {
              print_r("video moderation result not success. 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("audioResult = " . json_encode($data->audioResult) . "\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 オペレーションを呼び出す権限があります。セキュリティを向上させるため、API アクセスおよび日常的な運用管理 (O&M) には RAM ユーザーの使用を推奨します。
           * キーの漏洩およびそれに伴うアカウントリソースの侵害を防ぐため、コード内に AccessKey ID または AccessKey Secret をハードコードしないでください。
           * 環境変数からキーを読み込むことを推奨します:
           * RAM ユーザーの AccessKey ID を取得:getenv("ALIBABA_CLOUD_ACCESS_KEY_ID");
           * RAM ユーザーの AccessKey Secret を取得:getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET");
           */
          "accessKeyId" => 'RAM ユーザーの AccessKey ID は環境変数から取得することを推奨します。',
          "accessKeySecret" => 'RAM ユーザーの AccessKey Secret は環境変数から取得することを推奨します。',
          // 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_global、動画ライブストリーム検出の場合は liveStreamDetection_global。
      $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("video moderation cancel not success. code:" . $body->code);
          }
        } else {
          print_r("response not success. code:" . $response->statusCode);
        }
      } catch (TeaUnableRetryError $e) {
        var_dump($e->getMessage());
        var_dump($e->getErrorInfo());
        var_dump($e->getLastException());
        var_dump($e->getLastRequest());
      }

ローカル動画のモデレーション

ユースケース

パブリック URL がないローカルに保存されている動画をモデレーションするには、Object Storage Service (OSS) バケットにアップロードします。その後、Video Moderation V2.0 サービスが OSS から動画を取得してモデレーションを行います。

  1. 必要な依存関係をインストールするには、以下のコマンドを実行します。

    composer require alibabacloud/green-20220302 3.2.3

    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 $filePath
       * @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 オペレーションを呼び出す権限があります。API アクセスおよび日常的な運用管理 (O&M) には RAM ユーザーの使用を推奨します。
      * AccessKey ID または AccessKey Secret をコード内に保存しないでください。そうしないと、AccessKey ペアが漏洩し、アカウント内のすべてのリソースが侵害される可能性があります。
      * 環境変数を取得するには:
      * RAM ユーザーの AccessKey ID を取得:getenv("ALIBABA_CLOUD_ACCESS_KEY_ID");
      * RAM ユーザーの AccessKey secret を取得:getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET");
      */
      $accessKeyId = 'RAM ユーザーの AccessKey ID は環境変数から取得することを推奨します。';
      $accessKeySecret = 'RAM ユーザーの AccessKey Secret は環境変数から取得することを推奨します。';
      // 環境に基づいてリージョンとエンドポイントを変更します。
      $endpoint = "green-cip.ap-southeast-1.aliyuncs.com";
      
      try {
          $response = invoke($accessKeyId, $accessKeySecret, $endpoint);
          print_r(json_encode($response->body, JSON_UNESCAPED_UNICODE));
      } catch (Exception $e) {
          var_dump($e->getMessage());
          var_dump($e->getErrorInfo());
          var_dump($e->getLastException());
          var_dump($e->getLastRequest());
      }
    • 動画モデレーションタスクの結果を取得するサンプルコード

      <?php
      require('vendor/autoload.php');
      
      use AlibabaCloud\SDK\Green\V20220302\Models\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 オペレーションを呼び出す権限があります。API アクセスおよび日常的な運用管理 (O&M) には RAM ユーザーの使用を推奨します。
           * AccessKey ID または AccessKey Secret をコード内に保存しないでください。そうしないと、AccessKey ペアが漏洩し、アカウント内のすべてのリソースが侵害される可能性があります。
           * 環境変数を取得するには:
           * RAM ユーザーの AccessKey ID を取得:getenv("ALIBABA_CLOUD_ACCESS_KEY_ID");
           * RAM ユーザーの AccessKey secret を取得:getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET");
           */
          "accessKeyId" => 'RAM ユーザーの AccessKey ID は環境変数から取得することを推奨します。',
          "accessKeySecret" => 'RAM ユーザーの AccessKey Secret は環境変数から取得することを推奨します。',
          // 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'、ライブ動画ストリームモデレーションの場合は 'liveStreamDetection'。
      $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->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("動画モデレーションはまだ処理中です。コード: " . $body->code);
              return;
          }
          if (200 != $body->code) {
              print_r("動画モデレーション結果の取得に失敗しました。コード: " . $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("audioResult = " . json_encode($data->audioResult) . "\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 オペレーションを呼び出す権限があります。API アクセスおよび日常的な運用管理 (O&M) には RAM ユーザーの使用を推奨します。
           * AccessKey ID または AccessKey Secret をコード内に保存しないでください。そうしないと、AccessKey ペアが漏洩し、アカウント内のすべてのリソースが侵害される可能性があります。
           * 環境変数を取得するには:
           * RAM ユーザーの AccessKey ID を取得:getenv("ALIBABA_CLOUD_ACCESS_KEY_ID");
           * RAM ユーザーの AccessKey secret を取得:getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET");
           */
          "accessKeyId" => 'RAM ユーザーの AccessKey ID は環境変数から取得することを推奨します。',
          "accessKeySecret" => 'RAM ユーザーの AccessKey Secret は環境変数から取得することを推奨します。',
          // 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_global'、ライブ動画ストリームモデレーションの場合は 'liveStreamDetection'。
      $request->service = "videoDetection_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("動画モデレーションのキャンセルに失敗しました。コード: " . $body->code);
          }
        } else {
          print_r("リクエストが失敗しました。コード: " . $response->statusCode);
        }
      } catch (TeaUnableRetryError $e) {
        var_dump($e->getMessage());
        var_dump($e->getErrorInfo());
        var_dump($e->getLastException());
        var_dump($e->getLastRequest());
      }

OSS 動画のモデレーション

ユースケース

Object Storage Service (OSS) にすでに保存されている動画ファイルをモデレーションするには、サービスロールを作成して Content Moderation に OSS へのアクセス権限を付与します。その後、video moderation 2.0 サービスがこのサービスロールを使用して OSS からファイルを取得し、モデレーションを行います。クラウドリソースアクセス認可ページでサービスロールを作成します。

  1. 必要な依存関係を追加するには、以下のコマンドを実行します。

    composer require alibabacloud/green-20220302 3.2.3
  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 オペレーションを呼び出す権限があります。API アクセスおよび日常的な運用管理 (O&M) には RAM ユーザーの使用を推奨します。
           * AccessKey ID または AccessKey Secret をコード内にハードコードしないことを強く推奨します。そうしないと、AccessKey ペアが漏洩し、アカウント内のすべてのリソースが侵害される可能性があります。
           * 環境変数を取得する一般的な方法:
           * RAM ユーザーの AccessKey ID を取得:getenv("ALIBABA_CLOUD_ACCESS_KEY_ID");
           * RAM ユーザーの AccessKey Secret を取得:getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET");
           */
          "accessKeyId" => 'RAM ユーザーの AccessKey ID を環境変数から取得してください。',
          "accessKeySecret" => 'RAM ユーザーの AccessKey Secret を環境変数から取得してください。',
          // 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、ライブストリーム検出の場合は liveStreamDetection_global。
      $request->service = "videoDetection_global";
      $serviceParameters = array(
                // モデレーション対象の OSS オブジェクト。例:video/001.mp4
              'ossObjectName' => 'video/001.mp4',
              // OSS バケットのリージョン。例:ap-southeast-1
              'ossRegionId' => 'ap-southeast-1',
                // バケットの名前。例:bucket001
              'ossBucketName' => 'bucket001',
              // 一意のデータ識別子。
              '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("video moderation not success. 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 オペレーションを呼び出す権限があります。API アクセスおよび日常的な運用管理 (O&M) には RAM ユーザーの使用を推奨します。
           * AccessKey ID または AccessKey Secret をコード内にハードコードしないことを強く推奨します。そうしないと、AccessKey ペアが漏洩し、アカウント内のすべてのリソースが侵害される可能性があります。
           * 環境変数を取得する一般的な方法:
           * RAM ユーザーの AccessKey ID を取得:getenv("ALIBABA_CLOUD_ACCESS_KEY_ID");
           * RAM ユーザーの AccessKey Secret を取得:getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET");
           */
          "accessKeyId" => 'RAM ユーザーの AccessKey ID を環境変数から取得してください。',
          "accessKeySecret" => 'RAM ユーザーの AccessKey Secret を環境変数から取得してください。',
          // 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、ライブストリーム検出の場合は 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("processing video moderation. code:" . $body->code);
              return;
          }
          if (200 != $body->code) {
              print_r("video moderation result not success. 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("audioResult = " . json_encode($data->audioResult) . "\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 オペレーションを呼び出す権限があります。API アクセスおよび日常的な運用管理 (O&M) には RAM ユーザーの使用を推奨します。
           * AccessKey ID または AccessKey Secret をコード内にハードコードしないことを強く推奨します。そうしないと、AccessKey ペアが漏洩し、アカウント内のすべてのリソースが侵害される可能性があります。
           * 環境変数を取得する一般的な方法:
           * RAM ユーザーの AccessKey ID を取得:getenv("ALIBABA_CLOUD_ACCESS_KEY_ID");
           * RAM ユーザーの AccessKey Secret を取得:getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET");
           */
          "accessKeyId" => 'RAM ユーザーの AccessKey ID を環境変数から取得してください。',
          "accessKeySecret" => 'RAM ユーザーの AccessKey Secret を環境変数から取得してください。',
          // 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_global、ライブストリーム検出の場合は liveStreamDetection_global。
      $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("video moderation cancel not success. code:" . $body->code);
          }
        } else {
          print_r("response not success. code:" . $response->statusCode);
        }
      } catch (TeaUnableRetryError $e) {
        var_dump($e->getMessage());
        var_dump($e->getErrorInfo());
        var_dump($e->getLastException());
        var_dump($e->getLastRequest());
      }

Go SDK

以下の 3 種類の動画検出がサポートされています。

公開可能な動画のモデレーション

ユースケース

動画がパブリック URL からアクセス可能な場合、video moderation 2.0 サービスはその URL から動画をフェッチしてモデレーションできます。

  1. 必要な依存関係を追加するには、以下のコマンドを実行します。

    go get github.com/alibabacloud-go/green-20220302/v3
  2. Go SDK を統合します。

    • 動画のモデレーションタスクを送信する

      package main
      
      import (
          "encoding/json"
          "fmt"
          openapi "github.com/alibabacloud-go/darabonba-openapi/v2/client"
          green20220302 "github.com/alibabacloud-go/green-20220302/v3/client"
          util "github.com/alibabacloud-go/tea-utils/v2/service"
          "github.com/alibabacloud-go/tea/tea"
          "net/http"
      )
      
      func main() {
          // コード内に AccessKey をハードコードするとセキュリティリスクがあります。このサンプルコードはデモンストレーション目的のみです。セキュリティを強化するには、STS などのより安全な方法を使用して認証情報を管理することを推奨します。
          config := &openapi.Config{
              /**
               * アカウントの AccessKey ペアは、すべての API オペレーションへのフルアクセス権限を付与します。セキュリティを向上させるため、API アクセスおよび日常的な運用管理 (O&M) には RAM ユーザーを使用してください。
               * AccessKey ID および AccessKey Secret をコード内にハードコードしないことを強く推奨します。これはセキュリティリスクにつながる可能性があります。
               * より安全な代替方法として、環境変数から認証情報を読み込むことができます。例:
               * os.Getenv("ALIBABA_CLOUD_ACCESS_KEY_ID")
               * os.Getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET")
               */
              AccessKeyId: tea.String("環境変数から AccessKey ID を取得してください。"),
              AccessKeySecret: tea.String("環境変数から AccessKey secret を取得してください。"),
              // 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 秒です。`ReadTimeout` 例外を回避するには、クライアントの `ReadTimeout` を 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("video moderation not success. code:%d\n", *body.Code)
              return
          }
          
          data := body.Data
          fmt.Printf("video moderation 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/v3/client"
      	util "github.com/alibabacloud-go/tea-utils/v2/service"
      	"github.com/alibabacloud-go/tea/tea"
      	"net/http"
      )
      
      func main() {
      	// コード内に AccessKey をハードコードするとセキュリティリスクがあります。このサンプルコードはデモンストレーション目的のみです。セキュリティを強化するには、STS などのより安全な方法を使用して認証情報を管理することを推奨します。
          config := &openapi.Config{
              /**
               * アカウントの AccessKey ペアは、すべての API オペレーションへのフルアクセス権限を付与します。セキュリティを向上させるため、API アクセスおよび日常的な運用管理 (O&M) には RAM ユーザーを使用してください。
               * AccessKey ID および AccessKey Secret をコード内にハードコードしないことを強く推奨します。これはセキュリティリスクにつながる可能性があります。
               * より安全な代替方法として、環境変数から認証情報を読み込むことができます。例:
               * os.Getenv("ALIBABA_CLOUD_ACCESS_KEY_ID")
               * os.Getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET")
               */
              AccessKeyId: tea.String("環境変数から AccessKey ID を取得してください。"),
              AccessKeySecret: tea.String("環境変数から AccessKey secret を取得してください。"),
              // 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 秒です。`ReadTimeout` 例外を回避するには、クライアントの `ReadTimeout` を 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("processing video moderation. code:%d\n", *body.Code)
      		return
      	}
      	if *body.Code != http.StatusOK {
      		fmt.Printf("video moderation result not success. code:%d\n", *body.Code)
      		return
      	}
      
      	data := body.Data
          fmt.Printf("video moderation result:%s\n", data)
      	fmt.Printf("video moderation result audioResult:%s\n", data.AudioResult)
      	fmt.Printf("video moderation 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/v3/client"
          util "github.com/alibabacloud-go/tea-utils/v2/service"
          "github.com/alibabacloud-go/tea/tea"
          "net/http"
      )
      
      func main() {
      	// コード内に AccessKey をハードコードするとセキュリティリスクがあります。このサンプルコードはデモンストレーション目的のみです。セキュリティを強化するには、STS などのより安全な方法を使用して認証情報を管理することを推奨します。
          config := &openapi.Config{
              /**
               * アカウントの AccessKey ペアは、すべての API オペレーションへのフルアクセス権限を付与します。セキュリティを向上させるため、API アクセスおよび日常的な運用管理 (O&M) には RAM ユーザーを使用してください。
               * AccessKey ID および AccessKey Secret をコード内にハードコードしないことを強く推奨します。これはセキュリティリスクにつながる可能性があります。
               * より安全な代替方法として、環境変数から認証情報を読み込むことができます。例:
               * os.Getenv("ALIBABA_CLOUD_ACCESS_KEY_ID")
               * os.Getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET")
               */
              AccessKeyId: tea.String("環境変数から AccessKey ID を取得してください。"),
              AccessKeySecret: tea.String("環境変数から AccessKey secret を取得してください。"),
              // 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 秒です。`ReadTimeout` 例外を回避するには、クライアントの `ReadTimeout` を 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("videoDetection_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("video moderation cancel not success. code:%d\n", *body.Code)
          }
      }

ローカル動画のモデレーション

シナリオ

モデレーション対象の動画がローカルマシンに保存されており、パブリックにアクセス可能なリンクがない場合、Content Moderation が提供する Object Storage Service (OSS) バケットに動画をアップロードできます。その後、Video Moderation V2.0 サービスが OSS に直接アクセスして動画コンテンツを取得し、モデレーションを実行します。

  1. Content Moderation SDK の依存関係をインストールするには、以下のコマンドを実行します。

    go get github.com/alibabacloud-go/green-20220302/v3

    OSS SDK の依存関係をインストールするには、以下のコマンドを実行します。

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

    • 動画モデレーションタスクを送信するサンプルコード

      package main
      
      import (
          "encoding/json"
          "fmt"
          openapi "github.com/alibabacloud-go/darabonba-openapi/v2/client"
          green20220302 "github.com/alibabacloud-go/green-20220302/v3/client"
          util "github.com/alibabacloud-go/tea-utils/v2/service"
          "github.com/alibabacloud-go/tea/tea"
          "github.com/aliyun/aliyun-oss-go-sdk/oss"
          "github.com/google/uuid"
          "net/http"
          "os"
          "strings"
          "time"
      )
      // ファイルアップロード用のトークン。
      var TokenMap =make(map[string]*green20220302.DescribeUploadTokenResponseBodyData)
      // ファイルアップロード用のクライアント。
      var Bucket *oss.Bucket
      // サービスが VPC にデプロイされているかどうかを指定します。
      var isVPC = false
      // API リクエストを送信するためのクライアントを作成します。
      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);
      }
      
      // ファイルアップロード用の OSS クライアントを作成します。
      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
          }
          // ランタイムオプションを設定します。これらは現在のリクエストにのみ適用されます。
          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 アクセスには RAM ユーザーを使用することを推奨します。
           * コード内に AccessKey ID と AccessKey Secret をハードコードしないでください。AccessKey ペアが漏洩すると、アカウント内のすべてのリソースのセキュリティが損なわれます。
           * 認証情報は環境変数から取得できます:
           * os.Getenv("ALIBABA_CLOUD_ACCESS_KEY_ID")
           * os.Getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET")
           */
          var accessKeyId= "We recommend that you obtain the AccessKey ID of a RAM user from an environment variable.";
          var accessKeySecret= "We recommend that you obtain the AccessKey secret of a RAM user from an environment variable.";
          // 実際の要件に基づいて、リージョンとエンドポイントを変更してください。
          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
          }
          // 自動フェールオーバー。初期リクエストが失敗した場合、この例では中国 (北京) リージョンで再試行します。
          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("video moderation unsuccessful. status: " + tea.ToString(body.Code))
                  }
              } else {
                  fmt.Print("response unsuccessful. 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/v3/client"
      	util "github.com/alibabacloud-go/tea-utils/v2/service"
      	"github.com/alibabacloud-go/tea/tea"
      	"net/http"
      )
      
      func main() {
      	// このサンプルは参照用です。本番環境では、AccessKey ペアをハードコードせずに、STS のようなより安全な方法を使用して認証情報を管理してください。
          config := &openapi.Config{
              /**
               * Alibaba Cloud アカウントの AccessKey ペアを使用すると、すべての権限が付与されます。セキュリティを向上させるため、API アクセスには RAM ユーザーの使用を推奨します。
               * AccessKey ID および AccessKey Secret をコード内にハードコードしないでください。
               */
              AccessKeyId: tea.String("RAM ユーザーの AccessKey ID は環境変数から取得することを推奨します。"),
              AccessKeySecret: tea.String("RAM ユーザーの AccessKey secret は環境変数から取得することを推奨します。"),
              // 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 秒です。このパラメーターを適切に設定することを推奨します。
      		 * ReadTimeout 値がサーバーの処理時間より短い場合、ReadTimeout 例外がスローされます。
      		 */
              ConnectTimeout: tea.Int(3000),
              ReadTimeout:    tea.Int(6000),
          }
      	client, _err := green20220302.NewClient(config)
      	if _err != nil {
      		panic(_err)
      	}
      
      	// 実行時オプションを作成および設定します。
      	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 unsuccessful. 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("processing video moderation. code:%d\n", *body.Code)
      		return
      	}
      	if *body.Code != http.StatusOK {
      		fmt.Printf("video moderation result unsuccessful. code:%d\n", *body.Code)
      		return
      	}
      
      	data := body.Data
          fmt.Printf("video moderation result:%s\n", data)
      	fmt.Printf("video moderation result audioResult:%s\n", data.AudioResult)
      	fmt.Printf("video moderation 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/v3/client"
          util "github.com/alibabacloud-go/tea-utils/v2/service"
          "github.com/alibabacloud-go/tea/tea"
          "net/http"
      )
      
      func main() {
      	// このサンプルは参照用です。本番環境では、AccessKey ペアをハードコードせずに、STS のようなより安全な方法を使用して認証情報を管理してください。
          config := &openapi.Config{
              /**
               * Alibaba Cloud アカウントの AccessKey ペアを使用すると、すべての権限が付与されます。セキュリティを向上させるため、API アクセスには RAM ユーザーの使用を推奨します。
               * AccessKey ID および AccessKey Secret をコード内にハードコードしないでください。
               */
              AccessKeyId: tea.String("RAM ユーザーの AccessKey ID は環境変数から取得することを推奨します。"),
              AccessKeySecret: tea.String("RAM ユーザーの AccessKey secret は環境変数から取得することを推奨します。"),
              // 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 秒です。このパラメーターを適切に設定することを推奨します。
      		 * ReadTimeout 値がサーバーの処理時間より短い場合、ReadTimeout 例外がスローされます。
      		 */
              ConnectTimeout: tea.Int(3000),
              ReadTimeout:    tea.Int(6000),
          }
      	client, _err := green20220302.NewClient(config)
      	if _err != nil {
      		panic(_err)
      	}
      
          // 実行時オプションを作成および設定します。
          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("videoDetection_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 unsuccessful. 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("video moderation cancellation unsuccessful. code:%d\n", *body.Code)
          }
      }

OSS に保存された動画のモデレーション

シナリオ

Alibaba Cloud Object Storage Service (OSS) に保存されている動画ファイルをモデレーションするには、サービスロールを作成して Content Moderation に OSS へのアクセス権限を付与します。その後、video moderation V2.0 サービスがこのロールを使用して OSS からファイルを取得し、モデレーションを行います。クラウドリソースアクセス認可ページでサービスロールを作成できます。

  1. 必要な依存関係を追加するには、以下のコマンドを実行します。

    go get github.com/alibabacloud-go/green-20220302/v3
  2. Go SDK を統合します。

    • 動画モデレーションタスクを送信するサンプルコード

      package main
      
      import (
          "encoding/json"
          "fmt"
          openapi "github.com/alibabacloud-go/darabonba-openapi/v2/client"
          green20220302 "github.com/alibabacloud-go/green-20220302/v3/client"
          util "github.com/alibabacloud-go/tea-utils/v2/service"
          "github.com/alibabacloud-go/tea/tea"
          "net/http"
      )
      
      func main() {
          // ソースコードが漏洩すると AccessKey が公開され、アカウント内のすべてのリソースのセキュリティが侵害される可能性があります。以下のコードは参照用のみです。認証には、セキュリティトークンサービス (STS) のようなより安全な方法を使用することを推奨します。
          config := &openapi.Config{
              /**
               * Alibaba Cloud アカウントの AccessKey には、すべての API を呼び出す権限があります。API の呼び出しや日常的な運用管理 (O&M) には RAM ユーザーの使用を推奨します。
               * プロジェクトコード内に AccessKey ID および AccessKey Secret をハードコードしないでください。コードが漏洩すると、セキュリティリスクが発生し、すべてのリソースが侵害される可能性があります。
               * 例として、環境変数から認証情報を取得できます:
               * RAM ユーザーの AccessKey ID を取得:os.Getenv("ALIBABA_CLOUD_ACCESS_KEY_ID")
               * RAM ユーザーの AccessKey Secret を取得:os.Getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET")
               */
              AccessKeyId: tea.String("RAM ユーザーの AccessKey ID を環境変数から取得してください"),
              AccessKeySecret: tea.String("RAM ユーザーの AccessKey Secret を環境変数から取得してください"),
              // 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 秒です。この値を適切に設定してください。
      		 * `ReadTimeout` 値がサーバー側の処理時間より短い場合、`ReadTimeout` 例外がスローされます。
      		 */
              ConnectTimeout: tea.Int(3000),
              ReadTimeout:    tea.Int(6000),
          }
          client, _err := green20220302.NewClient(config)
          if _err != nil {
              panic(_err)
          }
      
          // RuntimeOptions インスタンスを作成し、実行時パラメーターを設定します。
          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("Request failed. 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("Video moderation failed. code: %d\n", *body.Code)
              return
          }
          
          data := body.Data
          fmt.Printf("video moderation 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/v3/client"
      	util "github.com/alibabacloud-go/tea-utils/v2/service"
      	"github.com/alibabacloud-go/tea/tea"
      	"net/http"
      )
      
      func main() {
      	// ソースコードが漏洩すると AccessKey が公開され、アカウント内のすべてのリソースのセキュリティが侵害される可能性があります。以下のコードは参照用のみです。認証には、セキュリティトークンサービス (STS) のようなより安全な方法を使用することを推奨します。
          config := &openapi.Config{
              /**
               * Alibaba Cloud アカウントの AccessKey には、すべての API を呼び出す権限があります。API の呼び出しや日常的な運用管理 (O&M) には RAM ユーザーの使用を推奨します。
               * プロジェクトコード内に AccessKey ID および AccessKey Secret をハードコードしないでください。コードが漏洩すると、セキュリティリスクが発生し、すべてのリソースが侵害される可能性があります。
               * 例として、環境変数から認証情報を取得できます:
               * RAM ユーザーの AccessKey ID を取得:os.Getenv("ALIBABA_CLOUD_ACCESS_KEY_ID")
               * RAM ユーザーの AccessKey Secret を取得:os.Getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET")
               */
              AccessKeyId: tea.String("RAM ユーザーの AccessKey ID を環境変数から取得してください"),
              AccessKeySecret: tea.String("RAM ユーザーの AccessKey Secret を環境変数から取得してください"),
              // 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 秒です。この値を適切に設定してください。
      		 * `ReadTimeout` 値がサーバー側の処理時間より短い場合、`ReadTimeout` 例外がスローされます。
      		 */
              ConnectTimeout: tea.Int(3000),
              ReadTimeout:    tea.Int(6000),
          }
      	client, _err := green20220302.NewClient(config)
      	if _err != nil {
      		panic(_err)
      	}
      
      	// RuntimeOptions インスタンスを作成し、実行時パラメーターを設定します。
      	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("Request failed. 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("processing video moderation. code:%d\n", *body.Code)
      		return
      	}
      	if *body.Code != http.StatusOK {
      		fmt.Printf("Query for video moderation result failed. code: %d\n", *body.Code)
      		return
      	}
      
      	data := body.Data
          fmt.Printf("video moderation result:%s\n", data)
      	fmt.Printf("video moderation result audioResult:%s\n", data.AudioResult)
      	fmt.Printf("video moderation 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/v3/client"
          util "github.com/alibabacloud-go/tea-utils/v2/service"
          "github.com/alibabacloud-go/tea/tea"
          "net/http"
      )
      
      func main() {
      	// ソースコードが漏洩すると AccessKey が公開され、アカウント内のすべてのリソースのセキュリティが侵害される可能性があります。以下のコードは参照用のみです。認証には、セキュリティトークンサービス (STS) のようなより安全な方法を使用することを推奨します。
          config := &openapi.Config{
              /**
               * Alibaba Cloud アカウントの AccessKey には、すべての API を呼び出す権限があります。API の呼び出しや日常的な運用管理 (O&M) には RAM ユーザーの使用を推奨します。
               * プロジェクトコード内に AccessKey ID および AccessKey Secret をハードコードしないでください。コードが漏洩すると、セキュリティリスクが発生し、すべてのリソースが侵害される可能性があります。
               * 例として、環境変数から認証情報を取得できます:
               * RAM ユーザーの AccessKey ID を取得:os.Getenv("ALIBABA_CLOUD_ACCESS_KEY_ID")
               * RAM ユーザーの AccessKey Secret を取得:os.Getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET")
               */
              AccessKeyId: tea.String("RAM ユーザーの AccessKey ID を環境変数から取得してください"),
              AccessKeySecret: tea.String("RAM ユーザーの AccessKey Secret を環境変数から取得してください"),
              // 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 秒です。この値を適切に設定してください。
      		 * `ReadTimeout` 値がサーバー側の処理時間より短い場合、`ReadTimeout` 例外がスローされます。
      		 */
              ConnectTimeout: tea.Int(3000),
              ReadTimeout:    tea.Int(6000),
          }
      	client, _err := green20220302.NewClient(config)
      	if _err != nil {
      		panic(_err)
      	}
      
          // RuntimeOptions インスタンスを作成し、実行時パラメーターを設定します。
          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("videoDetection_global"),
              ServiceParameters: tea.String(string(serviceParameters)),
          }
      
          result, _err := client.VideoModerationCancelWithOptions(&request, runtime)
          if _err != nil {
              panic(_err)
          }
      
          if *result.StatusCode != http.StatusOK {
              fmt.Printf("Request failed. 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("Video moderation task cancellation failed. code: %d\n", *body.Code)
          }
      }

C# SDK

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

この機能は、以下の 3 種類の動画検出をサポートしています。

パブリック URL からの動画のモデレーション

シナリオ

モデレーションが必要な動画にパブリック URL がある場合、video moderation 2.0 サービスはその URL からファイルをフェッチしてモデレーションできます。

  1. 依存関係を追加するには、以下のコマンドを実行します。

    dotnet add package AlibabaCloud.SDK.Green20220302 --version 3.2.3
  2. C# SDK を統合します。

    • ビデオモデレーションタスクを送信する

      using Newtonsoft.Json;
      using Tea;
      
      namespace AlibabaCloud.SDK.Sample
      {
          public class Sample
          {
      
              /**
               * 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,
                  };
                  // アジア太平洋 SE 1 (シンガポール) リージョンのエンドポイント。
                  config.Endpoint = "green-cip.ap-southeast-1.aliyuncs.com";
                  return new AlibabaCloud.SDK.Green20220302.Client(config);
              }
      
              public static void Main(string[] args)
              {
                  // コード内に AccessKey ID および AccessKey Secret をハードコードするとセキュリティリスクがあります。このコードが漏洩すると、AccessKey ペアが公開され、Alibaba Cloud アカウント内のすべてのリソースのセキュリティが侵害される可能性があります。認証には、STS のようなより安全な方法の使用を推奨します。
                  /**
                  * Alibaba Cloud アカウントの AccessKey ペアには、すべての API オペレーションを呼び出す権限があります。API アクセスおよび日常的な運用管理 (O&M) には RAM ユーザーの使用を推奨します。
                  * プロジェクトコード内に AccessKey ID および AccessKey Secret をハードコードしないことを強く推奨します。そうしないと、AccessKey ペアが漏洩し、アカウント内のすべてのリソースのセキュリティが侵害される可能性があります。
                  * 環境変数を取得する一般的な方法:
                  * RAM ユーザーの AccessKey ID を取得:Environment.GetEnvironmentVariable("ALIBABA_CLOUD_ACCESS_KEY_ID")
                  * RAM ユーザーの AccessKey Secret を取得:Environment.GetEnvironmentVariable("ALIBABA_CLOUD_ACCESS_KEY_SECRET")
                  */
                  string accessKeyId = "RAM ユーザーの AccessKey ID を環境変数から取得してください",
                  string accessKeySecret = "RAM ユーザーの AccessKey Secret を環境変数から取得してください",
                  // 注:パフォーマンス向上のため、クライアントインスタンスを再利用し、各リクエストで新しい接続を確立しないでください。
                  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);
                  // RuntimeOptions インスタンスを作成し、実行時パラメーターを設定します。
                  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("task ID : " + 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 ペアでクライアントを初期化します。
               * @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,
                  };
                  // アジア太平洋 SE 1 (シンガポール) リージョンのエンドポイント。
                  config.Endpoint = "green-cip.ap-southeast-1.aliyuncs.com";
                  return new AlibabaCloud.SDK.Green20220302.Client(config);
              }
      
              public static void Main(string[] args)
              {
                  // コード内に AccessKey ID および AccessKey Secret をハードコードするとセキュリティリスクがあります。このコードが漏洩すると、AccessKey ペアが公開され、Alibaba Cloud アカウント内のすべてのリソースのセキュリティが侵害される可能性があります。認証には、STS のようなより安全な方法の使用を推奨します。
                  /**
                  * Alibaba Cloud アカウントの AccessKey ペアには、すべての API オペレーションを呼び出す権限があります。API アクセスおよび日常的な運用管理 (O&M) には RAM ユーザーの使用を推奨します。
                  * プロジェクトコード内に AccessKey ID および AccessKey Secret をハードコードしないことを強く推奨します。そうしないと、AccessKey ペアが漏洩し、アカウント内のすべてのリソースのセキュリティが侵害される可能性があります。
                  * 環境変数を取得する一般的な方法:
                  * RAM ユーザーの AccessKey ID を取得:Environment.GetEnvironmentVariable("ALIBABA_CLOUD_ACCESS_KEY_ID")
                  * RAM ユーザーの AccessKey Secret を取得:Environment.GetEnvironmentVariable("ALIBABA_CLOUD_ACCESS_KEY_SECRET")
                  */
                  string accessKeyId = "RAM ユーザーの AccessKey ID を環境変数から取得してください",
                  string accessKeySecret = "RAM ユーザーの AccessKey Secret を環境変数から取得してください",
                  // 注:パフォーマンス向上のため、クライアントインスタンスを再利用し、各リクエストで新しい接続を確立しないでください。
                  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","<your task ID>");
                  videoModerationResultRequest.ServiceParameters=JsonConvert.SerializeObject(task);
                  // RuntimeOptions インスタンスを作成し、実行時パラメーターを設定します。
                  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("task ID : " + 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);
                  }
              }
          }
      }

ローカル動画の検出

ユースケース

パブリック URL がないローカル動画をモデレーションするには、Content Moderation が提供する OSS バケットにアップロードします。その後、Video Moderation 2.0 サービスが OSS にアクセスして動画を取得し、モデレーションを行います。

  1. 必要な依存関係を追加するには、以下のコマンドを実行します。

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

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

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

    • 動画モデレーションタスクを送信するサンプルコード

      // このファイルは自動生成されたものです。編集しないでください。ありがとうございます。
      
      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 オペレーションに対するフルアクセス権限を付与します。API 呼び出しおよび日常的な運用管理 (O&M) には RAM ユーザーの使用を推奨します。
                  * セキュリティリスクを回避するため、プロジェクトコード内に AccessKey ID および AccessKey Secret をハードコードしないでください。認証情報が漏洩すると、アカウント内のすべてのリソースが侵害される可能性があります。
                  * 代わりに、環境変数から認証情報を取得してください。サンプルコード:
                  * RAM ユーザーの AccessKey ID を取得:Environment.GetEnvironmentVariable("ALIBABA_CLOUD_ACCESS_KEY_ID")
                  * RAM ユーザーの AccessKey secret を取得:Environment.GetEnvironmentVariable("ALIBABA_CLOUD_ACCESS_KEY_SECRET")
                  */
                  String accessKeyId = "環境変数から取得した AccessKey ID";
                  String accessKeySecret = "環境変数から取得した AccessKey Secret";
                  // 要件に基づいてリージョンとエンドポイントを変更します。
                  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 インスタンスを使用するリクエストに対してのみ有効です。
                  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);
                      // API オペレーションを呼び出して、モデレーション結果を取得します。
                      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 ペアでクライアントを初期化します。
               * @param accessKeyId
               * @param accessKeySecret
               * @return Client
               * @throws Exception
               */
              public static AlibabaCloud.SDK.Green20220302.Client CreateClient(string accessKeyId, string accessKeySecret)
              {
                  AlibabaCloud.OpenApiClient.Models.Config config = new AlibabaCloud.OpenApiClient.Models.Config
                  {
                      AccessKeyId = accessKeyId,
                      AccessKeySecret = accessKeySecret,
                  };
                  // エンドポイント。
                  config.Endpoint = "green-cip.ap-southeast-1.aliyuncs.com";
                  return new AlibabaCloud.SDK.Green20220302.Client(config);
              }
      
              public static void Main(string[] args)
              {
                  // プロジェクトに AccessKey ペアをハードコードすると、認証情報が漏洩し、アカウント内のすべてのリソースのセキュリティが侵害される可能性があります。AccessKey ペアはここではデモンストレーション目的でのみ使用されています。認証情報の管理には、セキュリティトークンサービス (STS) のようなより安全な方法の使用を推奨します。
                  /**
                  * Alibaba Cloud アカウントの AccessKey ペアには、すべての API オペレーションを呼び出す権限があります。API オペレーションの呼び出しや日常的な運用管理 (O&M) には RAM ユーザーの使用を推奨します。
                  * プロジェクトコード内に RAM ユーザーの AccessKey ID および AccessKey Secret をハードコードしないことを強く推奨します。そうしないと、AccessKey ペアが漏洩し、アカウント内のすべてのリソースのセキュリティが侵害される可能性があります。
                  * RAM ユーザーの AccessKey ペアは環境変数から取得できます。サンプルコード:
                  * RAM ユーザーの AccessKey ID を取得:Environment.GetEnvironmentVariable("ALIBABA_CLOUD_ACCESS_KEY_ID")
                  * RAM ユーザーの AccessKey secret を取得:Environment.GetEnvironmentVariable("ALIBABA_CLOUD_ACCESS_KEY_SECRET")
                  */
                  string accessKeyId = "環境変数から取得した AccessKey ID";
                  string accessKeySecret = "環境変数から取得した AccessKey Secret";
                  // 検出パフォーマンスを向上させ、繰り返し接続を回避するために、クライアントインスタンスを再利用してください。
                  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","<your_task_ID>");
                  videoModerationResultRequest.ServiceParameters=JsonConvert.SerializeObject(task);
                  // RuntimeOptions インスタンスを作成し、実行時パラメーターを設定します。
                  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 動画のモデレーション

シナリオ

モデレーション対象の動画ファイルがすでに Alibaba Cloud Object Storage Service (OSS) に保存されている場合、サービスロールを作成して Content Moderation サービスに OSS へのアクセス権限を付与できます。その後、Video Moderation V2.0 サービスがこのサービスロールを使用して OSS からファイルを取得し、モデレーションを行います。クラウドリソースアクセス認可ページでサービスロールを作成します。

  1. 必要な依存関係を追加するには、以下のコマンドを実行します。

    dotnet add package AlibabaCloud.SDK.Green20220302 --version 3.2.3
  2. C# SDK を統合します。

    • Video Moderation タスクを送信するサンプルコード

      using Newtonsoft.Json;
      using Tea;
      
      namespace AlibabaCloud.SDK.Sample
      {
          public class Sample
          {
      
              /**
               * AccessKey ペアでクライアントを初期化します。
               * @param accessKeyId
               * @param accessKeySecret
               * @return Client
               * @throws Exception
               */
              public static AlibabaCloud.SDK.Green20220302.Client CreateClient(string accessKeyId, string accessKeySecret)
              {
                  AlibabaCloud.OpenApiClient.Models.Config config = new AlibabaCloud.OpenApiClient.Models.Config
                  {
                      AccessKeyId = accessKeyId,
                      AccessKeySecret = accessKeySecret,
                  };
                  // サービスのエンドポイント。
                  config.Endpoint = "green-cip.ap-southeast-1.aliyuncs.com";
                  return new AlibabaCloud.SDK.Green20220302.Client(config);
              }
      
              public static void Main(string[] args)
              {
                  // プロジェクトのコードが漏洩すると AccessKey が漏洩し、アカウント内のすべてのリソースのセキュリティが侵害される可能性があります。以下のコードは参照用のみです。STS のようなより安全な方法の使用を推奨します。
                  /**
                  * Alibaba Cloud アカウントの AccessKey には、すべての API を呼び出す権限があります。API の呼び出しや日常的な運用管理 (O&M) には RAM ユーザーの使用を推奨します。
                  * プロジェクトコード内に AccessKey ID および AccessKey Secret をハードコードしないことを強く推奨します。そうしないと、AccessKey ペアが漏洩し、アカウント内のすべてのリソースのセキュリティが侵害される可能性があります。
                  * 環境変数を取得する一般的な方法:
                  * RAM ユーザーの AccessKey ID を取得:Environment.GetEnvironmentVariable("ALIBABA_CLOUD_ACCESS_KEY_ID")
                  * RAM ユーザーの AccessKey secret を取得:Environment.GetEnvironmentVariable("ALIBABA_CLOUD_ACCESS_KEY_SECRET")
                  */
                  string accessKeyId = "RAM ユーザーの AccessKey ID を環境変数から取得してください",
                  string accessKeySecret = 'RAM ユーザーの AccessKey Secret を環境変数から取得してください',
                  // 注:パフォーマンス向上のため、クライアントインスタンスを再利用し、繰り返し接続を作成しないでください。
                  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.mp4");
                  task.Add("ossRegionId","ap-southeast-1");
                  videoModerationRequest.ServiceParameters=JsonConvert.SerializeObject(task);
                  // RuntimeOptions インスタンスを作成し、実行時パラメーターを設定します。
                  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);
                  }
              }
          }
      }
    • Video Moderation タスクの結果を照会するサンプルコード

      using Newtonsoft.Json;
      using Tea;
      
      namespace AlibabaCloud.SDK.Sample
      {
          public class Sample
          {
      
              /**
               * AccessKey ペアでクライアントを初期化します。
               * @param accessKeyId
               * @param accessKeySecret
               * @return Client
               * @throws Exception
               */
              public static AlibabaCloud.SDK.Green20220302.Client CreateClient(string accessKeyId, string accessKeySecret)
              {
                  AlibabaCloud.OpenApiClient.Models.Config config = new AlibabaCloud.OpenApiClient.Models.Config
                  {
                      AccessKeyId = accessKeyId,
                      AccessKeySecret = accessKeySecret,
                  };
                  // サービスのエンドポイント。
                  config.Endpoint = "green-cip.ap-southeast-1.aliyuncs.com";
                  return new AlibabaCloud.SDK.Green20220302.Client(config);
              }
      
              public static void Main(string[] args)
              {
                  // プロジェクトのコードが漏洩すると AccessKey が漏洩し、アカウント内のすべてのリソースのセキュリティが侵害される可能性があります。以下のコードは参照用のみです。STS のようなより安全な方法の使用を推奨します。
                  /**
                  * Alibaba Cloud アカウントの AccessKey には、すべての API を呼び出す権限があります。API の呼び出しや日常的な運用管理 (O&M) には RAM ユーザーの使用を推奨します。
                  * プロジェクトコード内に AccessKey ID および AccessKey Secret をハードコードしないことを強く推奨します。そうしないと、AccessKey ペアが漏洩し、アカウント内のすべてのリソースのセキュリティが侵害される可能性があります。
                  * 環境変数を取得する一般的な方法:
                  * RAM ユーザーの AccessKey ID を取得:Environment.GetEnvironmentVariable("ALIBABA_CLOUD_ACCESS_KEY_ID")
                  * RAM ユーザーの AccessKey secret を取得:Environment.GetEnvironmentVariable("ALIBABA_CLOUD_ACCESS_KEY_SECRET")
                  */
                  string accessKeyId = "RAM ユーザーの AccessKey ID を環境変数から取得してください",
                  string accessKeySecret = 'RAM ユーザーの AccessKey Secret を環境変数から取得してください',
                  // 注:パフォーマンス向上のため、クライアントインスタンスを再利用し、繰り返し接続を作成しないでください。
                  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","<The ID of the task to query>");
                  videoModerationResultRequest.ServiceParameters=JsonConvert.SerializeObject(task);
                  // RuntimeOptions インスタンスを作成し、実行時パラメーターを設定します。
                  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 のソースコードをご参照ください。

この SDK は、以下の 3 種類の動画モデレーションをサポートしています。

パブリックにアクセス可能な動画

ユースケース

モデレーション対象の動画がパブリック URL からアクセス可能な場合、Video Moderation V2.0 サービスはその URL からファイルをフェッチしてモデレーションを行います。

  1. 依存関係をインストールするには、以下のコマンドを実行します。

    npm install @alicloud/green20220302@3.2.3
  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",
                  // モデレーション対象の動画の URL。
                  "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":"<the_id_of_the_task_to_query>"})
              });
              // ランタイムオプションオブジェクトを作成します。
              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();

ローカル動画

ユースケース

モデレーション対象の動画がローカルマシンに保存されており、パブリック URL からアクセスできない場合、Content Moderation が提供する OSS バケットにアップロードできます。その後、Video Moderation V2.0 サービスが OSS から動画を取得してモデレーションを行います。

  1. 依存関係をインストールするには、以下のコマンドを実行します。

    npm install @alicloud/green20220302@3.2.3
  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;
      
      // API リクエスト用のクライアントを作成します。
      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",
          });
      }
      
      // ファイルアップロード用の OSS クライアントを作成します。
      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
              })
          }
          // API を呼び出して、モデレーション結果を取得します。
          return await client.request('VideoModeration', params, requestOption);
      }
      
      
      
      function main() {
          /**
          * ご利用の Alibaba Cloud アカウントの AccessKey は、すべての API へのフルアクセス権限を付与します。セキュリティを向上させるため、API 呼び出しおよび日常的な運用には RAM ユーザーの使用を推奨します。
          * AccessKey が漏洩すると、すべてのリソースのセキュリティが侵害される可能性があるため、プロジェクトコード内に AccessKey ID および AccessKey Secret をハードコードしないでください。
          * 認証情報は環境変数に保存することを推奨します。その後、以下のように取得できます:
          * RAM ユーザーの AccessKey ID を取得:process.env['ALIBABA_CLOUD_ACCESS_KEY_ID']
          * RAM ユーザーの AccessKey Secret を取得:process.env['ALIBABA_CLOUD_ACCESS_KEY_SECRET']
          */
          const accessKeyId = process.env['ALIBABA_CLOUD_ACCESS_KEY_ID'];
          const accessKeySecret = process.env['ALIBABA_CLOUD_ACCESS_KEY_SECRET'];
          // 実際のデプロイメントに基づいてリージョンとエンドポイントを変更します。
          var endpoint = "https://green-cip.ap-southeast-1.aliyuncs.com"
      
          try {
              var response;
              // API を呼び出して、モデレーション結果を取得します。
              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":"<the_id_of_the_task_to_query>"})
              });
              // ランタイムオプションオブジェクトを作成します。
              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 リソースへのアクセス権限を付与できます。その後、Video Moderation V2.0 サービスがこのロールを使用して OSS からファイルを取得し、モデレーションを行います。サービスロールを作成するには、クラウドリソースアクセス認可ページにアクセスします。

  1. 依存関係をインストールするには、以下のコマンドを実行します。

    npm install @alicloud/green20220302@3.2.3
  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":"<the_id_of_the_task_to_query>"})
              });
              // ランタイムオプションオブジェクトを作成します。
              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 ネイティブ呼び出し

  • Invocation Method

    サービスエンドポイント:https://green-cip.{region}.aliyuncs.com

    プロトコル:HTTPS

    メソッド:POST

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

    この API のリクエストパラメーターは、共通パラメーターと操作固有のパラメーターで構成されています。すべての API オペレーションでは、以下の表に示す共通リクエストパラメーターが必要です。

    パラメーター

    タイプ

    必須

    説明

    Moderation Result

    String

    はい

    レスポンスメッセージのフォーマット。有効値:

    • JSON (デフォルト)

    • XML

    Version

    String

    はい

    API バージョン。形式は YYYY-MM-DD です。この API のバージョンは 2022-03-02 です。

    AccessKeyId

    String

    はい

    サービスにアクセスするために Alibaba Cloud が提供する Access Key ID。

    Signature

    String

    はい

    署名文字列。署名の計算方法の詳細については、署名方式のセクションをご参照ください。

    SignatureMethod

    String

    はい

    署名方式。HMAC-SHA1 のみサポートされています。

    Timestamp

    String

    はい

    リクエストのタイムスタンプ。ISO 8601 標準形式で、UTC である必要があります。

    形式は yyyy-MM-ddTHH:mm:ssZ です。

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

    SignatureVersion

    String

    はい

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

    SignatureNonce

    String

    はい

    リプレイ攻撃を防止するための一意のランダム数 (nonce)。各リクエストには一意の nonce を含める必要があります。

    __LBRACE__正在执行

    String

    はい

    有効値:

    • VideoModeration

    • VideoModerationResult

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

    各 API リクエストは、成功の有無に関係なく Request ID を返します。その他のレスポンスパラメーターはオペレーションによって異なります。

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

    以下の例は読みやすさのために整形されています。実際のレスポンスは、フォーマットなしの 1 行のテキストになります。

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

      リクエスト例

      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=videoDetection_global
      &ServiceParameters={"url": "https://xxxxxx.aliyuncs.com/sample/****.mp4"}

      成功時のレスポンス例

      {
          "RequestId":"20B935A9-XXXXXXXX-XXXXXXXX0C2",
          "Message":"SUCCESS",
          "Data":{
              "TaskId":"vi_f_O5xxxxxxxxxxxxxxqa-1x****"
          },
          "Code":200
      }
    • タスクを照会するサンプルコード

      リクエスト例

      http://green-cip.ap-southeast-1.aliyuncs.com/
      ?Format=JSON
      &Version=2022-03-02
      &Signature=vpEEL0zFHfxXYzSFV0n7%2FZiFL9o%3D
      &SignatureMethod=Hmac-SHA1
      &SignatureNonce=15215528852396
      &SignatureVersion=1.0
      &Action=VideoModerationResult
      &AccessKeyId=123****cip
      &Timestamp=2023-02-03T12:00:00Z
      &Service=videoDetection_global
      &ServiceParameters={"taskId": "vi_f_O5zxxxxxxxxxxxxxxxx-1x****"}

      成功時のレスポンス例

      {
          "Code": 200,
          "RequestId": "25106421-XXXX-XXXX-XXXX-15DA5AAAC546",
          "Message": "success finished",
          "Data": {
              "DataId": "ABCDEF-TESTDATAID",
              "TaskId": "vi_f_VnI6BO74NXFIZm7XXXXXXXXXXXXXX",
              "RiskLevel": "medium",
              "FrameResult": {
                  "FrameNum": 2,
                  "FrameSummarys": [
                      {
                          "Label": "violent_explosion",
                          "Description": "Suspected pyrotechnic content",
                          "LabelSum": 8
                      },
                      {
                          "Label": "sexual_cleavage",
                          "Description": "Suspected revealing or sexual content",
                          "LabelSum": 8
                      }
                  ],
                  "RiskLevel": "medium",
                  "Frames": [
                      {
                          "Offset": 1,
                          "RiskLevel": "none",
                          "Results": [
                              {
                                  "Result": [
                                      {
                                          "Label": "nonLabel",
                                          "Description": "No risk detected"
                                      }
                                  ],
                                  "Service": "baselineCheck"
                              },
                              {
                                  "Result": [
                                      {
                                          "Label": "nonLabel"
                                      }
                                  ],
                                  "Service": "baselineCheck_pro"
                              }
                          ],
                          "TempUrl": "http://abc.oss-cn-shanghai.aliyuncs.com/test1.jpg"
                      },
                      {
                          "Offset": 2,
                          "RiskLevel": "medium",
                          "Results": [
                              {
                                  "Result": [
                                      {
                                          "Confidence": 74.1,
                                          "Label": "violent_explosion",
                                          "Description": "Suspected pyrotechnic content"
                                      }
                                  ],
                                  "Service": "baselineCheck"
                              },
                              {
                                  "Result": [
                                      {
                                          "Confidence": 1,
                                          "Label": "sexual_cleavage",
                                          "Description": "Suspected revealing or sexual content"
                                      }
                                  ],
                                  "Service": "baselineCheck_pro"
                              }
                          ],
                          "TempUrl": "http://abc.oss-cn-shanghai.aliyuncs.com/test2.jpg"
                      }
                  ]
              }
          }
      }
  • 署名方式

    サービスは各リクエストを認証します。各リクエストに Signature パラメーターを含める必要があります。サービスは、ご利用の Access Key ID および Access Key Secret に基づく対称暗号化を使用して、リクエスト元を認証します。

    Access Key ID および Access Key Secret は Alibaba Cloud が発行します。Alibaba Cloud Web サイト上で作成および管理できます。Access Key ID はリクエスト元を識別します。Access Key Secret は署名文字列を暗号化するために使用され、サーバーがそれを検証します。Access Key Secret は厳重に保管してください。

    リクエストに署名するには、以下の手順に従ってください。

    1. リクエストパラメーターから標準的なクエリ文字列を構築します。

      1. 署名パラメーター (Signature) を除くすべてのリクエストパラメーター (共通パラメーターおよび操作固有のパラメーターを含む) を、パラメーター名の辞書式順序で並べ替えます。

      2. 各リクエストパラメーターの名前と値を UTF-8 URL エンコーディングを使用してエンコードします。

        説明

        java.net.URLEncoder などの URL エンコーディングライブラリは、通常 application/x-www-form-urlencoded MIME タイプに従ってエンコードします。このようなライブラリを使用する場合、プラス記号 (+) を %20 に、アスタリスク (*) を %2A に置き換え、%7E をチルダ (~) に戻す必要があります。

        URL エンコーディングルールは以下のとおりです。

        • 大文字 (A-Z)、小文字 (a-z)、数字 (0-9)、ハイフン (-)、アンダースコア (_)、ピリオド (.)、チルダ (~) はエンコードしません。

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

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

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

      3. 各エンコード済みパラメーター名とそのエンコード済み値を等号 (=) で結合します。

      4. 辞書式順序で並べ替えた名前と値のペアをアンパサンド (&) で連結して、標準的なクエリ文字列を形成します。

    2. ステップ 1 で作成した標準的なクエリ文字列から、以下の形式で署名対象文字列を作成します。

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

      この構造において、HTTPMethod はリクエストに使用される HTTP メソッド (例:POST) です。percentEncode("/") はスラッシュ (/) の URL エンコードされた値であり、%2F です。percentEncode(CanonicalizedQueryString) は、ステップ 1 で作成した標準的なクエリ文字列の URL エンコードされたバージョンです。

    3. RFC 2104 で定義されているとおり、署名対象文字列の HMAC 値を計算します。

      説明

      計算のキーは、ご利用の Access Key Secret の後にアンパサンド (&) を付けたものです。ハッシュアルゴリズムは SHA1 です。

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

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

      説明

      他のパラメーターと同様に、署名値は Content Moderation サービスへのリクエストパラメーターとして追加する際に、RFC 3986 に従って URL エンコードする必要があります。