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.pyvim coquitts.py
from TTS.api import TTS
import time# 判断中英文,其中正则完全匹配成功就是英文,否则按中文处理
# string 文本内容
# return True 英文;False 中文
def check_en_str(string):import repattern = re.compile('^[A-Za-z0-9.,;:!?()_*\$"\'\s]+$')if pattern.fullmatch(string):return Trueelse:return Falseglobal ttsen, ttszh# 初始化coqui tts
def init():global ttsen, ttszhttsen = 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 Nonetry:filename='tts' + str(int(time.time())) + '.wav'if check_en_str(text):global ttsenttsen.tts_to_file(text=text, file_path=filename)else:global ttszhif text.endswith('。'):ttszh.tts_to_file(text=text, file_path=filename)else:ttszh.tts_to_file(text=text+"。", file_path=filename)return filenameexcept:return None

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

demo.py

在rasa的demo.py上构建

vim demo.py
import snowboydecoder
import signal
import os
import offlinedecode
import rasabot
import coquittsinterrupted = Falsedef signal_handler(signal, frame):global interruptedinterrupted = Truedef interrupt_callback():global interruptedreturn 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)# 问问rasaresp = 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

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

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

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

依赖安装包

pip install nltkpip install numba==0.57.0apt-get install libmecab-devapt install libmecab2pip install MeCabpip 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/ttsrm -rf xxx

合成中文拉长音的问题

由于中文不是以中文句号“。”结尾的,在文本后添加句号即可

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/58891.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

苹果照片删除了如何恢复回来?4种方法教你快速恢复!

相信大家平时都有使用苹果手机来记录生活的习惯吧?但有时候可能会不小心将一些重要的照片误删,或者因为手机内存不足而清理了大量照片,最后才发现照片有用却被你删掉了。那么苹果照片删除了如何恢复回来呢?别着急,接下…

阿里云容器服务助力极氪荣获 FinOps 先锋实践者

作者:海迩 可信云评估是中国信息通信研究院下属的云计算服务和软件的专业评估体系,自 2013 年起历经十年发展,可信云服务评估体系已日臻成熟,成为政府支撑、行业规范、用户选型的重要参考。 2022 年 5 月国务院国资委制定印发《…

一文详解 DolphinDB SQL 标准化

为了提升用户体验,降低用户学习成本和脚本迁移复杂度,自 1.30.17 / 2.00.5 版本开始,DolphinDB 逐步支持了标准化 SQL 的书写方法;并于 1.30.22 / 2.00.10 版本起,对标准 SQL 的常用语法和关键字实现了兼容。 1. 与标…

个人对智能家居平台选择的思考

本人之前开发过不少MicroPython程序,其中涉及到自动化以及局域网控制思路,也可以作为智能家居的实现方式。而NodeMCUESPHome的方案具有方便添加硬件、容易更新程序和容量占用小的优势,本人也查看过相关教程后感觉部署ESPHome和编译固件的步骤…

【深度学习注意力机制系列】—— ECANet注意力机制(附pytorch实现)

ECANet(Efficient Channel Attention Network)是一种用于图像处理任务的神经网络架构,它在保持高效性的同时,有效地捕捉图像中的通道间关系,从而提升了特征表示的能力。ECANet通过引入通道注意力机制,以及在…

Java SPI机制的原理和实践

SPI 全称 Service Provider Interface,是 Java 提供的,旨在由第三方实现或扩展的 API,它是一种用于动态加载服务的机制。Java 中 SPI 机制主要思想是将装配的控制权移到程序之外,在模块化设计中这个机制尤其重要,其核心…

Java经典面试题总结(一)

Java经典面试题总结(一) 题一:Java编译运行原理题二:JDK,JVM,JRE三者之间的关系题三:谈一下对冯诺依曼体系的了解题四:重载与重写的区别题五:拆箱装箱是指什么&#xff1…

通过Idea部署Tomcat服务器(详细图文教学)

1.在idea中创建项目 有maven构建工具就创建maven,没有就正常创建一个普通的java程序 创建普通java项目 2.添加框架 3.配置 Tomcat 注意:创建web项目后我们需要配置tomcat才能运行,下面我们来进行配置。 4.添加部署 回到服务器 5.完善配置 6…

算法与数据结构(二十一)二叉树(纲领篇)

备注:本文旨在通过 labuladong 的二叉树(纲领篇)理解框架思维,用于个人笔记及交流学习,版权归原作者 labuladong 所有; 我刷了这么多年题,浓缩出二叉树算法的一个总纲放在这里,也许…

jupyter lab环境配置

1.jupyterlab 使用虚拟环境 conda install ipykernelpython -m ipykernel install --user --name tf --display-name "tf" #例:环境名称tf2. jupyter lab kernel管理 show kernel list jupyter kernelspec listremove kernel jupyter kernelspec re…

Nginx反向代理配置+负载均衡集群部署

文章目录 负载均衡反向代理基础环境部署:什么是代理实验环境图流量过程 环境部署准备两台Web服务器安装Nginx准备页面内容添加主机名 代理服务器配置 修改windos hosts文件测试:终端浏览器 负载均衡反向代理基础环境部署: 什么是代理 正向代…

浅析基于安防监控EasyCVR视频汇聚融合技术的运输管理系统

一、项目背景 近年来,随着物流行业迅速发展,物流运输费用高、运输过程不透明、货损货差率高、供应链协同能力差等问题不断涌现,严重影响了物流作业效率,市场对于运输管理数字化需求愈发迫切。当前运输行业存在的难题如下&#xf…