本文是树莓派视频遥控小车 + iOS / Android / web应用的续篇,在前文的基础上加入聊天的功能,支持多种语言的文字和语音聊天。语音识别、翻译和语义识别借助微软云的认知服务 (Azure Cognitive Services)。当前支持的聊天内容主要是指令和回复,可按需要自行添加。代码请见:github.com/shaqian/Cognitive-Bot/
演示
通过app与树莓派聊天。文字聊天可用任意语言,自动识别语种。语音聊天默认为英文,使用其他语言需要事先指定。
网页应用同时加入了图像识别,可简单描述图像内容,人脸识别会显示年纪和性别,也是用的微软认知服务。
聊天过程实现
用户语音 ==1.语音识别==> 文字 ==2.语种识别==> ==3.翻译==> 英文 ==4.语义识别==> 意图 ==5.反应==> 英文回复 ==6.翻译==> 本地化回复 ==7.语音合成==> 语音回复
因为用户输入支持多种语言,所以在语义识别之前统一转换为英语再识别,这样可以减少语义识别的工作量,缺点是调用 API 较多有时会有延迟。
具体分步来说:
1. 语言识别:使用微软 Speech Translation API 将用户输入的音频转化为文字。如果输入为文字则跳过此步。
2. 语种识别:使用微软 Translation Text API 识别用户输入文字的语种,为后面的本地化回复做准备。
3. 翻译:使用微软 Translation Text API 将文本翻译为英语,为语义识别做准备。
4. 语义识别:使用微软 Language Understanding Intelligent Service (LUIS) 识别文本的语义。本项目使用的意图已经定义在 GitHub repo 下的 luis.json 中,在 luis.ai 创建项目,导入 json 文件,训练并发布后即可使用。
5. 反应:上一步语义识别后得到用户的意图,后台程序根据意图做出不同的反应。比如,用户输入为“打开空调”,LUIS 返回的意图为“Aircon.On”,小车会根据意图做出反应:i. 发送空调开机信号,ii. 通知用户空调已开启。
6. 翻译:上一步生成的默认回复为英文,使用微软 Translation Text API 翻译为用户的本地语言文本。
7. 语音合成:使用微软 Speech API 将文本转化为语音。
创建服务并使用
以上提到的微软云服务均有免费版,有微软云订阅的话可以在这里了解如何创建,没有订阅可以看一下试用。
服务创建后需填写 CognitiveBotServer 文件夹下 config.js 中的参数:
1. LUIS
登录https://www.luis.ai/applications,点击 Import App,选择 luis.json,点击 Import。
发布应用的步骤请参考:https://docs.microsoft.com/en-us/azure/cognitive-services/luis/publishapp
取消勾选 Add verbose flag,复制 Endpoint url,粘贴至 config.js 的 luisURL。
2. Translator Speech API
复制 key 粘贴至 config.js 的 sttSubKey。
3. Translator Text API
复制 key 粘贴至 config.js 的 transSubKey。
4. Bing Speech API
复制 key 粘贴至 config.js 的ttsSubKey。
5. Computer Vision API
复制 key 粘贴至 config.js 的 visionKey。
使用网页应用
此部分与前文树莓派视频遥控小车 + iOS / Android / web应用基本一样。
1. 运行cd ~/Cognitive-Bot/CognitiveBotServer;npm install安装依赖。
2. 开启 HLS 直播视频流:
cd ~/picam
./make_dirs.sh
./picam -o /run/shm/hls --vflip --hflip
3. 开启网页应用:
cd ~/Cognitive-Bot/CognitiveBotServer
sudo npm start
4. 在浏览器中打开http[s]://[IP-of-Raspberry-Pi] (将 [IP-of-Raspberry-Pi] 替换为实际的网址,比如:192.168.1.16)。
使用移动应用
此部分与前文树莓派视频遥控小车 + iOS / Android / web应用基本一样。
iOS
i. 编译并在模拟器中运行:
cd Cognitive-Bot/CognitiveBotApp
npm install
npm run ios
ii. 在设备上运行:
参考 React Native 官方文档的Running your app on iOS devices。
Android
i. 编译并在模拟器中运行应用:
cd Cognitive-Bot/CognitiveBotApp
npm install
npm run android
ii. 在设备上运行:
参考 React Native 官方文档的Running your app on Android devices。
或者直接使用repo中的 CognitiveBot.apk。