语音质检API
接口描述:
语音质检接口可以通过声道进行说话人区分,或者通过模型(8953)对单声道音频进行说话人区分。并且支持创建质检规则,对符合质检规则的ASR文本进行标记。
准备工作
1、账户创建及appid鉴权信息获取可参考快速开发指南-准备工作。
2、access_token鉴权信息获取,可参考鉴权认证机制。
可点击下载python demo示例代码进行测试。
语音质检
语音质检任务创建
请求接口:http://aip.baidubce.com/rest/2.0/speech/publiccloudspeech/v1/voice/detection
HTTP 方法:POST
Headers参数:
| 参数 | 参数值 | 是否必须 |
|---|---|---|
| Content-Type | application/json | 是 |
Body参数如下:
| 参数名称 | 位置 | 类型 | 是否必须 | 说明 |
|---|---|---|---|---|
| access_token | body | string | 是 | 携带用户信息的access_token |
| speech_url | body | string | url和data二选一 | 可外网访问的音频文件url链接 |
| speech_data | body | string | url和data二选一 | 音频文件base64结果 |
| session_id | body | string | 是 | 音频质检任务唯一标识 |
| sample_rate | body | integer | 否 | 音频采样率可选择8000或16000,默认8000 |
| pid | body | integer | 是 | 音频识别模型id,可选择80006 |
| callback_url | body | string | 否 | 质检后结果回调路径 |
| role_num | body | integer | 否 | pid为80006时,由声道区分说话人数,只允许1/2,默认为1 pid为8953时由算法自动判断说话人,本参数无需填写 |
| enable_detection | body | boolean | 否 | 是否进行质检,默认false |
| enable_detection_detail | body | boolean | 否 | 是否返回质检结果详情,默认false |
| is_split_channel | body | boolean | 否 | 是否进行左右声道拆分,默认false 当开启为true时,计费时长=左声道有效时长(不含静音)+右声道有效时长(不含静音)(pid使用8953时参数传false) |
| categories | body | array[string] | 否 | 应用到质检的规则,不填写默认全部 |
识别模型 pid 参数
| pid | 模型 | 备注 |
|---|---|---|
| 80006 | 中文音视频字幕模型 | 轻微噪音环境识别 |
| 8953 | 中文话者分离模型 | 支持区分说话人 |
Body请求示例:
{
"access_token": "24.a7179f3da2d56aXXXXXXXXXXXXXXXX",
"speech_url": "https://xxxxx.wav",
"speech_data": "base64",
"session_id": "test20240220",
"sample_rate":16000,
"pid": 80006,
"role_num": 1,
"callback_url": "",
"enable_detection_detail": true,
"enable_detection": true ,
"is_split_channel": false
}返回结果:
| 参数名称 | 类型 | 必选 | 说明 |
|---|---|---|---|
| error_code | integer | 是 | 请求状态码 |
| error_message | string | 是 | 请求状态 |
| result | object | 是 | |
| + session_id | string | 是 | 音频质检任务唯一标识 |
返回示例:
{
"error_code": 0,
"error_message": "请求成功",
"result": {
"session_id": "test20240220"
}
}语音质检任务查询
请求接口:http://aip.baidubce.com/rest/2.0/speech/publiccloudspeech/v1/voice/detection/result
HTTP 方法:GET
Headers参数:
| 参数 | 参数值 | 是否必须 |
|---|---|---|
| Content-Type | application/json | 是 |
Body参数如下:
| 名称 | 位置 | 类型 | 必选 | 说明 |
|---|---|---|---|---|
| access_token | body | string | 是 | 携带用户信息的access_token |
| session_id | body | string | 是 | 音频质检任务唯一标识 |
Body请求示例:
{
"access_token": "24.a7179f3da2d56aXXXXXXXXXXXXXXXX",
"session_id": "test20240220"
}返回结果:
| 参数名称 | 类型 | 必选 | 说明 |
|---|---|---|---|
| error_code | integer | 是 | 请求状态码 |
| error_message | string | 是 | 请求状态 |
| result | object | 是 | 语音质检结果 |
| +push_status_desc | string | 是 | 推送状态描述 |
| +session_id | string | 是 | 音频唯一标识 |
| +state | integer | 是 | 质检过程的状态,不等于0、1、2为处理失败 |
| +state_desc | string | 是 | 质检过程的状态描述分别为: "任务已提交,排队等待中" "执行中" "处理成功" |
| +asr_text | string | 是 | 音频文件转写结果,句与句之间空格 |
| +call_duration | integer | 是 | 通话持续时长,单位秒 |
| +silence_duration | integer | 是 | 静音时长,单位秒 |
| +asr_result | [object] | 是 | 转写结果 |
| ++sentence | string | 是 | 单句文本 |
| ++speaker_id | integer | 是 | 所属发言人 |
| ++begin_time | integer | 是 | 单句开始时间戳 |
| ++end_time | integer | 是 | 单句结束时间戳 |
| ++voice_speed | integer | 是 | 语速 |
| ++voice_power | integer | 是 | 音量 |
| +pass_detection | string | 是 | 质检是否通过,"success"- 通过 "failed" - 不通过 |
| +detection_result | [object] | 是 | 质检结果,返回录音命中的所有规则和对应关键词 |
| ++category | string | 是 | 规则类别 |
| ++keyword | [string] | 是 | 匹配的关键字 |
| +detection_detail | object | 是 | 质检结果详情,配置了获取详情返回数据 |
| ++hit | boolean | 是 | 录音是否命中质检规则 |
| ++keyword | [string] | 是 | 录音命中的所有关键词 |
| ++detail | [object] | 是 | 句维度命中情况 |
| +++text | string | 是 | 该句文本 |
| +++hit | boolean | 是 | 该句是否命中质检规则 |
| +++detail | [object] | 是 | 该句命中的质检分类 |
| ++++category | string | 是 | 质检分类 |
| ++++hit | boolean | 是 | 是否命中 |
| ++++keyword | [string] | 是 | 命中的分类下所有关键词 |
| ++++detail | [object] | 是 | 该句命中的该分类下的质检内容 |
| +++++content | string | 是 | 质检内容 |
| +++++hit | boolean | 是 | 是否命中 |
| +++++keyword | [string] | 是 | 命中的关键词 |
返回示例:
{
"error_code": 0,
"error_message": "请求成功",
"result": {
"session_id": "test20240220",
"state": 0,
"state_desc": "处理成功",
"asr_text": "你是谁? 我是小度",
"call_duration": 10,
"silence_duration": 5,
"asr_result": [
{
"sentence": "你是谁?",
"speaker_id": 0,
"begin_time": 1,
"end_time": 3,
"voice_speed": 0,
"voice_power": 0
},{
"sentence": "我是小度",
"speaker_id": 1,
"begin_time":,5,
"end_time": 7,
"voice_speed": 0,
"voice_power": 0
}
],
"pass_detection": "failed",
"detection_result": [
{
"category": "类别1",
"keyword": [
"小度"
]
}
],
"detection_detail": {
"hit": 是,
"keyword": [
"小度"
],
"detail": [
{
"text": "我是小度",
"hit": 是,
"detail": [
null
]}]}}
}质检规则管理
质检规则查询
请求接口:http://aip.baidubce.com/rest/2.0/speech/publiccloudspeech/v1/voice/detection/rule
HTTP 方法:GET
Headers参数:
| 参数 | 参数值 | 是否必须 |
|---|---|---|
| Content-Type | application/json | 是 |
Body参数如下:
| 名称 | 位置 | 类型 | 必选 | 说明 |
|---|---|---|---|---|
| access_token | body | string | 是 | 携带用户信息的access_token |
| category | body | string | 否 | 规则类别,支持模糊搜索,不传则查询全部 |
| page_no | body | integer | 否 | 分页规则-页数 |
| page_size | body | integer | 否 | 分页规则-每页条数,默认10 |
Body请求示例:
{
"access_token": "24.a7179f3da2d56aXXXXXXXXXXXXXXXX ",
"category": "类别1",
"page_no":1,
"page_size":1
}返回结果:
| 名称 | 类型 | 必选 | 说明 |
|---|---|---|---|
| error_code | integer | 是 | 请求状态码 |
| error_message | string | 是 | 请求状态 |
| results | object | 是 | 详情列表 |
| +total | integer | 是 | 符合条件的规则总数 |
| +rule | [object] | 是 | 查询到的规则 |
| ++category | string | 是 | 规则类别 |
| ++description | string | 是 | 规则类别描述 |
| ++content | [string] | 是 | 规则内容 |
返回示例:
{
"error_code": 0,
"error_message": "请求成功",
"results": {
"total": 0,
"rule": [
{
"category": "类别1",
"description": "类别1的描述",
"contents": [ "贷款",
"会议||例会",
"缺货&&退款",
"!逾期",
"未偿还&&!逾期",
"(会议||例会) && (缺货||退款)"]
}
]
}
}质检规则新增
请求接口:http://aip.baidubce.com/rest/2.0/speech/publiccloudspeech/v1/voice/detection/rule
HTTP 方法:POST
Headers参数:
| 参数 | 参数值 | 是否必须 |
|---|---|---|
| Content-Type | application/json | 是 |
Body参数如下:
| 名称 | 位置 | 类型 | 必选 | 说明 |
|---|---|---|---|---|
| access_token | body | string | 是 | 携带用户信息的access_token |
| category | body | string | 是 | 规则类别 |
| description | body | string | 是 | 规则类别描述 |
| contents | body | array[string] | 是 | 质检规则内容,每条质检规则内部可应用“或与非”逻辑关系 |
contents规则特殊说明:
一、A(包含A即为命中)
二、A||B (A或B包含任一即为命中)
三、A&&B (A与B均包含即为命中)
四、!B(不包含B即为命中)
五、A&&!B(包含A但不包含B即为命中)
六、用小括号隔开,可随意组合
Body请求示例:
{
"access_token": "24.a7179f3da2d56aXXXXXXXXXXXXXXXX ",
"category": "类别1",
"description": "类别1的描述",
"contents":["贷款",
"会议||例会",
"缺货&&退款",
"!逾期",
"未偿还&&!逾期",
"(会议||例会) && (缺货||退款)"]
}返回结果:
| 名称 | 类型 | 必选 | 说明 |
|---|---|---|---|
| error_code | integer | 是 | 请求状态码 |
| error_message | string | 是 | 请求状态 |
返回示例:
{
"error_code": 0,
"error_message": "请求成功"
}质检规则修改
请求接口:http://aip.baidubce.com/rest/2.0/speech/publiccloudspeech/v1/voice/detection/rule
HTTP 方法:PUT
Headers参数:
| 参数 | 参数值 | 是否必须 |
|---|---|---|
| Content-Type | application/json | 是 |
Body参数如下:
| 名称 | 位置 | 类型 | 必选 | 说明 |
|---|---|---|---|---|
| access_token | body | string | 是 | 携带用户信息的access_token |
| category | body | string | 是 | 规则类别 |
| description | body | string | 是 | 规则类别描述 |
| contents | body | array[string] | 是 | 质检规则内容,每条质检规则内部可应用“或与非”逻辑关系 |
contents规则特殊说明:
一、A(包含A即为命中)
二、A||B (A或B包含任一即为命中)
三、A&&B (A与B均包含即为命中)
四、!B(不包含B即为命中)
五、A&&!B(包含A但不包含B即为命中)
六、用小括号隔开,可随意组合
Body请求示例:
{
"access_token": "24.a7179f3da2d56aXXXXXXXXXXXXXXXX ",
"category": "类别1",
"description": "类别1的描述",
"contents":["贷款",
"会议||例会",
"缺货&&退款",
"!逾期",
"未偿还&&!逾期",
"(会议||例会) && (缺货||退款)"]
}返回结果:
| 名称 | 类型 | 必选 | 说明 |
|---|---|---|---|
| error_code | integer | 是 | 请求状态码 |
| error_message | string | 是 | 请求状态 |
返回示例:
{
"error_code": 0,
"error_message": "请求成功"
}质检规则删除
请求接口:http://aip.baidubce.com/rest/2.0/speech/publiccloudspeech/v1/voice/detection/rule
HTTP 方法:DELETE
Headers参数:
| 参数 | 参数值 | 是否必须 |
|---|---|---|
| Content-Type | application/json | 是 |
Body参数如下:
| 名称 | 位置 | 类型 | 必选 | 说明 |
|---|---|---|---|---|
| access_token | body | string | 是 | 携带用户信息的access_token |
| category | body | string | 是 | 待删除的规则类别 |
Body请求示例:
{
"access_token": "24.a7179f3da2d56aXXXXXXXXXXXXXXXX ",
"category": "类别1",
}返回结果:
| 名称 | 类型 | 必选 | 说明 |
|---|---|---|---|
| error_code | integer | 是 | 请求状态码 |
| error_message | string | 是 | 请求状态 |
返回示例:
{
"error_code": 0,
"error_message": "请求成功"
}