跳到主要内容

声纹

声纹服务做说话人识别:先给每个用户做一遍 enrollment(采集说话样本并计算 embedding),识别阶段再对新音频做相似度匹配。Liaison 用识别结果标注用户;启用访问控制后,还会检查置信度和用户 allow-list。

能力约定 TOML 在 capabilities/service/voiceprint/,接口定义语言(Interface Definition Language,IDL)文件在 capabilities/lib/voiceprint/

新软件包省略 Driver 条目,由框架自动注册共享的 robonix/lifecycle/driver;显式选择共享 Driver 的行为相同。未实现生命周期回调时,框架记录警告并执行空操作。

后向兼容:声纹服务命名空间 Driver

robonix/service/voiceprint/driverlifecycle/Driverservice/voiceprint/driver.v1.toml 只用于仍由软件包自行维护 Driver TOML 的旧实现。目前仍可使用,但计划迁移到共享 Driver;两种 Driver 不能同时注册。详见生命周期兼容流程

接口

能力约定 ID模式默认实现传输载荷(IDL)能力约定 TOML
robonix/service/voiceprint/enrollrpcgRPCvoiceprint/Enrollservice/voiceprint/enroll.v1.toml
robonix/service/voiceprint/identifyrpcgRPCvoiceprint/Identifyservice/voiceprint/identify.v1.toml
robonix/service/voiceprint/listrpcgRPC + 模型上下文协议(Model Context Protocol,MCP)voiceprint/ListEnrolledservice/voiceprint/list.v1.toml
robonix/service/voiceprint/deleterpcgRPCvoiceprint/DeleteEnrolledservice/voiceprint/delete.v1.toml

identify(audio_data, encoding, sample_rate_hz) 返回最接近的 user_iduser_name、余弦相似度 confidence、阈值判定 is_knownerror。默认实现支持 pcm_s16le 与 WAV;空 encodingpcm_s16le 处理,sample_rate_hz=0 按 16 kHz 处理,其他采样率会重采样到 16 kHz。

enroll 还需要调用方提供稳定的 user_id 与显示用 user_name。默认实现会拒绝重复的 ID、显示名,以及相似度达到同一阈值的已注册声音。list 返回 JSON 用户数组和数量;deleteuser_id 删除,ID 不存在时也返回成功。

若声纹提供方不可用,交互服务可把客户端提示作为身份回退值,但它不能绕过已启用的访问控制。访问控制启用时,只有已注册、置信度达到阈值且位于允许列表中的声纹可以通过;其他语音请求都会被拒绝。

参考实现:Robonix 源码中的 services/voiceprint,使用 SpeechBrain ECAPA-TDNN embedding 与余弦相似度,模型来自 ModelScope 的 speechbrain/spkrec-ecapa-voxceleb。注册数据持久化到 <data_dir>/enrolled.json,写入通过临时文件和原子替换完成。

生命周期与配置

提供方注册后等待 Driver(CMD_INIT)。参考实现在 on_init 中校验实例配置并打开注册数据库,但不加载 ECAPA-TDNN 模型;初始化失败会返回错误,提供方进入 ERROR。相同配置的重复初始化是幂等操作;已初始化后再传入不同配置会返回错误。

初始化成功后,启动器发送 CMD_ACTIVATE。参考实现在 on_activate 中加载 ECAPA-TDNN 模型,加载失败时不会进入 ACTIVEidentifyenroll 需要处于激活状态;listdelete 只需要注册数据库已经初始化。CMD_DEACTIVATE 会释放模型但保留配置和注册数据库,后续可以再次激活;CMD_SHUTDOWN 也会释放模型。业务 RPC 不会自行加载模型或补做初始化。

config:环境变量回退默认值用途
data_dirVOICEPRINT_DATA_DIRservices/voiceprint/rbnx-build/dataenrolled.json 所在目录
thresholdVOICEPRINT_THRESHOLD0.25is_known 与重复声音检查的最低余弦相似度
deviceVOICEPRINT_DEVICECUDA 可用时为 cuda:0,否则为 cpuECAPA-TDNN 推理设备

实例 config:rbnx start --set 中的同名值优先于环境变量。默认 data_dir 位于 rbnx-build,执行清理构建会删除其中的注册数据;需要长期保留时,应把 data_dir 设为 rbnx-build 之外的持久路径。