
FreeSWITCH及VOIP,Openser,电话机器人等产品中文技术资讯、交流、沟通、培训、咨询、服务一体化网络。QQ群:293697898
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的出现引起了各外国语学院,引起没有就业环境就去接打电话,引起了从制造到沟通到运输到使用种种方式的变革,但终究是要向前看的!