FunASR:语音识别与合成一体化,企业级开发实战详解
简介
FunASR是由阿里巴巴达摩院开源的高性能语音识别工具包,它不仅提供语音识别(ASR)功能,还集成了语音端点检测(VAD)、标点恢复、说话人分离等工业级模块,形成了完整的语音处理解决方案。 FunASR支持离线和实时两种模式,能够高效处理多语言音频,并提供高精度的识别结果。结合ModelScope生态,FunASR可以与文本到语音(TTS)模型无缝衔接,实现语音识别与合成一体化。本文将从零开始,详细介绍FunASR的环境搭建、模型选择、核心功能实现及企业级部署优化,帮助开发者快速掌握这一前沿技术。
一、环境搭建与模型安装
FunASR的环境搭建相对简单,主要依赖Python和PyTorch生态。首先需要准备开发环境,确保系统满足最低要求:Python≥3.8、PyTorch≥1.13和Torchaudio。FunASR支持多种部署方式,包括本地Python部署和Docker容器化部署。对于新手开发者,推荐使用本地Python部署;而对于企业级应用,Docker部署更加安全高效,支持高并发处理。
1. 本地Python部署
本地部署主要分为三个步骤:克隆FunASR仓库、安装依赖库和配置模型路径。首先,从GitHub克隆FunASR仓库:
git clone https://github.com/modelscope/FunASR.git
cd FunASR
然后,安装必要的依赖库。FunASR支持Conda和pip两种安装方式,推荐使用Conda创建独立的开发环境:
conda create -n funasr python=3.9
conda activate funasr
conda install pytorch==2.3.1 torchvision==0.18.1 torchaudio==2.3.1 pytorch-cuda=11.8 -c pytorch -c nvidia
完成环境配置后,安装FunASR库:
pip install -U funasr
如果需要使用工业预训练模型,还需安装ModelScope和HuggingFace:
pip install -U modelscope huggingface huggingface_hub
首次运行时,FunASR会自动下载所需模型到本地缓存目录(.cache/modelscope/hub/iic
)。开发者也可以手动下载模型并放置在指定路径下。
2. Docker容器部署
对于企业级应用,Docker部署更加适合。FunASR提供了预构建的Docker镜像,支持CPU和GPU两种配置。以下是Docker部署的步骤:
首先,拉取FunASR镜像:
docker pull registry.cn-hangzhou.aliyuncs.com/funasr_repo/funasr:funasr-runtime-sdk-cpu-0.4.6
然后,创建模型存储目录并启动容器:
mkdir -p ./funasr-runtime-resources/models
docker run -p 10095:10095 -it --privileged=true \-v $PWD/funasr-runtime-resources/models:/workspace/models \registry.cn-hangzhou.aliyuncs.com/funasr_repo/funasr:funasr-runtime-sdk-cpu-0.4.6
进入容器后,启动服务:
cd FunASR/runtime
nohup bash run_server.sh \--download-model-dir /workspace/models \--vad-dir damo/speech_fsmn_vad_zh-cn-16k-common-onnx \--model-dir damo/speech_paraformer-large-vad-punc_asr_nat-zh-cn-16k-common-vocab8404-onnx \--punc-dir damo/punc_ct-transformer_zh-cn-common-vad_realtime-vocab272727-onnx \--lm-dir damo/speech_ngram_lm_zh-cn-ai-wesp-fst \--itn-dir thuduj12/fst_itn_zh \--certfile 0 \--hotword /workspace/models/hotwords.txt > log.txt 2>&1 &
企业级应用通常需要高并发处理能力,可以通过docker-compose
实现多实例部署:
version: "3.7"
services:funasronline:image: funasr-cpu:0.4.6container_name: funasronlinerestart: alwaysprivileged: truenetworks:- asrnetports:- "10095:10095"volumes:- "./funasr-runtime-resources/models:/workspace/models"command: bash -c "cd /workspace/FunASR/runtime && nohup bash run_server.sh --download-model-dir /workspace/models --vad-dir damo/speech_fsmn_vad_zh-cn-16k-common-onnx --model-dir damo/speech_paraformer-large-vad-punc_asr nat-zh-cn-16k-common-vocab8404-onnx --punc-dir damo/punc_ct-transformer_zh-cn-common-vad_realtime-vocab272727-onnx --certfile 0 --hotword /workspace/models/hotwords.txt"
networks:asrnet:driver: bridge
运行docker-compose up
启动服务。Docker部署支持SSL证书配置和热词模型加载,通过--certfile 0
可以关闭SSL,--hotword
参数指定热词文件路径。
二、模型选择与核心功能实现
FunASR提供了丰富的预训练模型,涵盖了多种语音处理任务。根据不同的应用场景,可以选择合适的模型组合。以下是FunASR的主要模型及其用途:
模型名称 | 任务类型 | 训练数据 | 参数量 |
---|---|---|---|
paraformer-zh | 语音识别(非实时) | 60,000小时中文 | 220M |
paraformer-zh-streaming | 语音识别(实时) | 60,000小时中文 | 220M |
paraformer-en | 语音识别(非实时) | 50,000小时英文 | 220M |
fsmn-vad | 语音活动检测(VAD) | 5,000小时中英文 | 0.4M |
ct-punc | 标点恢复 | 100M中英文 | 290M |
cam++ | 说话人分离 | 5,000小时 | 7.2M |
damo/speech_campplus Sv_zh-cn_16k-common | 说话人确认 | 5,000小时 | 7.2M |
1. 语音识别(ASR)
语音识别是FunASR的核心功能,支持离线和实时两种模式。离线模式适合处理完整的音频文件,实时模式则适用于流式音频输入。以下是离线语音识别的代码示例:
from funasr import AutoModel
from funasr.utils.postprocess_utils import rich_transcription_postprocess# 初始化模型
model = AutoModel(model=