FreeSWITCH中文网,电话机器人开发网 ,微信订阅号:

FreeSWITCH及VOIP,Openser,电话机器人等产品中文技术资讯、交流、沟通、培训、咨询、服务一体化网络。QQ群:293697898


纯CPU的Nway ASR & TTS 服务部署与使用手册


tags:语音识别ASR 语音合成TTS CPU 无GPU 创建时间:2025-12-18 11:05:40

ASR和TTS作为人工智能和语音关联最深的一个部分,我们从当时尝试卡耐基大学的PocketSphinx开始,到后边各种大模型的尝试,其实这几年是可以看得见的技术发展的越来越好,性能对比的话,其实不见得吧,最大原因在于GPU成本高昂,而大部分企业有点好点CPU的设备就算不错了。

这几年大模型拉动出了全人类xxxxx, 如果编,可以编出很多,我们作为普通用户,只能是捡着各大厂出的东西来让更多人用起来吧;用得顺手,用得实惠。

如果用“人话”来形容它,那就是:

“告别昂贵显卡,用最省钱的 CPU 就能跑出最快、最准的识别效果,性能全面碾压旧版本!”

当然核心的模型部分都是开源的,我们只是个搬运工。库部分为巨硬的onnx,以及sherpa-onnx,模型使用了Vits和Paraformer的模型。

当然,当前的这个Audio_AI,不一定很好,但是基本上能用。

1. 极致省钱:纯 CPU 运行,拒绝“显卡税”

不需要 NVIDIA 显卡,不需要复杂的 CUDA 环境。Audio_AI 基于最新的量化技术,在普通的服务器 CPU 上即可流畅运行。这意味着您可以直接利用现有的老旧服务器,或者购买成本极低的云主机。部署成本,直接砍半!

2. 性能怪兽:响应快,精度高

别以为用了 CPU 就会慢。得益于底层引擎的深度优化。

本文档说明如何在 Debian 12 环境下部署 Nway 语音识别 (ASR) 和 语音合成 (TTS) 服务,并进行客户端测试。当然如果相关库是版本差不多,那么也基本上Redhat、ubuntu、或者相关的linux 64位也可以使用。

1. 目录结构

确保你的部署目录包含以下核心文件。如果缺少动态库(.so 文件),程序将无法启动。

/home/lihao/nway_audio_ai/
├── config.ini                  # 配置文件(端口、模型参数等)
├── libonnxruntime.so           # 依赖库:ONNX Runtime
├── libsherpa-onnx-c-api.so     # 依赖库:Sherpa ONNX
├── nasr-server                 # ASR 服务端程序
├── nasr-client                 # ASR 测试客户端
├── ntts-server                 # TTS 服务端程序
├── ntts-client                 # TTS 测试客户端
├── models/                     # 模型文件夹 (必须包含 ASR 和 TTS 的模型文件)
└── Tts_samples/                # TTS对接的示例代码

2. 环境准备与权限设置

在启动服务前,需要确保当前目录下拥有执行权限,并设置动态库加载路径。

2.1 赋予执行权限

chmod +x nasr-server nasr-client ntts-server ntts-client

3. 启动服务端

3.1 启动 ASR 服务 (语音转文字)

默认监听端口通常在 config.ini 中配置(默认为 8089)。

./nasr-server

3.2 启动 TTS 服务 (文字转语音)

默认监听端口通常在 config.ini 中配置(默认为 8090)。

./ntts-server

注意:启动时可能会看到类似 Library not found: libnway_auth_lib.so 或关于 License 初始化失败的警告。 请忽略此警告,系统已设计为在缺少授权库时自动降级或继续运行,不影响正常功能使用。

4. 客户端测试

以下命令假设你已在另一终端窗口中设置好了环境,或服务已在后台运行。 4.1 测试 ASR (语音识别)

将本地的 wav 文件发送给服务器进行识别。

命令格式:

./nasr-client <IP:PORT> <WAV文件路径>

示例:

./nasr-client 127.0.0.1:8089 c.wav

预期输出:

想知道一加一等于几。

测试输出(结合TTS)

time target/release/nasr-client 127.0.0.1:8089 d.wav
我想知道一加一等于几,我的手机号是一八六二一五七五九零吧。当然我的tps和sr不知道能不能合成,然后你要给我一百八十七万六千六百三十九美元,然后给你一百八十七万六千六百三十九,除以三等于六万美元。
real    0m1.919s
user    0m0.007s
sys     0m0.013s

4.2 测试 TTS (语音合成)

发送文本给服务器,保存返回的音频文件。

命令格式:

./ntts-client <IP:PORT> --input "<文本>" --output <保存文件名>

示例:

./ntts-client 127.0.0.1:8090 --input  "你好,ASR作为人工智能最重要的部分,测试一下中英文混合 ok?"
 --output output.wav

我们直接生成的一个录音:

./target/release/ntts-client 127.0.0.1:8090 --input "我想,知道1+1等于几?我的手机号是18621575908, 当然我的TTS和ASR不知道能不能合成,最后,你要给我1876639美元,然后我给你1876639/3=60000美元" --output d.wav

预期输出:

Connecting to 127.0.0.1:8090...
Request sent. Waiting for response...
>> Protocol: HEAD. Server Sample Rate: 8000 Hz
>> First audio packet received after 0.435 seconds
...........
>> Protocol: END. Stream finished.
Saved 432442 bytes to output.wav

当然:TTS如有必要就自个儿参考Tts_samples/Golang下的示例自己实现一个,我们这个示例也是使用的AI来把rust的改过来而已。

5. 常见问题 (FAQ)

Q1: 运行程序时报错

error while loading shared libraries: libsherpa-onnx-c-api.so: cannot open shared object file 原因:

系统找不到当前目录下的 .so 库文件。 解决:

请务必执行 export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$(pwd) ,或者将这两个 .so 文件复制到 /usr/lib/ 下。

Q2: 控制台一直打印缺少

libnway_auth_lib.so

解决:

这是预期行为。该授权库用于高级鉴权功能,缺少该库不影响基础的 ASR 和 TTS 功能,请忽略。

Q3: 如何修改服务端口?

解决:

编辑根目录下的config.ini 文件,找到[server] 或相关节点修改端口号,修改后需重启服务生效。

Q4: 无法连接服务器 (Connection refused)

解决:

检查服务进程是否存在:ps -ef | grep server

检查防火墙是否放行了 8089 和 8090 端口。

确认 config.ini 中的绑定地址是 0.0.0.0 而不是仅 127.0.0.1(如果是远程访问)。

确认allowed_ips 中是不是真的配置了允许你使用的IP?

6. 下载地址:

通过网盘分享的文件:NAsr_TTS_V2.6.zip

链接: https://pan.baidu.com/s/16Ze6qqIP9DhtT27seVWNCQ?pwd=62dw 提取码: 62dw

后续:

其实内心中来说,一直并不很喜欢写这类应用,AI的出现引起了各外国语学院,引起没有就业环境就去接打电话,引起了从制造到沟通到运输到使用种种方式的变革,但终究是要向前看的!


上海老李,QQ:1354608370,FreeSWITCH QQ群: