一、概述
语音交互技术的发展,给我们的生活带来了很大的改变,智能音箱就是其典型的应用产品,比如现在常见的小爱、小度、天猫精灵等智能音箱。我们通过与智能音箱对话,就可以实现听歌、听书、听新闻等等功能。
今天,我们就介绍下以EAIDK-310开发套件为核心,“制作”一款智能音箱,通过语音交互,让它给我们唱歌、读书、讲段子。
二、产品介绍
EAIDK(Embedded Artificial Intelligence Development Kit)- 嵌入式人工智能开发套件,是全球首个采用Arm架构的人工智能开发平台,是OPEN AI LAB专为 AI 开发者精心打造,面向边缘计算的人工智能开发套件。硬件平台具备语音、视觉等传感器数据采集能力,及适用于多场景的运动控制接口;智能软件平台支持视觉处理与分析、语音识别、语义分析、SLAM等应用的基础平台和主流开源算法,满足端侧AI教育、算法应用开发、产品原型开发验证等需求。
EAIDK-310作为EAIDK产品系列中的一款套件,该套件硬件平台使用的是含有4核A53 CPU的高性能Arm SoC(瑞芯微rk3228H),通过搭载OPEN AI LAB开发的嵌入式深度学习框架Tengine,为AI应用提供简洁、高效、统一的API接口,加速终端AI产品的场景化应用落地实现。同时,使用自建的源服务器,便于用户快速上手使用。
EAIDK平台,配置专有更新源文档内容服务,该源服务器支持Tengine/Blade CV以及其他标准第三方软件安装和更新。
EAIDK-310 硬件规格
EAIDK-310 软件规格
实现本案例除了需要一块EAIDK-310核心板,我们还需要一个usb麦克风阵列和一个usb音箱 。麦克风阵列用于音频采集,usb音箱用于音频播放。
本案例中我们使用的是4mic麦克风线型阵列SoundPi linear麦克风模组,购买链接(https://dwz.cn/67hqlbFD)。
三、操作步骤
3.1 下载源码
首先我们从下面链接中下载源码包Azero_SDK_for_Linux.tar.gz
ftp://ftp.eaidk.net/EAIDK310_Source/SoundAI/
把下载好的源码包拷贝到U盘,把U盘插入EAIDK310设备usb口,将源码包拷贝到板子目录下
cp /run/media/openailab/Azero_SDK_for_Linux.tar.gz ~
解压源码包Azero_SDK_for_Linux.tar.gz
,然后进入Azero_SDK_for_Linux
目录
tar -xzvf Azero_SDK_for_Linux.tar.gz
cd Azero_SDK_for_Linux/
可以看到,SDK工程结构如下
|-- sai_config : 配置文件、唤醒模型目录
|-- include : Azero SDK的.h文件
|-- link-libs : 编译示例代码所需的依赖库,目录中分版本放置。
|-- lib : Azero SDK库
|-- libvlc : SDK依赖的播放器库,默认支持的播放器为VLC
|-- 其它 :其它类型的播放器,视版本而定
|-- src : 示例代码
|-- main.cpp
|-- toolchain-cmake :cmake交叉编译配置文件
3.2 修改文件参数
下载源码后,我们需要根据我们设备实际情况修改某些文件参数,如麦克风节点、比特率等。
首先将麦克风通过USB接口连接到EAIDK-310开发套件
此时可以在开发套件上用命令可查询到麦克风线性阵列的设备节点,结果如下:
arecord -l
从上图可知,card2
就是我们的usb麦克风阵列,设备节点为2,0
修改代码Azero_SDK_for_Linux/src/main.cpp
的麦克风数量mic_num
和实际节点号*hw
,此麦克风比特率默认16000。
void* load_plugin_basex() {
void *handle;
int mic_num = 4;
int board_num = 8;
int frame = 16*16;
const char *hw = "hw:2,0";
char chmap[16] = "0,1,2,3,4,5,6,7";
handle = SaiMicBaseX_Init(board_num, mic_num, frame, hw);
SaiMicBaseX_SetBit(handle,16);
SaiMicBaseX_SetSampleRate(handle,16000);
SaiMicBaseX_SetMicShiftBits(handle,16);
SaiMicBaseX_SetRefShiftBits(handle,16);
SaiMicBaseX_SetPeroidSize(handle,512);
SaiMicBaseX_SetBufferSize(handle,2048);
注:在修改上述参数之前,我们可以先使用arecord
进行录音测试,看是否能够正常获取音频数据,以此为依据来确认我们mic的具体参数
arecord -Dhw:2,0 -d 10 -f S16_LE -r 16000 -c 8 -t wav test.wav
参数解析
-D 指定了录音设备,2,0
是card 2 device 0
的意思
-d 指定录音的时长,单位时秒
-f 指定录音格式
-r 指定了采样率,单位时Hz
-c 指定channel 个数
-t 指定生成的文件格式
拷贝资源及配置文件到/data
目录
sudo mkdir -p /data
sudo chmod 777 /data
sudo cp sai_config/arm/* /data -rf
设置环境变量,指定动态链接库路径
export LD_LIBRARY_PATH=./link-libs/aarch64-linux-gnu/lib/
3.3 编译运行
根据麦克风实际情况修改完上述参数后,即可执行编译
./run.sh aarch64-gnu
编译成功的话会显示如下
执行如下命令来启动软件
./sai_client
启动软件之后,在联网的情况下,通过喊 “小艺小艺
”来唤醒设备,然后即可进行语音交互。将 usb音箱接到EAIDK-310开发套件上,即可听到小艺的回应。
到这里,我们就可以与小艺进行对话了。除常见的聊天、新闻、广播、天气、音乐等功能外,还可以查百科、查路况、听相声、做算术等,有几十项实用、好玩的技能,内容还是比较丰富的,可以满足简单的娱乐需求。
3.4 补充
main.cpp
软件初始化时有三个重要参数:clientId
、productId
以及device_SN
(Device Serial Number)。其中,clientId
、productId
用以标识产品类别,device_SN
用以标识个体设备。
//config customer info
const char *client_ID = "xxxxxxxx"; //set to your own client
const char *product_ID = "xxxxxxxx"; //set your owner product ID
const char *device_SN = "xxxxxxxx"; //set the unique device SN.
azero_set_customer_info(client_ID,product_ID,device_SN);
此处软件已经配置了默认的ID ,所以上面我们跳过了这个步骤;如需使用自己创建的技能,可以参考https://github.com/sai-azero/Azero_SDK_for_Linux的《示例运行》,注册、填写自己的clientId
、productId
以及device_SN
等参数,重新编译运行即可。
关于麦克风阵列,此处使用的是声智科技的4mic线型阵列,另外也可以使用声智科技的6mic环型阵列,如下图
四、总结此案例可以帮助大家在EAIDK-310开发套件上完成SoundAI Azero语音交互系统示例的部署和运行。
通过此案例,EAIDK-310摇身一变,成为了我们所熟知的智能音箱。智能语音助手是存在于智能音箱中的虚拟形象,当你无聊的时候,或者需要提神醒脑的时候,可以试着问它一些“有趣的问题”,或许能够得到一些“有趣的回答 ”。
如有疑问或想要了解更多关于EAIDK开发平台方面的内容,欢迎加入EAIDK开发者大本营,QQ群:625546458。