SenseVoice语音识别入门:从安装到API调用完整指南
本文介绍了如何在星图GPU平台上一键自动化部署sensevoice-small-语音识别-onnx模型(带量化后),实现高效的多语言语音识别。该镜像支持实时音频转写,可广泛应用于会议记录、语音笔记转录等场景,大幅提升语音处理效率。
SenseVoice语音识别入门:从安装到API调用完整指南
1. 语音识别新选择:为什么选择SenseVoice
如果你正在寻找一个既快速又准确的多语言语音识别工具,SenseVoice可能会让你眼前一亮。这个基于ONNX量化的语音识别服务,不仅支持中文、英语、日语、韩语等主流语言,还能自动识别粤语这样的方言。
最吸引人的是它的性能表现——10秒的音频只需要70毫秒就能完成识别,这意味着几乎是实时转写。无论是做会议记录、语音笔记,还是开发语音交互应用,SenseVoice都能提供专业级的识别效果。
读完这篇指南,你将学会:
- 如何快速安装和部署SenseVoice语音识别服务
- 通过Web界面直接体验语音转写功能
- 使用REST API进行编程调用
- 用Python代码集成到自己的项目中
- 处理常见格式的音频文件并获得准确结果
2. 环境准备与快速安装
2.1 系统要求与依赖安装
SenseVoice可以在大多数Linux、Windows和macOS系统上运行。建议使用Python 3.8或更高版本。
打开终端,执行以下命令安装所需依赖:
# 创建并激活虚拟环境(可选但推荐)
python -m venv sensevoice_env
source sensevoice_env/bin/activate # Linux/macOS
# 或
sensevoice_env\Scripts\activate # Windows
# 安装核心依赖包
pip install funasr-onnx gradio fastapi uvicorn soundfile jieba
这些包各自负责不同的功能:
funasr-onnx: ONNX推理引擎,负责模型加载和语音识别gradio: 提供友好的Web界面fastapi和uvicorn: 构建REST API服务soundfile: 处理音频文件读取jieba: 中文分词工具,提升中文识别准确率
2.2 一键启动服务
安装完成后,启动服务非常简单:
python app.py --host 0.0.0.0 --port 7860
如果一切正常,你会看到类似这样的输出:
INFO: Started server process [12345]
INFO: Waiting for application startup.
INFO: Application startup complete.
INFO: Uvicorn running on http://0.0.0.0:7860 (Press CTRL+C to quit)
现在服务已经启动,可以通过浏览器访问了。
3. 快速体验Web界面
3.1 访问Web UI
在浏览器中输入 http://localhost:7860(如果是在本地运行),你会看到一个简洁的语音识别界面。
界面主要包含几个部分:
- 音频文件上传区域:可以拖放或点击选择音频文件
- 语言选择下拉菜单:支持自动检测、中文、英语、粤语、日语、韩语
- 转写按钮:开始处理音频
- 结果显示区域:显示识别后的文本
3.2 第一次语音转写体验
找一段短的音频文件(支持wav、mp3、m4a等格式),按照以下步骤操作:
- 点击"Upload Audio"按钮选择音频文件
- 在语言选择中选择"auto"(自动检测)或指定语言
- 确保"Use ITN"选项被勾选(逆文本正则化,让结果更自然)
- 点击"Transcribe"按钮开始识别
几秒钟后,你就能在结果区域看到识别出的文字。如果音频质量不错,识别准确率通常会很高。
4. API接口调用详解
4.1 REST API基础调用
除了Web界面,SenseVoice提供了完整的REST API接口,方便开发者集成到自己的应用中。
最基本的调用方式使用curl命令:
curl -X POST "http://localhost:7860/api/transcribe" \
-F "file=@your_audio.wav" \
-F "language=auto" \
-F "use_itn=true"
参数说明:
file: 音频文件路径,支持多种格式language: 识别语言,默认为"auto"自动检测use_itn: 是否使用逆文本正则化,建议设为true
4.2 API响应格式
成功的API调用会返回JSON格式的响应:
{
"status": "success",
"text": "这是识别出的文字内容",
"language": "zh",
"processing_time": 0.075
}
如果出现错误,会返回相应的错误信息:
{
"status": "error",
"message": "No audio file provided"
}
4.3 编程语言调用示例
在不同编程语言中调用API的方法:
Python示例:
import requests
def transcribe_audio(file_path, language="auto"):
url = "http://localhost:7860/api/transcribe"
files = {"file": open(file_path, "rb")}
data = {"language": language, "use_itn": "true"}
response = requests.post(url, files=files, data=data)
return response.json()
# 使用示例
result = transcribe_audio("meeting.wav")
print(result["text"])
JavaScript示例:
async function transcribeAudio(file) {
const formData = new FormData();
formData.append('file', file);
formData.append('language', 'auto');
formData.append('use_itn', 'true');
const response = await fetch('http://localhost:7860/api/transcribe', {
method: 'POST',
body: formData
});
return await response.json();
}
5. Python直接调用指南
5.1 初始化模型
如果你希望直接在Python代码中使用SenseVoice,而不通过HTTP服务,可以这样初始化模型:
from funasr_onnx import SenseVoiceSmall
# 初始化模型
model = SenseVoiceSmall(
model_dir="/root/ai-models/danieldong/sensevoice-small-onnx-quant",
batch_size=1, # 批处理大小,根据需求调整
quantize=True # 使用量化模型,减少内存占用
)
5.2 单文件识别示例
# 识别单个音频文件
result = model(["audio.wav"], language="auto", use_itn=True)
print(f"识别结果: {result[0]}")
5.3 批量处理多个文件
# 批量处理多个音频文件
audio_files = ["meeting1.wav", "interview.mp3", "lecture.m4a"]
results = model(audio_files, language="zh", use_itn=True)
for i, result in enumerate(results):
print(f"文件 {audio_files[i]} 的识别结果:")
print(result)
print("-" * 50)
5.4 实时音频流处理
对于实时音频流,可以使用以下方式:
import numpy as np
import sounddevice as sd
# 实时录音和识别
def real_time_recognition(duration=5, sample_rate=16000):
print("开始录音...")
audio_data = sd.rec(int(duration * sample_rate),
samplerate=sample_rate,
channels=1,
dtype='float32')
sd.wait()
print("录音完成,开始识别...")
# 保存临时文件进行识别
import soundfile as sf
sf.write("temp.wav", audio_data, sample_rate)
result = model(["temp.wav"], language="auto", use_itn=True)
return result[0]
# 使用示例
text = real_time_recognition(duration=10)
print(f"识别结果: {text}")
6. 实用技巧与常见问题
6.1 提升识别准确率的技巧
- 音频质量很重要:尽量使用清晰的音频源,避免背景噪音
- 选择合适的采样率:16kHz通常能获得最佳效果
- 语言选择策略:如果知道音频语言,直接指定比自动检测更准确
- 分段处理长音频:对于很长的音频,分段处理可以提高稳定性
# 长音频分段处理示例
def process_long_audio(file_path, segment_duration=30):
import librosa
from pydub import AudioSegment
audio = AudioSegment.from_file(file_path)
duration = len(audio) / 1000 # 转换为秒
results = []
for start in range(0, int(duration), segment_duration):
end = min(start + segment_duration, duration)
segment = audio[start*1000:end*1000]
segment.export("temp_segment.wav", format="wav")
result = model(["temp_segment.wav"], language="zh", use_itn=True)
results.append(result[0])
return "".join(results)
6.2 常见问题解决
问题1:模型加载失败 解决方案:检查模型路径是否正确,确保有足够的磁盘空间
问题2:识别结果不准确 解决方案:检查音频质量,尝试指定确切的语言而不是自动检测
问题3:处理速度慢 解决方案:减少batch_size参数,或者检查系统资源使用情况
问题4:内存不足 解决方案:使用量化模型(quantize=True),减少并发处理数量
6.3 支持的音频格式
SenseVoice支持多种常见音频格式:
- WAV(推荐,无损格式识别效果最好)
- MP3(最常用的压缩格式)
- M4A(苹果设备常用格式)
- FLAC(无损压缩格式)
- OGG(开源格式)
建议优先使用WAV格式获得最佳识别效果,如果使用压缩格式,请确保比特率不低于128kbps。
7. 总结
SenseVoice提供了一个强大而易用的语音识别解决方案,无论是通过Web界面快速体验,还是通过API集成到现有系统,都能满足不同用户的需求。
关键要点回顾:
- 安装简单,只需几个命令就能搭建完整服务
- 支持多语言识别,包括中文和方言
- 识别速度快,10秒音频仅需70毫秒
- 提供Web界面和API两种使用方式
- 支持多种音频格式,适应不同场景需求
下一步学习建议:
- 尝试处理不同语言和口音的音频,了解识别效果差异
- 探索批量处理功能,提高工作效率
- 考虑将语音识别集成到自己的应用或工作流程中
- 关注模型更新,新版本通常会带来性能提升和功能增强
现在你已经掌握了SenseVoice的基本使用方法,可以开始探索语音识别在各种场景下的应用了。无论是做会议记录、语音笔记,还是开发智能语音应用,SenseVoice都能成为你的得力助手。
获取更多AI镜像
想探索更多AI镜像和应用场景?访问 CSDN星图镜像广场,提供丰富的预置镜像,覆盖大模型推理、图像生成、视频生成、模型微调等多个领域,支持一键部署。
更多推荐

所有评论(0)