保姆级教程:基于ONNX量化的SenseVoice语音识别环境搭建

1. 引言

语音识别技术正在改变我们与设备交互的方式,从智能助手到实时字幕,应用场景越来越广泛。今天我要带大家搭建一个多语言语音识别环境,使用SenseVoice Small模型和ONNX量化技术,让你在普通电脑上也能享受高效的语音转文字服务。

这个环境有什么特别之处?它支持中文、粤语、英语、日语、韩语等多种语言,还能自动检测语言类型。最棒的是,经过ONNX量化后,模型体积大幅减小,推理速度却更快——10秒音频仅需70毫秒就能完成识别!

无论你是开发者想要集成语音识别功能,还是技术爱好者想要体验最新AI技术,这个教程都能帮你快速上手。我们从头开始,一步步搭建完整的语音识别服务。

2. 环境准备与安装

在开始之前,确保你的系统已经安装了Python 3.7或更高版本。建议使用虚拟环境来管理依赖,避免与其他项目冲突。

2.1 创建虚拟环境

# 创建新的虚拟环境
python -m venv sensevoice-env

# 激活虚拟环境
# Windows系统
sensevoice-env\Scripts\activate
# Linux/Mac系统
source sensevoice-env/bin/activate

2.2 安装必要依赖

# 安装核心依赖包
pip install funasr-onnx gradio fastapi uvicorn soundfile jieba

# 验证安装是否成功
python -c "import funasr_onnx; print('funasr-onnx安装成功')"

这些包各自有什么作用呢?

  • funasr-onnx:核心语音识别库,提供ONNX模型推理能力
  • gradio:用于构建Web界面,方便测试和演示
  • fastapiuvicorn:用于创建REST API服务
  • soundfile:处理音频文件读写
  • jieba:中文分词,提升识别准确率

3. 快速启动语音识别服务

环境准备好后,我们只需要几行代码就能启动完整的语音识别服务。

3.1 创建启动脚本

新建一个名为app.py的文件,内容如下:

from funasr_onnx import SenseVoiceSmall
import gradio as gr
import os

# 模型路径配置
model_path = "/root/ai-models/danieldong/sensevoice-small-onnx-quant"

# 初始化模型
model = SenseVoiceSmall(
    model_path,
    batch_size=10,
    quantize=True
)

def transcribe_audio(audio_file, language_type):
    """
    语音识别函数
    audio_file: 上传的音频文件
    language_type: 语言类型
    """
    try:
        # 执行语音识别
        results = model([audio_file], language=language_type, use_itn=True)
        return results[0]["text"]
    except Exception as e:
        return f"识别失败: {str(e)}"

# 创建Gradio界面
interface = gr.Interface(
    fn=transcribe_audio,
    inputs=[
        gr.Audio(type="filepath", label="上传音频文件"),
        gr.Dropdown(
            choices=["auto", "zh", "en", "yue", "ja", "ko"],
            value="auto",
            label="选择语言"
        )
    ],
    outputs=gr.Textbox(label="识别结果"),
    title="SenseVoice 语音识别服务",
    description="上传音频文件,选择语言类型(auto为自动检测),获取文字识别结果"
)

# 启动服务
if __name__ == "__main__":
    interface.launch(server_name="0.0.0.0", server_port=7860)

3.2 启动服务

# 启动语音识别服务
python app.py --host 0.0.0.0 --port 7860

服务启动后,你会看到类似这样的输出:

Running on local URL:  http://0.0.0.0:7860

现在打开浏览器访问 http://localhost:7860 就能看到语音识别界面了。

4. 使用语音识别服务

我们的服务提供了三种使用方式:Web界面、API调用和Python代码集成。

4.1 Web界面使用

Web界面是最简单的使用方式:

  1. 打开 http://localhost:7860
  2. 点击上传按钮选择音频文件
  3. 选择语言类型(建议使用auto自动检测)
  4. 点击提交按钮
  5. 查看识别结果

支持常见的音频格式:MP3、WAV、M4A、FLAC等。

4.2 API接口调用

如果你需要集成到其他系统中,可以使用REST API:

# 使用curl调用API
curl -X POST "http://localhost:7860/api/transcribe" \
  -F "file=@your_audio.wav" \
  -F "language=auto" \
  -F "use_itn=true"

API会返回JSON格式的识别结果:

{
  "text": "这是识别出的文字内容",
  "language": "zh"
}

4.3 Python代码集成

你也可以直接在Python代码中使用:

from funasr_onnx import SenseVoiceSmall

# 初始化模型
model = SenseVoiceSmall(
    "/root/ai-models/danieldong/sensevoice-small-onnx-quant",
    batch_size=10,
    quantize=True
)

# 识别音频文件
result = model(["audio.wav"], language="auto", use_itn=True)
print(result[0]["text"])

# 识别多个文件
results = model(["audio1.wav", "audio2.mp3"], language="zh", use_itn=True)
for result in results:
    print(f"识别结果: {result['text']}")

5. 高级功能与技巧

除了基本识别功能,SenseVoice还提供了一些高级特性。

5.1 多语言支持

模型支持50多种语言,常用的有:

语言代码 语言名称 使用示例
auto 自动检测 language="auto"
zh 中文 language="zh"
en 英语 language="en"
yue 粤语 language="yue"
ja 日语 language="ja"
ko 韩语 language="ko"

5.2 逆文本正则化(ITN)

ITN功能可以将口语化的表达转换为规范文本:

  • "三点钟" → "3:00"
  • "百分之二十" → "20%"
  • "一千二百" → "1200"

启用方法:设置use_itn=True

5.3 批量处理

模型支持批量处理多个音频文件,大幅提升处理效率:

# 批量处理示例
audio_files = ["audio1.wav", "audio2.mp3", "audio3.m4a"]
results = model(audio_files, language="auto", use_itn=True)

for i, result in enumerate(results):
    print(f"文件 {audio_files[i]} 的识别结果: {result['text']}")

6. 常见问题解答

在实际使用中可能会遇到一些问题,这里提供解决方案。

6.1 模型下载问题

如果模型没有自动下载,可以手动指定模型路径:

# 使用本地模型路径
model = SenseVoiceSmall(
    "你的本地模型路径",
    batch_size=10,
    quantize=True
)

6.2 内存不足问题

如果遇到内存不足,可以减小batch_size:

# 使用较小的batch_size
model = SenseVoiceSmall(
    model_path,
    batch_size=2,  # 减小批量大小
    quantize=True
)

6.3 音频格式问题

确保音频格式是支持的格式,如果不确定可以转换格式:

# 使用ffmpeg转换音频格式
ffmpeg -i input.audio output.wav

6.4 识别准确率优化

提升识别准确率的方法:

  1. 确保音频质量良好,没有太多背景噪音
  2. 明确指定语言类型,而不是总是使用auto
  3. 对于专业领域术语,可以在识别后进行后处理校正

7. 总结

通过这个教程,我们成功搭建了一个功能强大的多语言语音识别环境。SenseVoice Small模型结合ONNX量化技术,让我们在普通硬件上也能获得优秀的语音识别体验。

关键要点回顾:

  • 安装简单:只需几个pip命令就能完成环境准备
  • 使用方便:提供Web界面、API和代码三种使用方式
  • 功能强大:支持多语言识别、批量处理、ITN等高级功能
  • 性能优异:经过量化优化,推理速度快且资源占用少

现在你可以开始探索语音识别的各种应用场景了,比如为视频添加字幕、开发语音助手、会议记录转写等等。如果你想要更深入地定制或优化,可以查阅官方文档了解更多高级功能。


获取更多AI镜像

想探索更多AI镜像和应用场景?访问 CSDN星图镜像广场,提供丰富的预置镜像,覆盖大模型推理、图像生成、视频生成、模型微调等多个领域,支持一键部署。

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐