說到機器人助手,你會想到誰?我第一反應就會脫口而出:Baymax !!
博主初看《超能陸戰隊》這部電影的時候,就被這位充滿智慧且無所不能的“男人” 俘獲了少女心。Baymax雖然是個體型胖嘟嘟的充氣充電型機器人,但卻大家被稱爲“守護型暖男”。原因在於它不僅充當着“私人健康顧問”的角色,還可以陪主人聊天,給主人講笑話,甚至可以照顧主人的情緒。終於經過我不斷的學習和探索,我也擁有了一個屬於我自己的Baymax!!雖然現在我只是實現了部分,但是萬事開頭難,我相信有了現在的基礎,只要以後我繼續不斷的學習,我一定能將它改善成一個完美的“男神”。
項目簡介
這是一個通過圖令平臺的人機交互功能,結合百度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. 項目完整文件
完整的項目文件參照我的GitHub:https://github.com/girl-6/Linux/tree/master/Baymax
關於項目的測試內容參照博客:項目測試