本文共 4098 字,大约阅读时间需要 13 分钟。
随着AI技术的进步,智能语音开始将人机交互从手+眼睛的传统模式中解放出来。带给人们更便捷、更风趣、更有人情味的体验,让被操作对象变得不再只是一个死板的工具,而更像是一个有生命的助理。“帮我打开空调”,“明天上班需要带伞吗”,“帮我冲100块钱话费”…在万物互联的时代,你的所有需求只需要一句话便能实现。
AliOS Things 集成的Link Voice SDK即可实现智能语音交互。阿里智能语音服务为设备提供语音交互能力、丰富的音乐内容、智能家居控制等,并可进行专有设备技能定制(如:语音操控跑步机、按摩椅等设备)。包括:
设备接入阿里语音服务,需要集成Alink SDK和Link-Voice SDK,其中Alink SDK为设备提供接入阿里IoT平台的连接、账号体系、配网、OTA等能力,而Link-Voice SDK为设备提供阿里智能语音服务。设备首先要集成了Alink SDK成为SDS平台的一个设备,才能通过集成Link-Voice SDK使用阿里智能语音服务。
Link-Voice SDK除了依赖Alink为设备完成平台接入设备管理外,还需要表格所列模块完成相应工作。其中websockets用来进行语音数据的交互;opus完成语音录制的PCM格式到opus格式的转换(服务端只接收opus格式);cjson用来做json解析;mbedtls为alink和websockets的底层连接进行加密,为其数据传输提供安全保障。而目前AliOS Things已完成以上表格所有模块的移植适配工作并将其集成进来,所以我们直接使用AliOS Things便可完成愉快的智能语音开发。主mcu性能建议:
简化缓冲处理等细节:
按理满足功能集成章节性能要求,并带音频录制及播放功能的开发板即可。前提是需要完成AliOS Tings的移植适配工作。本文以全志xr871evb(已完成OS适配)为例进行介绍。
本平台资源:先搭建AliOS开发环境(以linux为例):
AliOS-Things-Linux-Environment-Setup然后从github阿里官方开源库下载最新版本的AliOS Things源码():
以linux下开发为例:git clone git@github.com:alibaba/AliOS-Things.git
切换到主分支:
git checkout master
建议再在主分支上新建一个自己的开发分支:
git checkout –b dev-xxx(yourname):
到目前为止环境也安装好了,代码也准备完毕,只待编译及烧录测试。
编译link-voice测试例程:aos make linkvoiceapp@xr871evb xr871=1
代码烧入:
cd platform/mcu/xr871/tools/
修改串口配置:
vim settings.ini
将串口改成你板子的串口号,可ls /dev/tty*查看,保存退出。
代码烧写,先将全志开发板启动选择拨码开关拨至NO位置,如同所示:然后执行./phoenixMC_linux 开始进行代码烧写,烧写完成后再将拨码开关拨回靠串口位置,重启。
打开minicom或其他串口工具监视设备输入信息,波特率115200。
功能演示:初次上电后先进行配网:netmgr connect ssid psswd
其中ssid和psswd分别替换为你无线网络名及密码。
由于没有加本地关键词识别功能,所以现在没次对话需要按键触发。根据终端提示,待网络连接后,出现以下提示时:按按键2(AK2)触发语音识别功能。此时对着开发板说话,语音数据被编码、上传到云端、识别成功后返回相应信息,识别失败亦有相应提示。示例:
1:明天上班需要带伞吗?2.给我讲个鬼故事。3.推荐一部悬疑电影。4.把空调打开。以下为一个小的演示视频:
int pal_init(const struct pal_config *config);
config
结构体向SDK传递必须的参数void pal_destroy();
int pal_version();
void pal_set_log_level(int level);
level
为SDK的日志级别void pal_set_env(int env);
env
为SDK的环境int pal_notify_msg(const char *msg);
Link_Voice_SDK_播控协议_v1.0.0.xlsx
定义的json格式上报给SDK与上层应用同步状态。msg
为厂商播放器需要向SDK传递的事件消息int pal_post_alink_msg(const char *msg);
msg
为厂商需要通过SDK透传给ALink进行上报的消息,格式按照ALink定义的消息格式int pal_asr_start();
int pal_asr_send_buffer(const char *buffer, int buffer_len);
buffer
语音数据,buffer_len
语音数据长度,字节struct pal_rec_result* pal_asr_stop();
void pal_asr_stop_async(pal_asr_callback callback, void *user);
callback
注册的回调函数,用于返回语音识别结果;user
用户自定义指针,在callback
中会回传给用户void pal_asr_cancel();
void pal_rec_result_destroy(struct pal_rec_result *result);
result
需要销毁的结果struct pal_rec_result* pal_get_tts(const char *text);
text
需要转换的文本关于AliOS Things更多信息,请参考
关于Link Voice的更多信息,请参考转载地址:http://jqkix.baihongyu.com/