@@ -64,7 +64,7 @@ RapidSpeech.cpp 并非"单模型推理工具",而是一套面向真实业务
6464 基于 ` ggml ` 的高性能计算后端,支持从 INT4 到 FP32 的混合精度推理。
6565
6666- ** 架构层(Architecture Layer)**
67- 插件式模型构建与加载机制,规划支持 FunASR-nano、CosyVoice、Qwen3-TTS 等主流模型体系。
67+ 插件式模型构建与加载机制,支持 FunASR-nano、CosyVoice、Qwen3-TTS 等主流模型体系。
6868
6969- ** 业务逻辑层(Business Logic)**
7070 内置环形缓冲区、VAD(端点检测)、文本前端(如音素化)以及多会话并发管理能力。
@@ -73,26 +73,24 @@ RapidSpeech.cpp 并非"单模型推理工具",而是一套面向真实业务
7373
7474## 🚀 核心特性
7575
76- - ** 极致量化支持** :原生支持 4-bit / 5-bit / 6-bit 量化方案,充分适配不同算力与带宽条件的硬件。
77- - ** 零依赖部署** :纯 C/C++ 实现,最终产物为单一、轻量级二进制文件。
78- - ** GPU / NPU 加速** :针对语音模型特点,对 CUDA 与 Metal 后端进行定制化优化。
79- - ** 统一模型格式** :ASR 与 TTS 统一采用扩展后的 ** GGUF** 模型格式。
80- - ** Python 绑定** :通过 pybind11 提供 Python 接口 ,支持 pip 安装,一行代码即可调用 。
76+ - [x] ** 极致量化支持** :原生支持 4-bit / 5-bit / 6-bit 量化方案,充分适配不同算力与带宽条件的硬件。
77+ - [x] ** 零依赖部署** :纯 C/C++ 实现,最终产物为单一、轻量级二进制文件。
78+ - [x] ** GPU / NPU 加速** :针对语音模型特点,对 CUDA 与 Metal 后端进行定制化优化。
79+ - [x] ** 统一模型格式** :ASR 与 TTS 统一采用扩展后的 ** GGUF** 模型格式。
80+ - [x] ** Python 绑定** :通过 pybind11 提供 Python API ,支持 ` pip install ` 一键安装 。
8181
8282------
8383
8484## 🛠️ 快速开始
8585
8686### 模型下载
8787
88- 请从以下平台下载对应模型的 GGUF 格式文件 :
88+ 请从以下平台下载对应模型 :
8989
9090- 🤗 Hugging Face:https://huggingface.co/RapidAI/RapidSpeech
9191- ModelScope:https://www.modelscope.cn/models/RapidAI/RapidSpeech
9292
93- ### C++ 构建
94-
95- #### 基本构建(仅 CPU)
93+ ### 从源码构建
9694
9795``` bash
9896git clone https://github.com/RapidAI/RapidSpeech.cpp
@@ -102,217 +100,213 @@ cmake -B build
102100cmake --build build --config Release
103101```
104102
105- #### 启用 GPU 加速
103+ 构建产物位于 ` build/ ` 目录:
104+ - ` rs-asr-offline ` — 离线 ASR 命令行工具
105+ - ` rs-asr-online ` — 在线(流式)ASR 命令行工具
106+ - ` rs-quantize ` — 模型量化工具
107+
108+ ### C++ 命令行使用
106109
107- <details >
108- <summary >🍎 macOS Metal(默认启用)</summary >
110+ #### 离线识别(rs-asr-offline)
109111
110- macOS 平台默认启用 Metal 加速,无需额外配置:
112+ ** 基础用法 — 不使用 VAD: **
111113
112114``` bash
113- cmake -B build
114- cmake --build build --config Release
115+ ./build/rs-asr-offline \
116+ -m /path/to/funasr-nano-fp16.gguf \
117+ -w /path/to/audio.wav \
118+ -t 4 \
119+ --gpu true
115120```
116121
117- </details >
118-
119- <details >
120- <summary >🖥️ NVIDIA CUDA</summary >
122+ ** 使用 VAD 分段(推荐,适合长音频):**
121123
122124``` bash
123- cmake -B build -DRS_CUDA=ON -DCMAKE_CUDA_COMPILER=/usr/local/cuda/bin/nvcc
124- cmake --build build --config Release
125+ ./build/rs-asr-offline \
126+ -m /path/to/funasr-nano-fp16.gguf \
127+ -v /path/to/silero_vad_v6.gguf \
128+ -w /path/to/audio.wav \
129+ -t 4 \
130+ --vad-threshold 0.5 \
131+ --silence-ms 600
125132```
126133
127- </ details >
134+ 指定 VAD 模型后,工具会自动按语音活动分段,并输出带时间戳的分段识别结果。
128135
129- <details >
130- <summary >🌋 Vulkan</summary >
136+ 参数说明:
131137
132- ``` bash
133- cmake -B build -DRS_VULKAN=ON
134- cmake --build build --config Release
135- ```
138+ | 参数 | 说明 | 默认值 |
139+ | --- | --- | --- |
140+ | ` -m, --model ` | GGUF 模型文件路径(必填) | — |
141+ | ` -w, --wav ` | WAV 音频文件路径(16kHz,必填) | — |
142+ | ` -v, --vad ` | Silero VAD GGUF 模型路径(可选,启用 VAD 分段) | — |
143+ | ` -t, --threads ` | CPU 线程数 | 4 |
144+ | ` --gpu ` | 是否启用 GPU 加速(` true ` /` false ` ) | true |
145+ | ` --vad-threshold ` | VAD 语音检测阈值(0~ 1,越低越灵敏) | 0.5 |
146+ | ` --silence-ms ` | 静默时长超过该值则切分段落(ms) | 600 |
147+ | ` --max-segment-s ` | ASR 输入的最大分段长度(秒) | 30.0 |
136148
137- </ details >
149+ #### 在线/流式识别(rs-asr-online)
138150
139- <details >
140- <summary >⚡ 华为 CANN(Ascend NPU)</summary >
151+ ** WAV 文件(模拟流式):**
141152
142153``` bash
143- cmake -B build -DRS_CANN=ON
144- cmake --build build --config Release
154+ ./build/rs-asr-online \
155+ -m /path/to/funasr-nano-fp16.gguf \
156+ -v /path/to/silero_vad_v6.gguf \
157+ -w /path/to/audio.wav \
158+ -t 4 \
159+ --vad-threshold 0.5 \
160+ --silence-ms 600
145161```
146162
147- </ details >
163+ ** 麦克风实时识别: **
148164
149- ### C++ 命令行使用
165+ ``` bash
166+ ./build/rs-asr-online \
167+ -m /path/to/funasr-nano-fp16.gguf \
168+ -v /path/to/silero_vad_v6.gguf \
169+ --mic \
170+ -t 4
171+ ```
150172
151- 构建完成后,使用 ` rs-asr-offline ` 进行离线语音识别:
173+ ** 两遍模式(CTC 快速解码 + LLM 重打分,仅 FunASR-Nano 支持): **
152174
153175``` bash
154- # 基本用法
155- ./build/rs-asr-offline \
156- -m /path/to/model.gguf \
157- -w /path/to/audio.wav
158-
159- # 指定线程数和 GPU
160- ./build/rs-asr-offline \
161- -m /path/to/model.gguf \
176+ ./build/rs-asr-online \
177+ -m /path/to/funasr-nano-fp16.gguf \
178+ -v /path/to/silero_vad_v6.gguf \
162179 -w /path/to/audio.wav \
163- -t 8 \
164- --gpu 1
180+ --two-pass
181+ ```
182+
183+ 参数说明:
184+
185+ | 参数 | 说明 | 默认值 |
186+ | --- | --- | --- |
187+ | ` -m, --model ` | ASR GGUF 模型文件路径(必填) | — |
188+ | ` -v, --vad ` | Silero VAD 模型文件路径(必填) | — |
189+ | ` -w, --wav ` | WAV 音频文件路径(16kHz) | — |
190+ | ` --mic ` | 使用麦克风输入(实时模式) | 关闭 |
191+ | ` --mic-device ` | 麦克风设备索引 | 自动 |
192+ | ` --mic-chunk-ms ` | 麦克风读取块大小(ms) | 32 |
193+ | ` -t, --threads ` | CPU 线程数 | 4 |
194+ | ` --gpu ` | 是否启用 GPU 加速(` true ` /` false ` ) | true |
195+ | ` --vad-threshold ` | VAD 语音检测阈值(0~ 1,越低越灵敏) | 0.5 |
196+ | ` --silence-ms ` | 静默超时切分时长(ms) | 600 |
197+ | ` --two-pass ` | 启用两遍模式:CTC 解码 + LLM 重打分 | 关闭 |
198+
199+ #### 模型量化(rs-quantize)
200+
201+ ``` bash
202+ ./build/rs-quantize /path/to/funasr-nano-fp16.gguf /path/to/output-q4_k.gguf q4_k
165203```
166204
167- ** 命令行参数: **
205+ 支持的量化类型: ` q4_0 ` , ` q4_k ` , ` q4_k_m ` , ` q5_0 ` , ` q5_k ` , ` q8_0 ` , ` f16 ` , ` f32 `
168206
169- | 参数 | 说明 | 默认值 |
170- | --- | ----------------------------| -----|
171- | ` -m, --model ` | 模型文件路径(必选) | - |
172- | ` -w, --wav ` | WAV 音频文件路径(可选,不提供则使用测试正弦波) | - |
173- | ` -t, --threads ` | CPU 线程数 | 4 |
174- | ` --gpu ` | 是否启用 GPU 加速(` 0 ` /` 1 ` ) | 1 |
175- | ` -h, --help ` | 显示帮助信息 | - |
207+ > ⚠️ ** 量化注意** :Q2_K 量化对 FunASR Nano 精度损失过大,会导致输出乱码,不推荐使用。推荐使用q4_k_m或q8
176208
177209### Python 使用
178210
179211#### 安装
180212
181- ** 方式一:pip 安装(推荐)**
182-
183213``` bash
184- # CPU 版本
214+ # 从 PyPI 安装( CPU 版本)
185215pip install rapidspeech
186216
187217# CUDA 版本
188218pip install rapidspeech-cuda
189219
190- # Metal 版本(macOS)
220+ # macOS Metal 版本
191221pip install rapidspeech-metal
192222```
193223
194- ** 方式二: 从源码构建**
224+ #### 从源码构建 Python 包
195225
196226``` bash
197- git clone https://github.com/RapidAI/RapidSpeech.cpp
198- cd RapidSpeech.cpp
199- git submodule sync && git submodule update --init --recursive
200-
201- # 构建 Python 绑定
202227pip install .
203-
204- # 或指定 CUDA 后端
228+ # 或指定后端
205229RS_BACKEND=cuda pip install .
206230```
207231
208- #### Python API 使用示例
232+ #### Python API
209233
210234``` python
211- import numpy as np
212235import rapidspeech
236+ import numpy as np
213237
214- # 1. 初始化 ASR 离线识别器
215- asr = rapidspeech.asr_offline(
216- model_path = " /path/to/model .gguf" ,
238+ # 初始化 ASR 上下文
239+ ctx = rapidspeech.asr_offline(
240+ model_path = " funasr-nano-fp16 .gguf" ,
217241 n_threads = 4 ,
218242 use_gpu = True
219243)
220244
221- # 2. 读取音频数据(float32, 16kHz, 单声道)
222- # pcm 为 numpy float32 数组,值域 [-1.0, 1.0]
223- pcm = load_wav(" audio.wav" ) # 自行实现 WAV 读取,或使用 soundfile / scipy.io.wavfile
224-
225- # 3. 推送音频数据
226- asr.push_audio(pcm)
245+ # 读取 WAV 音频(16kHz, float32, 单声道)
246+ pcm = ... # np.ndarray, shape=[N], dtype=float32
227247
228- # 4. 执行推理
229- asr.process()
248+ # 推送音频并识别
249+ ctx.push_audio(pcm)
250+ ctx.process()
230251
231- # 5. 获取识别结果
232- text = asr .get_text()
252+ # 获取识别结果
253+ text = ctx .get_text()
233254print (f " 识别结果: { text} " )
234255```
235256
236- ** 完整的离线识别示例脚本** 可参考 [ ` python-api-examples/asr/asr-offline.py ` ] ( ./python-api-examples/asr/asr-offline.py ) 。
237-
238- 运行示例:
257+ 完整示例参见 [ python-api-examples/asr/asr-offline.py] ( python-api-examples/asr/asr-offline.py ) 。
239258
240- ``` bash
241- python python-api-examples/asr/asr-offline.py \
242- --model /path/to/model.gguf \
243- --audio /path/to/audio.wav \
244- --threads 4 \
245- --gpu 1
246- ```
259+ ------
247260
248- #### Python API 参考
261+ ## 📊 性能基准
249262
250- | 类/方法 | 说明 |
251- | --- | --- |
252- | ` rapidspeech.asr_offline(model_path, n_threads=4, use_gpu=True) ` | 创建离线 ASR 识别器 |
253- | ` asr.push_audio(pcm) ` | 推送 float32 音频数据(numpy 一维数组) |
254- | ` asr.process() ` | 执行推理,返回状态码(0=无输出, 1=有输出, -1=错误) |
255- | ` asr.get_text() ` | 获取识别文本结果 |
263+ 测试环境:Apple M1 Pro, funasr-nano-fp16.gguf, 15s 音频
256264
257- ### C API 参考
265+ | 配置 | RTF | 耗时 | 备注 |
266+ | ------| -----| ------| ------|
267+ | CPU -t 4 | 0.465 | 12.4s | 纯 CPU 推理 |
268+ | GPU -t 4 | 0.170 | 5.2s | Metal 加速 |
269+ | GPU -t 4 Q4_K | 0.756 | — | 量化模型在 GPU 上反量化开销增大 |
270+ | CPU -t 4 Q4_K | 0.530 | — | 量化模型 CPU 推理,模型体积 596MB(压缩 3.3x) |
258271
259- RapidSpeech 提供 C 语言接口,便于集成到其他语言和项目中。核心接口如下:
272+ > RTF(Real-Time Factor)= 处理时间 / 音频时长,越低越快。RTF < 1 表示快于实时。
260273
261- ``` c
262- #include " rapidspeech.h"
274+ ------
263275
264- // 初始化
265- rs_init_params_t params = rs_default_params();
266- params.model_path = " /path/to/model.gguf" ;
267- params.n_threads = 4 ;
268- params.use_gpu = true ;
269- rs_context_t * ctx = rs_init_from_file(params);
276+ ## 🔧 模型格式转换
270277
271- // 推送音频并推理
272- rs_push_audio (ctx, pcm_data, num_samples);
273- int32_t status = rs_process(ctx);
278+ ### ASR 模型(HF → GGUF)
274279
275- // 获取结果
276- const char* text = rs_get_text_output(ctx);
280+ 提供 HF 模型到 GGUF 格式的转换工具:
277281
278- // 释放资源
279- rs_free(ctx);
282+ ``` bash
283+ python scripts/convert_hf_to_gguf.py \
284+ --model /path/to/hf-model-dir \
285+ --outfile /path/to/output.gguf \
286+ --outtype f16
280287```
281288
289+ ### Silero VAD 模型(safetensors → GGUF)
282290
283- ------
284-
285- ## 🔧 开发与构建选项
286-
287- ### CMake 选项
288-
289- | 选项 | 说明 | 默认值 |
290- | --- | --- | --- |
291- | `RS_BUILD_TESTS` | 构建测试可执行文件 | ON |
292- | `RS_CUDA` | 启用 CUDA 加速 | OFF |
293- | `RS_METAL` | 启用 Metal 加速(仅 macOS) | 自动检测 |
294- | `RS_VULKAN` | 启用 Vulkan 加速 | OFF |
295- | `RS_CANN` | 启用华为 CANN 加速 | OFF |
296- | `RS_OPENCL` | 启用 OpenCL 加速 | OFF |
297- | `RS_ENABLE_PYTHON` | 启用 Python 绑定(pybind11) | OFF |
298-
299- ### 模型转换
300-
301- 使用项目提供的脚本将 Hugging Face 模型转换为 GGUF 格式:
291+ 用于 ` rs-asr-online ` 或离线 VAD 分段的 Silero VAD 模型转换:
302292
303293``` bash
304- python scripts/convert_hf_to_gguf.py --model /path/to/hf-model --output /path/to/output.gguf
294+ python scripts/convert_silero_to_gguf.py \
295+ --model /path/to/silero_vad_16k.safetensors \
296+ --output /path/to/silero_vad_v6.gguf
305297```
306298
299+ 转换后的 VAD 模型也可直接从 [ HuggingFace] ( https://huggingface.co/RapidAI/RapidSpeech ) 或 [ ModelScope] ( https://www.modelscope.cn/models/RapidAI/RapidSpeech ) 下载。
300+
307301------
308302
309303## 🤝 参与贡献
310304
311305如果你对以下领域感兴趣,欢迎提交 PR 或参与讨论:
312306
313- - 适配更多模型(Qwen3-ASR、CosyVoice3 等)
314- - 完善项目框架与性能优化
315- - 改进文档与示例
307+ - 适配更多模型。
308+ - 完善项目框架。
309+ - 优化推理性能。
316310
317311## 致谢
318312
0 commit comments