视频审核帮助您检测视频中的风险或违规内容,具体包括以下场景:视频智能鉴黄、视频暴恐涉政、视频图文违规、视频不良场景、视频logo、视频语音违规。本文介绍了使用API接口异步检测视频的方法。
(视频异步检测)使用说明
业务接口:/green/video/asyncscan,表示视频异步检测。
您可以调用该接口创建视频异步检测任务。关于如何构造HTTP请求,请参见请求结构;您也可以直接选用已构造好的HTTP请求,更多信息,请参见SDK概览。
计费信息:
该接口为收费接口。关于计费方式,请参见内容安全产品定价。
同时检测多个场景的情况下,将按照每个场景的检测视频截帧数量×每个场景的单价进行累加计费。如果同时检测视频中的语音内容违规,则还将增加视频时长×语音违规功能的单价的费用。
检测对象:
支持检测视频文件或视频流,且视频文件支持通过上传视频截帧图片序列或视频URL的方式进行检测。
返回结果:
异步检测任务不会实时返回检测结果,您需要通过callback或者轮询的方式获取检测结果。检测结果最长保留一小时。
callback获取检测结果:提交异步检测任务时,在请求参数中传入callback参数,用来自动接收检测结果,具体请参见(异步检测)请求参数。
轮询获取检测结果:提交异步检测任务时,无需传入callback参数;提交异步检测任务后,调用结果查询接口获取检测结果,具体请参见(视频异步检测结果查询)使用说明。
视频异步检测接口的调用逻辑如下图所示。
视频要求:
视频文件链接支持以下协议:HTTP和HTTPS。
视频文件支持以下格式:AVI、FLV、MP4、MPG、ASF、WMV、MOV、WMA、RMVB、RM、FLASH、TS。
视频大小限制:默认单个视频大小不超过200 MB。
如果您的需求超过200 MB,需要对视频进行分片处理。您可以加入钉群(钉群号:35573806)联系技术人员帮您调整大小限制。
视频流支持以下协议:RTMP、HLS、HTTP-FLV、RTSP。
视频流时长限制:单个视频流检测任务最长支持24小时,超过24小时任务自动结束。
视频检测的时间依赖于视频的下载时间。请保证被检测的视频文件所在的存储服务稳定可靠,建议您使用阿里云OSS存储服务存储视频文件。
场景 | 描述 | 检测结果分类 |
视频智能鉴黄 | 检测视频中是否包含色情内容。 | 正常、色情 |
视频暴恐涉政 | 检测视频中是否包含暴恐涉政内容。 | 正常、暴恐涉政 |
视频不良场景 | 检测视频中是否包含不良场景。 | 正常、不良场景(例如黑屏、白屏) |
视频logo | 检测视频中是否包含特定的logo。 | 正常、logo |
视频图文违规 | 检测视频中是否包含广告或违规的文字内容。 | 正常、广告或文字违规 |
视频语音违规 说明 该场景仅支持通过视频异步检测接口调用。如需使用,请参见异步检测。 | 检测视频中的语音内容是否包含违规信息。 说明 默认识别语言为中文。如果您需要识别英文内容,请联系商务经理。 | 正常、含垃圾信息、广告、涉政、暴恐、辱骂、色情、灌水、违禁、自定义(例如命中自定义关键词) |
QPS限制
本接口的单用户QPS限制为50次/秒,并发审核路数限制为20路(即同一时间只能处理20个任务,如需要提升并发路数请咨询您的商务经理)。超过限制,API调用会被限流,这可能会影响您的业务,请合理调用。
如果您对时效性要求不高,推荐您开启近线检测模式(offline),近线检测模式会在您提交任务的24小时内开始检测。
(异步检测)请求参数
名称 | 类型 | 是否必选 | 示例值 | 描述 |
bizType | String | 否 | default | |
live | Boolean | 否 | false | 是否直播。取值:
|
offline | Boolean | 否 | false | 是否近线检测模式。
说明 该参数仅适用于视频文件检测,视频流检测无需传入该参数。 |
scenes | StringArray | 是 | ["porn"] | 指定视频检测场景。取值:
|
audioScenes | StringArray | 否 | ["antispam"] | 指定视频语音检测场景,唯一取值:antispam,表示语音反垃圾。 不传入该参数时仅检测视频图像内容;如果传入该参数,则在检测视频中图像的同时,对视频中语音进行检测。 说明 如果需要检测视频语音,则不支持通过上传视频截帧序列的方式(即在task中传入frames)进行检测,您必须传入视频或视频流的URL地址(即在task中传入url)进行检测。 |
callback | String | 否 | http://www.aliyundoc.com | 检测结果回调通知您的URL,支持使用HTTP和HTTPS协议的地址。该字段为空时,您必须定时轮询检测结果。 callback接口必须支持POST方法、UTF-8编码的传输数据,以及表单参数checksum和content。内容安全按照以下规则和格式设置checksum和content,调用您的callback接口返回检测结果。
说明 您的服务端callback接口收到内容安全推送的结果后,如果返回的HTTP状态码为200,则表示接收成功,其他的HTTP状态码均视为接收失败。接收失败时,内容安全将最多重复推送16次检测结果,直到接收成功。重复推送16次后仍未接收成功,则不再推送,建议您检查callback接口的状态。 |
seed | String | 否 | abc**** | 随机字符串,该值用于回调通知请求中的签名。 由英文字母、数字、下划线(_)组成,不超过64个字符。由您自定义,用于在接收到内容安全的回调通知时校验请求由阿里云内容安全服务发起。 说明 当使用callback时,该字段必须提供。 |
cryptType | String | 否 | SHA256 | 使用回调通知时(callback),设置对回调通知内容进行加密的算法。内容安全会将返回结果(由 用户uid + seed + content 拼接的字符串)按照您设置的加密算法加密后,再发送到您的回调通知地址。取值:
|
tasks | JSONArray | 是 | 指定检测对象,JSON数组中的每个元素是一个检测任务结构体。最多支持100个元素,即每次提交100条内容进行检测,支持100个元素的前提是需要将并发任务调整到100个以上。关于每个元素的具体结构描述,请参见task。 |
名称 | 类型 | 是否必选 | 示例值 | 描述 |
clientInfo | JSONObject | 否 | {"userId":"12023****","userNick":"Mike","userType":"others"} | 客户端信息,请参见公共参数中的公共查询参数。 服务器会把全局的clientInfo和此处独立的clientInfo合并。 说明 独立的clientInfo优先级更高。 |
dataId | String | 否 | videoId**** | 检测对象对应的数据ID。 由大小写英文字母、数字、下划线(_)、短划线(-)、英文句号(.)组成,不超过128个字符,可以用于唯一标识您的业务数据。 |
liveId | String | 否 | liveId**** | 视频直播流的ID。 该参数用于视频直播任务去重,防止重复检测,如果传递该参数,会根据 |
url | String | 否 | http://www.aliyundoc.com/a.flv | 检测对象的URL。
说明 frames和url二选一。传入url字段后将按照传视频URL的方式计费。 |
frames | JSONArray | 否 | 待检测视频的截帧信息。frames中的每个元素是个结构体,关于每个元素的具体结构描述,请参见frame。 说明 frames和url二选一。传入url字段后将按照传视频URL的方式计费。 | |
framePrefix | String | 否 | http://www.aliyundoc.com/video/ | 截帧地址的前缀,与 |
interval | Integer | 否 | 1 | 视频截帧间隔,单位为秒,取值范围:1~600。默认值为1秒。 |
maxFrames | Integer | 否 | 200 |
名称 | 类型 | 是否必选 | 示例值 | 描述 |
url | String | 否 | http://www.aliyundoc.com/0B860000586C0A0300038A0460000 | 视频截帧的URL,与 |
offset | Integer | 否 | 10 | 截帧距离片头的时间戳,单位为秒。 |
(异步检测)返回数据
名称 | 类型 | 示例值 | 描述 |
taskId | String | taskId**** | 检测任务的ID。 |
dataId | String | videoId**** | 检测对象对应的数据ID。 说明 如果在检测请求参数中传入了dataId,则此处返回对应的dataId。 |
(异步检测)示例
请求示例
传入视频截帧图片序列
http(s)://[Endpoint]/green/video/asyncscan &<公共请求参数> { "scenes": [ "porn" ], "tasks": [ { "dataId": "videoId****", "frames": [ { "offset": 10, "url": "http://www.aliyundoc.com/0B860000586C0A0300038A0460000" }, { "offset": 20, "url": "http://www.aliyundoc.com/0B860000586C0A0300038A0460001" }, { "offset": 30, "url": "http://www.aliyundoc.com/0B860000586C0A0300038A0460002" }, { "offset": 40, "url": "http://www.aliyundoc.com/0B860000586C0A0300038A0460003" }, { "offset": 50, "url": "http://www.aliyundoc.com/0B860000586C0A0300038A0460003" }, { "offset": 60, "url": "http://www.aliyundoc.com/0B860000586C0A0300038A046000x" } ] } ] }
传入普通视频文件
http(s)://[Endpoint]/green/video/asyncscan &<公共请求参数> { "scenes": [ "porn" ], "audioScenes": [ "antispam" ], "tasks": [ { "dataId": "videoId****", "url": "http://www.aliyundoc.com/a.mp4", "interval": 1, "maxFrames": 200 } ] }
传入视频直播流
http(s)://[Endpoint]/green/video/asyncscan &<公共请求参数> { "scenes": [ "porn" ], "live": true, "tasks": [ { "dataId": "videoId****", "url": "http://www.aliyundoc.com/a.flv", "interval": 1, "maxFrames": 200 } ] }
正常返回示例
{
"code": 200,
"msg": "OK",
"requestId": "requestID****",
"data": [
{
"dataId": "videoId****",
"taskId": "taskId****"
}
]
}
(视频异步检测结果查询)使用说明
业务接口:/green/video/results,表示查询视频异步检测结果。
您可以调用该接口查询视频异步检测任务的结果。关于如何构造HTTP请求,请参见请求结构;您也可以直接选用已构造好的HTTP请求,更多信息,请参见SDK概览。
计费信息:
该接口不计费。
查询超时:
建议您将查询间隔设置为30秒(即在提交异步检测任务30秒后查询结果),最长不能超出4个小时,否则结果将会丢失。
QPS限制
本接口的单用户QPS限制为50次/秒。超过限制,API调用会被限流,这可能会影响您的业务,请合理调用。
(结果查询)请求参数
名称 | 类型 | 是否必选 | 示例值 | 描述 |
body | JSONArray | 是 | ["taskId****","taskId****"] | 要查询的检测任务的taskId列表。数组中的元素个数不超过100个。 您在提交检测任务后,可以从返回数据中获取检测任务的taskId。 |
(结果查询)返回数据
名称 | 类型 | 示例值 | 描述 |
code | Integer | 200 | 错误码,和HTTP状态码一致。 更多信息,请参见公共错误码。 |
msg | String | OK | 请求信息的响应信息。 |
dataId | String | videoId**** | 检测对象对应的数据ID。 说明 如果在检测请求参数中传入了dataId,则此处返回对应的dataId。 |
taskId | String | taskId**** | 检测任务的ID。 |
results | JSONArray | 返回结果,调用成功时(code=200),返回结果中包含一个或多个元素。每个元素是个结构体,具体结构描述,请参见result。 说明 视频流检测场景中,code返回280表示在检测中,返回200表示检测完成。在检测中状态时,检测结果中包含从开始检测到当前时间检测到的结果。 | |
audioScanResults | JSONArray | 视频语音检测结果。具体结构描述,请参见audioScanResult。 |
名称 | 类型 | 示例值 | 描述 |
scene | String | porn | 视频检测场景,和调用请求中的场景对应。取值:
|
label | String | porn | 视频检测结果的分类。不同检测场景的结果分类不同,具体如下:
|
sublabel | String | porn | 如果检测场景包含智能鉴黄(porn)和暴恐涉政(terrorism),则该字段可以返回检测结果的细分类标签。 该字段默认不会返回。如果有需要,请加入钉群(钉群号:35573806),联系产品技术专家进行咨询。 |
suggestion | String | block | 建议您执行的后续操作。取值:
|
rate | Float | 99.2 | 置信度分数,取值范围:0(表示置信度最低)~100(表示置信度最高)。 如果suggestion为pass,则置信度越高,表示内容正常的可能性越高;如果suggestion为review或block,则置信度越高,表示内容违规的可能性越高。 重要 建议您参考suggestion和label(或者部分接口返回的sublabel)结果用于内容违规判定。 |
frames | JSONArray | 包含违规内容的视频截帧的信息。具体结构描述,请参见frame。 | |
hintWordsInfo | JSONArray | 视频中含有广告或文字违规信息时,返回视频中广告文字命中的风险关键词信息。具体结构描述,请参见hintWordsInfo。 说明 只有图文违规(ad)场景会返回该结果。 | |
logoData | JSONArray | 视频中含有logo时,返回识别出来的logo信息,具体结构描述,请参见logoData。 说明 只有视频logo(logo)场景会返回该结果。 | |
sfaceData | JSONArray | 视频中包含暴恐识涉政内容时,返回识别出来的暴恐涉政信息,具体结构描述,请参见sfaceData。 说明 只有视频暴恐涉政(terrorism)场景会返回该结果。 |
名称 | 类型 | 示例值 | 描述 |
url | String | http://www.aliyundoc.com/0B860000586C0A0 | 视频截帧的地址。 说明 若开启了视频证据转存,则返回转存的视频截帧的OSS URL链接。更多信息,请参见检测结果。 |
offset | Integer | 50 | 视频截帧距离片头的时间戳,单位:秒。 |
label | String | porn | 视频截帧的检测结果分类。不同检测场景的结果分类不同,具体如下:
|
rate | Float | 99.1 | 置信度分数,取值范围:0~100,置信度越高表示检测结果的可信度越高。建议您不要在业务中使用该分数。 |
名称 | 类型 | 示例值 | 描述 |
scene | String | antispam | 视频语音检测场景,唯一取值:antispam,表示语音反垃圾。 |
label | String | customized | 视频语音的检测结果分类。不同检测场景的结果分类不同,具体如下:
|
suggestion | String | block | 建议您执行的后续操作。取值:
|
rate | Float | 99.91 | 置信度分数,取值范围:0(表示置信度最低)~100(表示置信度最高)。 如果suggestion为pass,则置信度越高,表示内容正常的可能性越高;如果suggestion为review或block,则置信度越高,表示内容违规的可能性越高。 重要 建议您参考suggestion和label(或者部分接口返回的sublabel)结果用于内容违规判定。 |
details | JSONArray | 语音对应的文本详情(每一句文本对应一个元素),包含一个或者多个元素,具体结构描述,请参见detail。 |
名称 | 类型 | 示例值 | 描述 |
startTime | Integer | 24 | 句子开始的时间,单位为秒。 |
endTime | Integer | 60 | 句子结束的时间,单位为秒。 |
text | String | 计算机 | 语音转换成文本的结果。 |
label | String | normal | 该句语音的检测结果分类。取值:
|
keyword | String | 开启 | 如果命中了用户自定义关键词,返回命中的关键词。 |
libName | String | 人工 | 如果命中了用户自定义关键词,返回关键词所在词库。 |
名称 | 类型 | 示例值 | 描述 |
type | String | TV | 识别出的logo类型,取值为TV (台标)。 |
name | String | ***台 | 识别出的logo名称。 |
x | Float | 140 | 以图片左上角为坐标原点,logo区域左上角到y轴距离,单位:像素。 |
y | Float | 68 | 以图片左上角为坐标原点,logo区域左上角到x轴距离,单位:像素。 |
w | Float | 106 | logo区域宽度,单位:像素。 |
h | Float | 106 | logo区域高度,单位:像素。 |
名称 | 类型 | 示例值 | 描述 |
x | Float | 444 | 以图片左上角为坐标原点,人脸区域左上角到y轴距离。 |
y | Float | 174 | 以图片左上角为坐标原点,人脸区域左上角到x轴距离。 |
w | Float | 467 | 人脸区域宽度。 |
h | Float | 467 | 人脸区域高度。 |
smileRate | Float | 0 | 微笑的概率。 |
glasses | Boolean | false | 是否戴眼镜。 |
faces | Array | 识别出的人脸信息。关于具体结构描述,请参见下表face。 |
名称 | 类型 | 示例值 | 描述 |
name | String | xxxx | 相似人物的名称。 |
rate | Float | 97.03 | 相似概率。 |
id | String | AliFace_001**** | 人脸ID。 |
名称 | 类型 | 示例值 | 描述 |
context | String | xxxx | 文字命中的自定义文本内容。 |
libCode | String | 69751 | 文字命中的自定义文本内容对应的库code。 |
libName | String | 人工 | 文字命中的自定义文本内容对应的库名称。 |
名称 | 类型 | 示例值 | 描述 |
context | String | xxxx | 文字命中的风险关键词内容。 |
(结果查询)示例
请求示例
http(s)://[Endpoint]/green/video/results
&<公共请求参数>
[
"taskId****",
"taskId****"
]
正常返回示例
仅检测视频图画
{ "code": 200, "msg": "OK", "requestId": "requestID****", "data": [ { "code": 200, "msg": "OK", "dataId": "videoId****", "taskId": "taskId****", "results": [ { "label": "porn", "rate": 99.2, "scene": "porn", "suggestion": "block" } ] } ] }
同时检测视频图画和视频语音
{ "code": 200, "msg": "OK", "requestId": "requestID****", "data": [ { "code": 200, "msg": "OK", "dataId": "videoId****", "taskId": "taskId****", "results": [ { "label": "porn", "rate": 99.2, "scene": "porn", "suggestion": "block" } ], "audioScanResults": [ { "scene": "antispam", "label": "customized", "suggestion": "block", "rate": 99.91, "details": [ { "startTime": 0, "endTime": 24, "text": "计算机", "label": "customized" }, { "startTime": 24, "endTime": 60, "text": "计算机", "label": "normal" } ] } ] } ] }