AI【应用 04】FunASR离线文件转写服务开发指南(实践篇)
FunASR离线文件转写服务开发指南(实践篇)
以下内容几乎源于官网 《FunASR离线文件转写服务开发指南》,去掉了一些实践无关的内容,补充了一些步骤说明和问题记录,部署环境如下:
# 系统信息NAME="openEuler"VERSION="22.03 (LTS-SP3)"ID="openEuler"VERSION_ID="22.03"PRETTY_NAME="openEuler 22.03 (LTS-SP3)"ANSI_COLOR="0;31"# docker版本 Docker version 27.4.0, build bde2b89 1.是什么
FunASR(Automatic Speech Recognition,自动语音识别)离线文件转写软件包,提供了一款功能强大的语音离线文件转写服务。拥有完整的语音识别链路,结合了语音端点检测、语音识别、标点等模型,可以将几十个小时的长音频与视频识别成带标点的文字,而且支持上百路请求同时进行转写。输出为带标点的文字,含有字级别时间戳,支持ITN与用户自定义热词等。服务端集成有ffmpeg,支持各种音视频格式输入。软件包提供有html、python、c++、java与c#等多种编程语言客户端,用户可以直接使用与进一步开发。

推荐配置为:
- 配置1: (X86,计算型),4核vCPU,内存8G,单机可以支持大约32路的请求
- 配置2: (X86,计算型),16核vCPU,内存32G,单机可以支持大约64路的请求
- 配置3: (X86,计算型),64核vCPU,内存128G,单机可以支持大约200路的请求
2. 快速上手
2.1 docker安装
官网推荐的安装方式:
# 下载安装脚本curl-O https://isv-data.oss-cn-hangzhou.aliyuncs.com/ics/MaaS/ASR/shell/install_docker.sh # 执行安装命令sudobash install_docker.sh 2.2 镜像启动
通过下述命令拉取并启动FunASR软件包的docker镜像:
# 拉取镜像sudodocker pull \ registry.cn-hangzhou.aliyuncs.com/funasr_repo/funasr:funasr-runtime-sdk-cpu-0.4.7 # 创建资源文件夹mkdir-p ./funasr-runtime-resources/models # 交互式启动容器sudodocker run -p10095: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.7 2.3 服务端启动
docker启动之后,进入到docker里边启动 funasr-wss-server服务程序:
# 容器内的操作cd FunASR/runtime nohupbash 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_cn-en-common-vocab471067-large-onnx \ --lm-dir damo/speech_ngram_lm_zh-cn-ai-wesp-fst \ --itn-dir thuduj12/fst_itn_zh \--hotword /workspace/models/hotwords.txt > log.txt 2>&1&# 如果您想关闭ssl,增加参数:--certfile 0# 如果您想使用SenseVoiceSmall模型、时间戳、nn热词模型进行部署,请设置--model-dir为对应模型:# iic/SenseVoiceSmall-onnx# damo/speech_paraformer-large-vad-punc_asr_nat-zh-cn-16k-common-vocab8404-onnx(时间戳)# damo/speech_paraformer-large-contextual_asr_nat-zh-cn-16k-common-vocab8404-onnx(nn热词)# 如果您想在服务端加载热词,请在宿主机文件./funasr-runtime-resources/models/hotwords.txt配置热词(docker映射地址为/workspace/models/hotwords.txt):# 每行一个热词,格式(热词 权重):阿里巴巴 20(注:热词理论上无限制,但为了兼顾性能和效果,建议热词长度不超过10,个数不超过1k,权重1~100)# SenseVoiceSmall-onnx识别结果中“<|zh|><|NEUTRAL|><|Speech|> ”分别为对应的语种、情感、事件信息# 服务启动时容器内的日志信息 root@485ac2db1a1a:/workspace/FunASR/runtime# tail -f log.txt warn(RuntimeWarning(msg))2026-03-03 10:45:35,638 - modelscope - INFO - Use user-specified model revision: v2.0.5 Notice: ffmpeg is not installed. torchaudio is used to load audio If you want to use ffmpeg backend to load audio, please install it by: sudoaptinstall ffmpeg # ubuntu# brew install ffmpeg # mac Downloading [am.mvn]: 100%|██████████|10.9k/10.9k [00:00<00:00, 50.2kB/s] Downloading [config.yaml]: 100%|██████████|2.83k/2.83k [00:00<00:00, 13.5kB/s] Downloading [configuration.json]: 100%|██████████|790/790 [00:00<00:00, 3.69kB/s]... Downloading [model_quant.onnx]: 100%|██████████| 965M/965M [06:08<00:00, 2.74MB/s] Downloading [README.md]: 100%|██████████|5.11k/5.11k [00:00<00:00, 23.4kB/s] Downloading [tokens.json]: 100%|██████████|7.90M/7.90M [00:03<00:00, 2.15MB/s] I20260303 11:01:36.809777 56 funasr-wss-server.cpp:437] Set punc-dir : /workspace/models/damo/punc_ct-transformer_cn-en-common-vocab471067-large-onnx I20260303 11:01:36.809870 56 funasr-wss-server.cpp:466] hotword path: /workspace/models/hotwords.txt E20260303 11:01:36.810029 56 util.cpp:1009] Unable to open hotwords file: /workspace/models/hotwords.txt. If you have not set hotwords, please ignore this message. I20260303 11:01:36.813566 56 funasr-wss-server.cpp:488] SSL is opened! certfile path is /workspace/FunASR/runtime/ssl_key/server.crt I20260303 11:01:36.813755 56 websocket-server.cpp:29] on_tls_init called with hdl: 0x558f9003f1d0 I20260303 11:01:36.813779 56 websocket-server.cpp:30] using TLS mode: Mozilla Intermediate I20260303 11:01:36.864419 56 fsmn-vad.cpp:58] Successfully load model from /workspace/models/damo/speech_fsmn_vad_zh-cn-16k-common-onnx/model_quant.onnx I20260303 11:01:40.236037 56 paraformer.cpp:42] Successfully load model from /workspace/models/damo/speech_paraformer-large-vad-punc_asr_nat-zh-cn-16k-common-vocab8404-onnx/model_quant.onnx I20260303 11:01:48.425398 56 paraformer.cpp:197] Successfully load lm file /workspace/models/damo/speech_ngram_lm_zh-cn-ai-wesp-fst/TLG.fst I20260303 11:01:50.282640 56 ct-transformer.cpp:21] Successfully load model from /workspace/models/damo/punc_ct-transformer_cn-en-common-vocab471067-large-onnx/model_quant.onnx I20260303 11:01:52.288884 56 tokenizer.cpp:40] Successfully load file from /workspace/models/damo/punc_ct-transformer_cn-en-common-vocab471067-large-onnx/jieba.c.dict, /workspace/models/damo/punc_ct-transformer_cn-en-common-vocab471067-large-onnx/jieba_usr_dict I20260303 11:01:52.305197 56 tokenizer.cpp:48] Successfully load model from /workspace/models/damo/punc_ct-transformer_cn-en-common-vocab471067-large-onnx/jieba.hmm I20260303 11:01:52.309901 56 itn-processor.cpp:33] Successfully load model from /workspace/models/thuduj12/fst_itn_zh/zh_itn_tagger.fst I20260303 11:01:52.311070 56 itn-processor.cpp:35] Successfully load model from /workspace/models/thuduj12/fst_itn_zh/zh_itn_verbalizer.fst I20260303 11:01:52.311086 56 websocket-server.cpp:423] model successfully inited I20260303 11:01:52.311093 56 websocket-server.cpp:425] initAsr run check_and_clean_connection I20260303 11:01:52.311194 56 websocket-server.cpp:428] initAsr run check_and_clean_connection finished I20260303 11:01:52.311209 56 funasr-wss-server.cpp:513] decoder-thread-num: 40 I20260303 11:01:52.311215 56 funasr-wss-server.cpp:514] io-thread-num: 3 I20260303 11:01:52.311220 56 funasr-wss-server.cpp:515] model-thread-num: 1 I20260303 11:01:52.311225 56 funasr-wss-server.cpp:516] asr model init finished. listen on port:10095 如果您想定制ngram,参考文档(如何训练LM),如果您想部署8k的模型,请使用如下命令启动服务:
cd FunASR/runtime nohupbash run_server.sh \ --download-model-dir /workspace/models \ --vad-dir damo/speech_fsmn_vad_zh-cn-8k-common-onnx \ --model-dir damo/speech_paraformer_asr_nat-zh-cn-8k-common-vocab8358-tensorflow1-onnx \ --punc-dir damo/punc_ct-transformer_cn-en-common-vocab471067-large-onnx \ --lm-dir damo/speech_ngram_lm_zh-cn-ai-wesp-fst-token8358 \ --itn-dir thuduj12/fst_itn_zh \--hotword /workspace/models/hotwords.txt > log.txt 2>&1&- 服务端详细参数介绍可参考服务端用法详解。
2.4 客户端测试与使用
下载客户端测试工具目录samples
wget https://isv-data.oss-cn-hangzhou.aliyuncs.com/ics/MaaS/ASR/sample/funasr_samples.tar.gz 我们以Python语言客户端为例,进行说明,支持多种音频格式输入(.wav, .pcm, .mp3等),也支持视频输入(.mp4等),以及多文件列表wav.scp输入,其他版本客户端请参考文档(点击此处),定制服务部署请参考如何定制服务部署
python3 funasr_wss_client.py --host"127.0.0.1"--port10095--mode offline --audio_in"../audio/asr_example.wav"运行结果:
[root@localhost python]# python3 funasr_wss_client.py --host "127.0.0.1" --port 10095 --mode offline --audio_in "../audio/asr_example.wav" Namespace(host='127.0.0.1', port=10095, chunk_size=[5, 10, 5], chunk_interval=10, hotword='', audio_in='../audio/asr_example.wav', audio_fs=16000, send_without_sleep=True, thread_num=1, words_max_print=10000, output_dir=None, ssl=1, use_itn=1, mode='offline') connect to wss://127.0.0.1:10095 pid0_0: demo: 欢迎大家来体验达摩院推出的语音识别模型。 timestamp: [[880,1120],[1120,1380],[1380,1540],[1540,1780],[1780,2020],[2020,2180],[2180,2480],[2480,2600],[2600,2780],[2780,3040],[3040,3240],[3240,3480],[3480,3699],[3699,3900],[3900,4180],[4180,4420],[4420,4620],[4620,4780],[4780,5195]] Exception: sent 1000(OK);then received 1000(OK) end 异常问题处理:
# 启动时的报错信息 Traceback (most recent call last): File "/home/jsgx/funasr/samples/python/funasr_wss_client.py", line 4, in<module>import websockets, ssl ModuleNotFoundError: No module named 'websockets'# 1. 安装websockets pip install websockets # 2. 安装兼容性较好的指定版本 pip installwebsockets==13.13. 客户端用法详解
在服务器上完成FunASR服务部署以后,可以通过如下的步骤来测试和使用离线文件转写服务。 目前分别支持以下几种编程语言客户端:
3.1 python-client
若想直接运行client进行测试,可参考如下简易说明,以python版本为例:
python3 funasr_wss_client.py --host"127.0.0.1"--port10095--mode offline \--audio_in"../audio/asr_example.wav"--output_dir"./results"命令参数说明:
--host 为FunASR runtime-SDK服务部署机器ip,默认为本机ip(127.0.0.1),如果client与服务不在同一台服务器, 需要改为部署机器ip --port 10095 部署端口号 --mode offline表示离线文件转写 --audio_in 需要进行转写的音频文件,支持文件路径,文件列表wav.scp --thread_num 设置并发发送线程数,默认为1 --ssl 设置是否开启ssl证书校验,默认1开启,设置为0关闭 --hotword 热词文件,每行一个热词,格式(热词 权重):阿里巴巴 20 --use_itn 设置是否使用itn,默认1开启,设置为0关闭 文件是测试 Windows 环境部署的 whisper 时用到的,顺便也对比一下:
# 上点儿强度也测试一下mp3格式 python3 funasr_wss_client.py --host"127.0.0.1"--port10095--mode offline \--audio_in"./whisperTest.mp3"--output_dir"./results"# 输出结果 Namespace(host='127.0.0.1', port=10095, chunk_size=[5, 10, 5], chunk_interval=10, hotword='', audio_in='./whisperTest.mp3', audio_fs=16000, send_without_sleep=True, thread_num=1, words_max_print=10000, output_dir='./results', ssl=1, use_itn=1, mode='offline') connect to wss://127.0.0.1:10095 pid0_0: demo: 我呢今年40 岁,85 年的出生在天津市。父母呢就是普通的工人,没有什么这个过多资源吧,基本上就是家里条件你说多好,也没有说多差,也不至于都是普通家庭吧。大学的时候呢,学文物专业的毕业之后就进了拍卖行工作,就毕业京一直北漂到到今天,我的妻子呢就是我的这个大学同学,然后我们结婚呢也比较晚生,孩子也比较晚,现在孩子也一岁半。 timestamp: [[930,1070],[1070,1390],[1390,1470],[1470,2070],[2150,2290],[2290,2430],[2430,2730],[2730,2880],[2880,3030],[3030,3210],[3210,3630],[3630,4050],[4050,4350],[4350,4569],[4569,4710],[4710,4830],[4830,5130],[5130,5290],[5290,5470],[5470,5590],[5590,5670],[5670,5770],[5770,5850],[5850,5950],[5950,6090],[6090,6189],[6189,6569],[6569,6730],[6730,6850],[6850,6970],[6970,7230],[7230,7390],[7390,7890],[7890,8029],[8029,8189],[8189,8330],[8330,8510],[8510,8910],[8910,9050],[9050,9170],[9170,9290],[9290,9470],[9470,9670],[9670,9830],[9830,10010],[10010,10130],[10130,10570],[10570,10650],[10650,10910],[10910,11010],[11010,11310],[11310,11450],[11450,11550],[11550,11810],[11810,12010],[12010,12150],[12150,12430],[12430,12570],[12570,12690],[12690,12830],[12830,12930],[12930,13190],[13190,13350],[13350,13610],[13610,13710],[13710,13850],[13850,14010],[14010,14110],[14110,14550],[14550,14710],[14710,14890],[14890,15010],[15010,15090],[15090,15190],[15190,15269],[15269,15450],[15450,15550],[15550,15690],[15690,15850],[15850,16209],[16209,16309],[16309,16449],[16449,16550],[16550,16730],[16730,17089],[17089,17289],[17289,17390],[17390,17509],[17509,17589],[17589,17689],[17689,17890],[17890,18029],[18029,18289],[18289,18449],[18449,18570],[18570,18689],[18689,19009],[19009,19169],[19169,19310],[19310,19470],[19470,19650],[19650,19890],[19890,20009],[20009,20329],[20329,20490],[20490,20664],[20840,21000],[21000,21180],[21180,21439],[21439,21539],[21539,21740],[21740,21900],[21900,22039],[22039,22199],[22199,22660],[22660,22800],[22800,22920],[22920,23020],[23020,23520],[23520,23619],[23619,23740],[23740,23860],[23860,23960],[23960,24099],[24099,24340],[24340,24500],[24500,24640],[24640,24800],[24800,24920],[24920,25260],[25260,25420],[25420,25580],[25580,25660],[25660,25760],[25760,25880],[25880,25960],[25960,26119],[26119,26220],[26220,26340],[26340,26460],[26460,26640],[26640,26779],[26779,26880],[26880,27060],[27060,27355]] Exception: sent 1000(OK);then received 1000(OK) end 这是我人耳转录的,有些地方听了好几遍才听清楚:
我呢今年40岁,85年的,出生在天津市,父母就是普通工人,没有什么这个过多资源吧,基本上就是家里条件,你说多好也没有,说多差也不至于,都是普通家庭吧,大学的时候学文物专业的,毕业之后呢就进了拍卖行工作,就在北京,一直北漂到今天,我的妻子呢就是我的这个大同学,然后我们结婚也比较晚,生孩子也比较晚,现在孩子也一岁半。 对比结果(左侧 funasr 右侧人耳转录):

之前 wisper 的对比:

重新比对了一下 wisper 的结果:

之所以又重新比对了一次 wisper 的转录结果,原因是 funasr 的转录结果帮我修正了自己耳朵输出的信息,下一个结论:就测试的版本而言,正确率都是挺高的,wisper 存在一定的水土不服,funasr 也有些许的问题。
3.2 cpp-client
进入samples/cpp目录后,可以用cpp进行测试,指令如下:
./funasr-wss-client --server-ip 127.0.0.1 --port10095 --wav-path ../audio/asr_example.wav 命令参数说明:
--server-ip 为FunASR runtime-SDK服务部署机器ip,默认为本机ip(127.0.0.1),如果client与服务不在同一台服务器, 需要改为部署机器ip --port 10095 部署端口号 --wav-path 需要进行转写的音频文件,支持文件路径 --hotword 热词文件,每行一个热词,格式(热词 权重):阿里巴巴 20 --thread-num 设置客户端线程数 --use-itn 设置是否使用itn,默认1开启,设置为0关闭 执行结果:
sended data len=177572 Thread: 139725240264256, total_recv=1, on_message ={"is_final":false,"mode":"offline","stamp_sents":[{"end":5195,"punc":"。","start":880,"text_seg":"欢 迎 大 家 来 体 验 达 摩 院 推 出 的 语 音 识 别 模 型","ts_list":[[880,1120],[1120,1380],[1380,1540],[1540,1780],[1780,2020],[2020,2180],[2180,2480],[2480,2600],[2600,2780],[2780,3040],[3040,3240],[3240,3480],[3480,3699],[3699,3900],[3900,4180],[4180,4420],[4420,4620],[4620,4780],[4780,5195]]}],"text":"欢迎大家来体验达摩院推出的语音识别模型。","timestamp":"[[880,1120],[1120,1380],[1380,1540],[1540,1780],[1780,2020],[2020,2180],[2180,2480],[2480,2600],[2600,2780],[2780,3040],[3040,3240],[3240,3480],[3480,3699],[3699,3900],[3900,4180],[4180,4420],[4420,4620],[4620,4780],[4780,5195]]","wav_name":"wav_default_id"} Thread: 139725240264256, close client {"is_final":false,"mode":"offline","stamp_sents":[{"end":5195,"punc":"。","start":880,"text_seg":"欢 迎 大 家 来 体 验 达 摩 院 推 出 的 语 音 识 别 模 型","ts_list":[[880,1120],[1120,1380],[1380,1540],[1540,1780],[1780,2020],[2020,2180],[2180,2480],[2480,2600],[2600,2780],[2780,3040],[3040,3240],[3240,3480],[3480,3699],[3699,3900],[3900,4180],[4180,4420],[4420,4620],[4620,4780],[4780,5195]]}],"text":"欢迎大家来体验达摩院推出的语音识别模型。","timestamp":"[[880,1120],[1120,1380],[1380,1540],[1540,1780],[1780,2020],[2020,2180],[2180,2480],[2480,2600],[2600,2780],[2780,3040],[3040,3240],[3240,3480],[3480,3699],[3699,3900],[3900,4180],[4180,4420],[4420,4620],[4620,4780],[4780,5195]]","wav_name":"wav_default_id"}3.3 Html网页版
在浏览器中打开 html/static/index.html,即可出现如下页面,支持麦克风输入与文件上传,直接进行体验,需要输入 asr 服务地址 <font>wss://IP:10095/</font>:

报错信息:
I20260303 14:01:36.164183 530 websocket-server.cpp:29] on_tls_init called with hdl: 0x7fb98c010ac0 I20260303 14:01:36.164292 530 websocket-server.cpp:30] using TLS mode: Mozilla Intermediate [2026-03-03 14:01:36][error] handle_transport_init received error: TLS handshake failed [2026-03-03 14:01:36][info] asio async_shutdown error: asio.ssl:336462231 (shutdown whilein init (SSL routines, SSL_shutdown))关掉 SSL 重新启动 funasr 服务:
# 如果您想关闭ssl,增加参数:--certfile 0cd FunASR/runtime nohupbash 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_cn-en-common-vocab471067-large-onnx \ --lm-dir damo/speech_ngram_lm_zh-cn-ai-wesp-fst \ --itn-dir thuduj12/fst_itn_zh \--certfile0\--hotword /workspace/models/hotwords.txt > log.txt 2>&1&asr 地址也需要改为 ws://IP:10095/:

3.4 Java-client
FunasrWsClient --host localhost --port10095--audio_in ./asr_example.wav --mode offline 详细可以参考文档(点击此处)
3.4.1 Building for Linux/Unix
- install java environment
# in ubuntuapt-getinstall openjdk-11-jdk - Build and run by make
cd funasr/runtime/java # download java libmake downjar # compile make buildwebsocket # run clientmake runclient - Run java websocket client by shell
# full command refer to Makefile runclient usage: FunasrWsClient [-h][--port PORT][--host HOST][--audio_in AUDIO_IN][--num_threads NUM_THREADS][--chunk_size CHUNK_SIZE][--chunk_interval CHUNK_INTERVAL][--mode MODE] Where: --host<string>(required) server-ip --port<int>(required) port --audio_in<string>(required) the wav or pcm file path --num_threads<int> thread number fortest--mode asr mode, support "offline""online""2pass" example: FunasrWsClient --host localhost --port8889--audio_in ./asr_example.wav --num_threads1--mode 2pass result json, example like: {"mode":"offline","text":"欢迎大家来体验达摩院推出的语音识别模型","wav_name":"javatest"}4. 服务端用法详解
4.1 启动FunASR服务
cd /workspace/FunASR/runtime nohupbash run_server.sh \ --download-model-dir /workspace/models \ --model-dir damo/speech_paraformer-large_asr_nat-zh-cn-16k-common-vocab8404-onnx \ --vad-dir damo/speech_fsmn_vad_zh-cn-16k-common-onnx \ --punc-dir damo/punc_ct-transformer_cn-en-common-vocab471067-large-onnx \ --lm-dir damo/speech_ngram_lm_zh-cn-ai-wesp-fst \ --itn-dir thuduj12/fst_itn_zh \--certfile../../../ssl_key/server.crt \--keyfile../../../ssl_key/server.key \--hotword../../hotwords.txt > log.txt 2>&1&run_server.sh命令参数介绍
--download-model-dir 模型下载地址,通过设置model ID从Modelscope下载模型 --model-dir modelscope model ID 或者 本地模型路径 --vad-dir modelscope model ID 或者 本地模型路径 --punc-dir modelscope model ID 或者 本地模型路径 --lm-dir modelscope model ID 或者 本地模型路径 --itn-dir modelscope model ID 或者 本地模型路径 --port 服务端监听的端口号,默认为 10095 --decoder-thread-num 服务端线程池个数(支持的最大并发路数), 脚本会根据服务器线程数自动配置decoder-thread-num、io-thread-num --io-thread-num 服务端启动的IO线程数 --model-thread-num 每路识别的内部线程数(控制ONNX模型的并行),默认为 1, 其中建议 decoder-thread-num*model-thread-num 等于总线程数 --certfile ssl的证书文件,默认为:../../../ssl_key/server.crt,如果需要关闭ssl,参数设置为0 --keyfile ssl的密钥文件,默认为:../../../ssl_key/server.key --hotword 热词文件路径,每行一个热词,格式:热词 权重(例如:阿里巴巴 20), 如果客户端提供热词,则与客户端提供的热词合并一起使用,服务端热词全局生效,客户端热词只针对对应客户端生效。 4.2 关闭FunASR服务
# 查看 funasr-wss-server 对应的PIDps-x|grep funasr-wss-server kill-9 PID 4.3 修改模型及其他参数
替换正在使用的模型或者其他参数,需先关闭FunASR服务,修改需要替换的参数,并重新启动FunASR服务。其中模型需为ModelScope中的ASR/VAD/PUNC模型,或者从ModelScope中模型finetune后的模型。
# 例如替换ASR模型为 damo/speech_paraformer-large_asr_nat-zh-cn-16k-common-vocab8404-onnx,则如下设置参数 --model-dir --model-dir damo/speech_paraformer-large_asr_nat-zh-cn-16k-common-vocab8404-onnx # 设置端口号 --port--port<port number># 设置服务端启动的推理线程数 --decoder-thread-num --decoder-thread-num <decoder thread num># 设置服务端启动的IO线程数 --io-thread-num --io-thread-num <io thread num># 关闭SSL证书 --certfile0执行上述指令后,启动离线文件转写服务。如果模型指定为ModelScope中model id,会自动从MoldeScope中下载如下模型: FSMN-VAD模型, Paraformer-lagre模型, CT-Transformer标点预测模型, 基于FST的中文ITN, Ngram中文语言模型
如果,您希望部署您finetune后的模型(例如10epoch.pb),需要手动将模型重命名为model.pb,并将原modelscope中模型model.pb替换掉,将路径指定为<font>model_dir</font>即可。
5. 如何定制服务部署
FunASR-runtime的代码已开源,如果服务端和客户端不能很好的满足您的需求,您可以根据自己的需求进行进一步的开发:
- c++ 客户端:https://github.com/alibaba-damo-academy/FunASR/tree/main/runtime/websocket
- python 客户端:https://github.com/alibaba-damo-academy/FunASR/tree/main/runtime/python/websocket
- 自定义客户端:如果您想定义自己的client,参考websocket通信协议
c++ 服务端:
VAD
// VAD模型的使用分为FsmnVadInit和FsmnVadInfer两个步骤: FUNASR_HANDLE vad_hanlde=FsmnVadInit(model_path, thread_num); // 其中:model_path 包含"model-dir"、"quantize",thread_num为onnx线程数; FUNASR_RESULT result=FsmnVadInfer(vad_hanlde, wav_file.c_str(), NULL, 16000); // 其中:vad_hanlde为FunOfflineInit返回值,wav_file为音频路径,sampling_rate为采样率(默认16k) ASR
// ASR模型的使用分为FunOfflineInit和FunOfflineInfer两个步骤: FUNASR_HANDLE asr_hanlde=FunOfflineInit(model_path, thread_num); // 其中:model_path 包含"model-dir"、"quantize",thread_num为onnx线程数; FUNASR_RESULT result=FunOfflineInfer(asr_hanlde, wav_file.c_str(), RASR_NONE, NULL, 16000); // 其中:asr_hanlde为FunOfflineInit返回值,wav_file为音频路径,sampling_rate为采样率(默认16k) PUNC
// PUNC模型的使用分为CTTransformerInit和CTTransformerInfer两个步骤: FUNASR_HANDLE punc_hanlde=CTTransformerInit(model_path, thread_num); // 其中:model_path 包含"model-dir"、"quantize",thread_num为onnx线程数; FUNASR_RESULT result=CTTransformerInfer(punc_hanlde, txt_str.c_str(), RASR_NONE, NULL); // 其中:punc_hanlde为CTTransformerInit返回值,txt_str为文本