AI-Sphere-Butler之Ubuntu服务器如何部署FunASR服务

环境:

AI-Sphere-Butler

WSL2

英伟达4070ti 12G

Win10

Ubuntu22.04

python>=3.8

torch>=1.13

torchaudio

问题描述:

AI-Sphere-Butler之Ubuntu服务器如何部署FunASR服务

解决方案:

一、安装

要求

bash 复制代码
python>=3.8
torch>=1.13
torchaudio

1.创建新的 Conda 环境

bash 复制代码
conda create --name funas_env python=3.9 -y

2.激活新环境

激活刚刚创建的新环境:

bash 复制代码
conda activate funas_env

3.更新 pip 和 setuptools

确保 pip 和 setuptools 是最新的:

bash 复制代码
pip install --upgrade pip setuptools

4.安装 PyTorch (>=1.13) 和 torchaudio

根据需求选择合适的 PyTorch 安装命令。确保安装的 PyTorch 版本不低于 1.13,

对于 GPU 版本(假设 CUDA 11.5):

查看版本nvcc --version

bash 复制代码
(funas_env) root@ST-202207261848:/mnt/e/work/FunASR# nvcc --version
nvcc: NVIDIA (R) Cuda compiler driver
Copyright (c) 2005-2021 NVIDIA Corporation
Built on Thu_Nov_18_09:45:30_PST_2021
Cuda compilation tools, release 11.5, V11.5.119
Build cuda_11.5.r11.5/compiler.30672275_0
(funas_env) root@ST-202207261848:/mnt/e/work/FunASR#

安装 torch

bash 复制代码
pip install torch>=1.13 torchvision torchaudio --extra-index-url https://mirrors.aliyun.com/pytorch/wheels/cu115/

查看PyTorch版本

bash 复制代码
python -c "import torch; print('PyTorch version:', torch.__version__); print('CUDA available:', torch.cuda.is_available()); print('CUDA version:', torch.version.cuda)"
bash 复制代码
(funas_env) root@ST-202207261848:/mnt/e/work/FunASR# python -c "import torch; print('PyTorch version:', torch.__version__); print('CUDA available:', torch.cuda.is_available()); print('CUDA version:', torch.version.cuda)"
PyTorch version: 2.5.1+cu124
CUDA available: True
CUDA version: 12.4

5.在FunASR目录下进行安装

bash 复制代码
git clone https://github.com/alibaba/FunASR.git && cd FunASR

pip3 install -e ./

6.在/FunASR/runtime/python/http进行安装依赖

bash 复制代码
cd /FunASR/runtime/python/http
bash 复制代码
pip install -r requirements.txt
pip install ffmpeg-python
pip install python-multipart

7.禁用更新

8.启动服务

bash 复制代码
 python server.py

pypi 安装方式

1.pip3 install -U funasr

复制代码
Or install from source code
或从源代码安装
bash 复制代码
git clone https://github.com/alibaba/FunASR.git && cd FunASR
pip3 install -e ./
复制代码
Install modelscope or huggingface_hub for the pretrained models (Optional)
为预训练模型安装 modelscope 或 huggingface_hub(可选)

pip3 install -U modelscope huggingface_hub

2.安装 modelscope 和 funasr

bash 复制代码
pip install -U modelscope funasr

3.在中国,可以使用国内镜像加速安装:

pip install -U modelscope funasr -i https://mirror.sjtu.edu.cn/pypi/web/simple

bash 复制代码
git clone https://github.com/alibaba/FunASR.git && cd FunASR

4.安装 Server 的要求

bash 复制代码
cd runtime/python/websocket
pip install -r requirements_server.txt

5.下载预训练模型:

确保你已经下载了适当的预训练模型,可以从 ModelScope 下载模型,并将其路径配置在启动命令中

bash 复制代码
https://modelscope.cn/models/iic/speech_paraformer-large_asr_nat-zh-cn-16k-common-vocab8404-online/files
bash 复制代码
git clone https://www.modelscope.cn/iic/speech_paraformer-large_asr_nat-zh-cn-16k-common-vocab8404-online.git

6.安装依赖

bash 复制代码
cd /FunASR/runtime/python/http
bash 复制代码
pip install -r requirements.txt

pip install ffmpeg

pip install torch
pip install torchaudio

7.启动 WebSocket 服务器:

使用 funasr_wss_server.py 脚本来启动 WebSocket 服务器。下面是一个简单的启动命令示例,其中指定了端口、使用的 ASR 模型等参数:

bash 复制代码
 python funasr_wss_server.py \
      --port 10095 \                         # 设置监听的端口号
      --asr_model <your_offline_model_name> \  # 离线模式下的 ASR 模型名称
      --asr_model_online <your_online_model_name> \  # 在线模式下的 ASR 模型名称(如果需要)
      --punc_model <your_punc_model_name> \  # 断句模型名称(可选)
      --ngpu 0 \                             # 使用 CPU (0) 或 GPU (1)
      --ncpu 10 \                             # 使用的 CPU 核心数
      --certfile <path_to_certfile> \        # SSL 证书文件路径(如果使用 SSL)
      --keyfile <path_to_keyfile>            # SSL 私钥文件路径(如果使用 SSL)
复制代码
    注意:如果你不需要 SSL 加密,则可以省略 --certfile 和 --keyfile 参数。

./start_funasr_server.sh

bash 复制代码
#!/bin/bash
python funasr_wss_server.py \
  --port 10095 \
  --asr_model ./models/damo-speech_paraformer-large_asr_nat-zh-cn-16k-common-vocab8404-online \
  --ngpu 0 \
  --ncpu 10 \
  --mode online
复制代码
验证服务器是否成功启动:
启动后,检查终端输出以确认服务器已成功启动并且正在监听指定的端口。如果没有错误信息,通常意味着服务器准备就绪,等待客户端连接。
bash 复制代码
根据你提供的模型列表,选择合适的预训练模型来实现用于 API 的离线流式语音识别主要取决于以下几个因素:

### 实时 vs 非实时

- **非实时(离线)**:这种模式通常是指整个音频文件在开始处理之前就已经完全录制完毕。系统会一次性接收完整的音频数据并进行处理。适合于不需要即时反馈的应用场景,如批量处理录音文件。

- **实时(在线/流式)**:在这种模式下,音频数据是分块逐步发送给系统的,系统会在接收到每个数据块后立即开始处理,并尽可能快地返回结果。这非常适合需要即时响应的应用,例如实时语音转文字、电话会议转录等。

对于 **离线流式语音识别**,这意味着你需要一个能够在本地运行的模型(即离线),并且能够处理分段传入的音频数据(即支持流式处理)。因此,你应该选择那些标记为"实时"的模型,因为它们设计用来处理流式输入。

### 推荐模型

基于你的需求,以下是几个推荐的模型:

#### Paraformer 系列
- **Paraformer-large 实时** (`damo/speech_paraformer-large_asr_nat-zh-cn-16k-common-vocab8404-online`)
  - **特点**:高性能的大规模中文和英文语音识别模型,适用于流式输入。
  - **适用场景**:当你需要高精度且支持流式处理的离线语音识别时。

- **Paraformer 实时** (`damo/speech_paraformer_asr_nat-zh-cn-16k-common-vocab8404-online`)
  - **特点**:中等大小的模型,适合大多数普通应用场景,同样支持流式输入。
  - **适用场景**:如果你希望在性能和资源消耗之间取得平衡,这个模型是一个不错的选择。

#### UniASR 系列
- **UniASR** (`damo/speech_UniASR_asr_2pass-zh-cn-16k-common-vocab8358-tensorflow1-online`)
  - **特点**:流式离线一体化模型,支持多种语言,包括中文和英文。
  - **适用场景**:特别适合需要同时支持离线和在线识别的情况。

### 如何选择

- **性能要求**:如果你对识别精度有较高要求,并且有足够的计算资源(比如较强的 CPU/GPU),可以选择 `Paraformer-large 实时` 模型。
- **资源限制**:如果计算资源有限,或者你更关心模型的轻量化,那么可以考虑使用 `Paraformer 实时` 或者其他较小的模型。
- **多功能性**:如果你还需要额外的功能,如说话人识别或热词增强,应该查看相关模型是否提供了这些特性。

### 示例启动命令

假设你选择了 `Paraformer-large 实时` 模型,以下是启动 WebSocket 服务器的示例命令:

```bash
python funasr_wss_server.py \
  --port 10095 \                             # 设置监听的端口号
  --asr_model damo/speech_paraformer-large_asr_nat-zh-cn-16k-common-vocab8404-online \  # 实时 ASR 模型名称
  --ngpu 0 \                                 # 使用 CPU (0) 或 GPU (1)
  --ncpu 4 \                                 # 使用的 CPU 核心数
  --mode online                              # 流式识别模式

8.总结

为了实现离线流式语音识别,选择一个支持流式处理的"实时"模型是非常重要的。从上面列出的模型中挑选最适合你需求的那个,并按照上述步骤进行配置和启动

复制代码
客户端测试

Start server 启动服务器
API-reference API 参考

```bash
python funasr_wss_server.py \
--port [port id] \
--asr_model [asr model_name] \
--asr_model_online [asr model_name] \
--punc_model [punc model_name] \
--ngpu [0 or 1] \
--ncpu [1 or 4] \
--certfile [path of certfile for ssl] \
--keyfile [path of keyfile for ssl] 

Usage examples 使用示例

bash 复制代码
python funasr_wss_server.py --port 10095

For the client 对于客户

Install the requirements for client

安装 client 的要求

bash 复制代码
git clone https://github.com/alibaba/FunASR.git && cd FunASR
cd funasr/runtime/python/websocket
pip install -r requirements_client.txt

If you want infer from videos, you should install ffmpeg

如果你想从视频中推断,你应该安装 ffmpeg

bash 复制代码
apt-get install -y ffmpeg #ubuntu
# yum install -y ffmpeg # centos
# brew install ffmpeg # mac
# winget install ffmpeg # wins
pip3 install websockets ffmpeg-python

Start client 启动客户端
API-reference API 参考

python funasr_wss_client.py \
--host [ip_address] \
--port [port id] \
--chunk_size ["5,10,5"=600ms, "8,8,4"=480ms] \
--chunk_interval [duration of send chunk_size/chunk_interval] \
--words_max_print [max number of words to print] \
--audio_in [if set, loadding from wav.scp, else recording from mircrophone] \
--output_dir [if set, write the results to output_dir] \
--mode [`online` for streaming asr, `offline` for non-streaming, `2pass` for unifying streaming and non-streaming asr] \
--thread_num [thread_num for send data]

Usage examples 使用示例
ASR offline client ASR 离线客户端

Recording from mircrophone
从麦克风录音

# --chunk_interval, "10": 600/10=60ms, "5"=600/5=120ms, "20": 600/12=30ms
python funasr_wss_client.py --host "0.0.0.0" --port 10095 --mode offline

Loadding from wav.scp(kaldi style)
来自 wav.scp 的 Loding(kaldi 样式)

# --chunk_interval, "10": 600/10=60ms, "5"=600/5=120ms, "20": 600/12=30ms
python funasr_wss_client.py --host "0.0.0.0" --port 10095 --mode offline --audio_in "./data/wav.scp" --output_dir "./results"

ASR streaming client ASR 流式处理客户端

Recording from mircrophone
从麦克风录音

# --chunk_size, "5,10,5"=600ms, "8,8,4"=480ms
python funasr_wss_client.py --host "0.0.0.0" --port 10095 --mode online --chunk_size "5,10,5"

Loadding from wav.scp(kaldi style)
来自 wav.scp 的 Loding(kaldi 样式)

# --chunk_size, "5,10,5"=600ms, "8,8,4"=480ms
python funasr_wss_client.py --host "0.0.0.0" --port 10095 --mode online --chunk_size "5,10,5" --audio_in "./data/wav.scp" --output_dir "./results"

ASR offline/online 2pass client
ASR 离线/在线 2pass 客户端

Recording from mircrophone
从麦克风录音

# --chunk_size, "5,10,5"=600ms, "8,8,4"=480ms
python funasr_wss_client.py --host "0.0.0.0" --port 10095 --mode 2pass --chunk_size "8,8,4"

Loadding from wav.scp(kaldi style)
来自 wav.scp 的 Loding(kaldi 样式)

# --chunk_size, "5,10,5"=600ms, "8,8,4"=480ms
python funasr_wss_client.py --host "0.0.0.0" --port 10095 --mode 2pass --chunk_size "8,8,4" --audio_in "./data/wav.scp" --output_dir "./results"

Websocket api Websocket 接口

# class Funasr_websocket_recognizer example with 3 step
# 1.create an recognizer 
rcg=Funasr_websocket_recognizer(host="127.0.0.1",port="30035",is_ssl=True,mode="2pass")
# 2.send pcm data to asr engine and get asr result
text=rcg.feed_chunk(data)
print("text",text)
# 3.get last result, set timeout=3
text=rcg.close(timeout=3)
print("text",text)

要通过 API 调用来使用 FunASR 的流式识别服务,关注 Websocket API 示例确实是关键的一部分。

1. 理解 WebSocket 协议

WebSocket 是一种通信协议,它允许客户端和服务器之间进行全双工通信。这意味着一旦连接建立,双方都可以随时发送数据。对于实时应用(如语音识别),这非常有用,因为它减少了延迟并提高了效率。

2. 使用 Funasr_websocket_recognizer 类

正如你在 Websocket API 示例中看到的,Funasr_websocket_recognizer 类提供了一个简单的方法来与 FunASR WebSocket 服务器交互。以下是这个类的基本使用方法:

python 复制代码
from funasr.runtime.python.websocket.Funasr_websocket_recognizer import Funasr_websocket_recognizer

# 创建一个识别器实例
rcg = Funasr_websocket_recognizer(
    host="127.0.0.1",  # 服务器地址
    port="30035",      # 端口号
    is_ssl=False,      # 是否使用 SSL 加密
    mode="online"      # 模式:'online' 表示流式识别
)

# 发送音频数据块给 ASR 引擎,并获取初步结果
text = rcg.feed_chunk(data)  # data 应该是 PCM 格式的音频数据
print("初步识别结果:", text)

# 结束会话并获取最终结果
final_text = rcg.close(timeout=3)
print("最终识别结果:", final_text)

3. 准备音频数据

在调用 feed_chunk 方法之前,你需要准备好要发送的音频数据。通常情况下,音频是以 PCM 格式提供的。你可能需要从麦克风录制或从文件读取音频,并将其转换为合适的格式。

4. 处理并发和错误

  • 并发处理:如果预期有多个请求同时到达,你应该考虑如何管理并发连接。可以使用多线程或多进程来处理并发。
  • 错误处理:确保你的代码中有适当的错误处理机制,以应对可能出现的问题,例如网络中断、服务器响应超时等。

5. 安全性考量

如果你的服务是公开可用的,或者涉及敏感信息,确保采取适当的安全措施。例如,启用 SSL/TLS 加密(设置 is_ssl=True 并提供证书文件路径),并对用户输入进行验证。

6. API 文档和测试

  • API 文档:仔细阅读 FunASR 提供的官方 API 文档,了解所有可用的参数及其含义。这将帮助你更好地配置和服务于你的应用场景。
  • 测试:在生产环境中部署之前,务必充分测试你的实现,包括边界情况和异常情况下的行为。

7. 持续监控

一旦服务上线,持续监控其性能和稳定性非常重要。可以设置日志记录和报警系统,以便及时发现和解决问题。

相关推荐
X Y O7 分钟前
神经网络初步学习——感知机
人工智能·神经网络·学习·感知机
农民小飞侠37 分钟前
ubuntu 24.04 error: cannot uninstall blinker 1.7.0, record file not found. hint
linux·运维·ubuntu
某不知名網友39 分钟前
Linux 软硬连接详解
linux·运维·服务器
知来者逆1 小时前
计算机视觉——MedSAM2医学影像一键实现3D与视频分割的高效解决方案
人工智能·深度学习·计算机视觉·图像分割·智能医疗·万物分割
强化学习与机器人控制仿真1 小时前
openpi 入门教程
开发语言·人工智能·python·深度学习·神经网络·机器人·自动驾驶
璇转的鱼1 小时前
Stable Diffusion进阶之Controlnet插件使用
人工智能·ai作画·stable diffusion·aigc·ai绘画
爱学习的章鱼哥1 小时前
计算机网络|| 常用网络命令的作用及工作原理
linux·服务器·计算机网络
不是吧这都有重名1 小时前
[论文阅读]Deeply-Supervised Nets
论文阅读·人工智能·算法·大语言模型
zm1 小时前
网络编程epoll和udp
服务器·网络·数据库
野犬寒鸦1 小时前
Linux常用命令详解(下):打包压缩、文本编辑与查找命令
linux·运维·服务器·数据库·后端·github