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.1

3. 客户端用法详解

在服务器上完成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

  1. install java environment
# in ubuntuapt-getinstall openjdk-11-jdk 
  1. Build and run by make
cd funasr/runtime/java # download java libmake downjar # compile make buildwebsocket # run clientmake runclient 
  1. 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++ 服务端:

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) 

使用示例详见:https://github.com/alibaba-damo-academy/FunASR/blob/main/runtime/onnxruntime/bin/funasr-onnx-offline-vad.cpp

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) 

使用示例详见:https://github.com/alibaba-damo-academy/FunASR/blob/main/runtime/onnxruntime/bin/funasr-onnx-offline.cpp

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为文本 

使用示例详见:https://github.com/alibaba-damo-academy/FunASR/blob/main/runtime/onnxruntime/bin/funasr-onnx-offline-punc.cpp

Read more

【实战教程】MATLAB GUI实现多算法雷达CFAR检测:从原理到可视化分析

1. 什么是雷达CFAR检测? 雷达恒虚警检测(CFAR)是雷达信号处理中的一项核心技术,简单来说就是在复杂多变的噪声环境中,始终保持稳定的目标检测能力。想象一下你在一个嘈杂的派对上试图听清朋友的谈话,CFAR就像是你的大脑自动调节"听力阈值"的过程——当环境噪音变大时,你会不自觉地提高注意力阈值;当环境安静时,又能降低阈值捕捉细微声音。 在雷达系统中,CFAR技术通过动态调整检测门限来实现这个功能。传统固定门限检测在噪声变化时要么漏检目标(门限过高),要么产生大量误报(门限过低)。而CFAR算法能够根据周围环境的噪声水平,实时计算出最合适的检测门限值。 MATLAB GUI实现的最大优势在于可视化交互。通过图形界面,我们可以直观地看到: * 原始噪声信号的波形特征 * 不同CFAR算法计算出的动态门限曲线 * 目标检测结果的标记位置 * 算法在不同信噪比下的表现差异 2. CFAR核心算法原理解析 2.1 均值类CFAR算法 均值类算法是CFAR家族中最基础的成员,其核心思想可以用"邻里比较"来理解。就像通过比较周围房屋的价格来评估某处房产价值一样,这些算法通

FPGA入门:CAN总线原理与Verilog代码详解

FPGA入门:CAN总线原理与Verilog代码详解

目录 一、CAN 总线核心原理 1. 物理层特性 2. 协议层核心概念 (1)位时序 (2)帧结构(标准数据帧) (3)关键机制 二、FPGA 实现 CAN 的核心模块 三、Verilog 代码实现(以 50MHz 时钟、1Mbps 波特率为例) 1. 全局参数定义 2. 位时序模块(CAN Bit Timing Generator) 3. CRC 计算模块(CAN CRC Generator) 4. 发送模块(CAN Transmitter) 5. 接收模块(CAN Receiver)

AI安全:视觉提示词注入攻击代码/实战教学| 针对Hugging Face开源大模型Stable Diffusion Model

AI安全:视觉提示词注入攻击代码/实战教学| 针对Hugging Face开源大模型Stable Diffusion Model

本文链接地址 :https://blog.ZEEKLOG.net/weixin_47681965/article/details/158503719?spm=1001.2014.3001.5502, 转载请注明出处。 提到提示词注入(Prompt Injection),大家的第一反应往往是精心构造的文本越狱指令。 而在图生图任务中,输入图像在本质上扮演了视觉提示词的角色,与文本指令共同指导生成模型。 基于这一视角,本文展示针对视觉提示词的注入攻击:通过PGD对抗攻击算法对输入图像进行像素级微调,使其生成的违规图像能够绕过开源大模型的NSFW安全检测机制。 临近毕业,感觉市场对提示词注入比较感兴趣,因本人读博期间一直研究对抗攻击算法,所以决定尝试用对抗攻击的思路完成提示词注入攻击,误导开源模型生成违规图像。 完整代码链接:https://github.com/YujiangLi0v0/Injection_Attack_Inpainting.git 目录 * 一、 NSFW防线:开源模型的安全过滤机制 * 二、 攻击场景定义 (Threat Model) * 三、

具身神经-机器人运控通讯架构与实现系列

具身智能热潮之下,大量企业投身具身行业。在机器人本体控制方案上各家争鸣,但是试错路径太长,不少团队会在底层控制方案上走大量的弯路,导致资源浪费、项目延期甚至破产。 以第一性原则,探索当前具身机器人通讯架构实现最优解,加速具身机器人行业底层控制(通讯)系统技术方向收敛。尽可能帮助机器人本体系统工程师减少试错。 本系列仅针对机器人本体控制系统底层通讯部分:小脑<--->执行器/传感器之间的架构和具体实现。 gitee链接:https://gitee.com/Lenz_s_law/embodied-nerve 博文汇总 欢迎投稿 通讯架构分析篇 * MIT开源四足机器狗通讯架构分析 * 智元灵犀X1通讯分析1-整机通讯架构 * 智元灵犀X1通讯分析2-CANFD性能优化 * 宇树G1主控拆解分析 * RS485、CAN/FD、EtherCAT三种主流机器人总线方案分析 CAN/FD技术篇 * CAN/FD总线性能分析-机器人应用 * 机器人CAN/FD总线通讯架构设计 * 机器人CAN/FD接口关键性能指标 * 机器人CAN/FD接口扩展/实现方案