一、 概述
智能语音设备在生活中越来越常见,如智能手机(Cortana,Siri,Ok Google)、智能家居设备(Google Home,小米AI音箱),交互式语音应答设备(银行,应答机),语音机器人(电话机器人、客服机器人、电销机器人)。
众多语音交互设备采用同样的流程如下图:语音识别把人发出的声音转换为文字,经过自然语音处理得到意图,再输入数据库获取回答的文字,经过语音合成就能实现语音对话, 而后续这些功能可通过调用API来实现。
API(Application Programming Interface,应用程序接口)是一些预先定义的函数,或指软件系统不同组成部分衔接的约定。目的是提供应用程序与开发人员基于某软件或硬件得以访问一组例程的能力,而又无需访问原码,或理解内部工作机制的细节。而图灵机器人和百度人工智能平台为我们提供了丰富的免费接口。
二、 系统架构
流程在树莓派上的体现是这样的,把录音的对话发给百度语音识别,它返回文字再发给图灵机器人,图灵机器人比对自己的数据库,再返回回答的文本,把文本经过语音合成后保存到本地,然后把它播放出来,整个流程是线性流程
物件清单(BOM):
- USB摄像头———1
- 树莓派—————1
- 音响——————1
三、 开发流程
1.准备对应应用程序编程接口API
注册图灵机器人账号和百度语音识别账号获取API KEY
- 百度大脑:https://ai.baidu.com/
- 图灵机器人:http://www.turingapi.com/
2. 测试树莓派录音功能
采用树莓派自带的arecord来录音,16000的采样频率,保存为test.wav
arecord -D "plughw:1" -f S16_LE -r 16000 test.wav
其中,-D参数后接录制设备,连接麦克风后,树莓派上有2个设备:内部设备和外部usb设备,plughw:1代表使用外部设备。-f表示录制的格式,-r表示声音采样频率。由于后面提到的百度语音识别对音频文件格式是有要求的,我们需要录制成符合要求的格式。另外,在这里我没有指定录制的时间,它会一直录制下去,直到用户按下ctrl-c。录制后的音频文件保存为test.wav。
若耳机没有声音,则:
sudo raspi-config
找到advanced options>audio
设置成3.5mm接口
3. 调用百度语音识别的API进行语音识别
流程基本就是获取token,把需要识别的语音信息、语音数据、token等发送给百度的语音识别服务器,就能获取到对应的文字。
文档见:https://ai.baidu.com/ai-doc/SPEECH/6k38lxp0r
源码:asr.py
此部分为百度注册API。
client_id = "Qv4q0sKRNYLniDgUdA*****"
client_secret = "tX0SYY01H8sR3jhcl4*****"
# coding: utf-8
import urllib.request
import json
import base64
import sys
def get_access_token():
url = "https://openapi.baidu.com/oauth/2.0/token"
grant_type = "client_credentials"
client_id = "Qv4q0sKRNYLniDgUdA*****"
client_secret = "tX0SYY01H8sR3jhcl4*****"
url = url + "?" + "grant_type=" + grant_type + "&" + "client_id="