互动视频审核

互动视频审核针对视频直播互动解决方案,提供配套的视频流实时审核服务,检测视频流中的不良信息,并给出审核结果管控建议。
针对房间(roomId)启动审核任务后,系统会自动从传输系统拉取视频数据,周期性截图进行识别。

1. 功能描述

互动视频审核服务检测实时视频流的违规信息,异步回调返回违规结果。

提供以下审核类别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: 广告

2. 使用限制

限制类别说明
保存时长系统会自动保存疑似违规视频截图,并将文件url连同检测结果返回给用户。
保存时间为3小时,超过3小时url可能失效,请及时做好转存。
并发限制默认每个用户最多同时在运行的实时流检测任务不超过200个,更多的并发支持,请联系技术支持
拉流超时由于直播停止或者其他原因导致持续超过10分钟无法拉到流,任务将自动停止,并将事件回调给业务方,由业务侧决定是否重新发起启动任务请求。

3. 接口说明

3.1 启动任务

发起请求

事项说明
请求方法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,生成方式参考 认证鉴权
请求Bodyjson字符串,详细定义如下

请求内容

名称数据类型是否必需描述
roomId字符串房间ID,审核任务唯一标识
uids字符串数组监控的用户UID列表,为空表示监控频道内所有用户
contextJSON业务方的上下文信息,在回调时会透传该信息
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字符串该值用于回调通知请求中的签名。当使用回调时该字段必须提供。详细使用方法见结果回调说明。
  1. 审核任务以roomId作为唯一标识,同一个roomId启动多次审核任务,系统将返回错误
  2. 需要更新任务审核配置,请先停止现有审核任务

响应内容

响应报文body中的数据是JSON,具体字段说明如下:

名称类型是否必需描述
code整型请求错误码,详见 错误码
message字符串错误信息描述
traceId字符串透传请求参数中的traceId内容
roomId字符串房间ID,审核任务唯一标识
contextJSON对应请求中的context
timestamp整型当前unix时间戳,单位秒

3.2 结果回调

回调时机

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,审核任务唯一标识
contextJSON透传请求启动任务时的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,审核任务唯一标识
contextJSON对应请求中的context
timestamp整型当前unix时间戳,单位秒

3.3 查询检测结果

请求方式

事项说明
请求方法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 的结构

3.4 停止检测任务

请求方式

事项说明
请求方法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,审核任务唯一标识
contextJSON对应请求中的context
timestamp整型服务器当前unix时间戳,单位秒

3.5 查询任务列表

业务方可通过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时间戳,单位秒)
contextJSON对应启动任务时的context

4. 调用示例

以下是python代码的调用例子演示

4.1 请求启动任务

# -*- 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"
    }
}

4.2 查询任务状态和结果

# -*- 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"
}

4.3 停止任务

# -*- 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
}

5. 更新历史

版本
时间
说明
v2.2.32020-10-15图文违规识别增加标签
v2.2.22020-10-13违法违规识别增加inbed标签
v2.2.12020-09-05增加resultCallbackLevel参数,支持控制审核结果回调等级
v2.2.02020-08-31增加广告识别、图文违规识别类型; 更新暴恐识别和敏感信息识别的label
v2.1.02020-08-24增加违法违规识别类型
v2.0.02020-08-17色情识别类型增加二级标签
v1.1.02020-06-30移除启动请求参数interval,改为智能截帧审核
v1.0.02020-05-09初始版本

文档是否有解决您的问题?

有帮助 没帮助
提交成功,非常感谢您的反馈!

反馈

TOP