参考
FunASR官网
https://www.bilibili.com/video/BV11a4y1U72y/?spm_id_from=888.80997.embed_other.whitelist&bvid=BV11a4y1U72y
https://github.com/modelscope/FunASR/blob/main/runtime/docs/SDK_advanced_guide_offline_zh.md

准备

配置好docker环境,推荐用WSL2

  1. 拉取镜像(这一步会从国内镜像拉取别科学上网,可能要很久)

    1
    2
    3
    4
    5
    # linux
    sudo docker pull registry.cn-hangzhou.aliyuncs.com/funasr_repo/funasr:funasr-runtime-sdk-cpu-0.4.7

    # Windows
    docker pull registry.cn-hangzhou.aliyuncs.com/funasr_repo/funasr:funasr-runtime-sdk-cpu-0.4.7
  2. 在当前目录下新建文件夹以存放模型

    1
    mkdir -p ./funasr-runtime-resources/models

    -p可以强制添加文件夹

  3. 启动服务

    1
    2
    3
    sudo 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.7

    -p端口映射
    -it = -i+-t
    -i (interactive):保持标准输入(STDIN)打开,允许你向容器发送命令。
    -t (tty):分配一个虚拟终端。
    这样合起来就能像登录远程服务器一样,看到 root@9fa6df615f62:/workspace# 这样的提示符并进行实时操作。

--privileged=true特权模式
-v [路径]:[路径]磁盘挂载,说白了就是将本机(现在指的是WSL)与容器的某个文件夹共用,即使容器没了但最后文件夹的文件还在
最后那一坨
registry.cn-hangzhou.aliyuncs.com阿里云镜像仓库的服务器地址
funasr_repo/funasr这是软件在仓库里的具体位置
:funasr-runtime-sdk-cpu-0.4.7版本号

启动

在docker启动后,我们的命令行用户变为root,此时我们进入了docker容器而非原来的WSL
现在进入到docker里边启动 funasr-wss-server服务程序

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
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_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|> ”分别为对应的语种、情感、事件信息

具体介绍

1
2
3
4
5
6
7
8
9
10
11
cd /workspace/FunASR/runtime
nohup bash 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 &

其中

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
--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),
如果客户端提供热词,则与客户端提供的热词合并一起使用,服务端热词全局生效,客户端热词只针对对应客户端生效。

测试

关闭

1
2
3
# 查看 funasr-wss-server 对应的PID
ps -x | grep funasr-wss-server
kill -9 PID