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

 找回密码
 立即注册
查看: 3813|回复: 124

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

[复制链接]

1

主题

47

帖子

300

积分

论坛技术达人

积分
300
金钱
253
HASS币
0
发表于 2025-2-10 23:55:54 | 显示全部楼层 |阅读模式
本帖最后由 ptbsare 于 2025-3-3 20:36 编辑

项目地址https://github.com/ptbsare/home-assistant-addons/tree/main/sherpa-onnx-tts-stt

我是项目作者,欢迎PR,欢迎提出宝贵意见。
一个addon集成了TTS及STT两个服务。
纯图形界面操作,官方原生支持Wyoming自动发现集成,无需安装HACS插件,无需修改配置文件。至少需要1.5G内存,建议使用强劲的CPU或者docker部署到性能较强的服务器上。
支持kokoro-TTS/matcha-TTS/paraformer-STT。

纯离线,所有模型均在本地部署运行,不向云端发送任何数据。

使用:
1、HASSOS添加addon repo:点击↓
添加到我的Homeassistant
https://my.home-assistant.io/red ... me-assistant-addons或者 手动添加如下repo到你的addon 加载项商店右上角三个点-仓库:https://github.com/ptbsare/home-assistant-addons
2、启动addon,正常会自动发现Wyoming,点击添加Wyoming集成即可。
3、在语音助手里面选择相应TTS及STT引擎。

备选:
如果你不是使用HASSOS,可以直接使用docker镜像,支持amd64及aarch64两种构架,直接启动镜像即可,也可配置环境变量:
docker pull ghcr.io/ptbsare/home-assistant-addons/amd64-addon-sherpa-onnx-tts-stt:0.2.6
docker pull ghcr.io/ptbsare/home-assistant-addons/aarch64-addon-sherpa-onnx-tts-stt:0.2.6
然后点击设备页面添加Wyoming集成:host填服务器或docker的IP,port填10400,提交保存即可。

详细说明:

目前默认参数即可运行,下面是详细参数配置说明,可自定义模型、语言、语速等,具体可见项目主页。
Configuration
Option: language
Default language to use. eg. en

Option: speed
TTS Speech Speed. eg. 1.0

Option: stt_model
Name of the model to use. eg. sherpa-onnx-paraformer-zh-2023-03-28 See the models section for more details.

Option: stt_use_int8_onnx_model
Enable int8 model to reduce memery usage. eg. True

Option: stt_thread_num
Number of Threads for TTS. eg. 3

Option: tts_model
Name of the model to use. eg. matcha-icefall-zh-baker

Option: tts_thread_num
Number of Threads for TTS. eg. 3

Option: tts_speaker_sid
TTS Speaker ID. eg. 0

Option: debug
Enable debug logging. eg. False
群晖Container Manager项目部署:(@dscao)
version: "3.0"
services:
  certimate:
    image: ghcr.io/ptbsare/home-assistant-addons/amd64-addon-sherpa-onnx-tts-stt:0.2.6
    container_name: sherpa-onnx-tts-stt
    environment:
      LANGUAGE: "zh-CN"
      STT_MODEL: "sherpa-onnx-paraformer-zh-2023-03-28"
      SPEED: "1.2"
      STT_USE_INT8_ONNX_MODEL: "True"
      STT_THREAD_NUM: "3"
      TTS_MODEL: "matcha-icefall-zh-baker"
      TTS_THREAD_NUM: "3"
      TTS_SPEAKER_SID: "0"
      DEBUG: "True"
    ports:
      - 10400:10400
    restart: unless-stopped
自定义模型例子(Docker/高阶用户):(@25989406)
version: "3.9"
services:
  certimate:
    image: ghcr.io/ptbsare/home-assistant-addons/amd64-addon-sherpa-onnx-tts-stt:0.2.8
    container_name: sherpa-onnx-tts-stt
    environment:
      LANGUAGE: "zh-CN"

      STT_USE_INT8_ONNX_MODEL: "True"
      STT_THREAD_NUM: "8"

      CUSTOM_TTS_MODEL: "vits-melo-tts-zh_en"
      CUSTOM_TTS_MODEL_EVAL: |
        sherpa_onnx.OfflineTts(
          sherpa_onnx.OfflineTtsConfig(
          model=sherpa_onnx.OfflineTtsModelConfig(
          vits=sherpa_onnx.OfflineTtsVitsModelConfig(
          model="/tts-models/vits-melo-tts-zh_en/model.onnx",
          lexicon="/tts-models/vits-melo-tts-zh_en/lexicon.txt",
          tokens="/tts-models/vits-melo-tts-zh_en/tokens.txt",
          dict_dir="/tts-models/vits-melo-tts-zh_en/dict",
          ),
         provider="cpu",
         num_threads=8,
          debug=True,
          ),
          rule_fsts="/tts-models/vits-melo-tts-zh_en/phone.fst,/tts-models/vits-melo-tts-zh_en/date.fst,/tts-models/vits-melo-tts-zh_en/number.fst",                 
          max_num_sentences=1,
          )
        )
      DEBUG: "True"
    ports:
      - 10400:10400
    restart: unless-stopped
自定义模型例子(粤语stt例子)(Docker/高阶用户):(@z741554038)
language: zh-CN
speed: 1
stt_model: custom_stt_model
stt_use_int8_onnx_model: true
stt_thread_num: 3
tts_model: vits-melo-tts-zh_en
tts_thread_num: 3
tts_speaker_sid: 0
debug: true
custom_stt_model: sherpa-onnx-zipformer-cantonese-2024-03-13
custom_stt_model_eval: |-
  sherpa_onnx.OfflineRecognizer.from_transducer(      
    encoder="/stt-models/sherpa-onnx-zipformer-cantonese-2024-03-13/encoder-epoch-45-avg-35.int8.onnx",      
    decoder="/stt-models/sherpa-onnx-zipformer-cantonese-2024-03-13/decoder-epoch-45-avg-35.int8.onnx",      
    joiner="/stt-models/sherpa-onnx-zipformer-cantonese-2024-03-13/joiner-epoch-45-avg-35.int8.onnx",      
    tokens="/stt-models/sherpa-onnx-zipformer-cantonese-2024-03-13/tokens.txt",
    num_threads=3,
    decoding_method="greedy_search",
    provider="cpu",
    sample_rate=16000,
    feature_dim=80,
    debug=True
  )

特别说明:
* 如果想提高TTS语速:在加载项图形选项里面调高speed的值(如设置成1.5),Docker请设置相应环境变量的值(SPEED=1.5)。
* 提高(尤其是kokoro-tts的合成)速度:建议将tts_thread_num和stt_thread_num设置成主机CPU物理核心的数量,如16核CPU就设置成16(默认为3),Docker请设置相应环境变量的值(TTS_THREAD_NUM和STT_THREAD_NUM),实测调高线程会较高提速。
* 关于kokoro-tts:其中kokoro-TTS 1.0(内置)为多语言模型,内置53位朗读者sid如下:
For kokoro-multi-lang-v1_0
There are 53 speakers in the model, with speaker ID 0 -- 52.

The mapping between speaker ID (AKA sid ) and speaker name is given below:

0->af_alloy, 1->af_aoede, 2->af_bella, 3->af_heart, 4->af_jessica, 5->af_kore, 6->af_nicole, 7->af_nova, 
8->af_river, 9->af_sarah, 10->af_sky, 11->am_
adam, 12->am_echo, 13->am_eric, 14->am_fenrir, 15->am_liam, 16->am_michael, 
17->am_onyx, 18->am_puck, 19->am_santa, 20->bf_alice, 21->bf_emma, 22->bf_
isabella, 23->bf_lily, 24->bm_daniel, 25->bm_fable, 26->bm_george, 27->bm_lewis, 
28->ef_dora, 29->em_alex, 30->ff_siwis, 31->hf_alpha, 32->hf_beta, 33
->hm_omega, 34->hm_psi, 35->if_sara, 36->im_nicola, 37->jf_alpha, 
38->jf_gongitsune, 39->jf_nezumi, 40->jf_tebukuro, 41->jm_kumo, 
42->pf_dora, 43->pm_alex, 44->pm_santa, 45->zf_xiaobei, 46->zf_xiaoni, 
47->zf_xiaoxiao, 
48->zf_xiaoyi, 49->zm_yunjian, 50->zm_yunxi, 51->zm_yunxia, 52->zm_yunyang,
kokoro-tts的中文效果建议使用名字有*yun*或者*xiao*的朗读者:例如TTS_SPEAKER_SID:45 设置成zf_xiaobei或者49 设置成 zm_yunjian,可以详见上面kokoro-tts的SID对应关系不断尝试不同朗读者找到合适的音色。

演示视频:

语音助手配置截图:
1000047669.jpg
更新:
v0.2.6:已经支持kokoro-tts(内部集成),速度相对默认的matcha-tts略慢。
v0.2.8:实验性支持高阶用户自定义Sherpa Onnx 模型的类型、名字、参数,高阶用户可以自行指定模型及参数,插件会自动下载相应STT/TTS模型,完整模型列表详见:
STT: https://github.com/k2-fsa/sherpa-onnx/releases/tag/asr-models
TTS: https://github.com/k2-fsa/sherpa-onnx/releases/tag/tts-models
具体配置详见文档。https://github.com/ptbsare/home- ... on-custom_stt_model
普通用户暂时使用v0.2.6版本,编程爱好者欢迎使用v0.2.8反馈不同模型的效果。
v0.2.9:
* 实验性支持GPU运行!方便docker用户提速,详见github repo Dockerfile.gpu,因CUDA镜像较大(10G+),请GPU用户自行本地使用该Dockerfile.gpu文件自行构建运行镜像。
* 新增内置STT模型:sherpa-onnx-paraformer-zh-small-2024-03-09(默认paraformer模型的微缩版本)供性能较差小主机STT使用提速,效果也非常不错,更加快速,内存占用更低;
* 新增内置TTS模型:vits-melo-tts-zh_en,这是一个中英文模型,可以同时说中文与英语,速度介于matcha-icefall-zh-baker与kokoro-multi-lang-v1_0之间。



评分

参与人数 8金钱 +81 收起 理由
cuichuanyu + 5 感谢楼主分享!
penguinmm + 8 感谢楼主分享!
xiaobai1828 + 5 墙都不扶,就服楼主!
DDDear + 12 膜拜大神!
dscao + 20 感谢楼主分享!
xun897426280 + 5
nuknoop + 16 高手,这是高手!这帖应该火
25989406 + 10 我来瀚思就为看你!

查看全部评分

回复

使用道具 举报

1

主题

47

帖子

300

积分

论坛技术达人

积分
300
金钱
253
HASS币
0
 楼主| 发表于 2025-2-11 11:43:02 | 显示全部楼层
本帖最后由 ptbsare 于 2025-2-11 18:23 编辑
bugensui 发表于 2025-2-11 11:35
说话速度太慢了。默认好像是1,我改成0.5好像效果一样,加快应该设置多少,另外说话的声音哪个模型,比较贴 ...

你好,时间原因,插件目前是仅工作状态,一些功能可能需要时间适配比如自定义模型等,speed参数调大可变快,可能还有一些bug,说话声音是是模型的提供的,插件只是对接模型。关于效果,因为我们要在速度和效果上取得一个折中点,采用Sherpa Onnx是因为他在本地运行识别stt和tts比较快,CPU即可不需要太强GPU;目前效果比较好的模型一般需要的运算力比较大且难以实时识别及输出。如果你有更好的想法,欢迎在Github上提交pull request。谢谢!
更新:自定义模型/参数已在v0.2.8。
回复

使用道具 举报

164

主题

2644

帖子

8174

积分

元老级技术达人

积分
8174
金钱
5525
HASS币
30
发表于 2025-2-11 01:00:45 | 显示全部楼层
纯离线吗?
回复

使用道具 举报

1

主题

47

帖子

300

积分

论坛技术达人

积分
300
金钱
253
HASS币
0
 楼主| 发表于 2025-2-11 08:03:26 | 显示全部楼层

是的,纯离线运行。
回复

使用道具 举报

4

主题

64

帖子

1371

积分

金牌会员

Rank: 6Rank: 6

积分
1371
金钱
1307
HASS币
0
发表于 2025-2-11 10:03:46 | 显示全部楼层
能否出个演示视频
回复

使用道具 举报

0

主题

61

帖子

938

积分

高级会员

Rank: 4

积分
938
金钱
877
HASS币
0
发表于 2025-2-11 10:37:20 | 显示全部楼层
楼主好,感谢无私分享。
刚刚用docker pull,发现镜像拉取不下来,报错了Error response from daemon: manifest unknow。
回复

使用道具 举报

1

主题

47

帖子

300

积分

论坛技术达人

积分
300
金钱
253
HASS币
0
 楼主| 发表于 2025-2-11 10:51:11 | 显示全部楼层
你好,请提供一下你的主机是什么CPU,怎么安装的?目前因为Sherpa Onnx构架预编译包的缘故,支持的构架是Linux上的aarch64和amd64,谢谢。
回复

使用道具 举报

27

主题

1365

帖子

6164

积分

元老级技术达人

积分
6164
金钱
4774
HASS币
100
发表于 2025-2-11 10:54:11 | 显示全部楼层
优秀哦。晚上回去试试
回复

使用道具 举报

1

主题

47

帖子

300

积分

论坛技术达人

积分
300
金钱
253
HASS币
0
 楼主| 发表于 2025-2-11 11:11:34 | 显示全部楼层
vanscer 发表于 2025-2-11 10:03
能否出个演示视频

你好,演示视频已经上传,谢谢。
回复

使用道具 举报

1

主题

47

帖子

300

积分

论坛技术达人

积分
300
金钱
253
HASS币
0
 楼主| 发表于 2025-2-11 11:12:34 | 显示全部楼层
penguinmm 发表于 2025-2-11 10:37
楼主好,感谢无私分享。
刚刚用docker pull,发现镜像拉取不下来,报错了Error response from daemon: mani ...

你好,请提供一下你的主机是什么CPU,怎么安装的?目前因为Sherpa Onnx构架预编译包的缘故,支持的构架是Linux上的aarch64和amd64,谢谢。
回复

使用道具 举报

164

主题

2644

帖子

8174

积分

元老级技术达人

积分
8174
金钱
5525
HASS币
30
发表于 2025-2-11 11:35:23 | 显示全部楼层
说话速度太慢了。默认好像是1,我改成0.5好像效果一样,加快应该设置多少,另外说话的声音哪个模型,比较贴近我们的发音,现在的发音很生硬
回复

使用道具 举报

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

本版积分规则

Archiver|手机版|小黑屋|Hassbian

GMT+8, 2025-3-4 20:19 , Processed in 0.150896 second(s), 38 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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