这是一个通过图令平台的人机交互功能,结合百度AI平台的语音识别和语音合成技术,使用C++在Linux下编写的可以智能AI对话和执行语音命令的语音管理工具。你可以直接语音和我的智能机器人管家聊天,也可以让它给你讲笑话,也可以让它帮你执行一些基本的Linux命令,或者帮你启动一些Linux下的应用。
PS:播放电影,查询天气,查看路线,查看个人健康状况,自动回复手机消息等等功能还在开发中,关注博主,敬请期待…
项目技术点
- C++ STL
- HTTP 第三方库
- 图灵机器人
- 百度语音识别和语音合成
- Linux 系统 / 网络编程
- 各种各种第三方库和第三方工具的安装与使用
项目演示
项目开发过程
1. 建立项目目录,创建工程目录,引入百度语音识别SDK
2. 学习使用jsoncpp
- 主要使用【StreamWriterBuilder,StreamWriter,CharReaderBuilder,CharReader ,write函数,parse函数,Json::Value】
- 下面是构建json串的一个示例以及参数说明:
std::string Message2Json(std::string &Wmsg)
{
Json::Value root; //相当于一个万能容器,可存放任意类型
Json::StreamWriterBuilder wb; //可以向输入流中写文本的对象
std::ostringstream os; //输入流的缓冲区
root["reqType"]=0; //输入类型为文本
Json::Value item1;
Json::Value item1_1;
item1_1["text"]=Wmsg;
item1["inputText"]=item1_1;
root["perception"]=item1; //输入的信息
Json::Value item2;
item2["apiKey"]=apiKey;
item2["userId"]=userID;
root["userInfo"]=item2; //用户相关参数
std::unique_ptr<Json::StreamWriter> sw(wb.newStreamWriter()); //指向对象的智能指针
sw->write(root,&os); //向输入流缓冲区中写入root类型的数据
std::string ret=os.str(); //提取输入流缓冲区内数据
return ret; }
通过文档的研读,我发现json的序列化与反序列化就是解析json串与构建json串的过程,并且json还支持嵌套,如json里面包含“json”,甚至json还包含”json数组“等
3. 设计Baymax中的相关类
我的管家运行过程:
4. 图灵机器人核心代码实现
要实现与图灵机器人进行智能对话我们就要完成以下几个功能:
std::string Talk(std::string &msg)
{
std::string json=Message2Json(msg); //将我们的文本构造成json串
std::string response=RequestRobot(json); //用http请求机器人得到回复
std::string echo=Json2Message(response); //解析得到的json串
return echo; //返回机器人的文本回复
}
5. 调用逻辑
#include "Baymax.hpp"
using namespace std;
int main() {
Baymax *bm = new Baymax;
bm->Run();
return 0;
}
6. command.etc 命令配置文件
7. Makefile 文件
8. 项目完整文件