SenseVoice-small-ONNX开源ASR教程:funasr-onnx框架下Python调用实例

SenseVoice-small-ONNX开源ASR教程:funasr-onnx框架下Python调用实例 SenseVoice-small-ONNX开源ASR教程funasr-onnx框架下Python调用实例1. 项目概述SenseVoice-small-ONNX是一个基于ONNX量化的多语言语音识别模型支持中文、粤语、英语、日语、韩语等多种语言的语音转文字功能。这个模型经过量化处理后体积仅为230M但识别效果依然出色特别适合在资源受限的环境中部署使用。通过funasr-onnx框架我们可以轻松地在Python环境中调用这个模型实现高效的语音识别服务。无论是构建语音助手、会议记录系统还是开发多语言翻译工具这个方案都能提供稳定可靠的技术支持。2. 环境准备与安装在开始使用之前我们需要先搭建好开发环境。以下是详细的安装步骤2.1 安装必要依赖打开终端执行以下命令安装所需的Python包pip install funasr-onnx gradio fastapi uvicorn soundfile jieba这些依赖包的作用分别是funasr-onnx核心语音识别框架gradio用于构建Web界面fastapi和uvicorn用于创建REST API服务soundfile处理音频文件jieba中文分词工具2.2 模型准备SenseVoice-small-ONNX模型会自动从缓存路径加载无需手动下载。模型默认存储在/root/ai-models/danieldong/sensevoice-small-onnx-quant如果这是第一次使用系统会自动下载模型文件。量化后的模型文件名为model_quant.onnx大小约为230MB。3. 快速启动语音识别服务3.1 启动Web服务使用以下命令启动语音识别服务python3 app.py --host 0.0.0.0 --port 7860服务启动后可以通过以下地址访问Web界面http://localhost:7860API文档http://localhost:7860/docs健康检查http://localhost:7860/health3.2 Web界面使用打开Web界面后你会看到一个简洁的上传界面点击上传音频按钮选择音频文件选择识别语言支持自动检测点击转写按钮开始识别查看识别结果和识别耗时界面还会显示识别过程中的详细日志包括语言检测结果、识别进度等信息。4. Python直接调用示例除了通过Web服务我们还可以直接在Python代码中调用模型4.1 基础调用方法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.2 批量处理示例如果需要处理多个音频文件可以使用批量处理功能import os # 获取所有音频文件 audio_files [f for f in os.listdir(audio_dir) if f.endswith((.wav, .mp3))] # 批量识别 results model(audio_files, languagezh, use_itnTrue) for i, result in enumerate(results): print(f文件 {audio_files[i]} 的识别结果) print(result) print(- * 50)4.3 高级参数配置# 高级配置示例 model SenseVoiceSmall( model_dir/root/ai-models/danieldong/sensevoice-small-onnx-quant, batch_size5, # 批处理大小 quantizeTrue, # 使用量化模型 devicecpu, # 使用CPU推理 num_threads4 # 线程数 ) # 带详细参数的识别 result model( [meeting_recording.wav], languageauto, # 自动检测语言 use_itnTrue, # 启用逆文本正则化 hotword技术术语 产品名称, # 添加热词提升特定词汇识别率 beam_size10 # 搜索宽度 )5. REST API接口调用5.1 基本API调用通过HTTP接口可以轻松集成到其他系统中curl -X POST http://localhost:7860/api/transcribe \ -F fileaudio.wav \ -F languageauto \ -F use_itntrue5.2 Python代码调用APIimport requests def transcribe_audio(file_path, languageauto): url http://localhost:7860/api/transcribe with open(file_path, rb) as f: files {file: f} data {language: language, use_itn: true} response requests.post(url, filesfiles, datadata) if response.status_code 200: return response.json() else: return {error: f请求失败状态码{response.status_code}} # 使用示例 result transcribe_audio(test_audio.wav, zh) print(result)5.3 批量API处理对于需要批量处理的情况可以编写循环调用import glob import time def batch_transcribe(audio_dir, output_file): audio_files glob.glob(f{audio_dir}/*.wav) glob.glob(f{audio_dir}/*.mp3) with open(output_file, w, encodingutf-8) as f: for audio_file in audio_files: print(f处理文件{audio_file}) try: result transcribe_audio(audio_file) if text in result: f.write(f{audio_file}: {result[text]}\n) else: f.write(f{audio_file}: 识别失败\n) # 避免请求过于频繁 time.sleep(0.1) except Exception as e: print(f处理 {audio_file} 时出错{e}) f.write(f{audio_file}: 处理出错\n) # 批量处理目录中的所有音频文件 batch_transcribe(audio_recordings, transcription_results.txt)6. 实用技巧与最佳实践6.1 音频预处理建议为了获得更好的识别效果建议对音频进行预处理import soundfile as sf import numpy as np def preprocess_audio(input_path, output_path): # 读取音频文件 data, samplerate sf.read(input_path) # 转换为单声道如果原本是立体声 if len(data.shape) 1: data np.mean(data, axis1) # 标准化音频音量 data data / np.max(np.abs(data)) * 0.9 # 保存处理后的音频 sf.write(output_path, data, samplerate) return output_path # 使用示例 processed_audio preprocess_audio(raw_audio.wav, processed_audio.wav) result model([processed_audio], languageauto)6.2 热词优化识别对于特定领域的词汇可以使用热词功能提升识别准确率# 医疗领域热词示例 medical_hotwords 心电图 CT扫描 MRI 血压计 血糖仪 抗生素 result model( [medical_consultation.wav], languagezh, hotwordmedical_hotwords, use_itnTrue ) # 技术领域热词示例 tech_hotwords Python JavaScript 人工智能 机器学习 深度学习 神经网络 result model( [tech_presentation.wav], languageen, hotwordtech_hotwords )6.3 性能优化建议# 根据硬件配置调整参数 optimal_model SenseVoiceSmall( model_dir/root/ai-models/danieldong/sensevoice-small-onnx-quant, batch_size8, # 根据内存大小调整 devicecpu, # 使用CPU num_threads6, # 根据CPU核心数调整 quantizeTrue ) # 对于长音频可以考虑先进行分割 def split_long_audio(audio_path, segment_duration30): 将长音频分割为短片段 data, samplerate sf.read(audio_path) segment_length segment_duration * samplerate segments [] for i in range(0, len(data), segment_length): segment data[i:isegment_length] segment_path fsegment_{i//segment_length}.wav sf.write(segment_path, segment, samplerate) segments.append(segment_path) return segments7. 常见问题解答7.1 模型加载问题问模型加载失败怎么办答首先检查模型路径是否正确确保有足够的存储空间。如果模型不存在系统会自动下载请保持网络连接畅通。问内存不足如何解决答可以减小batch_size参数或者使用quantizeTrue启用量化模型减少内存占用。7.2 识别效果优化问识别准确率不高怎么办答尝试以下方法确保音频质量良好背景噪音较少使用热词功能添加领域特定词汇明确指定语言而不是使用auto对音频进行预处理去除噪音和标准化音量问长音频识别效果差怎么办答建议将长音频分割为5-30秒的片段分别识别然后合并结果。7.3 性能相关问题问识别速度慢如何优化答可以调整num_threads参数使用多线程或者使用GPU加速如果环境支持。问如何支持更多音频格式答系统支持wav、mp3、m4a、flac等常见格式。对于不支持的格式可以先使用ffmpeg等工具转换。8. 总结SenseVoice-small-ONNX结合funasr-onnx框架提供了一个高效、易用的多语言语音识别解决方案。通过本教程你应该已经掌握了环境搭建如何安装必要的依赖和配置模型服务部署如何启动Web服务和API服务代码调用如何在Python中直接调用模型进行语音识别API集成如何通过HTTP接口与其他系统集成优化技巧各种提升识别效果和性能的实用方法这个方案的优点在于模型体积小、识别速度快、支持语言多非常适合实际项目部署。无论是开发语音助手、会议记录系统还是构建多语言翻译工具都能提供可靠的技术支持。在实际使用中建议根据具体场景调整参数使用热词功能提升专业词汇识别率并对音频进行适当的预处理这样才能获得最佳的识别效果。获取更多AI镜像想探索更多AI镜像和应用场景访问 CSDN星图镜像广场提供丰富的预置镜像覆盖大模型推理、图像生成、视频生成、模型微调等多个领域支持一键部署。