『瀚思彼岸』» 智能家居技术论坛

 找回密码
 立即注册
楼主: ptbsare

[技术探讨] 本地语言助手基于Sherpa Onnx的Wyoming STT/TTS Addon无惧断网纯离线

[复制链接]

1

主题

47

帖子

300

积分

论坛技术达人

积分
300
金钱
253
HASS币
0
 楼主| 发表于 2025-2-15 18:48:20 | 显示全部楼层
本帖最后由 ptbsare 于 2025-2-15 19:03 编辑
物联网不互联 发表于 2025-2-14 22:01
你好,我是在树莓派4b(4G)版本上运行,STT没有问题,但是TTS,但凡文字多一点(超过20个字样子)就没有朗 ...

你好哈,现在推测长文本无声音可能是合成时间较长时被定期的healthcheck打断的原因,解决方法有两个:
1、在docker run命令追加参数-no-healthcheck以关闭容器的健康检查。
2、我推送了个拉长健康检查到30分钟的docker image,可以删除旧镜像重新pull下试试
docker image remove 旧镜像名字
docker pull ghcr.io/ptbsare/home-assistant-addons/aarch64-addon-sherpa-onnx-tts-stt:0.2.9
回复

使用道具 举报

1

主题

47

帖子

300

积分

论坛技术达人

积分
300
金钱
253
HASS币
0
 楼主| 发表于 2025-2-15 18:49:24 | 显示全部楼层
bugensui 发表于 2025-2-15 18:05
已经发了,作者大佬,还有个小问题,即使短文本,tts合成速度都很慢,感觉不正常,比如“客厅窗帘已经打开 ...

你好哈,我推送了个拉长健康检查间隔到30分钟的docker image,可以删除旧镜像重新pull下试试
docker image remove 旧镜像名字
docker pull ghcr.io/ptbsare/home-assistant-addons/amd64-addon-sherpa-onnx-tts-stt:0.2.9
回复

使用道具 举报

164

主题

2644

帖子

8174

积分

元老级技术达人

积分
8174
金钱
5525
HASS币
30
发表于 2025-2-15 18:54:28 | 显示全部楼层
ptbsare 发表于 2025-2-15 18:49
你好哈,我推送了个拉长健康检查间隔到30分钟的docker image,可以删除旧镜像重新pull下试试
...

谢谢,待会我测试下,麻烦大佬了。耽误了这么多时间,抱歉
回复

使用道具 举报

1

主题

47

帖子

300

积分

论坛技术达人

积分
300
金钱
253
HASS币
0
 楼主| 发表于 2025-2-15 19:04:47 | 显示全部楼层
bugensui 发表于 2025-2-15 18:54
谢谢,待会我测试下,麻烦大佬了。耽误了这么多时间,抱歉

没关系,也感谢你花时间测试因为我手上硬件有限,很难考虑所有硬件及操作系统情况。
回复

使用道具 举报

1

主题

47

帖子

300

积分

论坛技术达人

积分
300
金钱
253
HASS币
0
 楼主| 发表于 2025-2-15 19:41:53 | 显示全部楼层
本帖最后由 ptbsare 于 2025-2-15 19:45 编辑
bugensui 发表于 2025-2-15 18:54
谢谢,待会我测试下,麻烦大佬了。耽误了这么多时间,抱歉

对了,我刚才不知道J4125具体是一个什么性能水平,我刚查了一下它好像是一个四核的CPU,那你就不要把线程都设成8了,实测线程设置过大超过物理核心数反倒会变慢,因为线程本身也有开销。我的nas是unraid系统运行在一个D1581的主板上面,还没有遇到过合成慢的情况。
回复

使用道具 举报

164

主题

2644

帖子

8174

积分

元老级技术达人

积分
8174
金钱
5525
HASS币
30
发表于 2025-2-15 20:28:14 | 显示全部楼层
ptbsare 发表于 2025-2-15 19:41
对了,我刚才不知道J4125具体是一个什么性能水平,我刚查了一下它好像是一个四核的CPU,那你就不要把线程 ...

真是见鬼,还是一样,都快疯了,配置的文件是这样。这么短才行“现在是北”,稍微长一点就报错,“现在是北京时间:20:28”,我拉取了最新的镜像了。你看下截图

version: "3.0"
services:
  certimate:
    image: ghcr.io/ptbsare/home-assistant-addons/amd64-addon-sherpa-onnx-tts-stt:0.2.9
    container_name: sherpa-onnx-tts-stt
    environment:
      LANGUAGE: "zh-CN"
      STT_MODEL: "sherpa-onnx-paraformer-zh-small-2024-03-09"
      SPEED: "1.2"
      STT_USE_INT8_ONNX_MODEL: "True"
      STT_THREAD_NUM: "4"
      TTS_MODEL: "vits-melo-tts-zh_en"
      TTS_THREAD_NUM: "3"
      TTS_SPEAKER_SID: "4"
      DEBUG: "True"
    ports:
      - 10400:10400
    restart: always
DEBUG:sherpa_onnx_addon:CLI Args: Namespace(pipeline='default', language='zh-CN', speed=1.2, stt_model='sherpa-onnx-paraformer-zh-small-2024-03-09', stt_use_int8_onnx_model=True, stt_thread_num=4, tts_model='vits-melo-tts-zh_en', tts_thread_num=3, tts_speaker_sid=4, debug=True, custom_stt_model='null', custom_stt_model_eval='null', custom_tts_model='null', custom_tts_model_eval='null', host='0.0.0.0', port=10400, provider='cpu')
DEBUG:sherpa_onnx_addon:Received event: Event(type='synthesize', data={'text': '现在是北', 'voice': {'name': 'vits-melo-tts-zh_en'}}, payload=None)
/project/sherpa-onnx/csrc/offline-tts-vits-impl.h:Generate:179 This model contains only 1 speakers. sid should be in the range [0, 0]. Given: 4. Use sid=0
/project/sherpa-onnx/csrc/offline-tts-vits-impl.h:Generate:192 Raw text: 现在是北
/project/sherpa-onnx/csrc/offline-tts-vits-impl.h:Generate:203 After normalizing: 现在是北
/project/sherpa-onnx/csrc/offline-tts-vits-impl.h:Generate:203 After normalizing: 现在是北
/project/sherpa-onnx/csrc/offline-tts-vits-impl.h:Generate:203 After normalizing: 现在是北
/project/sherpa-onnx/csrc/offline-tts-vits-impl.h:Generate:203 After normalizing: 现在是北
/project/sherpa-onnx/csrc/melo-tts-lexicon.cc:ConvertTextToTokenIds:166 input text: 现在是北
/project/sherpa-onnx/csrc/melo-tts-lexicon.cc:ConvertTextToTokenIds:167 after replacing punctuations: 现在是北
/project/sherpa-onnx/csrc/melo-tts-lexicon.cc:ConvertTextToTokenIds:169 after jieba processing: 现在_是_北
DEBUG:sherpa_onnx_addon:Synthesizing: 现在是北
DEBUG:sherpa_onnx_addon:Sent Audio Start
DEBUG:sherpa_onnx_addon:Sent TTS Chunk
DEBUG:sherpa_onnx_addon:Sent Audio Stop
DEBUG:sherpa_onnx_addon:CLI Args: Namespace(pipeline='default', language='zh-CN', speed=1.2, stt_model='sherpa-onnx-paraformer-zh-small-2024-03-09', stt_use_int8_onnx_model=True, stt_thread_num=4, tts_model='vits-melo-tts-zh_en', tts_thread_num=3, tts_speaker_sid=4, debug=True, custom_stt_model='null', custom_stt_model_eval='null', custom_tts_model='null', custom_tts_model_eval='null', host='0.0.0.0', port=10400, provider='cpu')
DEBUG:sherpa_onnx_addon:Received event: Event(type='synthesize', data={'text': '现在是北京时间:20:28', 'voice': {'name': 'vits-melo-tts-zh_en'}}, payload=None)
/project/sherpa-onnx/csrc/offline-tts-vits-impl.h:Generate:179 This model contains only 1 speakers. sid should be in the range [0, 0]. Given: 4. Use sid=0
/project/sherpa-onnx/csrc/offline-tts-vits-impl.h:Generate:192 Raw text: 现在是北京时间:20:28
/project/sherpa-onnx/csrc/offline-tts-vits-impl.h:Generate:203 After normalizing: 现在是北京时间:20:28
/project/sherpa-onnx/csrc/offline-tts-vits-impl.h:Generate:203 After normalizing: 现在是北京时间:20:28
/project/sherpa-onnx/csrc/offline-tts-vits-impl.h:Generate:203 After normalizing: 现在是北京时间:二十:二十八
/project/sherpa-onnx/csrc/offline-tts-vits-impl.h:Generate:203 After normalizing: 现在是北京时间:二十:二十八
/project/sherpa-onnx/csrc/melo-tts-lexicon.cc:ConvertTextToTokenIds:166 input text: 现在是北京时间:二十:二十八
/project/sherpa-onnx/csrc/melo-tts-lexicon.cc:ConvertTextToTokenIds:167 after replacing punctuations: 现在是北京时间,二十:二十八
/project/sherpa-onnx/csrc/melo-tts-lexicon.cc:ConvertTextToTokenIds:169 after jieba processing: 现在_是_北京_时间_:_二十_:_二十八
DEBUG:sherpa_onnx_addon:Synthesizing: 现在是北京时间:20:28
DEBUG:sherpa_onnx_addon:Sent Audio Start
ERROR:asyncio:Task exception was never retrieved
future: <Task finished name='wyoming event handler' coro=<AsyncEventHandler.run() done, defined at /usr/local/lib/python3.11/dist-packages/wyoming/server.py:31> exception=ConnectionResetError('Connection lost')>
Traceback (most recent call last):
  File "/usr/local/lib/python3.11/dist-packages/wyoming/server.py", line 41, in run
    if not (await self.handle_event(event)):
            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/app/run.py", line 147, in handle_event
    await self.write_event(
  File "/usr/local/lib/python3.11/dist-packages/wyoming/server.py", line 29, in write_event
    await async_write_event(event, self.writer)
  File "/usr/local/lib/python3.11/dist-packages/wyoming/event.py", line 131, in async_write_event
    await writer.drain()
  File "/usr/lib/python3.11/asyncio/streams.py", line 378, in drain
    await self._protocol._drain_helper()
  File "/usr/lib/python3.11/asyncio/streams.py", line 167, in _drain_helper
    raise ConnectionResetError('Connection lost')
ConnectionResetError: Connection lost
DEBUG:sherpa_onnx_addon:CLI Args: Namespace(pipeline='default', language='zh-CN', speed=1.2, stt_model='sherpa-onnx-paraformer-zh-small-2024-03-09', stt_use_int8_onnx_model=True, stt_thread_num=4, tts_model='vits-melo-tts-zh_en', tts_thread_num=3, tts_speaker_sid=4, debug=True, custom_stt_model='null', custom_stt_model_eval='null', custom_tts_model='null', custom_tts_model_eval='null', host='0.0.0.0', port=10400, provider='cpu')


QQ20250215-202715.png
回复

使用道具 举报

1

主题

47

帖子

300

积分

论坛技术达人

积分
300
金钱
253
HASS币
0
 楼主| 发表于 2025-2-15 20:51:10 | 显示全部楼层
本帖最后由 ptbsare 于 2025-2-15 20:52 编辑
bugensui 发表于 2025-2-15 20:28
真是见鬼,还是一样,都快疯了,配置的文件是这样。这么短才行“现在是北”,稍微长一点就报错,“现在是 ...

这么奇怪呀,我还真没遇到过。你提供一下完整的报错日志,然后你能不能尝试在你微联通ssh上ping一下你这个docker的IP?是你的docker是运行在host模式吗?另外你选这个模型它只有一个朗读者,所以这个TTS_SPEAKER_SID应该调成0就行试试,但是这个应该不是重点。
回复

使用道具 举报

164

主题

2644

帖子

8174

积分

元老级技术达人

积分
8174
金钱
5525
HASS币
30
发表于 2025-2-15 21:14:39 | 显示全部楼层
ptbsare 发表于 2025-2-15 20:51
这么奇怪呀,我还真没遇到过。你提供一下完整的报错日志,然后你能不能尝试在你微联通ssh上ping一下你这个 ...

可以ping的通,真是奇怪。
QQ20250215-211127.png

完整日志.txt

14.34 KB, 下载次数: 1

完整日志

回复

使用道具 举报

1

主题

47

帖子

300

积分

论坛技术达人

积分
300
金钱
253
HASS币
0
 楼主| 发表于 2025-2-15 21:46:36 | 显示全部楼层
bugensui 发表于 2025-2-15 21:14
可以ping的通,真是奇怪。

你好,在吗?我理一下就是你的tts是docker。然后你的homeassistant是在威联通虚拟机上运行,是吧?然后他们接到同一个vswitch是吧?我查到一个好像威联通的内部交换机有网络白名单。你把那个docker设置成host模式,然后重新添加到homeassistant试试?反馈下结果。其次你如果在hassos的虚拟机addon安装添加是也是这样的结果吗?
回复

使用道具 举报

164

主题

2644

帖子

8174

积分

元老级技术达人

积分
8174
金钱
5525
HASS币
30
发表于 2025-2-15 21:58:00 | 显示全部楼层
本帖最后由 bugensui 于 2025-2-15 22:01 编辑
ptbsare 发表于 2025-2-15 21:46
你好,在吗?我理一下就是你的tts是docker。然后你的homeassistant是在威联通虚拟机上运行,是吧?然后他 ...

待会我用加载项,看下最新的行不行,如果haos里的加载项最新版可以,那就是威联通的问题了。只能改网络模式试试了。我的tts这个服务的ip,其实就是nas的ip就加了个端口,就是nas ip+映射端口,应该属于bridge模式吧,我还没有查,ha装在nas虚拟机上的,是一个单独的ip,和nas不是同1个ip,都是192.168.0.***  这个网段
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|Hassbian

GMT+8, 2025-3-4 23:06 , Processed in 1.244068 second(s), 32 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表