说话人识别将说话人读出的连续数字串语音与指定说话人的已注册声纹进行1:1比对。当比对结果满足阈值条件时,身份验证通过。
计费和并发限制
使用限制
音频编码格式为PCM,采样位数为16 bit,单声道,采样率为16000 Hz。
注册、更新和认证的音频长度均不得超过30秒。
获取的数字串有效期为2分钟。
说话人ID(
speaker_id)长度不超过32字节。说话人识别用于通过朗读指定数字串进行身份认证,不适用于在多人对话中识别不同说话人。
服务地址
|
访问方式 |
说明 |
URL |
|
外网访问 |
所有服务器均可使用。SDK默认使用该地址,无需另行设置。 |
|
|
VPC内网访问 |
适用于华东2(上海)地域的ECS实例,须通过VPC访问。经典网络不支持通过内网访问语音服务。 |
|
通过内网访问不会产生ECS实例的公网流量费用。
交互流程
客户端通过WebSocket发送JSON指令,并接收服务端的JSON事件。每次操作使用一个任务ID,后续指令沿用该任务ID。Java SDK接入示例请参见说话人识别Java SDK。
鉴权
建立WebSocket连接时使用Token鉴权。获取方法请参见获取Token。
获取数字串(ApplyDigit)
发送StartTask,将action设为ApplyDigit并指定speaker_id。收到TaskStarted后发送StopTask,从TaskResult的payload.digit获取数字串。该操作不发送音频。
声音注册(Enroll)
先获取数字串,再发送StartTask,将action设为Enroll。收到TaskStarted后发送朗读该数字串的音频;音频发送完毕后发送StopTask,等待TaskResult确认注册结果。
指定speaker_id的声纹记录已存在时,不能重复注册。更新已有声纹使用Update;需要重新注册时,先使用Delete删除已有记录。
声音更新(Update)
先获取数字串,再发送StartTask,将action设为Update。收到TaskStarted后发送朗读该数字串的音频;音频发送完毕后发送StopTask,等待TaskResult确认更新结果。
声音认证(Verify)
先获取数字串,再发送StartTask,将action设为Verify。收到TaskStarted后发送朗读该数字串的音频;音频发送完毕后发送StopTask,从TaskResult获取认证结果。
声音删除(Delete)
发送StartTask,将action设为Delete并指定speaker_id。收到TaskStarted后发送StopTask,等待TaskResult确认删除结果。该操作不发送音频。
请求说明
在智能语音交互控制台获取项目的Appkey,替换报文中的<Appkey>。以下报文中的speaker_id、任务ID和数字串仅为示例值,调用时使用实际值。
请求header参数
|
参数名称 |
参数类型 |
参数说明 |
|
namespace |
String |
固定为 |
|
name |
String |
请求指令: |
|
appkey |
String |
项目的Appkey。 |
|
task_id |
String |
客户端生成的任务全局唯一ID。在 |
|
message_id |
String |
本次消息的ID。 |
启动任务(StartTask)
获取数字串 (ApplyDigit)
|
参数名称 |
参数类型 |
参数说明 |
|
action |
String |
固定为 |
|
speaker_id |
String |
必填,说话人ID,长度不超过32字节。 |
{
"header": {
"message_id": "fedcba9876543210fedcba9876543210",
"task_id": "0123456789abcdef0123456789abcdef",
"namespace": "SpeakerVerification",
"name": "StartTask",
"appkey": "<Appkey>"
},
"payload": {
"action": "ApplyDigit",
"speaker_id": "test_speaker"
}
}
声音注册 (Enroll)
|
参数名称 |
参数类型 |
参数说明 |
|
action |
String |
固定为 |
|
format |
String |
必填,音频编码格式,固定为 |
|
sample_rate |
Integer |
必填,采样率,固定为16000,单位为Hz。 |
|
speaker_id |
String |
必填,说话人ID,长度不超过32字节。 |
|
digit |
String |
必填,通过 |
{
"header": {
"message_id": "fedcba9876543210fedcba9876543210",
"task_id": "0123456789abcdef0123456789abcdef",
"namespace": "SpeakerVerification",
"name": "StartTask",
"appkey": "<Appkey>"
},
"payload": {
"action": "Enroll",
"format": "pcm",
"sample_rate": 16000,
"speaker_id": "test_speaker",
"digit": "04587236"
}
}
声音更新 (Update)
|
参数名称 |
参数类型 |
参数说明 |
|
action |
String |
固定为 |
|
format |
String |
必填,音频编码格式,固定为 |
|
sample_rate |
Integer |
必填,采样率,固定为16000,单位为Hz。 |
|
speaker_id |
String |
必填,说话人ID,长度不超过32字节。 |
|
digit |
String |
必填,通过 |
{
"header": {
"message_id": "fedcba9876543210fedcba9876543210",
"task_id": "0123456789abcdef0123456789abcdef",
"namespace": "SpeakerVerification",
"name": "StartTask",
"appkey": "<Appkey>"
},
"payload": {
"action": "Update",
"format": "pcm",
"sample_rate": 16000,
"speaker_id": "test_speaker",
"digit": "04587236"
}
}
声音认证 (Verify)
|
参数名称 |
参数类型 |
参数说明 |
|
action |
String |
固定为 |
|
format |
String |
必填,音频编码格式,固定为 |
|
sample_rate |
Integer |
必填,采样率,固定为16000,单位为Hz。 |
|
speaker_id |
String |
必填,说话人ID,长度不超过32字节。 |
|
digit |
String |
必填,通过 |
{
"header": {
"message_id": "fedcba9876543210fedcba9876543210",
"task_id": "0123456789abcdef0123456789abcdef",
"namespace": "SpeakerVerification",
"name": "StartTask",
"appkey": "<Appkey>"
},
"payload": {
"action": "Verify",
"format": "pcm",
"sample_rate": 16000,
"speaker_id": "test_speaker",
"digit": "04587236"
}
}
声音删除 (Delete)
|
参数名称 |
参数类型 |
参数说明 |
|
action |
String |
固定为 |
|
speaker_id |
String |
必填,说话人ID,长度不超过32字节。 |
{
"header": {
"message_id": "fedcba9876543210fedcba9876543210",
"task_id": "0123456789abcdef0123456789abcdef",
"namespace": "SpeakerVerification",
"name": "StartTask",
"appkey": "<Appkey>"
},
"payload": {
"action": "Delete",
"speaker_id": "test_speaker"
}
}
结束任务(StopTask)
五类操作均使用StopTask结束任务。获取数字串和删除声音时,在收到TaskStarted后发送;注册、更新和认证时,在音频发送完毕后发送。结束任务后等待TaskResult,不要用关闭连接代替结束指令。
|
参数名称 |
参数类型 |
参数说明 |
|
task_id |
String |
与客户端 |
{
"header": {
"message_id": "fedcba9876543210fedcba9876543211",
"task_id": "0123456789abcdef0123456789abcdef",
"namespace": "SpeakerVerification",
"name": "StopTask",
"appkey": "<Appkey>"
},
"payload": {}
}
响应说明
响应header参数
|
参数名称 |
参数类型 |
参数说明 |
|
namespace |
String |
固定为 |
|
name |
String |
响应事件: |
|
status |
Integer |
服务状态码。 |
|
status_text |
String |
状态消息。 |
|
task_id |
String |
与客户端请求中的任务ID相同,可用于定位任务。 |
|
message_id |
String |
本次消息的ID。 |
任务启动事件(TaskStarted)
TaskStarted用于确认任务已启动,不包含最终结果。
{
"header": {
"message_id": "fedcba9876543210fedcba9876543210",
"task_id": "0123456789abcdef0123456789abcdef",
"namespace": "SpeakerVerification",
"name": "TaskStarted",
"status": 20000000,
"status_text": "Gateway:SUCCESS:Success."
},
"payload": {}
}
任务结果事件(TaskResult)
获取数字串 (ApplyDigit)
|
参数名称 |
参数类型 |
参数说明 |
|
user_id |
String |
阿里云账号ID。 |
|
appkey |
String |
项目的Appkey。 |
|
speaker_id |
String |
说话人ID。 |
|
digit |
String |
8位数字串。 |
{
"header": {
"message_id": "fedcba9876543210fedcba9876543210",
"task_id": "0123456789abcdef0123456789abcdef",
"namespace": "SpeakerVerification",
"name": "TaskResult",
"status": 20000000,
"status_text": "Gateway:SUCCESS:Success."
},
"payload": {
"user_id": "123456",
"appkey": "<Appkey>",
"speaker_id": "test_speaker",
"digit": "04587236"
}
}
声音注册 (Enroll)
|
参数名称 |
参数类型 |
参数说明 |
|
user_id |
String |
阿里云账号ID。 |
|
appkey |
String |
项目的Appkey。 |
|
speaker_id |
String |
说话人ID。 |
|
digit |
String |
本次操作使用的数字串。 |
{
"header": {
"message_id": "fedcba9876543210fedcba9876543210",
"task_id": "0123456789abcdef0123456789abcdef",
"namespace": "SpeakerVerification",
"name": "TaskResult",
"status": 20000000,
"status_text": "Gateway:SUCCESS:Success."
},
"payload": {
"user_id": "123456",
"appkey": "<Appkey>",
"speaker_id": "test_speaker",
"digit": "04587236"
}
}
声音更新 (Update)
|
参数名称 |
参数类型 |
参数说明 |
|
user_id |
String |
阿里云账号ID。 |
|
appkey |
String |
项目的Appkey。 |
|
speaker_id |
String |
说话人ID。 |
|
digit |
String |
本次操作使用的数字串。 |
{
"header": {
"message_id": "fedcba9876543210fedcba9876543210",
"task_id": "0123456789abcdef0123456789abcdef",
"namespace": "SpeakerVerification",
"name": "TaskResult",
"status": 20000000,
"status_text": "Gateway:SUCCESS:Success."
},
"payload": {
"user_id": "123456",
"appkey": "<Appkey>",
"speaker_id": "test_speaker",
"digit": "04587236"
}
}
声音认证 (Verify)
|
参数名称 |
参数类型 |
参数说明 |
|
user_id |
String |
阿里云账号ID。 |
|
appkey |
String |
项目的Appkey。 |
|
speaker_id |
String |
说话人ID。 |
|
digit |
String |
本次操作使用的数字串。 |
|
score |
String |
置信度,取值范围为[0.0,100.0],值越大表示置信度越高。 |
|
decision |
Integer |
认证结果:1表示通过,0表示未通过。 |
{
"header": {
"message_id": "fedcba9876543210fedcba9876543210",
"task_id": "0123456789abcdef0123456789abcdef",
"namespace": "SpeakerVerification",
"name": "TaskResult",
"status": 20000000,
"status_text": "Gateway:SUCCESS:Success."
},
"payload": {
"user_id": "123456",
"appkey": "<Appkey>",
"speaker_id": "test_speaker",
"digit": "04587236",
"score": "100.0",
"decision": 1
}
}
声音删除 (Delete)
|
参数名称 |
参数类型 |
参数说明 |
|
user_id |
String |
阿里云账号ID。 |
|
appkey |
String |
项目的Appkey。 |
|
speaker_id |
String |
说话人ID。 |
{
"header": {
"message_id": "fedcba9876543210fedcba9876543210",
"task_id": "0123456789abcdef0123456789abcdef",
"namespace": "SpeakerVerification",
"name": "TaskResult",
"status": 20000000,
"status_text": "Gateway:SUCCESS:Success."
},
"payload": {
"user_id": "123456",
"appkey": "<Appkey>",
"speaker_id": "test_speaker"
}
}
服务状态码
服务响应的header.status包含服务状态码。发生错误时,结合status_text检查原因并处理。
通用错误码
|
错误码 |
原因 |
解决办法 |
|
40000001 |
身份认证失败 |
检查Token是否正确或已过期。 |
|
40000002 |
无效的消息 |
检查消息是否符合协议要求。 |
|
40000010 |
新用户3个月免费试用期已结束 |
继续使用需升级为商用版,操作请参见升级为商用版。 |
|
40000004 |
空闲超时 |
检查是否连续10秒未向服务端发送数据。 |
|
40000005 |
请求数量过多 |
检查是否超过并发连接数或QPS限制。超过并发数时,可升级为商用版或扩容商用版并发资源。 |
|
41010120 |
客户端超时 |
客户端连续10秒及以上未发送数据。检查音频发送情况。 |
|
40000000 |
客户端错误 |
根据错误消息检查请求。返回 |
|
50000000 |
服务端错误 |
内部服务错误,重试请求。 |
|
50000001 |
内部调用错误 |
内部服务错误,重试请求。 |
|
52010001 |
内部调用错误 |
内部服务错误,重试请求。 |
网关错误码
|
错误码 |
原因 |
解决办法 |
|
40010001 |
不支持的接口 |
升级至最新SDK。 |
|
40010002 |
不支持的指令 |
升级至最新SDK。 |
|
40010003 |
无效的指令 |
升级至最新SDK。 |
|
40010004 |
客户端提前断开连接 |
检查是否在请求正常完成前关闭连接。 |
|
40010005 |
任务状态错误 |
检查是否发送了当前任务状态不能处理的指令。 |
配置错误码
|
错误码 |
原因 |
解决办法 |
|
40020105 |
应用不存在 |
解析路由时找不到应用,检查Appkey。 |
|
40020106 |
Appkey与Token不匹配 |
检查Appkey是否正确,是否与Token属于同一账号。 |
|
40020503 |
RAM用户鉴权失败 |
使用阿里云账号为调用接口的RAM用户授予POP API访问权限。 |