设计一个基于边缘人工智能的语音控制炉,实现Picovoice,人工智能生成的语音识别模型和PSoC 6单片机
扫描二维码
随时随地手机看文章
Edge AI智能炉子,可以通过语音命令和交互式语音反馈UI(如Alexa)操作,无需互联网连接。
想象一下,一个厨师在准备沙拉或做面团的时候正在烹饪一些东西,现在他/她可能需要调整炉子上的加热。在这种情况下,语音控制的炉子/烤箱对厨师/厨师来说非常有用。在任何情况下,用户的双手都在忙着做事情是利用语音控制应用程序的最佳方案。
不幸的是,现有的解决方案是连接的解决方案,比如Alexa或谷歌云连接烤箱之类的东西。但是,为什么要让他们知道你做什么,什么时候做呢?此外,用户需要为设备设置wifi连接并下载另一个应用程序!这对许多用户来说是一个很大的否定。
这是我的解决方案:边缘人工智能语音控制炉,实现Picovoice。人工智能生成的语音识别模型和PSoC 6单片机。开箱即用!
这不是“物联网”,而是“物外互联网”,所以它仍然是一个物联网(双关语)。
特性
•声控点火/火焰激活
•声控火焰/加热调节
•语音控制烹饪/燃烧器定时器设置
•交互式语音反馈UI确认
•语音控制关机
•边缘人工智能语音识别,无云连接
•自然语言多命令操作
硬件
这些硬件用于建造这个项目:
PSoC™6 62S2 Wi-Fi BT先锋套件(CY8CKIT-062S2-43012)
这是PSoC™62双核MCU CY8C624ABZI-S2D44 (150-MHz Arm Cortex-M4和100-MHz Arm Cortex-M0+内核)的开发板,具有2MB闪存。它的功能强大到可以在没有互联网连接的情况下运行语音识别人工智能
物联网传感扩展套件(CY8CKIT-028-SENSE)
物联网感测扩展套件是一个可与先锋套件一起使用的附加(屏蔽)板,该板具有用于音频输入的模拟/数字麦克风和用于音频输出的音频编解码器,这是本项目所需的
语音回放模块
我最初的目标是使用物联网感知套件的音频编解码器来播放语音UI消息,并在PSoC6上使用2MB闪存来存储波文件。不幸的是,我无法使用Modustoolbox中提供的I2S音频演示代码。这就是为什么我决定使用我去年做的一个项目,它可以存储多达1000个独立的mp3格式的音频信息,最长可达40分钟。
这里是详细的项目:倒计时语音计时器和起火器
它是使用费米子录音/播放模块,DFRobot甲虫板和3瓦封闭式扬声器。
我已经更改了原始固件(附在下面),因此该模块可以接收从PSoC 6发送的串行消息,并相应地播放适当的音频消息。
权力SupplyModule
该模块由LM7809线性稳压器和输出5伏的DC-DC降压转换器模块组成。我已经使用9 Vdc输出为PSoC6先锋供电。Buck转换器的5 Vdc用于为伺服电机和语音回放模块提供足够的电源。
金属齿轮伺服电机
本项目采用了两台金属齿轮伺服电机。其中一个伺服电机控制(燃料)气体流量阀部分打开是必要的。当燃烧器需要关闭时,这个伺服电机可以完全关闭阀门。另一个伺服电机拉动点火杆产生火花点火。
便携式煤气炉
便携式燃气灶是一个小型的单燃烧器炉子,内置peizo点火器,起动机和气体流量调节阀。我选择这个炉子是为了便于原型设计,因为它很容易把整个设置放在我的电脑附近,用一个小炉子来开发固件。当然,这个项目可以扩展到更大的,多燃烧器的炉子设置。
硬件建设
就像任何快速和低预算的原型一样,我已经用强力胶,热熔胶,电缆扎带和跳线组装了硬件。主要目标是减少成本、时间和精力。
所有的部件按照这个示意图连接:
其中一个伺服电机被超级粘在气体调节阀上,像这样:
另一个伺服电机是螺纹到peizo点火火花发电机杠杆这样:
这就是串口TX线是如何在不修改Dev工具包的情况下被黑掉的:
所有部件用扎带固定在一块硬板上。跳线用于连接所有硬件部件。
modstoolbox编程&构建语音AI模型
Modustoolbox
要对PSoC6先锋套件进行编程,请下载并安装Modustoolbox(MTB) SDK。我使用的是MTB 2.4版本,这个项目应该避免使用MTB 2.1版本之前的任何版本。
安装MTB后,您可能会遇到一些困难。确保在工具中添加路径以使MTB正常工作。
以下是英飞凌的安装指南,解释了这个安装过程:- modusool安装指南
安装了Modustoolbox(MTB)之后,让我们首先开始进行语音识别演示。
运行MTB并单击“快速开始”菜单中的“新建应用程序”:
确保您的互联网连接处于活动状态,因为这个过程将从Github下载示例应用程序演示
从board Support Package菜单中选择合适的平台(PSoC 6)和正确的板(CY8CKIT-062S2-43012)
下一个。选择Voice模板应用,勾选demo项目“Picovoice E2E语音识别demo”,单击“创建”
现在,打开Picovoice E2E语音识别演示代码中的main.c文件。找到接受Picovoice访问密钥的线路,我们稍后会回到这里
保持MTB在后台运行并打开web浏览器应用程序,是时候使用Picovoice了。
Picovoice
Picovoice是构建语音识别模型并在不同平台上实现的最直观的方法之一。简单地说,你只需要输入唤醒词和语音到意图词,然后建立平台特定的语音识别模型。一旦模型生成,下载并在您的嵌入式开发项目中实现语音识别模型。
以下步骤将解释这一过程:
步骤0:创建一个新帐户并登录。此页面将出现
步骤1:访问键和UUID(唯一标识符)
首先点击“Show AccessKey”,它将提供一个唯一的字符串,复制这个字符串并将其保存在一个文本文件中。这个访问键在代码中是必需的。
访问键看起来像这样(这是一个虚拟字符串):
该字符串必须在“ ”之间,并以;像这样在代码中:
为了制作语音识别模型,还需要一个信息,那就是设备UUID(在这种情况下是PSoC 6 (mcu)先锋套件的UUID)。
复制Access Key字符串并粘贴/插入到之前像这样打开的MTB演示代码中:
现在,选择演示项目并单击构建按钮(锤子图标)。
同时,构建过程正在进行(需要一些时间),将PSoC6先锋套件(+ IoT Sense Kit连接在其上)与USB电缆连接到计算机。
一旦构建完成,点击Green Play图标来显示代码,确保选择正确的程序员
Picovoice_E2E_Voice_Recognition_Program (KitProg3_MiniProg4)
现在,打开一个串口终端应用程序,如Putty或TeraTerm,选择正确的串口(例如:COM5),波特率115200
然后大声说“嘿,皮科”
您应该在串行监视器上获得响应,其中包含PSoC6先锋套件的UUID,类似于以下内容(十六进制数):
这个UUID将需要在Picovoice Console中创建语音识别模型。
现在。我们回到Picovoice控制台。
步骤2:唤醒话语
Picovoice唤醒字是一个特殊的触发字,它将激活设备。我要用这个词:Hey Stove作为唤醒词,因为这是一个语音控制的炉子。
转到Picovoice控制台的Porcupine选项
•类型短语:嘿,炉子
•选择语言:英语
•选择平台:ARM Cortex-M
•选择单板:PSoC6
•输入之前的UUID/唯一标识符(十六进制数)
接下来,单击火车唤醒词,在几秒钟内你的唤醒词训练模型将准备好。下载训练好的模型
您将得到一个下载的压缩文件夹,将其解压缩并使用任何文本编辑器(记事本)打开pv_porcupine_parms .h文件。这是唤醒词模型,一个十六进制数的大数组。
稍后将详细说明这一点。
步骤3:语音到意图模型
唤醒词“嘿,炉子”将激活设备,但它不会执行任何炉子操作。我想打开炉子,关掉炉子,换煤气/火焰,设置烹饪计时器等。我打算用我的炉子做一些事情。这就是需要语音到意图引擎的地方。
Picovoice Rhino Speech-to-Intent引擎可以提取多个语音命令,这些命令可以用于执行不同的操作。
转到Picovoice控制台的Rhino选项
型号名称:声控炉
选择模板:空
然后点击Create Context,这将带你进入一个新页面,在那里完成了实际的语音到意图模型“编码”。
这里是一个快速概述的意图,槽和微语音宏:-
意图
意图是您希望通过语音控制执行的某些操作。把它们看作语法中使用的动词。意图有表达方式,这与带有动词的句子的英语语法非常相似。
意图表达=动作(做某事)+主语/宾语(关于某事)
这个语音控制炉有4个单独的意图:
•点火:在炉子上点火
•停止燃烧:停止燃烧
•设置火焰:通过调节气体来改变火焰
•SetTimer:设置一个烹饪定时器,当时间过去时关闭火
每个意图都有它自己的表达式,你必须键入它。表达式应该是这样的:
一开始可能看起来有点混乱,但你最终会明白的(别担心)。
槽
槽是意图中的变量。槽可以容纳表示不同变量的多个元素,或者一个变量的不同名称
把它想象成英语语法中的主语/宾语,需要在其上执行动作。
例如,如果我们想设置一个烹饪计时器,时间将根据命令的不同而不同。
•把计时器设为一分钟
•把计时器调到三分钟
•把计时器调到五分钟
•插槽=行动中的变量(通常)
语音到意图引擎可以提取这些差异。
当在表达式中使用时,Slot前面会有$符号
Picovoice有一些内置插槽,比如pv。百分比,它可以直接从用户意图中提取百分比值。
宏
宏完全用于具有相同含义(意图)的不同单词。它相当于英语语法中的同义词。
在表达式中使用宏时,宏的前面会有@符号
宏=动词的同义词
例如:Start可以说成turn on/power up/enable/activate这些词中的任意一个。
那么,你是怎么把这些东西组合在一起的呢?
首先,想想人类表达特定意图的“同一件事”的所有可能方式。然后在Macros中列出所有动词/名词,在Slots中列出所有变量,并为意图创建如下表达式:
如果语音识别模型能够检测到各种具有相同意图的人类短语,那么它将会更好地工作。正确列出宏元素和更好的表达是成功的关键。
步骤4:训练模型
当所有的intent, Slots, Macros都完成后,点击右下角的“Train”:
选择如下:
型号平台:ARM Cortex-M
单板类型:PSoC6
唯一标识符(UUID):即十六进制数
然后点击训练“语音控制炉”为ARM Cortex-M
解压缩下载的文件。
然后打开“Voice-Controlled-Stove_en_cortexm_v2_1_0.h”文件
文件中有一个十六进制数字的大数组,这是语音到意图模型。
步骤5:在模块工具箱中编辑main.c和param.h
现在,回到modstoolbox。复制这里附加的main.c代码。
从Picovoice E2E语音识别演示的main.c中替换整个原始演示代码
接下来,编辑param.h,将唤醒词模型的数组和语音包含到意图模型的数组中。这两个模型(唤醒词+从语音到意图)被组合到param.h中。
我将修改后的param.h附在下面。复制它的内容并替换param.h的原始内容,以避免任何混淆。
如果你想了解代码是如何工作的,请阅读它。代码中有大量的注释解释了大多数事情
最后,点击锤子图标来构建和绿色播放按钮图标来将固件flash到PSoC6 mcu中,如前所述(见步骤1)。
准备播放语音的音频文件
Step1:我使用了文字转语音服务来进行音频反馈。
第二步:当演讲播放时,我用Audacity录制了声音。选择Windows WASPAPI和源作为耳机/扬声器,然后单击Record图标以在计算机中捕获音频播放。
第三步:录音后,将音频分割成多个mp3文件。要分离音频的每个片段(每个数字的声音),用鼠标选择该部分,然后使用快捷键Ctrl+C(复制),Ctrl+N(新建),Ctrl+V(粘贴)该音频片段。对每个音频段重复此步骤。
第四步:进入Files >导出为MP3,选择48 kbps的质量,重命名为FILE0000.MP3, FILE0001.MP3, FILE0002.MP3,直到FILE0100.MP3
(所有的音频文件都附在下面,你可以跳过第1-4步,只需按照第5步下载并复制文件)
第五步:语音模块用USB C线连接到电脑,16mb闪存盘出现。第一次使用时需要格式化(FAT)。接下来,将所有mp3文件复制到语音模块闪存驱动器中的DF_REC目录。
您可以放置最多1000个MP3文件,总音频长度为40分钟@ 48kbps。更高采样频率的歌曲/音频将工作,但音频长度将减少,由于较大的文件大小
音频回放是如何工作的?
连接PSoC6单片机的串行TX和甲虫板单片机的串行RX,实现半双工串行通信。PSoC6 mcu简单地发送printf(“一些数字”),它被传输到甲虫板的mcu。根据从PSoC6 mcu接收到的数字,甲虫板mcu将向语音播放模块发送命令,播放代表该数字的mp3文件。
例如:printf("040")命令将播放0040.mp3文件。看看我的这个项目,它详细地解释了这一点
设备操作
为了理解设备操作,让我们看一下所有的PSoC6应用资源(PSoC6 mcu内部硬件)
应用程序资源
根据用户的语音命令,这些资源中的一些将激活某些模块来控制伺服器,启用定时器,向语音播放模块发送打印消息等。
两个PWM模块将产生50 Hz的PWM信号。通过调整这些信号的占空比,控制两个伺服电机。
LPTIMER将测量烹饪计时器功能激活时所经过的时间
UART TX将发送printf()消息到甲虫板播放mp3文件
当检测到唤醒字时,GPIO将驱动PSoC6 Pioneer Kit板上的绿色LED。当检测到语音意图时,蓝色LED将发光。
下面是一些语音命令和硬件交互的例子:
当然,这些并不是唯一的语音命令。例如:
“嘿,炉子,打开燃烧器”也可以这样说:
气体/火焰调节限制
气体或火焰可以调整为10%至100%之间的任何值,步进5%。也就是说,10% 15% 20% 25% .......100%
以下是一些有效的语音命令示例:
对于任何不能被5整除的值,默认气体阀设置为30%
定时器设置约束
烹饪时间定时器可设:1分钟、2分钟、3分钟、5分钟、10分钟、15分钟、20分钟、25分钟、30分钟
当然,可以通过编辑main.c代码来添加或多或少的选项。
以下是一些有效的定时器设置语音命令:
现有的定时器设置可以被新的定时器设置命令覆盖。对于上面没有列出的任何分钟值,默认计时器设置为一分钟。
结论
我用有限的预算(大约50美元的额外硬件)+ PSoC6先锋套件(由英飞凌提供)和Picovoice开发者帐户(由Picovoice免费提供)制作了这个项目。但如果有人想把它变成一种产品,可能会增加更多的功能。
本文编译自hackster.io