snowboy+sherpa-onnx+Rasa+Coqui实现语音音箱【语音助手】

这篇具有很好参考价值的文章主要介绍了snowboy+sherpa-onnx+Rasa+Coqui实现语音音箱【语音助手】。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

背景

本系列主要目标初步完成一款智能音箱的基础功能,包括语音唤醒、语音识别(语音转文字)、处理用户请求(比如查天气等,主要通过rasa自己定义意图实现)、语音合成(文字转语音)功能。

coqui主要在项目中完成接收rasa响应的内容,根据文本内容生成语音(TTS)。

本文用到的一些安装包在snowboy那一篇的必要条件、和rasa的安装中已经完成了部分构建,coqui的api调用部分会把相关代码写到snowboy项目中,生成好语音文件后调用本机播放语音。

语音唤醒文章地址:

snowboy 自定义唤醒词 实现语音唤醒【语音助手】

sherpa-onnx文章地址:

snowboy+新一代kaldi(k2-fsa)sherpa-onnx实现离线语音识别【语音助手】

rasa文章地址:

snowboy+sherpa-onnx+Rasa实现聊天机器人【语音助手】

参考文章

coqui的github地址:

GitHub - coqui-ai/TTS: 🐸💬 - a deep learning toolkit for Text-to-Speech, battle-tested in research and production

实践

下载安装Coqui

 仅使用他的语音合成功能

pip install TTS

正常情况下安装成功就能调用api使用合成功能了,由于网络等原因可能一次pip install并不能解决安装问题,本文的后半部分会列出安装过程中可能出现的错误及解决办法

下载coqui提供的模型

列出支持的模型

tts --list_models

目前我看到的只有一个中文模型

tts_models/zh-CN/baker/tacotron2-DDC-GST

接下来我们下载这个模型

tts --model_name tts_models/zh-CN/baker/tacotron2-DDC-GST --text "你好。"

这句话会下载模型并在当前文件夹下生成一个wav文件,不出意外会播放“你好”这句话。

然后我们可以再下载一个英文呢模型

tts_models/en/jenny/jenny,我随便选了一个模型

tts --model_name "tts_models/en/jenny/jenny" --text "hello"

这句话会下载模型并在当前文件夹下生成一个wav文件,不出意外会播放“hello”这句话。

现在我们就准备好了两个模型,能用他来合成中英文了,当然句子中不能有中英文混装的情况,出现中英文混装可以split生成一堆文件,拼接成一个整句话的wav,这个暂时不讨论。

集成到snowboy

coquitts.py

首先在snowboy示例中创建调用coqui api的py文件,用来接收文本,返回一个音频文件地址

cd /home/test/snowboy/examples/Python3/

touch coquitts.py

vim coquitts.py
from TTS.api import TTS
import time

# 判断中英文,其中正则完全匹配成功就是英文,否则按中文处理
# string 文本内容
# return True 英文;False 中文
def check_en_str(string):
    import re
    pattern = re.compile('^[A-Za-z0-9.,;:!?()_*\$"\'\s]+$')
    if pattern.fullmatch(string):
        return True
    else:
        return False

global ttsen, ttszh

# 初始化coqui tts
def init():
    global ttsen, ttszh
    ttsen = TTS(model_name="tts_models/en/jenny/jenny",progress_bar=False,gpu=False)
    ttszh = TTS(model_name="tts_models/zh-CN/baker/tacotron2-DDC-GST", progress_bar=False, gpu=False)

# 语音合成(文本转语音)
# text 文本内容
# return 音频文件地址 or None
def tts(text):
    if len(text)==0:
        return None
    try:
        filename='tts' + str(int(time.time())) + '.wav'
        if check_en_str(text):
            global ttsen
            ttsen.tts_to_file(text=text, file_path=filename)
        else:
            global ttszh
            if text.endswith('。'):
                ttszh.tts_to_file(text=text, file_path=filename)
            else:
                ttszh.tts_to_file(text=text+"。", file_path=filename)
        return filename
    except:
        return None

修改保存之后,就可以通过dome.py调用了

demo.py

在rasa的demo.py上构建

vim demo.py
import snowboydecoder
import signal
import os
import offlinedecode
import rasabot
import coquitts

interrupted = False

def signal_handler(signal, frame):
    global interrupted
    interrupted = True

def interrupt_callback():
    global interrupted
    return interrupted


# 初始化语音识别
offlinedecode.init()

# 初始化语音合成
coquitts.init()

# 唤醒词模型文件
model = '../../model/hotword.pmdl'

# capture SIGINT signal, e.g., Ctrl+C
signal.signal(signal.SIGINT, signal_handler)

detector = snowboydecoder.HotwordDetector(model, sensitivity=0.5)
print('Listening... Press Ctrl+C to exit')

# 录音之后的回调
# fname 音频文件路径
def audio_recorder_callback(fname):
    text = offlinedecode.asr(fname)
    # 打印识别内容
    print(text)
    # 问问rasa
    resp = rasabot.ask(text)
    print(resp)
    # 语音合成
    ttsfile = coquitts.tts(resp)
    if ttsfile != None:
        # 播放音频文件
        snowboydecoder.play_audio_file(fname=ttsfile)
    # 删除录音文件
    if isinstance(fname, str) and os.path.exists(fname):
        if os.path.isfile(fname):
            os.remove(fname)


# main loop
detector.start(detected_callback=snowboydecoder.play_audio_file,
               audio_recorder_callback=audio_recorder_callback,
               interrupt_check=interrupt_callback,
               sleep_time=0.03)

detector.terminate()

编辑完成保存,然后测试是否有识别成功

测试集成效果

cd /home/test/snowboy/examples/Python3/

python demo.py

 成功之后会播放音频文件,然后删除本地录音文件。

过程中的问题处理

安装慢

pip install 直接安装可能会报connection相关错误,可以直接从pypi的包仓库下载指定版本的封装包

https://pypi.org/project/

比如下载gruut_lang_en-2.0.0这个版本

我们可以从网站中直接搜索gruut_lang_en-2.0.0

snowboy+sherpa-onnx+Rasa+Coqui实现语音音箱【语音助手】,语音助手,语音识别,人工智能,语音合成

点击这个downloadfiles -> gruut_lang_en-2.0.0.tar.gz

下载之后直接运行 pip install gruut_lang_en-2.0.0.tar.gz

实现的效果和pip安装一样,只要慢都可以采取这种方式

依赖安装包

pip install nltk

pip install numba==0.57.0

apt-get install libmecab-dev

apt install libmecab2

pip install MeCab

pip install mecab-python3

mecab

如果出现mecab相关的错误,

比如/usr/local/etc/mecabrc文件没找到,

no such file or directory: /var/lib/mecab/dic/debian/dicrc

https://github.com/SamuraiT/mecab-python3/issues/51 

pip install unidic-lite

 blinker

apt-get remove blinker
sudo -H pip install --ignore-installed -U blinker

coqui模型问题

只要执行tts --model_name xxx模型,首次执行会在/root下创建模型文件夹,但是可能由于网络问题下载失败,第二次执行就直接报错了,需要手动删除模型文件夹,重新执行tts语句,模型文件夹地址

cd ~/.local/share/tts

rm -rf xxx

合成中文拉长音的问题

由于中文不是以中文句号“。”结尾的,在文本后添加句号即可文章来源地址https://www.toymoban.com/news/detail-633905.html

到了这里,关于snowboy+sherpa-onnx+Rasa+Coqui实现语音音箱【语音助手】的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 新一代开源语音库CoQui TTS冲到了GitHub 20.5k Star

    Coqui TTS 项目介绍 Coqui 文本转语音(Text-to-Speech,TTS)是新一代基于深度学习的低资源零样本文本转语音模型,具有合成多种语言语音的能力。该模型能够利用共同学习技术,从各语言的训练资料集转换知识,来有效降低需要的训练资料量。 这个模型库现在已经在GitHub上开源

    2024年02月07日
    浏览(38)
  • [毕设]基于STM32的语音识别智能蓝牙音箱设计

    (源程序+原理图+PCB+设计说明书+PPT) 原理图:Altium Designer 程序编译器:keil4/keil 5 编程语言:C语言 设计编号:Y002 本设计制作了以蓝牙接收模块,语音识别和STM32单片机为核心的蓝牙音箱。实现的具体要求如下: 1.语音识别: 采用基于自动语音识别技术的LD3320语音识别方案

    2023年04月21日
    浏览(28)
  • 人工智能技术在智能音箱中的应用:智能语音识别与智能交互

    作者:禅与计算机程序设计艺术 引言 1.1. 背景介绍 智能音箱作为智能家居的重要组成部分,近年来得到了越来越多的用户青睐。随着人工智能技术的不断发展,智能音箱的核心功能之一——智能语音识别与智能交互也越来越受到人们的关注。智能语音识别技术可以让用户更

    2024年02月07日
    浏览(41)
  • 字正腔圆,万国同音,coqui-ai TTS跨语种语音克隆,钢铁侠讲16国语言(Python3.10)

    按照固有的思维方式,如果想要语音克隆首先得有克隆对象具体的语言语音样本,换句话说,克隆对象必须说过某一种语言的话才行,但现在,coqui-ai TTS V2.0版本做到了,真正的跨语种无需训练的语音克隆技术。 coqui-ai TTS实现跨语种、无需训练克隆语音的方法是基于Tacotron模

    2024年02月03日
    浏览(29)
  • 实现手机app和微信小程序和树莓派智能音箱远程控制arduino获取甲醛温湿度和控制灯(esp8266 ZE08-CH2O DHT11 MQTT 语音识别 语言合成 http请求转串口通信系统 )

    首先你有这样的esp8266 这种esp8266自身带2个按键和烧录芯片方便调试,综合性价比较高。 需要有一个arduino uno 连接甲醛探测器和温湿度探测器 或者其他芯片都行。 还有就是你要有树莓派和usb麦克风,用来实现智能音箱,有了这3个开发板我们开始吧! https://www.bilibili.com/video

    2024年02月14日
    浏览(32)
  • 【FunASR】Paraformer语音识别-中文-通用-16k-离线-large-onnx

    模型文件: damo/speech_paraformer-large-vad-punc_asr_nat-zh-cn-16k-common-vocab8404-pytorch Paraformer-large长音频模型集成VAD、ASR、标点与时间戳功能,可直接对时长为数小时音频进行识别,并输出带标点文字与时间戳: ASR模型:Parformer-large模型结构为非自回归语音识别模型,多个中文公开数据集

    2024年02月03日
    浏览(29)
  • 如何实现一款接入chatGPT的智能音箱

    现有的一些“智能音箱”如某度和某猫精灵,跟现在的chatGPT比显得智障。如果能有一款接入chatGPT的智能音箱,它的交互性就好多啦。有gpt加持的智能音箱绝对会很强,以下提供探讨下实现思路。 目前智能音箱在语音交互层面依然不够成熟,正如雷科技此前撰写《ChatGPT该给语

    2024年02月01日
    浏览(30)
  • Android编译snowboy

    如果Ubuntu是新创建的,可以安装build-essential软件包 该命令将安装一堆新软件包,包括gcc,g++和make。 1.打开终端 在Ubuntu系统中,我们可以使用终端输入命令进行操作。打开终端的快捷键为Ctrl+Alt+T。 2.安装Git 在终端中输入以下命令,即可开始安装Git。 登录后复制 安装过程中需

    2024年02月07日
    浏览(23)
  • Rasa 3.x 学习系列-Rasa [3.5.4] -2023-04-05新版本发布

    Rasa 3.x 学习系列-Rasa [3.5.4] -2023-04-05新版本发布 Rasa Pro 3.5 中引入的两项新功能将帮助您更好地测试和保护您的 AI 助手:端到端测试和机密管理。 通过全面的验收和集成测试评估 AI 助手的性能。我们易于更新的端到端测试可以设置为运行每个流程和集成,以帮助您自信地部署

    2023年04月10日
    浏览(22)
  • Coqui TTS docker 使用记录

    之前介绍过 Coqui TTS 的安装,不过那个环境被我玩挂掉了…… 这次记录一下 docker 版本的使用。 参考网址:Docker images - TTS 0.11.1 documentation 首先按照官网指示先把镜像 pull 下来。(后记:确保 GPU driver 支持 11.8 以上的 CUDA) 至少大约4 GB 以上的内容需要下载,所以要等一会儿了

    2024年02月04日
    浏览(26)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包