内容提要
FunAsrNet 是纯 C# 实现的语音推理项目,基于 .NET 10,不依赖 Python、ONNX Runtime 等原生框架,自行实现模型加载、算子、解码、VAD 和中文 TTS。性能上,CPU 语音识别接近原版 C++,ARM64 上快 15%–27%,但 GPU 仍落后数倍。项目文档如实记录差距与失败,价值在于证明 .NET 可承载完整语音流水线,便于审计、维护和部署。
延伸解读
纯 C# 实现的意义:可审计与易维护
FunAsrNet 用纯 C# 实现了模型加载、算子、解码、VAD 和中文 TTS,不依赖 Python、ONNX Runtime 等原生框架。对 .NET 团队而言,这意味着语音能力可以像普通代码一样被审计、维护和部署,无需为 Python 服务单独搭建容器环境。项目证明 .NET 能承载完整语音流水线,降低了技术栈复杂度。
性能表现:CPU 接近原生,GPU 仍有差距
根据 README 实测,在 i7-12700 四线程下,C# CPU 的 ASR 热态已打平原版 C++;RK3588 上甚至快 15%–27%,但作者提醒在线机器有换页和调频干扰。GPU 方面,Vulkan 后端优化七轮后仍为原版 GPU 的 3.14~5.50 倍耗时,尚未追平。因此,该项目目前更适合 CPU 或 ARM64 场景,GPU 加速并非其优势。
文档的诚实:差距与失败同样记录
项目 README 大量篇幅在讲“我们还差在哪”,不仅列出成绩,还主动拆台性能数据,并保留所有测速原始记录、哈希、P95、慢样本,甚至撤回过的实验方案。这种写法在开源项目中少见,让读者更容易信任其数字。作者明确边界:这不是官方 SDK,也不兼容上游所有模型和语言,避免过度期待。
适用边界:固定模型验证,非通用工具箱
FunAsrNet 围绕固定几个模型验证:F16 编码器、Qwen3 Q8_0 解码器、FSMN VAD 和两个中文 VITS。它自带 ONNX 解释器但只支持目标模型用到的算子,因此不能直接替换 FunASR 工具箱。仓库克隆后无法直接跑完整服务,需准备模型文件。适合想研究 .NET 推理实现或部署固定语音流水线的开发者,而非寻求通用语音方案的用户。
Q&A
FunAsrNet 是什么?它和 FunASR 官方有什么关系?
FunAsrNet 是一个用纯 C# 实现的语音推理项目,基于 .NET 10,不依赖 Python、ONNX Runtime 等原生框架,自行实现模型加载、算子、解码、VAD 和中文 TTS。它不是 FunASR 官方 .NET SDK,也不是 FunASR 工具箱的移植,而是基于 QwenAudio/Fun-ASR 固定版本架构的社区实现,不保证兼容上游所有模型和语言。
FunAsrNet 支持哪些功能?
FunAsrNet 支持普通话语音识别(ASR)、语音合成(TTS)和电话音频处理(VAD)。具体围绕固定模型验证:F16 编码器、Qwen3 Q8_0 解码器、FSMN VAD 和两个中文 VITS。
FunAsrNet 的性能表现如何?和原版 C++ 相比怎么样?
在 CPU 上,i7-12700 四线程同模型同输入下,C# 的 ASR 热态已打平原版 C++;在 RK3588 上 C# 甚至比原版 C++ 快 15% 到 27%(但作者指出该在线机器有换页和动态调频,不能视为稳定领先)。GPU 方面,Vulkan 后端优化七轮后 ASR GPU 耗时降低 14.8% 到 19.4%,但仍为同轮原版 GPU 的 3.14~5.50 倍耗时,尚未追平。
FunAsrNet 的 README 有什么特别之处?
README 以坦诚著称:开头就划清边界,说明不是官方 SDK 也不是移植;大量篇幅讲差距和失败,如 GPU 仍落后数倍、在线机器数据不稳定等;所有测速原始记录、哈希、P95、慢样本都留在仓库,三方转写逐字一致性做了校验,连撤回过的实验方案都有记录。这种每报一个数都提醒“先别信太多”的写法,让读者更容易相信其数据。
FunAsrNet 的技术实现有什么特点?
全部用 C# 手写,包括模型读取、特征提取、神经网络算子、解码、VAD、中文前端和 TTS,核心、CLI、Web 服务不依赖 Python、ONNX Runtime、ggml、sherpa-onnx、RKNN 等。ONNX 和 GGUF 仅作为文件格式,仓库自带一个只支持目标模型算子的 ONNX 解释器。性能优化走 .NET 自身路径:SIMD、ARM64 NEON/SDOT、池化缓冲、共享只读权重、有界队列;Vulkan 后端可选,由 C# 调度 GPU 执行嵌入的 SPIR-V。
FunAsrNet 适合哪些场景?它的价值是什么?
FunAsrNet 适合希望将语音能力集成到 .NET 解决方案中的团队,使其成为普通的一部分,能审计、能维护、部署不折腾,而不是单独用 Docker 供起来的 Python 服务。它的价值在于证明 .NET 能承载完整的语音推理流水线,全部用托管代码实现,不依赖原生 AI 框架,便于审计、维护和部署。