互动视频审核针对视频直播互动解决方案,提供配套的视频流实时审核服务,检测视频流中的不良信息,并给出审核结果管控建议。
针对房间(roomId)启动审核任务后,系统会自动从传输系统拉取视频数据,周期性截图进行识别。
互动视频审核服务检测实时视频流的违规信息,异步回调返回违规结果。
提供以下审核类别action和对应的标签label:
检测类型 | 说明 | action | 一级label | 二级label |
---|---|---|---|---|
色情识别 | 识别图片中的色情、性感等违规内容 | porn | ||
normal: 正常 | normal: 正常 | |||
sexy: 性感 | female_underwear: 女性内衣内裤 female_sexy_chest_l12: 女性露沟12级 female_sexy_chest_l3: 女性露沟3级 female_sexy_chest_l4: 女性露沟4级 female_backless: 女性露背 female_sexy_leg: 女性露腿过臀线 female_focus_leg: 聚焦女性长腿 bathing_suit: 女性沙滩泳衣 male_topless: 男性赤裸上半身【露出乳头位置】 male_normal_topless: 男性赤裸上半身【未到乳头位置】 other_sexy: 其他性感 |
|||
porn: 色情 | sex_product: 性用品 naked_private_part: 裸露敏感部位 extensive_naked: 大面积裸露,但未裸露敏感部位 sex_behavior: 性行为 naked_female_back: 女性上半身未穿【背部】 naked_hip: 露臀沟 sex_bulge: 敏感部位激凸 focus_female_crotch: 聚焦女性裆部、拍摄女性底裤 focus_male_crotch: 聚焦男性裆部及下半身 hand_on_sexy: 手抚摸、抓敏感部位 lick: 舔手舔脚舔物 kiss: 接吻 sm: SM sperm: 精液 naked_child: 儿童裸露 other_dirty: 其他低俗 tongue_out: 吐舌头 female_focus_hip: 聚焦女性臀部 male_underwear: 男性内裤 porn_pip: 画中画小窗口色情 |
|||
暴恐识别 | 识别图片中的血腥、暴恐等违规内容 | terrorism | normal: 正常 fire_explosion: 爆炸/烟光 gun: 枪支 knife: 刀具 crowd: 人口聚集 flag_of_terrorism: 恐怖主义旗帜 special_dress: 特殊着装 disgusted: 恶心不适 with_weapon: 武器携带 bloody: 血腥画面 uniform: 军警制服 |
无 |
敏感信息识别 | 识别图片中的敏感信息内容 | antispam | normal: 正常 special_building: 中国地标建筑 rmb: 人民币 map_of_China: 中国地图 cartoons_of_leaders: 领导人漫画 flags_of_China: 中国旗帜(原中国国旗) Tibetan_buddhism: 藏传佛教 other_antispam: 其他敏感信息(银河邪教组织、国殇之柱\民主女神) tank: 坦克、装甲车 fighter: 战斗机 cannon: 大炮 battleship: 战舰 |
无 |
敏感人物识别 | 识别图片中是否包含国内外政治人物、公众人物 | sface | normal: 正常 sface: 包含敏感人物 |
无 |
违法违规识别 | 识别图片中是否包含违法违规场景信息 | illegal | normal: 正常 minor: 未成年人 drug: 吸毒 drive: 开车直播 gamble: 赌博 smoke: 吸烟 id_infomation: 身份证件 tattoo: 社会纹身 inbed: 躺播 |
无 |
广告识别 | 识别图片中是否包含广告信息 | ad | normal: 正常 QR_code: 二维码 bar_code: 条形码 applet_code: 小程序码 |
无 |
图文违规识别 | 识别图片中是否包含疑似违规文字信息 | ocr | normal: 正常 ocr_politics: 涉政 ocr_terrorism: 涉暴 ocr_porn: 涉黄 ocr_illegal: 违法 ocr_abuse: 辱骂 ocr_ad: 广告 |
无 |
限制类别 | 说明 |
---|---|
保存时长 | 系统会自动保存疑似违规视频截图,并将文件url连同检测结果返回给用户。 保存时间为3小时,超过3小时url可能失效,请及时做好转存。 |
并发限制 | 默认每个用户最多同时在运行的实时流检测任务不超过200个,更多的并发支持,请联系技术支持 |
拉流超时 | 由于直播停止或者其他原因导致持续超过10分钟无法拉到流,任务将自动停止,并将事件回调给业务方,由业务侧决定是否重新发起启动任务请求。 |
事项 | 说明 |
---|---|
请求方法 | POST |
请求协议 | HTTPS |
请求域名 | ai.jocloud.com |
请求路径 | app/{appId}/v1/video/stream/start?traceId=xxxxx |
请求参数 | appId为用户的应用ID traceId为uuid字符串,用于排查问题时对账,建议每次请求使用不同值 |
请求头部 | Content-Type: application/json;charset=UTF-8 token: 鉴权token,生成方式参考 认证鉴权 |
请求Body | json字符串,详细定义如下 |
名称 | 数据类型 | 是否必需 | 描述 |
---|---|---|---|
roomId | 字符串 | 是 | 房间ID,审核任务唯一标识 |
uids | 字符串数组 | 否 | 监控的用户UID列表,为空表示监控频道内所有用户 |
context | JSON | 否 | 业务方的上下文信息,在回调时会透传该信息 |
actions | 字符串数组 | 是 | 检测类型,可选值包括: - porn: 色情识别 - terrorism: 暴恐识别 - antispam: 敏感信息识别 - sface: 敏感人物识别 - illegal: 违法违规识别 - ad: 广告识别 - ocr: 图文违规识别 |
statusCallback | 字符串 | 否 | 审核状态的http回调地址(支持http和https协议) |
resultCallback | 字符串 | 否 | 审核结果的http回调地址(支持http和https协议) |
resultCallbackLevel | 字符串 | 否 | 结果回调级别控制,可用以下其中之一: - pass: 所有审核结果都会回调 - review: 在识别到有review和block结果的时候才会回调 - block: 在识别到有block结果的时候才会回调 默认为pass,全部结果都回调 |
sequence | 字符串 | 否 | 该值用于回调通知请求中的签名。当使用回调时该字段必须提供。详细使用方法见结果回调说明。 |
- 审核任务以roomId作为唯一标识,同一个roomId启动多次审核任务,系统将返回错误
- 需要更新任务审核配置,请先停止现有审核任务
响应报文body中的数据是JSON,具体字段说明如下:
名称 | 类型 | 是否必需 | 描述 |
---|---|---|---|
code | 整型 | 是 | 请求错误码,详见 错误码 |
message | 字符串 | 是 | 错误信息描述 |
traceId | 字符串 | 是 | 透传请求参数中的traceId内容 |
roomId | 字符串 | 是 | 房间ID,审核任务唯一标识 |
context | JSON | 否 | 对应请求中的context |
timestamp | 整型 | 是 | 当前unix时间戳,单位秒 |
1)当检测到实时流包含出现违规信息时,调用resultCallback提供的地址,通知用户放检测结果;
2)当检测任务中指定roomid所有直播流都已经超时超过10分钟时,调用statusCallback提供的地址,通知用户方任务状态。
- 启动任务resultCallback和statusCallback可以为空,为空时用户可以通过查询接口获得任务状态和结果;
- 用户如果需要使用回调方式获得结果和任务状态,必须保证回调HTTP服务工作稳定;
- 当回调地址访问失败 或者 返回状态码非200,后台将 最多重试5次 。
使用 HTTPS POST 方式访问用户提供的url地址,状态和结果以JSON串格式填在http请求body中,具体格式见下一小节。
为了防止内容被篡改,在http请求header增加一个checksum项用于校验内容是否合法。
checksum串的生成方式如下:
启动任务参数携带的sequence + body字符串数据,通过SHA256算法生成checksum值
名称 | 数据类型 | 是否必需 | 描述 |
---|---|---|---|
roomId | 字符串 | 是 | 房间ID,审核任务唯一标识 |
context | JSON | 否 | 透传请求启动任务时的context参数 |
timestamp | 整型 | 是 | 服务器当前unix时间戳,单位秒 |
uid | 字符串 | 是 | 用户UID |
results[] | JSON数组 | 否 | 返回结果数据。每个元素表示一种action的处理结果,具体结构见下方result表 |
表. result
名称 | 类型 | 是否必需 | 描述 |
---|---|---|---|
code | 整型 | 是 | 检测错误码,详见 错误码 |
message | 字符串 | 是 | 错误信息描述 |
action | 字符串 | 是 | 检测类型,和调用请求中的检测类型(actions)对应 |
label | 字符串 | 是 | 检测结果标签,取值与action有关。具体取值参见上面审核类型及对应标签说明表 |
rate | 浮点数 | 是 | 检测结果标签的概率,取值范围在[0.00 - 1.00],值越大表示可信度越高 |
suggestion | 字符串 | 是 | 建议您执行的操作,取值范围: - pass: 正常,无需操作; - block: 违规,建议做违规处罚; - review: 疑似,检测结果不确定,需要进一步人工审核; |
extraData[] | JSON数组 | 否 | 当action为terrorism、antispam、illegal时,该字段不存在。 敏感人物识别(sface)数组元素是检测到的每个人脸信息,元素详细请看sface-extraData表 色情识别(porn)数组元素是检测到的二级标签信息,元素详细情况porn-extraData表 |
(1)当action为sface时,result->extraData数组中元素结构如下
表. sface-extraData
名称 | 类型 | 是否必需 | 描述 |
---|---|---|---|
label | 字符串 | 是 | 检测到的人脸标签 |
rate | 浮点数 | 是 | 检测结果标签的概率,取值范围在[0.00 - 1.00],值越大,表示可信度越高 |
name | 字符串 | 是 | 检测到的敏感人物名字 |
x | 整型 | 是 | 检测到的人脸左上角在图片中的横坐标 |
y | 整型 | 是 | 检测到的人脸左上角在图片中的纵坐标 |
w | 整型 | 是 | 检测到的人脸宽度 |
h | 整型 | 是 | 检测到的人脸高度 |
(2)当action为porn时,result->extraData数组中元素结构如下
表. porn-extraData
名称 | 类型 | 是否必需 | 描述 |
---|---|---|---|
label | 字符串 | 是 | 检测到的二级标签 |
rate | 浮点数 | 是 | 检测结果标签的概率,取值范围在[0.00 - 1.00],值越大,表示可信度越高 |
名称 | 类型 | 是否必需 | 描述 |
---|---|---|---|
code | 整型 | 是 | 432: 对应roomid超过10分钟没有直播流而被停止任务 |
message | 字符串 | 是 | 错误信息描述 |
traceId | 字符串 | 是 | 透传启动请求参数中的traceId内容 |
roomId | 字符串 | 是 | 房间ID,审核任务唯一标识 |
context | JSON | 否 | 对应请求中的context |
timestamp | 整型 | 是 | 当前unix时间戳,单位秒 |
事项 | 说明 |
---|---|
请求方法 | GET |
请求协议 | HTTPS |
请求域名 | ai.jocloud.com |
请求路径 | app/{appId}/v1/video/stream/results?traceId=xxxxx&roomId=xxxxxx |
请求参数 | appId为用户的应用ID traceId为uuid字符串,用于排查问题时对账,建议每次请求使用不同值 roomId为需要查询的审核任务对应的房间ID |
请求头部 | Content-Type: application/json;charset=UTF-8 token: 鉴权token,生成方式参考 认证鉴权 |
名称 | 类型 | 是否必需 | 描述 |
---|---|---|---|
code | 整型 | 是 | 请求错误码,详见 错误码 |
message | 字符串 | 是 | 错误信息描述 |
traceId | 字符串 | 是 | 透传请求参数中的traceId内容 |
roomId | 字符串 | 是 | 房间ID,审核任务唯一标识 |
context | 字符串 | 否 | 用户上下文,对应启动任务参数中的context |
status | 字符串 | 是 | 任务状态 (running-运行中,stopped-正常停止,error-出错) |
errCode | 整型 | 是 | 任务状态码 |
errMessage | 字符串 | 是 | 描述信息 |
timestamp | 整型 | 是 | 当前unix时间戳,单位秒 |
results[] | results数组 | 否 | 存放最近多次结果数据。调用成功时(code==200),数组中每个元素是下面 表. results 的结构 |
表. results
名称 | 类型 | 是否必需 | 描述 |
---|---|---|---|
uid | 字符串 | 是 | 用户UID |
timestamp | 整型 | 是 | 识别结果时间(unix时间戳,单位秒) |
result[] | result数组 | 否 | 存放多个action识别结果数据。数组中每个元素是 表. result 的结构 |
事项 | 说明 |
---|---|
请求方法 | POST |
请求协议 | HTTPS |
请求域名 | ai.jocloud.com |
请求路径 | app/{appId}/v1/video/stream/stop?traceId=xxxxx&roomId=yyyy |
请求参数 | appId为用户的应用ID traceId为uuid字符串,用于排查问题时对账,建议每次请求使用不同值 roomId为需要停止的审核任务对应的房间ID |
请求头部 | Content-Type: application/json;charset=UTF-8 token: 鉴权token,生成方式参考 认证鉴权 |
返回body中的数据是JSON,具体字段说明如下:
名称 | 类型 | 是否必需 | 描述 |
---|---|---|---|
code | 整型 | 是 | 请求错误码,详见 错误码 |
message | 字符串 | 是 | 错误信息描述 |
traceId | 字符串 | 是 | 透传请求参数中的traceId内容 |
roomId | 字符串 | 是 | 房间ID,审核任务唯一标识 |
context | JSON | 否 | 对应请求中的context |
timestamp | 整型 | 是 | 服务器当前unix时间戳,单位秒 |
业务方可通过http请求获取到当前任务列表信息,以下为请求方式说明:
事项 | 说明 |
---|---|
请求方法 | GET |
请求协议 | HTTPS |
请求域名 | ai.jocloud.com |
请求路径 | app/{appId}/v1/video/stream/tasks?traceId=xxxxx |
请求参数 | appId为用户的应用ID traceId为uuid字符串,用于排查问题时对账,建议每次请求使用不同值 |
请求头部 | Content-Type: application/json;charset=UTF-8 token: 鉴权token,生成方式参考 认证鉴权 |
返回body中的数据是JSON,具体字段说明如下:
名称 | 类型 | 是否必需 | 描述 |
---|---|---|---|
code | 整型 | 是 | 请求错误码,详见 错误码 |
message | 字符串 | 是 | 错误信息描述 |
traceId | 字符串 | 是 | 透传请求参数中的traceId内容 |
timestamp | 整型 | 是 | 服务器当前unix时间戳,单位秒 |
tasks[] | JSON对象数组 | 是 | 任务列表信息,其中每一项的内容结构见下方 表task 定义 |
表. task
名称 | 类型 | 是否必需 | 描述 |
---|---|---|---|
roomId | 字符串 | 是 | 对应启动任务时的roomId |
uids | 字符串数组 | 是 | 对应启动任务时的uids |
timestamp | 整型 | 是 | 对应启动任务时间(unix时间戳,单位秒) |
context | JSON | 否 | 对应启动任务时的context |
以下是python代码的调用例子演示
# -*- coding: utf-8 -*-
#! python3.5
import requests
import uuid
import base64
host = "https://ai.jocloud.com"
appid = 1234567890 # 您的业务ID
restful_id = '**********' # 您的证书ID
restful_secret = '**********' # 您的证书秘钥
traceid = str(uuid.uuid4())
roomid = 'test-room-1'
# url
url = host + '/app/%s/v1/video/stream/start?traceId=%s' % (appid, traceid)
# headers
headers = {
"content-type": "application/json"
}
auth = base64.b64encode(("%s:%s" % (restful_id, restful_secret)).encode('utf-8'))
headers['token'] = 'Base ' + auth.decode()
# 业务放需要使用到的上下文信息,便于在回调消息中协助后续处理,例如:
context = {
'myid': 123,
'myname': 'test'
}
# 识别结果及状态的回调地址,识别结果及状态通知将会通过http POST回调
resultCallback = 'http://192.168.1.100:12345/result'
statusCallback = 'http://192.168.1.100:12345/status'
# content
values = {
'roomId': roomid,
'uids': [],
'context': context,
'actions': ['porn'],
'resultCallback': resultCallback,
'statusCallback': statusCallback,
'sequence': 'test'
}
# request
res = requests.post(url, json=values, headers=headers)
print ('code=%s, data=%s\n' % (res.status_code, res.text))
调用结果返回如下:
{
"code": 200,
"message": "OK",
"traceId": "f35a8abb-db6c-48f2-af7e-f6c0921b7b0d",
"roomId": "test-room-1",
"timestamp": 1576567090,
"context": {
"myid": 123,
"myname": "test"
}
}
# -*- coding: utf-8 -*-
#! python3.5
import requests
import uuid
import base64
host = "https://ai.jocloud.com"
appid = 1234567890 # 您的业务ID
restful_id = '**********' # 您的证书ID
restful_secret = '**********' # 您的证书秘钥
traceid = str(uuid.uuid4())
roomid = 'test-room-1'
# url
url = host + '/app/%s/v1/video/stream/results?traceId=%s&roomId=%s' % (appid, traceid, roomid)
# headers
headers = {
"content-type": "application/json"
}
auth = base64.b64encode(("%s:%s" % (restful_id, restful_secret)).encode('utf-8'))
headers['token'] = 'Base ' + auth.decode()
# request
res = requests.get(url, headers=headers)
print ('url=%s\ncode=%s\ndata=%s\n' % (url, res.status_code, res.text))
调用结果返回如下:
{
"code": 200,
"message": "OK",
"traceId": "fe0a8278-0ed6-4c74-80ab-fb1066605227",
"roomId": "test-room-1",
"timestamp": 1576567239,
"context": {
"myid": 123,
"myname": "test"
},
"results": [
{
"uid": 123456,
"result": [
{
"action": "porn",
"label": "normal",
"rate": 0.99952548742294312,
"suggestion": "pass",
"url": "http://jocloud-ai-openapi.oss-cn-hangzhou.aliyuncs.com/live/10034/cccc2dcc-5472-4fbf-ae1b-5a906ea46c46.jpg",
"extraData": []
}
],
"timestamp": 1576567233
}
],
"status": "running"
}
# -*- coding: utf-8 -*-
#! python3.5
import requests
import uuid
import base64
host = "https://ai.jocloud.com"
appid = 1234567890 # 您的业务ID
restful_id = '**********' # 您的证书ID
restful_secret = '**********' # 您的证书秘钥
traceid = str(uuid.uuid4())
roomid = 'test-room-1'
# headers
headers = {
"content-type": "application/json"
}
auth = base64.b64encode(("%s:%s" % (restful_id, restful_secret)).encode('utf-8'))
headers['token'] = 'Base ' + auth.decode()
# url
url = host + '/app/%s/v1/video/stream/stop?traceId=%s&roomId=%s' % (appid, traceid, roomid)
# request
res = requests.post(url, json={}, headers=headers)
print ('url=%s\ncode=%s\ndata=%s\n' % (url, res.status_code, res.text))
调用结果返回如下:
{
"code": 200,
"message": "OK",
"traceId": "9eb28f1d-a307-4e93-bcf4-66e531aa12f1",
"roomId": "test-room-1",
"context": {
myid": 123,
myname": "test"
},
"timestamp": 1576567306
}
版本 | 时间 | 说明 |
---|---|---|
v2.2.3 | 2020-10-15 | 图文违规识别增加标签 |
v2.2.2 | 2020-10-13 | 违法违规识别增加inbed标签 |
v2.2.1 | 2020-09-05 | 增加resultCallbackLevel参数,支持控制审核结果回调等级 |
v2.2.0 | 2020-08-31 | 增加广告识别、图文违规识别类型; 更新暴恐识别和敏感信息识别的label |
v2.1.0 | 2020-08-24 | 增加违法违规识别类型 |
v2.0.0 | 2020-08-17 | 色情识别类型增加二级标签 |
v1.1.0 | 2020-06-30 | 移除启动请求参数interval,改为智能截帧审核 |
v1.0.0 | 2020-05-09 | 初始版本 |