事实证明,使用Raspberry Pi和IBM Bluemix可以做很多事情。 在本系列的第一篇文章中,我们探讨了如何将Raspberry Pi连接到IBM Bluemix,IBM Watson和Node-RED 。 如果尚未使用Bluemix和Node-RED设置Raspberry Pi,请先进行第1部分 ,然后再回来! 我个人使用了Raspberry Pi 3,但是我假设Raspberry Pi 2也可以工作。
在本文中,我们将探讨如何在上一个示例中将文本语音转换成Node-RED流。
在IBM Bluemix中将文本连接到语音
为了访问IBM Watson的文本到语音服务,我们需要在Bluemix中添加“文本到语音”服务。 让我们转到Bluemix Services页面并找到“ Text to Speech”服务(注意不要选择“ Speech to Text”……那是不一样的!)。
那应该带我们到Text to Speech服务Bluemix页面 。
在该页面上,我们将看到用于将该服务添加到我们的IBM Bluemix军械库的各种选项。 我们确保已选择用于Raspberry Pi的空间(在上一篇文章中,我将其命名为“ Dev”),并使应用程序不受约束。 我们可以给服务起一个名字(我叫我的“语音”),给凭据起一个名字(我照原样保留它)。 我唯一可用的计划是“标准”,所以我也保留了那个计划。 对设置满意后,单击“创建”。
在我们的空间中创建服务后,我们将转到该服务的页面。 我们单击左侧的“服务凭证”菜单项来访问用户名和密码,我们需要将其赋予Node-RED才能访问我们的新IBM Watson Text to Speech服务。 从此页面复制用户名和密码:
将新的IBM Watson Services添加到Node-RED
为了访问Node-RED中的IBM Watson Text to Speech服务,我们将需要安装一些新节点。 为此,我们通过SSH进入我们的Pi(或直接从我们的Pi打开终端)并输入:
cd ~/.node-red
这将我们带到Node-RED应用程序文件夹。 从这里,我们安装了一个新的Node-RED节点集合,称为node-red-node-watson 。 这包括访问整个IBM Watson服务,包括我们需要的“文本到语音”服务。 要安装它,我们在Node-RED文件夹中的Pi上运行以下命令:
sudo npm install node-red-node-watson
安装ALSA开发库
IBM Watson文本到语音功能会将我们的Node-RED应用程序的文本转换为语音文件,但是我们还需要一种让Pi播放这些文件的方法-否则这些话将永远不会被听到! 为了使它在您的Pi上正常运行,您可能需要运行以下命令来安装dev ALSA库:
sudo apt-get install libasound2-dev
重新启动Node-RED
为了使新的Node-RED节点更改生效,我们需要重新启动Node-RED。 为此,我们运行以下两个命令:
node-red-stop
node-red-start
我们的新Node-RED流
现在,我们已经准备好了所有部分,能够执行文本到语音的转换并进行回放-现在是时候将它们放到Node-RED中并使其运行了。
在安装完node-red-node-watson软件包并重启后打开Node-RED时,我们应该在左侧的“ IBM_Watson”下看到一堆新节点:
让我们向下滚动,找到“文本到语音”节点并将其拖到我们的Node-RED表中:
进入工作表后,我们双击它以打开其设置:
这是我们添加先前从IBM Bluemix复制的凭证(用户名和密码)的部分。 我们将其粘贴到此处,并为Pi的声音选择一种语言和一种声音。 我们将文件格式保留为“ WAV”,然后单击“确定”:
我们的文字转语音准备好发挥其魔力。 我们现在需要一种方法来告诉它说什么。 让我们告诉我们Pi的温度是多少,就像我们在上一篇文章中先前发送给IBM Bluemix的系统一样。
首先,我们将一个新的功能节点拖到工作表中:
双击该新节点,然后在其功能中输入以下代码:
msg.payload = "My current CPU temperature is " +
msg.payload.replace("temp=","").replace("'C\n","") +
" degrees celsius";
return msg;
该函数正在像上一篇文章中所使用的那样来格式化消息,但是我们不是将其格式化为JSON字符串,而是将其格式化为易于阅读的句子。 这句话将说:“我当前的CPU温度是摄氏X度”。 我们将此句子存储在msg.payload
变量中,这是IBM Watson Text to Speech节点所期望的。 我们还可以给功能节点添加标签,我称之为“温度文本”:
我们将getCPUTemp节点的输出链接到新功能节点的输入:
接下来,将功能节点的输出链接到“文本到语音”节点的输入:
然后,将另一个功能节点引入工作表。 在该节点内,我们设置了一个简单的函数,该函数会将msg.speech
变量设置为msg.payload
,这是我们的语音文本节点返回的内容:
msg.payload = msg.speech;
return msg;
随意调用该节点,我称其为“格式化语音”。 然后点击“确定”:
存储和检索我们的声音文件
现在,我们已经生成了一个声音缓冲区,可以将其存储在某个地方,以便我们可以播放它。 要将其存储在文件中,我们使用“文件”节点,该节点位于“存储”标题下。 将没有任何输出的一个拖动到工作表中:
我们双击该新节点,然后输入以下设置:
- 我们将文件名设置为
/home/pi/temp/speech.wav
(其中pi是当前运行Node-RED的用户名)。 - 该操作应为“覆盖文件”。
- 我们确保“向每个有效负载添加换行符(\ n)吗?” 未选中。
- 应该选中“如果不存在,则创建目录”,以便Node-RED可以根据需要为该文件创建目录。
- 我们命名节点-随便命名吧! 我将其命名为“ Create WAV”。
- 点击“确定”!
这创建了一个简单的流程,每次IBM Watson为我们翻译一些文本时,该流程将为我们生成WAV文件。 确保您已经像这样连接了每个节点:
播放声音
在尝试运行此应用之前,我们需要调整其运行频率。 为此,我们双击“时间戳”节点:
让我们将频率设置为更合理的频率-记住,IBM Watson的声音每次都需要时间才能真正拨打电话! 另外,请注意,如果一个月内超过100万个字符,IBM将对该服务收取费用,因此您不想过度使用它-尤其是如果您如此频繁地请求它,以致从未听到声音! 一分钟的间隔对我来说效果很好:
现在,我们拖入一个“延迟”节点。 在我们尝试播放之前,这将需要一段时间,以使IBM Watson有时间执行文本到语音转换。 当声音文件更新时,有一些方法可以在Node-RED中运行节点,但是我有时发现它们有点小虫-一个简单的延迟似乎效果最好。
我们双击该节点以打开其设置,将延迟更改为1秒,然后单击“确定”:
我们将“格式化语音”输出(或任何您命名的函数)连接到我们的延迟,如下所示:
然后,我们拖入一个新节点-文件读取节点。 它将在我们之前拖动的“文件”节点上方,但同时具有输入和输出:
双击该新节点,然后输入以下设置:
- 我们将文件名设置为
/home/pi/temp/speech.wav
(与之前创建的文件名相同)。 - 我们确保输出为“缓冲区”。
- 我们给它起一个“ Read WAV”的名称(当然,您可以随意称呼它)。
- 点击确定!
我们将延迟节点连接到“ Read WAV”节点,然后拖入最后一个节点“ exec”节点。 这是“高级”部分的下方,可以运行Unix命令。 这就是我们在Pi上播放音频的方式。
我们双击该新节点以更改其设置。 我们将命令设置为:
aplay /home/pi/temp/speech.wav
这会在我们的Pi上播放声音文件! 我们不需要选择单选按钮或其他任何东西,我们只需命名节点(我将其命名为“ Play Audio”),然后单击“确定”即可:
行动中
这样,我们就可以完成所有工作:
您可能需要在Pi上更改的一项设置是用于输出音频的设置。 我使用以下命令将音频定向到3.5mm插孔:
amixer cset numid=3 1
您可以在Raspberry Pi音频配置页面上找到有关更改Raspberry Pi的音频设置的更多信息。
正确设置音频并一切就绪后,单击Node-RED界面右上角的“部署”按钮。 如果一切按计划进行,它将可以成功运行,并且您的Raspberry Pi应该开始与您对话!
以下是我在Twitter上发布的有关Raspberry Pi通过星巴克杯对我讲话的视频:
我的@Raspberry_Pi继续通过@StarbucksAu杯与我对话 ,这很棒。 技术的乐趣…… pic.twitter.com/KIjgtPSnfe
— Patrick Catanzariti(@thatpatrickguy) 2016年5月24日
(您怎么问我?我使用了一种称为Boombox便携式振动扬声器的神奇设备!)
结论
IBM Watson文本到语音功能为使用IBM Bluemix和Raspberry Pi的开发人员带来了全新的可能性! 您可以将语音连接到几乎所有东西,包括其他IBM Watson服务。 在本系列的下一篇文章中,我们将继续探索更多功能,感谢您的关注!
如果您一直在尝试Raspberry Pi和IBM Bluemix组合,那么我很想听听您使用它创建的东西! 在下面的评论中让我知道,或者在Twitter上通过@thatpatrickguy与我联系 。
From: https://www.sitepoint.com/teaching-your-raspberry-pi-to-speak-with-ibm-watson/