
人工智能语音音频【免费下载链接】PaddleSpeechEasy-to-use Speech Toolkit including Self-Supervised Learning model, SOTA/Streaming ASR with punctuation, Streaming TTS with text frontend, Speaker Verification System, End-to-End Speech Translation and Keyword Spotting. Won NAACL2022 Best Demo Award.项目地址https://gitcode.com/gh_mirrors/pa/PaddleSpeech点击查看免费下载导读本指南围绕 PaddleSpeech 服务端paddlespeech.server.restful.vector_api模块展开系统讲解声纹Speaker Verification场景下两个核心 HTTP 接口/paddlespeech/vector说话人向量提取与/paddlespeech/vector/score说话人相似度打分。通过阅读本文你将掌握这两个接口的请求/响应格式、底层引擎调用链从 base64 音频解码到 ECAPA-TDNN 嵌入向量输出的完整处理流程、服务端配置文件vector_application.yaml的每个参数含义以及如何使用curl实际调用接口完成说话人向量提取与声纹比对验证。一、模块定位vector_api 在 PaddleSpeech 服务框架中的角色PaddleSpeech 的server目录采用「RESTful 路由层 → 引擎池Engine Pool→ 推理引擎Engine→ CLI 执行器Executor」的分层架构。vector_api.py 位于 RESTful 路由层负责将外部 HTTP 请求转换为引擎调用是整个声纹服务对外暴露的唯一入口。从源码结构看restful目录下的路由模块按业务域拆分asr_api.py、tts_api.py、cls_api.py、text_api.py、vector_api.py 等vector_api专门处理声纹向量相关的两类任务任务REST 接口核心能力说话人向量提取spkPOST /paddlespeech/vector从单条音频中提取说话人嵌入向量embedding声纹相似度打分scorePOST /paddlespeech/vector/score计算 enroll注册音频与 test测试音频之间的相似度得分模块顶部通过from fastapi import APIRouter创建路由实例router APIRouter()再由服务入口统一注册两个业务函数使用 FastAPI 装饰器声明 HTTP 方法与路径并借助 Pydantic 模型request.py完成请求体校验。二、POST /paddlespeech/vector说话人向量提取接口2.1 请求体字段VectorRequestvector函数接收的VectorRequest模型定义于 request.py四个字段全部为必填{ audio: exSI6ICJlbiIsCgkgICAgInBvc2l0aW9uIjogImZhbHNlIgoJf..., task: spk, audio_format: wav, sample_rate: 16000 }字段类型必填说明audiostring是音频文件的base64 编码字符串服务端通过base64.b64decode还原为原始字节taskstring是任务类型服务端当前仅接受spk且必须与服务端模型任务配置文件中的task: spk一致audio_formatstring是音频格式当前支持wavsample_rateint是音频采样率与模型采样率匹配声纹模型为 160002.2 处理流程源码级解析vector函数的实现位于 vector_api.py其执行链共四步Step 1解码音频——audio_data base64.b64decode(request_body.audio)将 base64 字符串还原为字节流作为后续音频加载的输入。Step 2从引擎池获取引擎—— 调用get_engine_pool()获取全局引擎池通过engine_pool[vector]取出vector引擎引擎池由服务启动时按engine_list配置初始化。随后基于引擎实例化PaddleVectorConnectionHandler定义于 vector_engine.py该连接处理器负责单次请求的完整推理内部持有执行器、任务类型、模型与配置等引用。Step 3执行推理——connection_handler.run(audio_data, request_body.task)完成从波形到嵌入向量的转换。run方法中有一个重要的任务匹配校验if self.task spk and task spk: embedding self.extract_audio_embedding(audio_data) return embedding else: # 任务不匹配时返回 np.array([0.0])即请求中的task必须与服务端模型task一致均为spk否则返回长度为 1 的零向量作为兜底。Step 4结果类型校验与返回—— 服务端要求推理结果为numpy.ndarray若不满足则构造ErrorResponse返回错误描述满足则转换为 Python list 后封装进result.vec字段返回。2.3 嵌入向量提取的底层实现extract_audio_embeddingvector_engine.py是整个接口的核心其流水线与 CLI 推理执行器保持一致对照 infer.py 的preprocess/infer采样率检查调用self.executor._check(io.BytesIO(audio), sample_rate, force_yesTrue)源码注释特别指出io.BytesIO数据不能复用——soundfile读取会移动文件指针到末尾因此每次需要音频数据时都必须重新从 base64 字符串构造io.BytesIO。波形加载load_audio(io.BytesIO(audio))通过 soundfile 后端 读取波形得到(waveform, sr)。特征提取使用 librosa 兼容实现的 melspectrogram 计算 Fbank 特征参数sr、n_mels、window_size、hop_size全部来自模型配置文件config。源码注释明确说明当前仅支持 Fbank 特征。特征归一化feature_normalize(feats, mean_normTrue, std_normFalse)执行均值归一化不进行标准差归一化。模型前向embedding self.model.backbone(feats, lengths).squeeze().numpy()。模型由SpeakerIdetification包装sid_model.py实际骨干网络为 ECAPA-TDNN默认模型ecapatdnn_voxceleb12推理阶段lengths固定为paddle.ones([1])无 padding 的单样本输入。squeeze()将形状从(1, emb_size, 1)压缩为(emb_size,)的一维向量。2.4 响应体结构VectorResponse接口的响应模型定义于 response.py{ success: true, code: 200, message: { description: success }, result: { vec: [0.13, -0.21, 0.09, ...] } }字段说明success布尔值请求是否成功codeHTTP 状态码成功为 200message.description结果描述成功为 successresult.vec说话人嵌入向量numpy 数组转换后的浮点数列表2.5 辅助接口GET /paddlespeech/vector/helphelp函数vector_api.py返回接口的示例响应用于服务自检与联调{ success: True, code: 200, message: {global: success}, vector: [2.3, 3.5, 5.5, 6.2, 2.8, 1.2, 0.3, 3.6] }三、POST /paddlespeech/vector/score声纹相似度打分接口3.1 请求体字段VectorScoreRequestVectorScoreRequestrequest.py同时接收注册音频与测试音频{ enroll_audio: base64编码的注册音频..., test_audio: base64编码的测试音频..., task: score, audio_format: wav, sample_rate: 16000 }字段类型必填说明enroll_audiostring是注册enroll音频的 base64 字符串test_audiostring是测试test音频的 base64 字符串taskstring是任务类型此接口为scoreaudio_formatstring是音频格式wavsample_rateint是采样率 160003.2 打分流程源码级解析score函数vector_api.py的处理逻辑分为三步Step 1分别base64.b64decode解码enroll_audio与test_audio。Step 2从引擎池取出vector引擎并创建PaddleVectorConnectionHandler。Step 3调用connection_handler.get_enroll_test_score(enroll_data, test_data)。该方法的实现vector_engine.py先对两段音频分别执行extract_audio_embedding得到两个嵌入向量再调用执行器的get_embeddings_score计算得分。相似度度量方式位于 infer.py使用 PaddlePaddle 内置的余弦相似度算子paddle.nn.CosineSimilarity(axis0)将两个嵌入向量转为 Tensor 后计算余弦相似度并取.item()转为 Python float。因此得分值域为 [-1, 1]越接近 1 表示两段音频来自同一说话人的可能性越高。3.3 响应体结构VectorScoreResponse{ success: true, code: 200, message: { description: success }, result: { score: 0.9132413864135742 } }result.score为两段音频的余弦相似度得分response.py。四、异常处理与错误响应两个接口均采用相同的双重异常捕获策略见 vector_api.pyexcept ServerBaseException as e: response failed_response(e.error_code, e.msg) except BaseException: response failed_response(ErrorCode.SERVER_UNKOWN_ERR) traceback.print_exc()业务异常ServerBaseException按携带的错误码与消息返回未预期的异常统一映射为SERVER_UNKOWN_ERR同时打印堆栈便于排查。错误码定义于 errors.py与向量接口可能相关的包括SERVER_PARAM_ERR 400参数无效、SERVER_TASK_NOT_EXIST 404任务不存在、SERVER_INTERNAL_ERR 500内部错误、SERVER_UNKOWN_ERR 509未知错误。错误响应统一格式为{ success: false, code: 509, message: { description: Unknown error occurred. } }五、服务端配置文件vector_application.yaml 逐项解读启动声纹服务需要 vector_application.yaml 配置文件其中vector_python段与vector_api直接相关host: 0.0.0.0 port: 8090 protocol: http engine_list: [vector_python] vector_python: task: spk model_type: ecapatdnn_voxceleb12 sample_rate: 16000 cfg_path: # [optional] 自定义模型配置 yaml 路径 ckpt_path: # [optional] 自定义模型权重路径 device: # 设置为 gpu:id 或 cpu各参数含义与影响参数说明host/port服务监听地址与端口默认0.0.0.0:8090protocol通信协议注释明确 HTTP 仅支持离线引擎类型engine_list引擎列表格式为speech task_engine type此处注册vector_python服务启动时据此初始化引擎池中的vector引擎task模型任务类型取spk。注意请求体中的task字段必须与此一致否则run方法会判定任务不匹配model_type预训练模型标签默认ecapatdnn_voxceleb12留空cfg_path/ckpt_path时服务会按model_type-16k标签从预训练模型列表自动下载见 infer.py 的_init_from_path逻辑sample_rate模型采样率声纹模型固定 16000cfg_path/ckpt_path可选。指定本地自定义模型的 yaml 配置与权重注意权重文件需为xxx.pdparams代码中会自动拼接.pdparams后缀device运行设备。不配置时VectorEngine.init会回退到paddle.get_device()自动选择vector_engine.py配置gpu:0或cpu则强制指定从VectorEngine.init的源码可以推断引擎初始化时首先设置 Paddle 设备随后通过VectorServerExecutor继承自 CLI 的VectorExecutor调用_init_from_path加载模型——model_type会按[:rindex(_)]截断得到骨干网络名如ecapatdnn再通过动态导入实例化模型类并包装进SpeakerIdetification后加载paddle.load的权重。六、端到端调用示例curl6.1 准备音频与 base64 编码参考 demos/speaker_verification/run.sh 获取两条测试音频分别模拟 enroll 与 test编码为 base64# 将 wav 文件编码为 base64 字符串 base64 -w 0 85236145389.wav enroll.b64 base64 -w 0 123456789.wav test.b646.2 说话人向量提取curl -X POST http://127.0.0.1:8090/paddlespeech/vector \ -H Content-Type: application/json \ -d {\audio\: \$(cat enroll.b64)\, \task\: \spk\, \audio_format\: \wav\, \sample_rate\: 16000}返回示例{ success: true, code: 200, message: {description: success}, result: {vec: [-0.382, 0.148, -0.055, 0.272, ...]} }6.3 声纹相似度打分curl -X POST http://127.0.0.1:8090/paddlespeech/vector/score \ -H Content-Type: application/json \ -d {\enroll_audio\: \$(cat enroll.b64)\, \test_audio\: \$(cat test.b64)\, \task\: \score\, \audio_format\: \wav\, \sample_rate\: 16000}返回示例{ success: true, code: 200, message: {description: success}, result: {score: 0.9132413864135742} }使用前提与限制音频必须是 wav 格式、16k 采样率与模型匹配否则_check阶段会校验失败或触发重采样分支服务端以force_yesTrue强制接受重采样但为获得最佳效果建议直接输入 16k 16bit 单声道 wav请求体中的task必须与服务端vector_python.task保持一致。七、接口能力边界与源码验证任务类型/paddlespeech/vector仅支持spk向量提取/paddlespeech/vector/score通过两个嵌入向量计算余弦相似度得分。CLI 侧infer.py的任务类型同样为spk与score且score任务输入必须是「两条 wav 路径」的配对REST 接口与之对应的是enroll_audiotest_audio双字段。特征类型当前流水线仅支持 Fbankmelspectrogram特征对应实现可追溯至 librosa.py 与 feature_normalize。返回类型约束/paddlespeech/vector强制校验numpy.ndarray类型非 ndarray 会返回ErrorResponse错误描述。任务匹配校验run方法中请求task与服务端task不匹配时返回np.array([0.0])调用方需确保两端配置一致。综上paddlespeech.server.restful.vector_api提供了简洁而完整的声纹向量服务能力两个 REST 端点分别覆盖「单段音频 → 说话人向量」与「两段音频 → 相似度得分」两类典型声纹应用场景其内部复用 CLI 执行器与模型推理链路保证了离线推理与服务化推理行为的一致性可直接用于说话人确认、声纹注册比对等业务的快速落地。赞分享人工智能语音音频【免费下载链接】PaddleSpeechEasy-to-use Speech Toolkit including Self-Supervised Learning model, SOTA/Streaming ASR with punctuation, Streaming TTS with text frontend, Speaker Verification System, End-to-End Speech Translation and Keyword Spotting. Won NAACL2022 Best Demo Award.项目地址https://gitcode.com/gh_mirrors/pa/PaddleSpeech点击查看免费下载相关推荐PaddleSpeech RESTful API 解析语音服务端接口设计与实战调用指南PaddleSpeech RESTful API 解析语音服务端接口设计与实战调用指南 导读 本文围绕 PaddleSpeech 服务端 RESTful 接口人工智能语音音频NLP媒体生成Microblog API开发指南RESTful接口设计与实现Microblog API开发指南RESTful接口设计与实现 想要构建现代化的微博客应用Microblog项目提供了一个完整的RESTful API实现案后端示例工程DeepSeekMath Web接口RESTful API设计与实现DeepSeekMath Web接口RESTful API设计与实现 引言数学AI服务的API化需求 在人工智能技术快速发展的今天数学推理能力已成为衡量大人工智能大模型基础模型预训练强化学习模型评测DeepSeek创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考