文档

视频审核

本文介绍了如何使用Go SDK视频审核接口,检测视频中是否包含风险内容。

功能描述

视频审核接口支持同步检测和异步检测两种方式。

  • 同步检测只支持传递视频的截帧图片序列。关于参数的详细介绍,请参见同步检测

  • 异步检测(推荐)支持对原始视频或视频的截帧图片序列进行检测。关于参数的详细介绍,请参见异步检测

前提条件

已安装Go依赖。关于安装Go依赖的具体操作,请参见安装Go依赖

说明

请一定按照安装Go依赖页面中的版本安装,否则会导致调用失败。

(推荐)提交视频异步检测任务

接口

描述

支持的地域

VideoAsyncScanRequest

提交视频异步检测任务,对视频进行多个风险场景的识别,包括色情、暴恐涉政、广告 、不良场景、Logo(商标台标)识别。

  • cn-shanghai:华东2(上海)

  • cn-beijing:华北2(北京)

  • cn-shenzhen:华南1(深圳)

  • ap-southeast-1:新加坡

示例代码

  • 提交视频URL进行检测

    package main
    
    import (
       "encoding/json"
       "fmt"
       "github.com/aliyun/alibaba-cloud-sdk-go/services/green"
       "strconv"
    )
    
    func main() {
       /**
        * 注意:此处实例化的client尽可能重复使用,提升检测性能。避免重复建立连接。
        * 常见获取环境变量方式:
        *     获取RAM用户AccessKey ID:os.Getenv("ALIBABA_CLOUD_ACCESS_KEY_ID")
        *     获取RAM用户AccessKey Secret:os.Getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET")
        */
       client, _err := green.NewClientWithAccessKey(
            "cn-shanghai", 
            "建议从环境变量中获取RAM用户AccessKey ID", 
            "建议从环境变量中获取RAM用户AccessKey Secret")
       if err != nil {
          fmt.Println(err.Error())
          return
       }
    
       task := map[string]interface{}{"dataId": "检测数据ID", "url": "待检测视频链接地址"}
     // scenes:检测场景,支持指定多个场景。
       // callback、seed用于回调通知,可选参数。
       content, _ := json.Marshal(
          map[string]interface{}{
             "tasks": [...]map[string]interface{}{task}, "scenes": [...]string{"porn", "terrorism"},
             "bizType": "业务场景", "callback": "回调地址", "seed": "随机字符串",
          },
       )
    
       request := green.CreateVideoAsyncScanRequest()
       request.SetContent(content)
       response, _err := client.VideoAsyncScan(request)
       if _err != nil {
          fmt.Println(_err.Error())
          return
       }
       if response.GetHttpStatus() != 200 {
          fmt.Println("response not success. status:" + strconv.Itoa(response.GetHttpStatus()))
       }
       fmt.Println(response.GetHttpContentString())
    }
  • 提交视频直播流进行检测

    package main
    
    import (
       "encoding/json"
       "fmt"
       "github.com/aliyun/alibaba-cloud-sdk-go/services/green"
       "strconv"
    )
    
    func main() {
        /**
        * 注意:此处实例化的client尽可能重复使用,提升检测性能。避免重复建立连接。
        * 常见获取环境变量方式:
        *     获取RAM用户AccessKey ID:os.Getenv("ALIBABA_CLOUD_ACCESS_KEY_ID")
        *     获取RAM用户AccessKey Secret:os.Getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET")
        */
       client, _err := green.NewClientWithAccessKey(
            "cn-shanghai", 
            "建议从环境变量中获取RAM用户AccessKey ID", 
            "建议从环境变量中获取RAM用户AccessKey Secret")
       if err != nil {
          fmt.Println(err.Error())
          return
       }
       // url填写直播流地址。
       task := map[string]interface{}{"dataId": "检测数据ID", "url": "待检测视频链接地址"}
      // scenes:检测场景,支持指定多个场景。
      // callback、seed用于回调通知,可选参数。
       content, _ := json.Marshal(
          map[string]interface{}{
             "tasks": [...]map[string]interface{}{task}, "scenes": [...]string{"porn", "terrorism"},
             "live": "true", "bizType": "业务场景", "callback": "回调地址", "seed": "随机字符串",
          },
       )
    
       request := green.CreateVideoAsyncScanRequest()
       request.SetContent(content)
       response, _err := client.VideoAsyncScan(request)
       if _err != nil {
          fmt.Println(_err.Error())
          return
       }
       if response.GetHttpStatus() != 200 {
          fmt.Println("response not success. status:" + strconv.Itoa(response.GetHttpStatus()))
       }
       fmt.Println(response.GetHttpContentString())
    }
  • 提交视频语音进行综合检测

    package main
    
    import (
       "encoding/json"
       "fmt"
       "github.com/aliyun/alibaba-cloud-sdk-go/services/green"
       "strconv"
    )
    
    func main() {
       /**
        * 注意:此处实例化的client尽可能重复使用,提升检测性能。避免重复建立连接。
        * 常见获取环境变量方式:
        *     获取RAM用户AccessKey ID:os.Getenv("ALIBABA_CLOUD_ACCESS_KEY_ID")
        *     获取RAM用户AccessKey Secret:os.Getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET")
        */
       client, _err := green.NewClientWithAccessKey(
            "cn-shanghai", 
            "建议从环境变量中获取RAM用户AccessKey ID", 
            "建议从环境变量中获取RAM用户AccessKey Secret")
       if err != nil {
          fmt.Println(err.Error())
          return
       }
       // url填写直播流地址。
       task := map[string]interface{}{"dataId": "检测数据ID", "url": "待检测视频链接地址"}
      // scenes:检测场景,支持指定多个场景。
      // callback、seed用于回调通知,可选参数。
       content, _ := json.Marshal(
          map[string]interface{}{
             "tasks": [...]map[string]interface{}{task}, "scenes": [...]string{"porn", "terrorism"},
             "live": "true", "audioScenes": [...]string{"antispam"}, "bizType": "业务场景",
             "callback": "回调地址",
             "seed": "随机字符串",
          },
       )
    
       request := green.CreateVideoAsyncScanRequest()
       request.SetContent(content)
       response, _err := client.VideoAsyncScan(request)
       if _err != nil {
          fmt.Println(_err.Error())
          return
       }
       if response.GetHttpStatus() != 200 {
          fmt.Println("response not success. status:" + strconv.Itoa(response.GetHttpStatus()))
       }
       fmt.Println(response.GetHttpContentString())
    }

查询视频异步检测结果

接口

描述

支持的地域

VideoAsyncScanResultsRequest

查询视频异步检测任务的结果。

说明

该方法需要轮询结果,建议使用callback的方式获取结果。

  • cn-shanghai:华东2(上海)

  • cn-beijing:华北2(北京)

  • cn-shenzhen:华南1(深圳)

  • ap-southeast-1:新加坡

示例代码

package main

import (
   "encoding/json"
   "fmt"
   "github.com/aliyun/alibaba-cloud-sdk-go/services/green"
   "strconv"
)

func main() {
   /**
    * 注意:此处实例化的client尽可能重复使用,提升检测性能。避免重复建立连接。
    * 常见获取环境变量方式:
    *     获取RAM用户AccessKey ID:os.Getenv("ALIBABA_CLOUD_ACCESS_KEY_ID")
    *     获取RAM用户AccessKey Secret:os.Getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET")
    */
   client, _err := green.NewClientWithAccessKey(
        "cn-shanghai", 
        "建议从环境变量中获取RAM用户AccessKey ID", 
        "建议从环境变量中获取RAM用户AccessKey Secret")
   if err != nil {
      fmt.Println(err.Error())
      return
   }

   content, _ := json.Marshal(
      [...]string{"视频异步检测任务taskId"},
   )

   request := green.CreateVideoAsyncScanResultsRequest()
   request.SetContent(content)
   response, _err := client.VideoAsyncScanResults(request)
   if _err != nil {
      fmt.Println(_err.Error())
      return
   }
   if response.GetHttpStatus() != 200 {
      fmt.Println("response not success. status:" + strconv.Itoa(response.GetHttpStatus()))
   }
   fmt.Println(response.GetHttpContentString())
}

视频截帧同步检测

接口

描述

支持的地域

VideoSyncScanRequest

提交视频同步检测任务,同步检测视频中的风险内容。

说明

同步检测只支持传递视频帧序列,不支持检测视频文件,推荐使用异步检测接口。

  • cn-shanghai:华东2(上海)

  • cn-beijing:华北2(北京)

  • cn-shenzhen:华南1(深圳)

  • ap-southeast-1:新加坡

示例代码

以下示例代码中使用帧序列方式提交待检测的视频。

package main

import (
   "encoding/json"
   "fmt"
   "github.com/aliyun/alibaba-cloud-sdk-go/services/green"
   "strconv"
)

func main() {
   /**
    * 注意:此处实例化的client尽可能重复使用,提升检测性能。避免重复建立连接。
    * 常见获取环境变量方式:
    *     获取RAM用户AccessKey ID:os.Getenv("ALIBABA_CLOUD_ACCESS_KEY_ID")
    *     获取RAM用户AccessKey Secret:os.Getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET")
    */
   client, _err := green.NewClientWithAccessKey(
        "cn-shanghai", 
        "建议从环境变量中获取RAM用户AccessKey ID", 
        "建议从环境变量中获取RAM用户AccessKey Secret")
   if err != nil {
      fmt.Println(err.Error())
      return
   }

   frame1 := map[string]interface{}{
      "offset": "0", "url": "您的视频截帧链接地址1",
   }
   frame2 := map[string]interface{}{
      "offset": "5", "url": "您的视频截帧链接地址2",
   }
   frame3 := map[string]interface{}{
      "offset": "10", "url": "您的视频截帧链接地址3",
   }
  // frames:截帧信息。
   task := map[string]interface{}{"dataId": "检测数据ID", "frames": [...]map[string]interface{}{frame1, frame2, frame3}}
  // scenes:检测场景,支持指定多个场景。
   content, _ := json.Marshal(
      map[string]interface{}{
         "tasks": [...]map[string]interface{}{task}, "scenes": [...]string{"porn", "terrorism"},
         "bizType": "业务场景",
      },
   )

   request := green.CreateVideoSyncScanRequest()
   request.SetContent(content)
   response, _err := client.VideoSyncScan(request)
   if _err != nil {
      fmt.Println(_err.Error())
      return
   }
   if response.GetHttpStatus() != 200 {
      fmt.Println("response not success. status:" + strconv.Itoa(response.GetHttpStatus()))
   }
   fmt.Println(response.GetHttpContentString())
}

视频检测结果反馈

如果您认为视频检测结果与您的预期不符,可以通过视频检测结果反馈接口,对检测结果进行纠正(系统会根据您反馈的结果,将视频截帧添加到相似图片的黑名单库或者白名单库)。当您再次提交相似的内容进行检测时,以您反馈的label返回结果。

关于接口的说明,请参见检测结果反馈

接口

描述

支持的Region

VideoFeedbackRequest

提交视频检测结果的反馈,以人工反馈的检测结果纠正算法检测结果。

  • cn-shanghai:华东2(上海)

  • cn-beijing:华北2(北京)

  • cn-shenzhen:华南1(深圳)

  • ap-southeast-1:新加坡

示例代码

package main

import (
   "encoding/json"
   "fmt"
   "github.com/aliyun/alibaba-cloud-sdk-go/services/green"
   "strconv"
)

func main() {
   /**
    * 注意:此处实例化的client尽可能重复使用,提升检测性能。避免重复建立连接。
    * 常见获取环境变量方式:
    *     获取RAM用户AccessKey ID:os.Getenv("ALIBABA_CLOUD_ACCESS_KEY_ID")
    *     获取RAM用户AccessKey Secret:os.Getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET")
    */
   client, _err := green.NewClientWithAccessKey(
        "cn-shanghai", 
        "建议从环境变量中获取RAM用户AccessKey ID", 
        "建议从环境变量中获取RAM用户AccessKey Secret")
   if _err != nil {
      fmt.Println(_err.Error())
      return
   }

   frame1 := map[string]interface{}{"url": "已检测视频截帧链接地址1", "offset": "offset时间戳1"}
   frame2 := map[string]interface{}{"url": "已检测视频截帧链接地址2", "offset": "offset时间戳2"}
   frames := [...]map[string]interface{}{frame1, frame2}

  // scenes:检测场景,支持指定多个场景。
  // suggestion:期望的检测结果;pass:正常;block:违规。
   content, _ := json.Marshal(
      map[string]interface{}{
         "taskId": "视频审核任务ID", "dataId": "检测数据ID", "url": "视频链接地址", "frames": frames,
         "suggestion": "block", "scenes": [...]string{"ad", "terrorism"}, "note": "备注信息",
      },
   )

   request := green.CreateVideoFeedbackRequest()
   request.SetContent(content)
   response, err := client.VideoFeedback(request)
   if err != nil {
      fmt.Println(err.Error())
      return
   }
   if response.GetHttpStatus() != 200 {
      fmt.Println("response not success. status:" + strconv.Itoa(response.GetHttpStatus()))
   }
   fmt.Println(response.GetHttpContentString())
}
  • 本页导读 (0)
文档反馈