SenseVoice-small-onnx语音识别保姆级教程:从pip安装到API调用完整链路

本文面向零基础用户,手把手教你搭建多语言语音识别服务,无需深度学习背景,跟着做就能用

1. 前言:为什么选择SenseVoice-small-onnx

如果你正在寻找一个简单好用的语音识别工具,SenseVoice-small-onnx是个不错的选择。这个模型最大的特点就是"轻量高效"——它经过了ONNX量化处理,体积小巧但功能强大。

简单来说,这个工具能帮你:

  • 把语音转换成文字(支持中文、英文、日语、韩语、粤语等50多种语言)
  • 自动识别说话人的情感和音频中的特殊事件
  • 通过简单的API接口快速集成到你的项目中

最让人惊喜的是它的速度:处理10秒的音频只需要70毫秒,几乎实时就能出结果。无论是做语音笔记、会议记录,还是开发语音交互应用,这个工具都能帮上忙。

2. 环境准备与安装

2.1 系统要求

在开始之前,确保你的电脑满足以下要求:

  • 操作系统:Windows 10/11, macOS 10.14+, 或 Linux (Ubuntu 18.04+推荐)
  • Python版本:3.8 或更高版本
  • 内存:至少4GB RAM
  • 存储空间:至少1GB可用空间(用于存放模型和依赖包)

2.2 一键安装依赖

打开你的命令行工具(Windows用CMD或PowerShell,Mac/Linux用Terminal),输入以下命令:

pip install funasr-onnx gradio fastapi uvicorn soundfile jieba

这个命令会安装所有需要的软件包:

  • funasr-onnx:核心语音识别库
  • gradiofastapi:用于创建Web界面和API
  • uvicorn:运行Web服务的工具
  • soundfile:处理音频文件
  • jieba:中文分词工具

安装过程可能需要几分钟,取决于你的网络速度。如果遇到网络问题,可以尝试使用国内的镜像源:

pip install -i https://pypi.tuna.tsinghua.edu.cn/simple funasr-onnx gradio fastapi uvicorn soundfile jieba

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

3.1 创建启动脚本

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

from funasr_onnx import SenseVoiceSmall
from fastapi import FastAPI, File, UploadFile
from fastapi.responses import JSONResponse
import uvicorn
import os

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

# 创建FastAPI应用
app = FastAPI(title="SenseVoice语音识别服务")

@app.post("/api/transcribe")
async def transcribe_audio(
    file: UploadFile = File(...),
    language: str = "auto",
    use_itn: bool = True
):
    """语音转写API接口"""
    # 保存上传的音频文件
    audio_content = await file.read()
    with open("temp_audio", "wb") as f:
        f.write(audio_content)
    
    # 进行语音识别
    result = model(["temp_audio"], language=language, use_itn=use_itn)
    
    # 清理临时文件
    os.remove("temp_audio")
    
    return JSONResponse({
        "text": result[0],
        "language": language,
        "status": "success"
    })

@app.get("/health")
async def health_check():
    """健康检查接口"""
    return {"status": "healthy", "model": "sensevoice-small-onnx"}

if __name__ == "__main__":
    uvicorn.run(app, host="0.0.0.0", port=7860)

3.2 启动服务

在命令行中运行:

python app.py

看到类似下面的输出,说明服务启动成功:

INFO:     Started server process [12345]
INFO:     Waiting for application startup.
INFO:     Application startup complete.
INFO:     Uvicorn running on http://0.0.0.0:7860

4. 使用语音识别服务

4.1 通过Web界面使用

打开浏览器,访问 http://localhost:7860,你会看到一个简单的上传界面:

  1. 点击"选择文件"按钮,上传你的音频文件(支持mp3、wav、m4a、flac等格式)
  2. 选择识别语言(默认auto自动检测)
  3. 点击"上传"按钮
  4. 几秒钟后就能看到识别结果

4.2 通过API接口调用

如果你更喜欢用代码调用,可以使用以下方式:

import requests

# 准备音频文件
files = {"file": open("你的音频文件.wav", "rb")}
data = {"language": "auto", "use_itn": "true"}

# 发送请求
response = requests.post(
    "http://localhost:7860/api/transcribe",
    files=files,
    data=data
)

# 获取结果
result = response.json()
print(result["text"])

或者使用curl命令测试:

curl -X POST "http://localhost:7860/api/transcribe" \
  -F "file=@audio.wav" \
  -F "language=auto" \
  -F "use_itn=true"

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="zh", use_itn=True)
print("识别结果:", result[0])

# 批量识别多个文件
results = model(["audio1.wav", "audio2.mp3", "audio3.m4a"], language="auto")
for i, result in enumerate(results):
    print(f"文件{i+1}识别结果:", result)

5. 实用技巧和最佳实践

5.1 如何获得更好的识别效果

根据我的使用经验,这些技巧能显著提升识别准确率:

  1. 音频质量很重要:尽量使用清晰的录音,避免背景噪音
  2. 选择正确的语言:如果你知道录音的语言,直接指定而不是用auto
  3. 使用ITN功能:逆文本正则化能让数字、日期等格式更规范
  4. 适当的音频长度:虽然支持长音频,但3-5分钟的片段识别效果最好

5.2 常见语言代码参考

语言 代码 使用场景
自动检测 auto 不确定语言时使用
中文 zh 普通话录音
英语 en 英文内容
粤语 yue 广东话录音
日语 ja 日语内容
韩语 ko 韩语内容

5.3 处理大量音频文件

如果你需要处理很多音频文件,可以使用批处理模式:

import os
from funasr_onnx import SenseVoiceSmall

model = SenseVoiceSmall("/root/ai-models/danieldong/sensevoice-small-onnx-quant")

# 处理整个文件夹的音频文件
audio_folder = "你的音频文件夹"
audio_files = [os.path.join(audio_folder, f) for f in os.listdir(audio_folder) 
               if f.endswith(('.wav', '.mp3', '.m4a'))]

# 分批处理,避免内存不足
batch_size = 5
for i in range(0, len(audio_files), batch_size):
    batch = audio_files[i:i+batch_size]
    results = model(batch, language="auto")
    
    for file_path, text in zip(batch, results):
        print(f"{file_path}: {text}")
        # 这里可以保存结果到文件或数据库

6. 常见问题解答

问题1:模型文件在哪里下载? 答:服务会自动下载和管理模型文件,你不需要手动下载。模型会保存在/root/ai-models/danieldong/sensevoice-small-onnx-quant目录下。

问题2:支持哪些音频格式? 答:支持常见的音频格式,包括wav、mp3、m4a、flac等。建议使用wav格式获得最佳效果。

问题3:ITN功能有什么用? 答:ITN(逆文本正则化)能把口语化的表达转换成规范的文本格式。比如把"三点钟"转换成"3:00","百分之二十"转换成"20%"。建议保持开启。

问题4:服务启动失败怎么办? 答:检查以下几点:

  • Python版本是否是3.8+
  • 所有依赖包是否安装成功
  • 7860端口是否被其他程序占用(可以换其他端口试试)

问题5:识别速度慢怎么办? 答:确保使用的是量化模型(quantize=True),这是速度最快的版本。另外,音频文件不要太大,过长的音频可以分段处理。

7. 总结

通过这个教程,你应该已经成功搭建了自己的语音识别服务。SenseVoice-small-onnx最大的优势就是简单易用——不需要复杂的配置,不需要深度学习知识,只需要几行命令就能获得专业级的语音识别能力。

这个工具特别适合:

  • 个人用户做语音笔记和记录整理
  • 开发者快速为应用添加语音输入功能
  • 小团队处理会议录音和访谈内容
  • 学习研究多语言语音识别技术

最重要的是,整个服务都是离线的,你的音频数据不会上传到任何服务器,保证了隐私和安全。

现在你可以开始尝试处理自己的音频文件了。从简单的短录音开始,逐步尝试更复杂的场景。遇到问题可以回头查看对应的章节,或者多试试不同的参数设置。


获取更多AI镜像

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

Logo

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

更多推荐