本文介紹了如何使用Go SDK視頻審核介面,檢測視頻中是否包含風險內容。
功能描述
前提條件
(推薦)提交視頻非同步檢測任務
介面 | 描述 | 支援的地區 |
VideoAsyncScanRequest | 提交視頻非同步檢測任務,對視頻進行多個風險情境的識別,包括色情、暴恐涉政、廣告 、不良情境、Logo(商標台標)識別。 |
|
範例程式碼
提交視頻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的方式擷取結果。 |
|
範例程式碼
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 | 提交視頻同步檢測任務,同步檢測視頻中的風險內容。 說明 同步檢測只支援傳遞視訊框架序列,不支援檢測視頻檔案,推薦使用非同步檢測介面。 |
|
範例程式碼
以下範例程式碼中使用幀序列方式提交待檢測的視頻。
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 | 提交視頻檢測結果的反饋,以人工反饋的檢測結果糾正演算法檢測結果。 |
|
範例程式碼
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())
}