原文地址
译者:远方的自由
转载请注明出处: http://blog.csdn.net/z2066411585

概述

  • 用于C++的AVS设备SDK为Alexa语音服务提供了一个现代化的C++(11或更高版本)接口,允许开发人员将智能语音控制添加到连接的产品中.它是模块化和抽象的,提供组件去处理离散功能,例如语音捕获,音频处理和通讯,
     每个组件都开放API允许你使用和定制.它还包含一个示例应用程序,演示与AVS的互动。
     
  • 快速设置你的树莓派开发环境和学习如何优化libcurl的大小,参见wiki或click here

列表

  • 通用条款
  • 最低要求和依赖环境
  • 前提
  • 创建源代码外部构建
  • 运行AuthServer
  • 运行单元测试
  • 运行集成测试
  • 运行示例代码
  • 安装SDK
  • 用于C++ API 文档的AVS设备SDK
  • 资源与指导
  • 发行说明

通用条款

  • 界面 - 语音识别,音频回放和音量控制等与客户端功能对应的称为指令事件的逻辑分组消息,
  • 指令 - AVS发送消息通知你的设备做相应的动作
  • 事件 - 你的设备发送消息通知AVS发生了一些事情
  • 下行通道 - 你在HTTP/2连接中创建的流,用于将指令从AVS传递到你的设备.设备的半关闭状态下,下行通道保持打开的状态,并在整个连接过程中从AVS打开,下行通道主要用于将云端的指令发送到你的设备
  • 云端指令 - 从AVS发送指令到你的产品,例如,当一个用户从App调节音量,一个指令发送到你的产品,并没有相应的语音请求

最低要求和依赖关系

  • 说明可以帮助你快速设置RaspberryPi开发环境,并使用nghttp2为macOS构建libcurl

核心依赖

  • C++11或更新
  • GCC 4.8.5或Clang 3.3
  • CMake 3.1 或更新
  • libcurl 7.50.2或更新
  • nghttp2 1.0 或更新
  • OpenSSL 1.0.2 或更新
  • Doxygen 1.8.13或更新(需要构建API文档)
  • SQLite 3.19.3或更新
  • 警报按预期的工作
    • 这个系统时钟必须设置为UTC时间,我们建议使用NTP来执行此操作
    • 文件系统是必须的

媒体播放器依赖关系

构建MediaPlayerInterface 参考实现是可选的,但是要求:

  • GStreamer 1.10.4 (或更新)和下列GStreamer plug-ins:
    针对Linux的重要提示:GStreamer1.8 不能够工作
  • GStreamer Base Plugins 1.10.4
  • GStreamer Good Plugins 1.10.4
  • GStreamer Libav Plugin 1.10.4
  • GStreamer Ugly Plugins 1.10.4

注意: 插件可能依赖于需要基于GStreame的MediaPlayer安装的库,才能正常工作

示例应用依赖关系

构建示例应用是可选的,但是要求:

  • PortAudio v190600_20161030
  • GStreamer

注意: 示例应用程序将使用或禁止唤醒词,如果在没有唤醒词的情况下构建,则示例程序将禁用免提模式

音乐提供之的依赖关系

iHeartRadio播放器需要一下解码器和安装包

  • GStreamer Bad Plugins 1.10.4 或更新
  • 分流器的 Crypto Libary
  • GStreamer 使用的HTTP 客户端和服务器库:libsoup
  • AAC和HE-AAC解码: libfaad-dev

准备

在创建构建之前,你需要安装运行AuthServer所需要的一些软件,AuthServer是使用Flask在Python中构建最小的授权服务器. 它提供一种简单的方式来获取你的第一个刷新令牌,这将用于集成测试
并获取所有与AVS交互所需要的访问令牌

重要提示 : AuthServer仅用于测试目的,商业产品将使用亚马逊开发者门户上提供用于远程授权和本地授权的指令获得使用亚马逊(LWA)证书的登录,有关其他信息,参见AVS Authorization

第一步:安装pip

如果你的系统上没有安装pip,遵循详细的安装说明:链接

第二步:安装flash和requests

对于Windows运行这个命令

pip install flash requests

对于Unix/Mac运行这个命令

pip install –user flash requests

第三步:获取你的产品ID,Cliend ID, 和客户端秘钥

如果你还没有,按照这些说明注册产品和创建一个安全配置文件

确保注意以下内容,稍后配置AuthServer需要用到以下内容

  • 产品ID
  • 客户端ID
  • 客户端秘钥

重要提示:确保你在网页选项卡中设置了允许来源和允许返回URL

  • 允许来源: http://localhost:3000
  • 允许你返回URLs : http://localhost:3000/authresponse

创建一个外部构建

以下说明假定满足所有要求和依赖关系,并已经克隆仓库(或保存本地压缩包)

CMake 构建类型和选项

支持以下构建类型:

  • DEBUG - 用-g编译标志位显示调试日志
  • RELEASSE - 添加-O2标志并删除-g标志
  • MINSIZEREL - RELEASE标志位编译并用( -O s)优化为编译最小体积的版本

指定构建类型,使用这个命令代替下面的步骤4:

cmake <absolute-path-to-source> -DCMAKE_BUILD_TYPE=<build-type>`

构建一个唤醒词

注意:唤醒词检测和关键字检测可互换使用

用于C++的AVS Device SDK支持来自Sensory和KITT.ai唤醒词检测.
构建唤醒词检测需要以下选项: 请用Sensory的SENSORY替换<wake-word-name>和KITT.ai的KITTAI:

  • -D<wake-word-name>_KEY_WORD_DETECTOR=<ON or OFF> -指定在构建期间唤醒词启用还是禁用
  • -D<wake-word-name>_KEY_WORD_DETECTOR_LIB_PATH=<absolute-path-to-lib> - 唤醒词库的路径
  • -D<wake-word-name>_KEY_WORD_DETECTOR_INCLUDE_DIR=<absolute-path-to-include-dir> - 唤醒词头文件目录的路径

注意: 要列出所有可用的 CMake选项,使用以下命令:-LH

Sensory

如果使用Sensory唤醒词,版本要求5.0.0-beta.10.2 或更高版本

这是一个cmake命令构建Sensory的例子


cmake <absolute-path-to-source> -DSENSORY_KEY_WORD_DETECTOR=ON -DSENSORY_KEY_WORD_DETECTOR_LIB_PATH=.../alexa-rpi/lib/libsnsr.a -DSENSORY_KEY_WORD_DETECTOR_INCLUDE_DIR=.../alexa-rpi/include

请注意,在运行cmake并将其构建到SDK之前,你可能需要授权Sensory库,可以在Sensory Github页面下发现一个授权Sensory库的脚本bin/license.sh

KITT.ai

一个矩阵计算库,被称为BLAS,需要使用KITT.ai,以下是安装此库的示例命令:

  • 通用 Linux : apt-get install libatlas-base-dev
  • macOS : brew install homebrew/science/openblas

这是一个cmake命令构建KITT.ai的例子:


cmake <absolute-path-to-source> -DKITTAI_KEY_WORD_DETECTOR=ON -DKITTAI_KEY_WORD_DETECTOR_LIB_PATH=.../snowboy-1.2.0/lib/libsnowboy-detect.a -DKITTAI_KEY_WORD_DETECTOR_INCLUDE_DIR=.../snowboy-1.2.0/include

MediaPlayer实现的构建

MediaPlayer(MediaPlayerInterface的参考实现)基于GStreamer,并不是默认生成,要构建MediaPlayer必须CMake指定-DGSTREAMER_MEDIA_PLAYER=ON选项

如果GStreamer通过源码安装,构建的时候必须CMake通过DCMAKE_PREFIX_PATH选项指定前缀路径

这是一个cmake命令的例子

cmake <absolute-path-to-source> -DGSTREAMER_MEDIA_PLAYER=ON -DCMAKE_PREFIX_PATH=<path-to-GStreamer-build>

构建PortAudio(运行示例程序所需)

PortAudio是运行C++示例程序的AVS设备SDK必须的,构建说明可用于LinuxmacOS

这是使用PortAudio为C++构建AVS Device SDK 的示例CMake命令:

cmake <absolute-path-to-source> -DPORTAUDIO=ON
-DPORTAUDIO_LIB_PATH=<path-to-portaudio-lib>
-DPORTAUDIO_INCLUDE_DIR=<path-to-portaudio-include-dir>

例子:

cmake <absolute-path-to-source> -DPORTAUDIO=ON
-DPORTAUDIO_LIB_PATH=.../portaudio/lib/.libs/libportaudio.a
-DPORTAUDIO_INCLUDE_DIR=.../portaudio/include

通用的Linux/macOS构建

创建一个外部构建:

1.克隆一个仓库(或下载解压该压缩包)

2.创建一个外部编译目录. 重要:这个目录不能是源目录的子目录

3.cd你的编译目录

4.在你的编译目录,运行cmake,你应该看到下面的消息:

-- Please fill <absolute-path-to-build-directory>/Integration/AlexaClientSDKConfig.json before you execute integration tests.

打开Integration/AlexaClientSDKConfig.json用你最喜欢的文本编辑器填写你的产品信息

5.从编译目录,运行make编译SDK

应用程序设置

SDK需要配置json文件,其中一个例子在Integration/AlexaClientSDKConfig.json.json的内容应该填入你的产品信息(你在注册产品和创建安全配置文件从开发人员门户获得),和数据库和声音的位置.这个json文件
是集成测试正常工作必须的,也适用于示例应用程序

该文件的格式如下:

{"authDelegate":{"clientSecret":"<Client Secret for your device from the Amazon Developer Portal>","deviceSerialNumber":"<A unique value that you create, similar to a SKU or UPC. E.g. "123456">","refreshToken":"${SDK_CONFIG_REFRESH_TOKEN}","clientId":"<Client ID for your device from the Amazon Developer Portal>","productId":"<Product ID for your device from the Amazon Developer Portal>"},"alertsCapabilityAgent":{"databaseFilePath":"/<absolute-path-to-db-directory>/<db-file-name>","alarmSoundFilePath":"/<absolute-path-to-alarm-sound>/alarm_normal.mp3","alarmShortSoundFilePath":"/<absolute-path-to-short-alarm-sound>/alarm_short.wav","timerSoundFilePath":"/<absolute-path-to-timer-sound>/timer_normal.mp3","timerShortSoundFilePath":"/<absolute-path-to-short-timer-sound>/timer_short.wav"},"settings":{"databaseFilePath":"/<absolute-path-to-db-directory>/<db-file-name>","defaultAVSClientSettings":{"locale":"en-US"}},"certifiedSender":{"databaseFilePath":"/<absolute-path-to-db-directory>/<db-file-name>"}}

注意:deviceSerialNumber是你创建的唯一标识符,它不是亚马逊提供的.注意:根据Alexa Voice Service Agreement
包含在仓库库中的音频资料被授权”Alexa Materials”

运行AuthServer

在创建外部构建目录之后,下一步是运行AuthServer从LWA中获取有效的刷新令牌

  • 运行这个命令启动AuthServer:

python AuthServer/AuthServer.py

你应该看到一条指示服务器正在运行的消息

  • 打开你最喜欢的浏览器并跳转到 http://localhost:3000
  • 按照屏幕上的说明进行操作
  • 输入你的凭证后,服务器应该自行终止,Integration/AlexaClientSDKConfig.json中将会填充刷新令牌,在你继续之前,Integration/AlexaClientSDKConfig.json中确保有刷新令牌是重要的

运行单元测试

用于C++的AVS Device SDK单元测试使用Google Test框架,确保已经安装Google Test,然后运行make all test

开始集成测试之前,确保所有单元测试都已经通过

运行Sensory使能单元测试

为了运行Sensory唤醒次检测单元测试,你必须从GitHub下载以下文件并存放在<source dir>/KWD/inputs/SensoryModels确保集成测试正常运行

  • spot-alexa-rpi-31000.snsr

运行KITT.ai使能单元测试

为了运行KITT.ai唤醒次检测单元测试,你必须从GitHub下载以下文件并存放在<source dir>/KWD/inputs/KittAiModels:

  • common.res
  • alexa.umdl - 为了KITT.ai集成测试的正常工作,下载resources/alexa/alexa-avs-sample-app中的alexa.umdl是重要的

运行集成测试

集成测试确保你的构建可以从AVS提出请求和接收响应

  • 所有AVS的请求都需要授权凭证
  • 警报的集成测试需要你的系统是UTC时间

重要:集成测试参考AlexaClientSDKConfig.json文件,你必须创建它,如果你没有完成此操作,参见Create the AlexaClientSDKConfig.json file部分(上面)
运行集成测试使用这个命令:Create the AlexaClientSDKConfig.json file

网络集成测试

如果你的项目是基于GNU/Linux平台(Ubuntu,Debian等)构建的,有一个可选的的集成测试,用于测试慢速网络的ACL(Access Control List: 是路由器和交换机接口的指令列表,用来控制端口进出的数据包),启用这个测试,使用
CMake这个选项

cmake <absolute-path-to-source> -DNETWORK_INTEGRATION_TESTS=ON –DNETWORK_INTERFACE=eth0

注意:网络接口的名称可以使用ifconfig -a查看

重要:这个测试需要root权限.

运行集成测试并使能Sensory

如果该项目是用Sensory唤醒词构建,你必须从GitHub下载以下文件并放在<source dir>/Integration/inputs/SensoryModels保证集成测试正常运行:

  • spot-alexa-rpi-31000.snsr

运行集成测试并使能KITT.ai

如果该项目是用KITT.ai唤醒构建,你必须从Github下载以下文件并放在<source dir>/Integration/inputs/KittAiModels保证集成测试的正常运行:

  • common.res
  • alexa.umdl - 请务必下载资源resources/alexa/alexa-avs-sample-app中的alexa.umdl,确保KITT.ai集成测试的正常运行

运行示例程序

注意: 需要使用PortAudio和GStreamer进行构建

在运行示例程序之前,请注意应用程序需要的两个参数,第一个是必须的,并且是AlexaClientSDKConfig.json的路径,第二个是只有在构建具有唤醒词支持的示例程序才需要,并且是包含唤醒词模型的文件夹路径.

从你的构建目录跳转到SampleApp/src目录,运行这个命令:

TZ=UTC ./SampleApp <REQUIRED-absolute-path-to-config-json> <OPTIONAL-absolute-path-to-wake-word-engine-folder-enclosing-model-files> <OPTIONAL-log-level>

注意: 支持以下日志记录级别,提供最高和最低的日志记录级别: DEBUG9, DEBUG8, DEBUG7, DEBUG6, DEBUG5, DEBUG4, DEBUG3, DEBUG2, DEBUG1, DEBUG0, INFO, WARN, ERROR, and CRITICAL

重要:启动示例应用程序后,你必须等待几秒钟才能加载应用程序,然后再进行第一次请求,这是一个已知问题,将在以后的版本解决.

安装AVS Device SDK

这些说明假定你已经按照说明创建了外部构建目录,运行cmake命令,你必须使用DCMAKE_INSTALL_PREFIX选型指定安装路径.

CMake的示例命令:

cmake <absolute-path-to-source>
-DCMAKE_INSTALL_PREFIX=<absolute-path-to-out-of-source-build>

运行cmake之后,运行make install安装这个SDK

库和头文件将被安装到指定的目录,另外,生成AlexaClientSDK.pc,可以在支持pkg-config.系统上使用

使用SDK构建应用程序,必须为CMake制定安装的前缀路径,例如:

cmake -DCMAKE_PREFIX_PATH=<absolute-path-to-install>  

注意:你可能需要指定rpath将SDK链接到你的应用程序
注意:在你的应用程序,需要将包含路径添加到RapidJSON

用于C++API文档的AVS Device SDK

本地构建API文档,从构建目录运行这个命令:make doc.

资源和指南

  • 逐步说明在*nix系统中优化liburl的大小
  • 逐步说明使用mbed TLS和nghttp2在*nix系统构建libcurl

Linux平台:Alexa语音服务快速入门指南相关推荐

  1. linux svn 拉取代码_svn快速入门指南

    svn是一种版本管理控制工具,可以用于管理公司代码或者项目文档.本文使用svnbucket演示如何创建一个项目,如何添加文件,如何忽略文件,如何上传文件到svn仓库. svnbucket svnbuc ...

  2. Linux 安装并配置 OpenLDAP 新编(1)快速入门指南

    Linux 安装并配置 OpenLDAP 新编(1)快速入门指南 快速入门,仅用于学习和本地开发,不要直接在生产环境中实施! 获取软件 官方的快速入门指南中,2.4-2.6的三个版本都只讲解了源代码编 ...

  3. 从零开始,搭建 AI 音箱 Alexa 语音服务

    本文来自作者 Mike 在 GitChat 上分享 「从零开始,搭建 AI 音箱 Alexa 语音服务」,「阅读原文」查看交流实录. 「文末高能」 编辑 | 哈比 一.概述 生活场景的引入: 物联网的 ...

  4. Spark快速入门指南 – Spark安装与基础使用

    本文转载自Spark快速入门指南 – Spark安装与基础使用 Apache Spark 是一个新兴的大数据处理通用引擎,提供了分布式的内存抽象.Spark 正如其名,最大的特点就是快(Lightni ...

  5. MinIO客户端快速入门指南

    MinIO客户端快速入门指南 MinIO Client (mc)为ls,cat,cp,mirror,diff,find等UNIX命令提供了一种替代方案.它支持文件系统和兼容Amazon S3的云存储服 ...

  6. 打造DIY版Echo:树莓派+ Alexa 语音服务

    原文 https://aws.amazon.com/cn/blogs/china/raspberry-alexa/ 关于本文 本文详细阐述了如何在Java客户端和Node.js服务器上使用和测试Ale ...

  7. 2引擎帮助文档_ANSA快速入门指南中文帮助文档浅析(上)

    作者 | 团长 仿真秀科普作者 首发 | 仿真秀公众号(ID:fangzhenxiu2018) 导读:本文是ANSA入门系列第一篇(后续将会在仿真秀官网或APP同步发布).本系列致力于提供ANSA软件 ...

  8. CI Weekly #21 | iOS 持续集成快速入门指南

    搭建 iOS 持续集成环境要多久?每个 iOSer 都有不同的答案.这次我们整理了 flow.ci 的 iOS 持续集成的相关文档和最佳实践,希望帮你更快地完成构建.更新文档见: flow.ci iO ...

  9. netbeans linux 教程,NetBeans IDE Ruby 快速入门教程

    NetBeans IDE Ruby 快速入门教程 本教程提供了在 NetBeans IDE 中开发 Ruby 应用程序的快速入门指南.本教程介绍如何使用 IDE 的 Ruby 支持来执行一些典型的应用 ...

最新文章

  1. Google发布新的问答语料库,专攻篇章级的NLU问题
  2. 算一串数字的entropy_2020520|一个万年一遇有爱的日子,网友:就是一串数字
  3. 文献学习(part65)--稳健主成分聚类方法的构建及其比较研究
  4. 对基于消息队列的Activiti异步执行器进行基准测试
  5. django学习之路
  6. sohu读博——周忆清
  7. 项目启动报 myql字符集报错的问题
  8. EEPROM存储电路(M24C64芯片)
  9. 查询2021高考成绩位次,2021年江苏高考位次表及高考个人成绩排名查询
  10. 百度爱番番数据分析体系的架构与实践
  11. day05-回归测试和验收测试
  12. ISCC2021——web部分
  13. SDN和NFV的区别
  14. JavaSE编码实操
  15. springboot网上电子书店下载购买系统-图书商城网站961h3-java-ssm二级分类
  16. matlab画椭圆抛物面参数方程,求单叶双曲面和双叶双曲面、椭圆抛物面、双曲抛物面用matlab怎么画或其参数方程?...
  17. unity3d:ugui 长按按钮
  18. MVVMLight Dialog
  19. R语言GD包基于栅格图像实现地理探测器与连续参数的自动离散化
  20. 优维科技招商基金 | 招商基金DevSecOps实践与避坑指南

热门文章

  1. Oracle BBED单个数据文件跳过所有归档恢复
  2. 手机和计算机错误怎么办,手机、电脑进水了要怎么办?三种常见错误!绝大多数人都这么干!...
  3. 代码Review CheckList
  4. 自动化测试优势和劣势
  5. Yeslab华为安全HCIE七门之--防火墙高级技术(17篇)
  6. 从零开始的嵌入式系统开发学习Day1(初识linux)
  7. 网站制作开发的步骤和方法
  8. 【coding】回溯
  9. 天气API接口大全(nohacks.cn 收集整理)
  10. centos7/8下yum/dnf下载的rpm包保存到本地