视频审核
本文介绍了如何使用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()) }
提交视频直播流进行检测
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())
}