API调用视频鉴暴恐v1(不推荐)
视频鉴暴恐提供视频内容检测,识别视频中是否存在暴恐内容。
- 支持存储在七牛云 bucket(支持华东、华北和华南 bucket)或 非七牛云 bucket 中的视频进行视频鉴暴恐。
- 支持实时处理和异步处理两种方式:实时处理时,视频鉴暴恐结果会在识别完成后立即返回;异步处理时,会立即返回
job_id
,视频鉴暴恐结果通过job_id
获得。 - 视频鉴暴恐结果会返回所有视频片段是属于暴恐、或正常的识别结果。同时为了让用户知道一个视频整体的分类,返回的结果会包含视频片段中出现过的分类,并显示属于这个分类的视频片段的最高的置信度。
- 可以通过设置请求参数,仅返回满足客户需求的视频片段(例如:用户仅需要返回包含暴恐的视频片段,以便对这部分内容做人工审核)。
- 支持一次调用同时请求鉴黄、鉴暴恐、敏感人物识别。请查看视频鉴黄文档中三鉴(鉴黄、鉴暴恐和敏感人物识别)同时调用的示例。
视频片段segments
:视频鉴黄是把视频截帧后,对截帧图片进行鉴黄。当连续帧推理结果一致时,表示这些帧都属于同一种类型,则把这一时段的视频认为是一个视频片段。
请求语法
POST /v1/video/<vid>
Host: ai.qiniuapi.com
Content-Type: application/json
Authorization: Qiniu <AccessKey>:<Sign>
{
"data": {
"uri": "http://www.qiniu.com/video.mp4"
},
"params": {
"async": <async:bool>,
"vframe": {
"mode": <mode:int>,
"interval": <interval:float>
},
"save": {
"bucket": <bucket:string>,
"prefix": <prefix:string>
},
"hookURL": "http://yy.com/yyy"
},
"ops": [
{
"op": <op:string>,
"params": {
"other": {
"detail": <bool>
},
"labels": [
{
"label": <label:string>,
"select": <select:int>,
"score": <score:float>
},
...
]
}
},
...
]
}
注意: 需要在 POST 请求的 head 部分添加七牛鉴权,以进行用户身份验证。
参数 | 类型 | 必选 | 说明 |
---|---|---|---|
vid |
string | 是 | 调用者设置的视频唯一标识,异步处理的返回结果中会带上该信息 |
data.uri |
string | 是 | 视频地址 |
params.async |
boolean | 否 | true 是异步处理,false 是同步处理,不填则取默认值false |
params.vframe.mode |
int | 否 | 截帧逻辑,可选值为[0, 1] 。0 表示每隔固定时间截一帧,固定时间在vframe.interval 中设定;1 表示截关键帧。不填表示取默认值1 。 |
params.vframe.interval |
int | 否 | 当params.vframe.mode 取0 时,用来设置每隔多长时间截一帧,单位s ,取值范围为1~60, 不填则取默认值5s |
params.save.bucket |
string | 否 | 保存截帧图片的Bucket名称,目前只支持华东的bucket。如何创建七牛云bucket,请参见文档。 |
params.save.prefix |
string | 否 | 截帧图片名称的前缀,图片名称的格式为<prefix>/<video_id>/<offset> (图片命名格式仅供参考,业务请不要依赖此命名格式) |
params.hookURL |
string | 否 | 视频检测结束后的回调地址 |
ops.op |
string | 是 | 视频检测执行的命令,支持多种视频检测操作。目前,视频鉴暴恐的命令是terror 。 |
ops.op.params.other.detail |
bool | 否 | 仅当ops.op 是terror 时有效,用于判断是否返回暴恐的详细分类结果。true 表示返回详细分类结果,false 表示不返回详细分类结果。默认是false ,不返回详细分类结果。 |
ops.op.params.labels.label |
string | 否 | 对某个命令返回label进行过滤,与ops.op.params.labels.select 、ops.op.params.labels.score 一起使用。例如,视频鉴暴恐的命令terror 的label有0 正常, 1 暴恐。 |
ops.op.params.labels.select |
int | 否 | 对ops.op.params.labels.label 中设置的label,设置过滤条件,1 表示忽略不选,2 表示只选该类别。 |
ops.op.params.labels.score |
float | 否 | 过滤返回label结果的置信度参数,当ops.op.params.labels.select =1 时表示忽略不选小于该设置的结果,当select=2 时表示只选大于等于该设置的结果 |
响应语法
返回结果按照请求参数params.async
分为两种:
params.async == false
:实时处理请求,视频鉴暴恐完成后就返回结果
HTTP/1.1 200 OK
Content-Type: application/json
{
<op:string>: {
"labels": [
{
"label": <label:string>,
"score": <score:float>
},
...
],
"segments": [
{
"offset_begin": <offset:int>,
"offset_end": <offset:int>,
"labels": [
{
"label": <label:string>,
"score": <score:float>
},
...
],
"cuts": [
{
"offset": <offset:int>,
"uri": <uri:string>,
"result": {
"label": <label:string>,
"class": <class:string>,
"score": <score:float>,
"review": <review:bool>
}
},
...
]
},
...
]
}
}
参数 | 类型 | 说明 |
---|---|---|
op |
string | 视频检测命令 |
op.labels.label |
string | 视频维度的标签,与op.lables.score 成对返回。例如,某个视频进行视频鉴暴恐处理,视频片断中有若干个标签为0 正常和1 暴恐的结果,那么就表示这个视频有0 正常和1 暴恐两类标签。 |
op.lables.score |
float | 显示的是op.labels.label 这类标签的置信度。这个值取的是该视频中属于这类的所有视频片断的置信度的最大值。 |
op.segments.offset_begin |
int | 视频片段起始的时间位置,单位为毫秒。 |
op.segments.offset_end |
int | 视频片段结束的时间位置,单位为毫秒。 |
op.segments.labels.label |
string | 视频片断所属的标签,一个视频片断只会有一个标签。 |
op.segments.labels.score |
float | 视频片断所属标签的置信度。这个值取的是该视频片断中所有帧的置信度的最大值。 |
op.segments.cuts.offset |
int | 视频截帧的时间位置,单位为毫秒 |
op.segments.cuts.uri |
string | 视频截帧的保存路径 |
op.segments.cuts.result |
interface | 视频截帧得到的图片的检测标签,结果与具体的命令有关。例如,视频鉴暴恐的命令terror 的label有0 正常, 1 暴恐。 |
op.segments.cuts.result.class |
string | 如果此视频片段属于暴恐,则此字段用于显示暴恐的详细分类,具体分类包括血腥bloodiness 、自焚self_burning 、斩首类beheaded 、人群聚集类march_crowed 、警民冲突fight_police 、民众肢体接触fight_person 、违规旗帜类illegal_flag 、刀knives 、枪guns 、特殊字符文字(主要为阿拉伯语,不支持藏语)special_characters 、 动漫血腥类anime_bloodiness 、特殊着装special_clothing 、二次元刀anime_knives 以及二次元枪anime_guns |
params.async == true
:异步处理请求,立即返回job_id
HTTP/1.1 200 OK
Content-Type: application/json
{
"job": <job_id>
}
参数 | 类型 | 必选 | 说明 |
---|---|---|---|
job_id |
string | 是 | 服务器返回的,唯一标识该视频任务的ID。 |
异步处理的结果
- 异步处理后,获取单个视频鉴暴恐的结果
请求语法
GET /v1/jobs/video/<job-id> HTTP/1.1
Host: ai.qiniuapi.com
Authorization: Qiniu <AccessKey>:<Sign>
注意: 需要在请求的 head 部分添加七牛鉴权,以进行用户身份验证。
参数 | 类型 | 必选 | 说明 |
---|---|---|---|
job_id |
string | 是 | 服务器返回的,唯一标识该视频任务的ID。 |
响应语法
{
"id": <job_id:string>,
"vid": <string>,
"request": {},
"status": <string>,
"result": {
<op>: {
},
...
},
"error": <string>,
"created_at": <string>,
"updated_at": <string>
}
参数 | 类型 | 说明 |
---|---|---|
id |
string | 服务器返回的,唯一标识该视频任务的ID |
vid |
string | 视频唯一标识,申请任务时传入的vid |
request |
object | 视频分析请求 |
status |
string | 任务状态,WAITING/DOING/RESCHEDULED/FAILED/FINISHED ,RESCHEDULED 是指等待重试中 |
result |
object | 详细解释见实时处理请求返回结果 |
error |
string | 处理视频的过程中遇到的错误,会返回相应的错误信息,详细解释见错误代码含义 |
created_at |
string | 任务创建时间,like: 2006-01-02T15:03:04 |
updated_at |
string | 任务更新时间,like: 2006-01-02T15:03:04 |
错误代码含义
Error Code | Error Message | Desc |
---|---|---|
400 | "bad op" | 输入的op值不支持 |
400 | "invalid interval, allow mode is [0, 10]" | 输入的vframe的interval值不在[0-10]的范围 |
400 | "invalid mode, allow mode is [0, 1]" | 输入的vframe的mode值不在[0-1]的范围 |
424 | "cannot find the video" | 找不到输入的视频文件 |
400 | "cannot open the file" | 打不开输入的视频文件 |
500 | "cannot allow memory" | 发生内存不足等情况 |
- 异步处理时,获取视频处理任务状态
请求语法
GET /v1/jobs/video?status=<string> HTTP/1.1
Host: ai.qiniuapi.com
Authorization: Qiniu <AccessKey>:<Sign>
注意: 需要在请求的 head 部分添加七牛鉴权,以进行用户身份验证。
参数 | 类型 | 必选 | 说明 |
---|---|---|---|
status |
string | 否 | 任务状态,WAITING/DOING/RESCHEDULED/FAILED/FINISHED ,RESCHEDULED 是指等待重试中 |
响应语法
[
{
"id": <string>,
"status": <string>,
"created_at": <string>,
"updated_at": <string>
},
...
]
参数 | 类型 | 说明 |
---|---|---|
id |
string | 服务器返回的,唯一标识该视频任务的ID |
status |
string | 任务状态,WAITING/DOING/RESCHEDULED/FAILED/FINISHED ,RESCHEDULED 是指等待重试中 |
created_at |
string | 任务创建时间,like: 2006-01-02T15:03:04 |
updated_at |
string | 任务更新时间,like: 2006-01-02T15:03:04 |
视频处理的结果回调
- 所有op处理结束后的结果回调
CALLBACK /v1/video/result
请求语法
POST /xxxxx HTTP/1.1
Content-Type: application/json
{
"id": <vid:string>,
"result": {
<op>: {
},
...
}
}
参数 | 类型 | 说明 |
---|---|---|
id |
string | 调用者设置的视频唯一标识 |
result |
object | 详细解释见实时处理请求返回结果 |
请求示例
{
"data": {
"uri": "http://foo.com/foo.mp4"
},
"params": {
"vframe": {
"interval": 5
}
},
"ops": [
{
"op": "terror",
"params": {
"labels": [
{
"label": "0"
}
]
}
}
]
}
{
"terror": {
"labels": [
{
"label": "0",
"score": 0.9996557
}
],
"segments": [
{
"cuts": [
{
"offset": 0,
"result": {
"label": "0",
"class": normal,
"review": false,
"score": 0.9996557
}
},
...
],
"labels": [
{
"label": "0",
"score": 0.9996557
}
],
"offset_begin": 0,
"offset_end": 0
}
]
}
}
价格
视频鉴暴恐的工作流程如下:
1)按照API里面的设置对视频进行截帧,截帧不额外收费
2)对截帧进行图片鉴暴恐
所以,视频鉴暴恐的价格最终还是图片鉴暴恐的价格,具体价格请参考。
服务价格
视频鉴暴恐是对视频截帧后,对截帧进行图片鉴暴恐,所以视频鉴暴恐价格实际使用的是截帧图片鉴暴恐的价格,与图片鉴暴恐共用范围。
例:
某月视频文件使用视频鉴暴恐服务,视频截帧的数量为400万,即视频鉴暴恐产生的图片鉴暴恐量为400万;当月图片文件使用鉴暴恐服务,其调用量为106万。则这个月总的图片鉴暴恐调用量为506万,账单金额则为:
图片鉴暴恐:
3000000*0.155/100+2000000*0.145/100=4650+2900=7550元
文档反馈
(如有产品使用问题,请 提交工单)