您的位置:首页 > 其它

快速原型的智能语音助理应用与树莓派_凯利讯半导体

2018-02-02 14:41 525 查看
  由于流行的智能语音产品如Amazon Echo和谷歌Home,语音助手迅速成为一项重要的产品功能。虽然语音服务提供商为开发人员提供了应用程序编程接口(API)支持,因此他们不必成为语音识别和解析方面的专家,但是将音频硬件和语音处理软件结合起来的需求仍然是一个很大的障碍。

  此外,在声学设计、音频工程和基于云的服务方面没有广泛经验的项目可能会在处理与每个规程相关的细节方面遇到重大的延误。

  为了解决这些问题,供应商已经提供了完整的语音助理开发工具包来大大简化问题。这篇文章将介绍两个这样的工具包,一个来自XMOS,一个来自Seeed技术,这两个工具分别支持基于Amazon Alexa Voice Service (AVS)和谷歌Assistant的定制产品的快速开发。这些板子的设计与树莓基础树莓Pi 3 (RPi 3)板相结合。

  这篇文章将描述如何让每个组件运行起来,并展示每个工具包如何使语音助手技术变得容易访问。

  AVS快速评估

  亚马逊推出了一款名为Alexa smart扬声器的产品,该产品提供了一种智能语音助手功能,这种功能在很大程度上仅限于过去的智能手机。对于开发人员来说,AVS API的可用性打开了在定制系统设计中使用这些语音助手的大门,但仍然需要在音频硬件和软件方面的大量专业知识。现在,XMOS xCORE VocalFusion 4-Mic套件为Amazon AVS提供了实现语音助手的最后一块拼图。

  XMOS组件包括一个XVF3000处理器基板,一个100毫米线性阵列的4英飞天IM69D130 MEMS麦克风,xTAGdebugger,安装套件,和电缆。开发人员需要提供RPi 3 a供电的扬声器和USB电源,以及USB键盘、鼠标、显示器和互联网连接。在将XMOS板和麦克风阵列连接到RPi 3后,开发人员可以快速开始评估Amazon Alexa语音助手(图1)。

  XMOS xCORE VocalFusion的图像。



  图1:开发人员开始使用XMOS xCORE VocalFusion工具包,将提供的麦克风阵列板(far left)和XMOS处理器板(中)插入到树莓Pi 3板(右)中。

  将RPi 3连接到USB键盘、鼠标、显示器和互联网服务之后,下一步的步骤是在SD卡上安装Raspbian操作系统,在RPi 3上打开终端,并克隆XMOS VocalFusion存储库。通过安装操作系统和repo,只需运行安装脚本auto_install。sh位于克隆的vocalfusion-avs-setup目录中。

  安装脚本配置树莓Pi音频系统及其与xCORE
VocalFusion组件的连接,并安装和配置树莓Pi上的AVS设备SDK。这个安装过程大约需要两个小时完成。

  安装完成后,开发人员需要执行一个简单的程序来加载他们的Amazon developer凭证,并开始测试大量的语音命令和内置功能。在这一点上,XMOS工具包将能够演示Alexa的全套功能,如计时器、警报和日历,以及使用Alexa技能包构建的第三方功能。

  参考设计

  简单的设置过程掩盖了在XMOS工具包中工作的复杂的硬件和软件组件。该工具包为开发人员提供了一个全面的参考设计来实现定制设计。在XMOS工具包的核心,XMOS XVF3000-TQ128设备提供了大量的处理能力(图2)。

  XMOS XVF3000-TQ128设备示意图。



  图2:XMOS XVF3000-TQ128设备集成了两个xCORE tiles,每个都有8个核心,以提供高性能的音频处理。

  该设备用于并行处理任务,包括两个xCORE tiles,每个磁砖包含8个32位的xCORE核心,其中集成了I/O、256 Kbytes的SRAM和8 kb的一次性可编程(OTP)芯片内存。xTIME调度程序管理内核,并触发从I/O引脚到硬件事件的核心操作。依次,每个核心都可以独立地执行计算、信号处理或控制任务,利用xCORE VocalFusion工具包中集成的2MB闪存,并将代码和数据用于工具包的设置和执行。

  XMOS处理器的基板除了XVF3000-TQ128设备之外,还需要额外的组件(图3)。除了基本的缓冲和头部连接,基板还包括一个Cirrus逻辑CS43L21数字-模拟转换器(DAC),用于生成与外部扬声器的输出音频。最后,基板带出XVF3000-TQ128设备的I2C端口,以及音频优化的I2S接口,用于数字音频。

  XMOS组件的底板图包括XVF3000-TQ128设备(点击放大)



  图3:XMOS组件的基板包括XVF3000-TQ128设备、DAC、缓冲器和连接到树莓Pi 3板和外部扬声器的头。

  该组件在XMOS板上的音频处理和RPi 3(图4)上的高级语音处理服务之间的整体功能进行了分割。RPi的Broadcom四核处理器运行软件,分析音频流,以识别和处理与亚马逊的AVS之间的交互。

  XMOS VocalFusion组件图(点击放大)



  图4:XMOS VocalFusion组件将Alexa功能隔在基板和树莓Pi 3板上,使用前者用于音频信号处理,后者用于语音识别和更高级别的Alexa服务。

  软件安装过程配置这些子系统并加载所需的软件包,包括感觉的扬声器独立的wake-word引擎和AVS客户端软件,等等。

  AVS提供了一系列与高级功能相关的接口,如语音识别、音频回放和音量控制。操作通过来自AVS(指令)的消息和来自客户端的消息(事件)进行。例如,针对某些情况,AVS可能会向客户发送指令,指示客户端应播放音频、设置警报或打开灯。相反,来自客户端的事件通知了一些事件的发生,比如来自用户的新的语音请求。

  开发人员可以使用AVS设备软件开发工具包(SDK) API和c++软件库来扩展他们的XMOS组件或XMOS定制设计的功能。AVS设备SDK通过一系列单独的c++类和对象来抽象底层操作,例如音频输入处理、通信和AVS指令管理,开发人员可以使用或扩展它们的自定义应用程序(图5)。

  亚马逊AVS设备SDK示意图。



  图5:Amazon AVS设备SDK将AVS的广泛功能组织成单独的功能区域,每个功能区域都有自己的接口和库。

  包括在AVS设备SDK,一个完整的示例应用程序演示了关键设计模式包括创建一个设备端和wake-word交互管理器(清单1),以及一个完整的示例服务例程,应用程序显示了主程序示例应用程序只需要实例化对象sampleApplication和与一个简单的命令启动它:sampleApplication - >运行()。

  / *

  *创建DefaultClient—该组件作为一个外置默认对象,实例化和“glues”

  把所有的模块放在一起。

  * /

  std::要查看客户=

  alexaClientSDK::defaultClient::defaultClient::创建(

  m_speakMediaPlayer,

  m_audioMediaPlayer,

  m_alertsMediaPlayer,

  speakSpeaker,

  audioSpeaker,

  alertsSpeaker,

  audioFactory,

  authDelegate,

  alertStorage,

  settingsStorage,

  { userInterfaceManager },

  { connectionObserver,userInterfaceManager });

  。

  //如果启用了“唤醒”字,那么就可以使用“唤醒”字音频提供程序创建交互管理器。

  汽车interactionManager = std::make_shared(

  客户端,

  micWrapper,

  userInterfaceManager,

  holdToTalkAudioProvider,

  tapToTalkAudioProvider,

  wakeWordAudioProvider);

  。

  客户端- > addAlexaDialogStateObserver(interactionManager);

  //创建输入观察者。

  m_userInputManager = alexaClientSDK::一点::UserInputManager:创建(interactionManager);

  。

  空白SampleApplication:run(){

  m_userInputManager - > run();

  }

  清单1:开发人员可以使用AVS设备SDK c++样例应用程序扩展他们的设备AVS客户端,该应用程序演示了创建AVS客户端、wake-word交互管理器和用户输入管理器等关键设计模式。

  谷歌助理快速原型

  虽然XMOS工具包加速了Amazon Alexa原型的开发,但是Seeed技术的谷歌AIY语音工具包帮助开发人员使用谷歌助手构建原型。与XMOS AVS工具包一样,Seeed谷歌AIY语音工具包的设计目的是与树莓Pi 3板一起构建原型,并提供必要的组件(图6)。

  树莓Pi 3与Seeed技术谷歌AIY语音工具包的图像。



  图6:开发人员可以通过将树莓Pi 3与Seeed技术的谷歌AIY语音工具包结合起来,快速创建一个谷歌助理应用程序,它提供了构建原型所需的组件。(图片来源:凯利讯半导体)

  与Seeed语音帽插件板(图6)、麦克风板(2)和扬声器(4)一起,组件包括一个硬纸板外壳(8)和内部框架(9)以及基本组件,包括standoffs(3)、电缆(6和7)和一个按钮(5)。

  开发人员首先将RPi 3、扬声器线和麦克风电缆连接到语音帽上。与AVS的工具包不同,谷歌工具包提供了一个简单的外壳和内部框架,它可以容纳板子组件和扬声器(图7)。

  Seeed谷歌AIY语音工具包图像。



  图7:Seeed谷歌AIY语音组件包括一个内部硬纸板框架,开发人员将其折叠成一个用于董事会组装的载体。

  该框架依次安装在支持按钮和麦克风阵列的外部外壳内,完成组装(图8)。

  Seeed谷歌AIY语音组件外壳的图像。



  图8:除了内部框架和扬声器外,Seeed谷歌AIY语音组件的外部外壳还包括按钮和麦克风(在外壳顶部有两个孔)。

  下载了语音工具包图像并将其加载到SD卡上后,只需将SD卡插到RPi中,并将其启动即可。在一个简短的初始化过程来确认每个组件的操作之后,开发人员需要激活服务的谷歌云端。为此,设置一个工作沙箱区域并启用谷歌助理API,创建和下载身份验证凭据。

  最后,开发人员需要在他们的工具包上启动谷歌助手,在RPi 3上打开一个终端控制台并执行Python脚本,assistant_library_demo.py。此时,开发人员可以使用完全范围的谷歌辅助功能,无需进一步的努力。

  定制谷歌助理设备

  带有Seeed谷歌AIY语音工具包的定制开发充分利用了树莓Pi的灵活性。Seeed Voice HAT带来了已经配置为典型IO函数的多个RPi 3 GPIOs(图9)。

  Seeed语音帽插件板图像。



  图9:开发人员可以使用Seeed voice HAT附加板上的I/O端口快速扩展Seeed谷歌AIY语音组件的硬件功能。

  在软件方面,开发人员可以使用谷歌的voice kit API软件轻松地扩展工具包的基线特性。除了支持软件和实用工具外,这个软件包还包括示例应用软件,它演示了通过谷歌云语音API和谷歌Assistant SDK实现语音服务的多种方法。

  与智能助手方法截然不同的是,云语音服务提供了语音识别功能,将特定语音的实现留给了程序员。不过,对于只需要语音输入功能的设计,此服务提供了一个简单的解决方案。开发人员只需将音频传递给云语音服务,该服务将语音转换为文本,并返回语音工具包API中包含的示例Python脚本中所演示的识别文本(清单2)。

  ......

  进口aiy.audio

  进口aiy.cloudspeech

  进口aiy.voicehat

  def main():

  识别器= aiy.cloudspeech.get_recognizer()

  识别器。expect_phrase(“关灯”)

  识别器。expect_phrase(“开灯”)

  recognizer.expect_phrase(眨眼)

  按钮= aiy.voicehat.get_button()

  领导= aiy.voicehat.get_led()

  .start aiy.audio.get_recorder()()

  而真正的:

  打印(按下按钮并发言)

  button.wait_for_press()

  打印(“听…”)

  文本= recognizer.recognize()

  如果没有文本:

  打印(“对不起,我没听见。”)

  其他:

  打印('你说',文本,'")

  如果在文本中“打开灯”:

  led.set_state(aiy.voicehat.LED.ON)

  elif 'turn off the light' in text:

  led.set_state(aiy.voicehat.LED.OFF)

  elif“眨眼”的文本:

  led.set_state(aiy.voicehat.LED.BLINK)

  elif文字:“再见”

  打破

  if __name__ = =“__main__”:

  main()

  清单2:在谷歌Voice Kit API中提供的软件例程中,示例程序的这段代码演示了谷歌云语音服务如何将语音转换为文本,将任何语音指令的实现都交给程序员。

  对于寻找谷歌助理更广泛功能的开发人员来说,谷歌Assistant SDK提供了两个实现选项:谷歌助理库和谷歌助理服务。

  基于python的谷歌助理库提供了一个快速实现的方法,可以快速实现谷歌助手的原型,比如Seeed语音工具包。通过这种方法,原型可以立即利用基本的谷歌辅助服务,包括音频捕获、会话管理和计时器。

  与云演讲方法相比,谷歌助理库通过处理每一个对话来管理对话,并将其作为一系列与会话和话语状态相关的事件进行处理。在语音识别完成之后,一个实例化的Assistant对象提供了包含处理的适当结果的事件对象。正如在另一个谷歌示例脚本中演示的那样,开发人员使用一个特征事件处理设计模式和一系列if/else语句来处理预期的事件结果(清单3)。

  ........

  进口aiy.assistant.auth_helpers

  进口aiy.audio

  进口aiy.voicehat

  从google.assistant。库导入助理

  从google.assistant.library。活动导入EventType

  def power_off_pi():

  aiy.audio。说“再见!”)

  子流程。调用(sudo关闭现在,shell = True)

  def reboot_pi():

  aiy.audio。说('See you in a bit!')

  子流程。调用(sudo重启,shell = True)

  def say_ip():

  ip_address =子流程。check_output(“主机名-I - | cut -d' -f1”,shell=True)

  aiy.audio。说('我的IP地址是%s' % ip_address.decode('utf-8'))

  def process_event(助理、事件):

  status_ui = aiy.voicehat.get_status_ui()

  如果事件。类型= = EventType.ON_START_FINISHED:

  status_ui.status(“好”)

  如果sys.stdout.isatty():

  打印('说' OK,谷歌'然后说,或按Ctrl+C退出…')

  elif事件。类型= = EventType.ON_CONVERSATION_TURN_STARTED:

  status_ui.status(听)

  elif事件。类型= = EventType。ON_RECOGNIZING_SPEECH_FINISHED event.args:

  print(“你说:”event.args['文本'])

  文本= event.args['文本'].lower()

  if text = 'power off':

  assistant.stop_conversation()

  power_off_pi()

  elif文本= =“重启”:

  assistant.stop_conversation()

  reboot_pi()

  elif文本== 'ip地址':

  assistant.stop_conversation()

  say_ip()

  elif事件。类型= = EventType.ON_END_OF_UTTERANCE:

  status_ui.status(思考)

  elif事件。类型= = EventType.ON_CONVERSATION_TURN_FINISHED:

  status_ui.status(“好”)

  def main():

  凭证= aiy.assistant.auth_helpers.get_assistant_credentials()

  与助理(凭证)助理:

  在assistant.start事件():

  process_event(助理、事件)

  if __name__ = =“__main__”:

  main()

  清单3:在谷歌语音组件分发版中显示的示例中,使用谷歌Assistant库的应用程序的主循环启动了一个Assistant对象,该对象反过来生成一系列事件,由开发人员的代码进行处理。

  对于更苛刻的定制需求,开发人员可以通过谷歌助理服务(以前称为谷歌Assistant gRPC API)来实现全面的接口集。基于谷歌RPC (gRPC),谷歌Assistant服务允许开发人员将音频查询流到云,处理已识别的语音文本,并处理相应的响应。为了实现自定义功能,开发人员可以使用包括c++、Node在内的各种编程语言访问谷歌Assistant服务API。js和Java。

  在使用谷歌Assistant SDK进行自己的设计时,设计者可以使用谷歌的设备匹配功能来实现硬件的特定功能。作为设备设置的一部分,开发人员提供关于其自定义设备的信息,包括其功能功能和特性,称为特性。对于有关自定义设备的用户语音请求,该服务将识别设备的有效特性并生成对设备的适当响应(图10)。开发人员只需要在设备的事件处理程序中包含与设备特性相关的代码(如清单3中的def power_off_pi())。

  谷歌助理SDK自动语音识别示意图。



  图10:谷歌助理SDK使用自动语音识别(ASR)和自然语言处理(NLP)服务,将用户请求与特定设备匹配,并发布与自定义设备及其识别特性一致的响应。

  结论

  直到最近,智能语音助理在很大程度上仍是主流开发者无法企及的。有了两个现成的工具包,开发人员可以在定制设计中快速实现Amazon
Alexa和谷歌助手。每个工具包允许开发人员在一个基本的原型中快速地提出相应的智能助手,或者用定制的硬件和软件扩展设计。

  ​
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息