保姆级教程:SenseVoice语音识别镜像快速部署与API调用实战
保姆级教程SenseVoice语音识别镜像快速部署与API调用实战1. 为什么选择SenseVoice语音识别服务在开始部署之前我们先了解一下SenseVoice语音识别服务的核心优势。这个基于ONNX量化的多语言语音识别解决方案在实际应用中表现出几个显著特点。1.1 多语言支持能力SenseVoice支持超过50种语言的自动检测特别对中文、粤语、英语、日语和韩语有专门优化。这意味着无需预先指定语言类型混合语言场景下也能准确识别特别适合国际化业务需求1.2 高效的推理性能经过量化后的模型体积仅230MB但性能表现优异10秒音频推理仅需70毫秒支持批量处理提升吞吐量内存占用显著降低1.3 丰富的输出功能除了基础语音转文字外还提供情感识别分析音频事件检测笑声、掌声等逆文本正则化ITN处理2. 环境准备与快速部署2.1 系统要求确保你的系统满足以下基本要求Linux系统推荐Ubuntu 18.04Python 3.8或更高版本至少2GB可用内存500MB磁盘空间2.2 安装依赖执行以下命令安装所需依赖pip install funasr-onnx gradio fastapi uvicorn soundfile jieba这些包各自的作用funasr-onnx核心语音识别推理库gradio快速构建Web界面fastapi和uvicorn构建REST API服务soundfile音频文件处理jieba中文分词处理2.3 启动服务创建app.py文件内容如下from funasr_onnx import SenseVoiceSmall import gradio as gr from fastapi import FastAPI, UploadFile, File from fastapi.responses import JSONResponse import uvicorn import tempfile import os # 初始化模型 model_path /root/ai-models/danieldong/sensevoice-small-onnx-quant model SenseVoiceSmall(model_path, batch_size10, quantizeTrue) app FastAPI(titleSenseVoice语音识别服务) # Gradio界面 def transcribe_audio(audio_file, languageauto, use_itnTrue): if audio_file is None: return 请上传音频文件 try: result model([audio_file], languagelanguage, use_itnuse_itn) return result[0] except Exception as e: return f识别失败: {str(e)} # 创建Gradio界面 interface gr.Interface( fntranscribe_audio, inputs[ gr.Audio(typefilepath, label上传音频文件), gr.Dropdown( choices[auto, zh, en, yue, ja, ko], valueauto, label语言选择 ), gr.Checkbox(valueTrue, label启用逆文本正则化(ITN)) ], outputsgr.Textbox(label识别结果), titleSenseVoice语音识别, description上传音频文件进行多语言语音识别 ) # FastAPI路由 app.post(/api/transcribe) async def api_transcribe( file: UploadFile File(...), language: str auto, use_itn: bool True ): API转写接口 with tempfile.NamedTemporaryFile(deleteFalse, suffix.wav) as tmp_file: content await file.read() tmp_file.write(content) tmp_path tmp_file.name try: result model([tmp_path], languagelanguage, use_itnuse_itn) return JSONResponse({ status: success, text: result[0], language: language }) finally: os.unlink(tmp_path) app.get(/health) async def health_check(): return {status: healthy} # 将Gradio挂载到FastAPI app gr.mount_gradio_app(app, interface, path/) if __name__ __main__: uvicorn.run(app, host0.0.0.0, port7860)启动服务python3 app.py --host 0.0.0.0 --port 78603. 服务接口使用指南3.1 Web界面使用访问http://localhost:7860可以看到直观的Web界面点击上传按钮或直接拖放音频文件选择语言默认自动检测勾选是否启用ITN处理点击提交查看识别结果3.2 API接口调用服务提供了标准的REST API接口可以通过以下方式调用curl -X POST http://localhost:7860/api/transcribe \ -F fileaudio.wav \ -F languageauto \ -F use_itntrueAPI返回示例{ status: success, text: 今天的天气真好, language: zh }3.3 Python SDK调用你也可以直接在Python代码中调用from funasr_onnx import SenseVoiceSmall model SenseVoiceSmall( /root/ai-models/danieldong/sensevoice-small-onnx-quant, batch_size10, quantizeTrue ) result model([audio.wav], languageauto, use_itnTrue) print(result[0])4. 实际应用示例4.1 批量处理音频文件以下代码演示如何批量处理目录中的音频文件import os from pathlib import Path def batch_process(input_dir, output_dir): input_dir Path(input_dir) output_dir Path(output_dir) output_dir.mkdir(exist_okTrue) model SenseVoiceSmall( /root/ai-models/danieldong/sensevoice-small-onnx-quant, batch_size8, quantizeTrue ) audio_files [] for ext in [.wav, .mp3, .m4a]: audio_files.extend(input_dir.glob(f*{ext})) results [] for audio in audio_files: try: text model([str(audio)], languageauto)[0] output_file output_dir / f{audio.stem}.txt with open(output_file, w) as f: f.write(text) results.append((audio.name, success)) except Exception as e: results.append((audio.name, ffailed: {str(e)})) return results4.2 实时语音转写对于实时音频流处理可以使用以下方法import numpy as np import sounddevice as sd class RealTimeTranscriber: def __init__(self, model_path, sample_rate16000): self.model SenseVoiceSmall(model_path) self.sample_rate sample_rate self.buffer [] def callback(self, indata, frames, time, status): self.buffer.append(indata.copy()) if len(self.buffer) 5: # 每5个块处理一次 audio np.concatenate(self.buffer) text self.model([audio], languageauto)[0] print(识别结果:, text) self.buffer [] def start(self): with sd.InputStream( callbackself.callback, channels1, samplerateself.sample_rate, blocksizeint(0.5 * self.sample_rate) # 0.5秒的块 ): print(开始录音...按任意键停止) input() # 使用示例 transcriber RealTimeTranscriber( /root/ai-models/danieldong/sensevoice-small-onnx-quant ) transcriber.start()5. 常见问题解决5.1 模型下载问题如果服务启动时卡在模型下载环节可以手动下载模型并放到指定路径使用国内镜像源加速下载检查网络连接是否正常5.2 音频格式支持服务支持常见音频格式WAV推荐MP3M4AFLAC如果遇到不支持的格式可以使用ffmpeg转换ffmpeg -i input.amr -ar 16000 -ac 1 output.wav5.3 性能调优建议根据硬件环境调整以下参数batch_size根据内存大小调整quantize确保设置为True使用量化模型启用GPU加速如果可用6. 总结通过本教程你已经学会了如何快速部署SenseVoice语音识别服务通过Web界面和API使用语音识别功能实现批量处理和实时转写的代码示例常见问题的解决方法SenseVoice-small-onnx凭借其多语言支持、高效推理和丰富功能非常适合以下场景智能客服语音转写会议记录自动生成多媒体内容分析语音交互应用开发获取更多AI镜像想探索更多AI镜像和应用场景访问 CSDN星图镜像广场提供丰富的预置镜像覆盖大模型推理、图像生成、视频生成、模型微调等多个领域支持一键部署。