全部產品
Search
文件中心

AI Guardrails:視頻審核

更新時間:Nov 16, 2025

本文介紹了如何使用Go SDK視頻審核介面,檢測視頻中是否包含風險內容。

功能描述

視頻審核介面支援同步檢測和非同步檢測兩種方式。

  • 同步檢測只支援傳遞視頻的截幀圖片序列。關於參數的詳細介紹,請參見同步檢測

  • 非同步檢測(推薦)支援對原始視頻或視頻的截幀圖片序列進行檢測。關於參數的詳細介紹,請參見非同步檢測

說明
  • 本 SDK 僅支援傳入公網視頻 URL,不支援本地檔案或位元據。

  • 支援的 URL 類型:公網 HTTP/HTTPS,長度不超過 2048 個字元。

前提條件

已安裝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())
    }
  • 提交ApsaraVideo for Live流進行檢測

    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())
}