SenseVoice-small-onnx Python调用详解:funasr-onnx接口参数与ITN配置
1. 快速了解SenseVoice-small语音识别模型
SenseVoice-small-onnx是一个基于ONNX量化的多语言语音识别模型,专门为高效推理而设计。这个模型最大的特点是支持多种语言,包括中文、粤语、英语、日语、韩语等50多种语言的自动检测和识别。
在实际使用中,这个模型表现出色:处理10秒的音频只需要大约70毫秒,速度相当快。而且它不仅能识别文字,还能识别说话人的情感和音频中的事件,比如笑声、掌声等,功能相当丰富。
模型文件大小约230MB,采用了量化技术,在保证识别准确率的同时,大幅减少了内存占用和计算需求,非常适合在实际项目中部署使用。
2. 环境准备与模型安装
2.1 安装必要依赖
要使用SenseVoice-small模型,首先需要安装相关的Python包。打开终端,运行以下命令:
pip install funasr-onnx gradio fastapi uvicorn soundfile jieba这些包各自有不同的作用:
funasr-onnx:核心的语音识别库,提供了模型调用接口gradio和fastapi:用于构建Web界面和API服务uvicorn:ASGI服务器,用于运行FastAPI应用soundfile:音频文件处理库jieba:中文分词工具,用于文本后处理
2.2 获取模型文件
模型可以从Hugging Face等平台下载,推荐使用缓存路径来存储模型:
model_path = "/root/ai-models/danieldong/sensevoice-small-onnx-quant"如果已经下载过模型,服务会自动检测并使用缓存中的模型,避免重复下载。
3. 核心接口参数详解
3.1 模型初始化参数
使用SenseVoiceSmall类初始化模型时,有几个重要参数需要了解:
from funasr_onnx import SenseVoiceSmall model = SenseVoiceSmall( model_dir="/root/ai-models/danieldong/sensevoice-small-onnx-quant", batch_size=10, quantize=True, device="cpu" )参数说明:
model_dir:模型文件所在的目录路径batch_size:批处理大小,默认为1,增大可以提升处理效率quantize:是否使用量化模型,默认为True,建议开启以提升性能device:运行设备,可以是"cpu"或"cuda"
3.2 语音识别参数
调用识别功能时,有几个关键参数控制识别行为:
result = model( ["audio.wav"], language="auto", use_itn=True, batch_size=5 )主要参数解析:
language参数:指定识别语言
"auto":自动检测语言(推荐)"zh":中文"en":英语"yue":粤语"ja":日语"ko":韩语
use_itn参数:是否启用逆文本正则化
True:启用,将口语化表达转为标准文本False:禁用,保持原始识别结果
batch_size参数:处理批大小,可以调整以优化性能
4. ITN功能深度解析
4.1 什么是ITN?
ITN(Inverse Text Normalization,逆文本正则化)是语音识别中的一个重要后处理步骤。它的作用是将识别出的口语化文本转换为更规范的书面表达。
举个例子:
- 输入音频:"我今天花了三百块钱"
- 无ITN输出:"我今天花了三百块钱"
- 有ITN输出:"我今天花了300元"
可以看到,ITN将"三百"转换成了"300","块钱"转换成了"元",使文本更加规范和专业。
4.2 ITN的常见转换规则
ITN处理涵盖多个方面的文本规范化:
数字转换:
- "一百二十三" → "123"
- "三点一四" → "3.14"
- "二零二三年" → "2023年"
货币单位转换:
- "五百块钱" → "500元"
- "十美元" → "10美元"
- "二十欧元" → "20欧元"
百分比转换:
- "百分之二十" → "20%"
- "百分之一百" → "100%"
日期时间转换:
- "一月一号" → "1月1日"
- "下午三点" → "15:00"
4.3 如何控制ITN行为
在实际使用中,可以根据需求灵活控制ITN:
# 完全启用ITN result = model(audio_files, use_itn=True) # 禁用ITN,保持原始识别结果 result = model(audio_files, use_itn=False) # 部分场景下可能需要手动后处理 raw_result = model(audio_files, use_itn=False) # 然后根据自己的规则进行定制化处理5. 完整使用示例
5.1 基础语音识别
下面是一个完整的使用示例,展示如何从安装到使用的全过程:
from funasr_onnx import SenseVoiceSmall import soundfile as sf # 初始化模型 model = SenseVoiceSmall( "/root/ai-models/danieldong/sensevoice-small-onnx-quant", batch_size=8, quantize=True ) # 准备音频文件 audio_files = ["meeting_recording.wav", "interview.mp3"] # 执行语音识别 results = model( audio_files, language="auto", # 自动检测语言 use_itn=True, # 启用文本规范化 batch_size=4 # 批处理大小 ) # 输出结果 for i, result in enumerate(results): print(f"音频 {audio_files[i]} 的识别结果:") print(result['text']) if 'emotion' in result: print(f"情感分析: {result['emotion']}") print("-" * 50)5.2 处理长音频文件
对于较长的音频文件,建议使用流式处理:
def process_long_audio(audio_path, chunk_duration=30): """处理长音频文件""" import librosa # 加载音频 audio, sr = librosa.load(audio_path, sr=16000) # 分段处理 chunk_size = chunk_duration * sr results = [] for i in range(0, len(audio), chunk_size): chunk = audio[i:i + chunk_size] # 保存临时文件 temp_path = f"temp_chunk_{i//chunk_size}.wav" sf.write(temp_path, chunk, sr) # 识别当前片段 result = model([temp_path], language="auto", use_itn=True) results.append(result[0]) # 清理临时文件 import os os.remove(temp_path) return results6. 高级功能与技巧
6.1 情感识别功能
SenseVoice-small模型不仅能识别文字,还能分析说话人的情感:
result = model(["audio.wav"], language="auto", use_itn=True) if 'emotion' in result[0]: emotion_result = result[0]['emotion'] print(f"情感分析结果: {emotion_result}") # 常见的情感标签包括: # happy, sad, angry, neutral, excited等6.2 音频事件检测
模型还能检测音频中的特殊事件:
result = model(["audio_with_events.wav"], language="auto") if 'events' in result[0]: events = result[0]['events'] for event in events: print(f"检测到事件: {event['type']} at {event['timestamp']}") # 常见事件类型:笑声、掌声、咳嗽等6.3 性能优化建议
为了获得最佳性能,可以考虑以下优化策略:
# 调整批处理大小(根据硬件配置) model = SenseVoiceSmall(model_path, batch_size=16) # 使用GPU加速(如果可用) model = SenseVoiceSmall(model_path, device="cuda") # 预处理音频文件(统一采样率到16kHz) def preprocess_audio(input_path, output_path): import librosa audio, sr = librosa.load(input_path, sr=16000) sf.write(output_path, audio, sr)7. 常见问题与解决方案
7.1 模型加载失败
如果遇到模型加载问题,可以检查以下几点:
try: model = SenseVoiceSmall(model_path) except Exception as e: print(f"模型加载失败: {e}") # 检查模型路径是否正确 # 确认模型文件是否完整下载 # 检查文件权限7.2 识别准确率问题
如果识别准确率不理想,可以尝试:
- 优化音频质量:确保音频清晰,背景噪音小
- 调整语言参数:如果知道具体语言,直接指定而非使用auto
- 预处理音频:统一采样率到16kHz,单声道
- 分段处理:对长音频进行分段识别
7.3 处理速度优化
提升处理速度的方法:
# 增加批处理大小(需要更多内存) model = SenseVoiceSmall(model_path, batch_size=20) # 使用量化模型(默认已开启) model = SenseVoiceSmall(model_path, quantize=True) # 预处理多个文件后批量处理 audio_files = preprocess_multiple_files(file_list) results = model(audio_files, batch_size=len(audio_files))8. 总结
SenseVoice-small-onnx是一个功能强大且高效的语音识别解决方案,通过funasr-onnx库提供了简单易用的Python接口。关键要点包括:
核心优势:
- 支持多语言自动检测,覆盖50多种语言
- ITN功能让识别结果更加规范和专业
- 量化模型保证高性能和低资源消耗
- 额外提供情感识别和事件检测功能
使用建议:
- 对于已知语言的内容,直接指定语言参数而非使用auto
- 在正式文档、报告等场景中建议启用ITN功能
- 根据硬件配置调整批处理大小以获得最佳性能
- 对长音频采用分段处理策略
最佳实践:
# 推荐配置 model = SenseVoiceSmall( model_path="/your/model/path", batch_size=12, # 根据内存调整 quantize=True # 启用量化加速 ) results = model( audio_files, language="zh", # 已知语言时直接指定 use_itn=True, # 启用文本规范化 batch_size=8 # 处理批大小 )通过合理配置参数和优化处理流程,SenseVoice-small-onnx能够为各种语音识别应用提供可靠的技术支持。
获取更多AI镜像
想探索更多AI镜像和应用场景?访问 CSDN星图镜像广场,提供丰富的预置镜像,覆盖大模型推理、图像生成、视频生成、模型微调等多个领域,支持一键部署。