互动音频审核针对音频互动解决方案,提供配套的音频流实时审核服务,检测音频流中的不良信息,并给出审核结果管控建议。
针对房间(roomId)启动审核任务后,系统会自动从传输系统拉取音频数据,周期性分段进行识别。
互动音频审核服务检测实时音频流的违规信息,异步回调返回违规结果。
提供以下审核类别action和对应的标签label:
审核类别 | 说明 | action | label |
---|---|---|---|
娇喘识别 | 检测音频文件的声纹特征,识别其中的娇喘等违规特征 | porn | normal: 正常 moan: 娇喘 |
敏感词识别 | 翻译音频文件的文字信息,识别其中的敏感违规内容 | antispam | normal:正常 terrorism:暴力恐怖 porn:色情低俗 illegal:违法违规 politics:涉政敏感 abuse:谩骂灌水 ad:广告欺诈 feudalism:封建迷信 religion:宗教敏感 affairs:时事舆情 contraband:违禁物品 minors:未成年人 banned-website:非法网址 |
音转文识别 | 翻译音频文件的文字信息 | asr | normal: 正常 |
限制类别 | 说明 |
---|---|
保存时长 | 系统会自动保存疑似违规音频片段,并将文件url连同检测结果返回给用户。 保存时间为3小时,超过3小时url可能失效,请及时做好转存。 |
并发限制 | 默认每个用户最多同时在运行的实时流检测任务不超过200个,更多的并发支持,请联系技术支持 |
拉流超时 | 由于直播停止或者其他原因导致持续超过10分钟无法拉到流,任务将自动停止,并将事件回调给业务方,由业务侧决定是否重新发起启动任务请求。 |
事项 | 说明 |
---|---|
请求方法 | POST |
请求协议 | HTTPS |
请求域名 | ai.jocloud.com |
请求路径 | app/{appId}/v1/audio/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:声音娇喘识别 - antispam:敏感词识别 - asr:音转文识别 |
statusCallback | 字符串 | 否 | 审核状态的http回调地址(支持http和https协议) |
resultCallback | 字符串 | 否 | 审核结果的http回调地址(支持http和https协议) |
resultCallbackLevel | 字符串 | 否 | 结果回调级别控制,可用以下其中之一: - pass: 所有审核结果都会回调 - review: 在识别到有review和block结果的时候才会回调 - block: 在识别到有block结果的时候才会回调 默认为pass,全部结果都回调 |
sequence | 字符串 | 否 | 该值用于回调通知请求中的签名。当使用回调时该字段必须提供。详细使用方法见结果回调说明。 |
extra | JSON | 否 | 附加配置,定义见下表 |
表. extra
名称 | 类型 | 描述 |
---|---|---|
lang | 字符串 | antispam 敏感词检测使用的语言,默认为中文,可选值: - chinese:中文 - bahasa:印尼语 |
注意事项:
- 审核任务以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 | 字符串 | 是 | 检测类型,和调用请求中的检测类型action对应 |
label | 字符串 | 是 | 检测结果标签,取值与action有关。具体取值参见上面审核类型及对应标签说明表 |
rate | 浮点数 | 是 | 检测结果标签的概率,取值范围在[0.00 - 1.00],值越大表示可信度越高 |
suggestion | 字符串 | 是 | 建议您执行的操作,取值范围: - pass: 正常,无需操作 - review: 疑似,检测结果不确定,需要进一步人工审核 - block: 违规,建议做违规处罚 |
url | 字符串 | 否 | 违规音频段对应的保存地址(注意:只有识别为违规的音频片段才会保留,保存时间为3小时,超过3小时url可能失效,请及时做好转存) |
text | 字符串 | 否 | 音频片段的文本内容。当action为antispam或asr时才会存在该字段。 |
extraData[] | JSON数组 | 否 | 检测结果扩展信息,审核类别为“antispam”时才会携带,详见下面表.antispam-extraData |
表. antispam-extraData
名称 | 类型 | 是否必需 | 描述 |
---|---|---|---|
hint | Json数组 | 否 | 命中的关键字 |
label | 字符串 | 否 | 命中的关键字所属类型 |
rate | 浮点数 | 否 | 无意义,恒为"1.0" |
名称 | 类型 | 是否必需 | 描述 |
---|---|---|---|
code | 整型 | 是 | 432: 对应roomid超过10分钟没有直播流而被停止任务 |
message | 字符串 | 是 | 错误信息描述 |
traceId | 字符串 | 是 | 透传启动请求参数中的traceId内容 |
roomId | 字符串 | 是 | 房间ID,审核任务唯一标识 |
context | JSON | 否 | 对应请求中的context |
timestamp | 整型 | 是 | 当前unix时间戳,单位秒 |
事项 | 说明 |
---|---|
请求方法 | GET |
请求协议 | HTTPS |
请求域名 | ai.jocloud.com |
请求路径 | app/{appId}/v1/audio/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),数组中每个元素是下面 表2. results 的结构 |
表. results
名称 | 类型 | 是否必需 | 描述 |
---|---|---|---|
uid | 字符串 | 是 | 用户UID |
timestamp | 整型 | 是 | 识别结果时间(unix时间戳,单位秒) |
result[] | result数组 | 否 | 存放多个action识别结果数据。数组中每个元素是 表. result 的结构 |
事项 | 说明 |
---|---|
请求方法 | POST |
请求协议 | HTTPS |
请求域名 | ai.jocloud.com |
请求路径 | app/{appId}/v1/audio/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/audio/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/audio/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/audio/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.aac",
"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/audio/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",
"timestamp": 1576567306,
"context": {
"myid": 123,
"myname": "test"
}
}
版本 | 时间 | 说明 |
---|---|---|
V1.2.0 | 2020-10-14 | 增加asr功能支持 |
v1.1.0 | 2020-09-05 | 增加resultCallbackLevel参数,支持控制审核结果回调等级 |
v1.0.0 | 2020-05-09 | 初始版本 |