113 lines
3.1 KiB
Markdown
113 lines
3.1 KiB
Markdown
# FunASR WebSocket服务
|
||
|
||
## 简介
|
||
本项目基于FunASR实现了一个WebSocket语音识别服务,支持实时语音流的在线和离线识别。利用ModelScope开源语音模型,该服务可以进行高精度的中文语音识别,并支持语音活动检测(VAD)和自动添加标点符号。
|
||
|
||
## 项目结构
|
||
```
|
||
.
|
||
├── src/ # 源代码目录
|
||
│ ├── __init__.py # 包初始化文件
|
||
│ ├── server.py # WebSocket服务器实现
|
||
│ ├── config.py # 配置处理模块
|
||
│ ├── models.py # 模型加载模块
|
||
│ ├── service.py # ASR服务实现
|
||
│ └── client.py # 测试客户端
|
||
├── tests/ # 测试目录
|
||
│ ├── __init__.py # 测试包初始化文件
|
||
│ └── test_config.py # 配置模块测试
|
||
├── requirements.txt # Python依赖
|
||
├── Dockerfile # Docker配置
|
||
├── docker-compose.yml # Docker Compose配置
|
||
├── .gitignore # Git忽略文件
|
||
└── README.md # 项目说明
|
||
```
|
||
|
||
## 功能特性
|
||
|
||
- **多模式识别**:支持离线(offline)、在线(online)和两阶段(2pass)识别模式
|
||
- **语音活动检测**:自动检测语音开始和结束
|
||
- **标点符号**:支持自动添加标点符号
|
||
- **WebSocket接口**:基于二进制WebSocket提供实时语音识别
|
||
- **Docker支持**:提供容器化部署支持
|
||
|
||
## 安装与使用
|
||
|
||
### 环境要求
|
||
- Python 3.8+
|
||
- CUDA支持 (若需GPU加速)
|
||
- 内存 >= 8GB
|
||
|
||
### 安装依赖
|
||
|
||
```bash
|
||
pip install -r requirements.txt
|
||
```
|
||
|
||
### 运行服务器
|
||
|
||
```bash
|
||
python src/server.py
|
||
```
|
||
|
||
常用启动参数:
|
||
- `--host`: 服务器监听地址,默认为 0.0.0.0
|
||
- `--port`: 服务器端口,默认为 10095
|
||
- `--device`: 设备类型(cuda或cpu),默认为 cuda
|
||
- `--ngpu`: GPU数量,0表示使用CPU,默认为 1
|
||
|
||
### 测试客户端
|
||
|
||
```bash
|
||
python src/client.py --audio_file path/to/audio.wav
|
||
```
|
||
|
||
常用客户端参数:
|
||
- `--audio_file`: 要识别的音频文件路径
|
||
- `--mode`: 识别模式,可选 2pass/online/offline,默认为 2pass
|
||
- `--host`: 服务器地址,默认为 localhost
|
||
- `--port`: 服务器端口,默认为 10095
|
||
|
||
## Docker部署
|
||
|
||
### 构建镜像
|
||
|
||
```bash
|
||
docker build -t funasr-websocket .
|
||
```
|
||
|
||
### 使用Docker Compose启动
|
||
|
||
```bash
|
||
docker-compose up -d
|
||
```
|
||
|
||
## API说明
|
||
|
||
### WebSocket消息格式
|
||
|
||
1. **客户端配置消息**:
|
||
```json
|
||
{
|
||
"mode": "2pass", // 可选: "2pass", "online", "offline"
|
||
"chunk_size": "5,10", // 块大小,格式为"encoder_size,decoder_size"
|
||
"wav_name": "audio1", // 音频标识名称
|
||
"is_speaking": true // 是否正在说话
|
||
}
|
||
```
|
||
|
||
2. **客户端音频数据**:
|
||
二进制音频数据流,16kHz采样率,16位PCM格式
|
||
|
||
3. **服务器识别结果**:
|
||
```json
|
||
{
|
||
"mode": "2pass-online", // 识别模式
|
||
"text": "识别的文本内容", // 识别结果
|
||
"wav_name": "audio1", // 音频标识
|
||
"is_final": false // 是否是最终结果
|
||
}
|
||
```
|
||
|
||
## 许可证
|
||
[MIT](LICENSE) |