项目:智能语音对话机器人

技术点:

C++STL
● http第三方库
● 图灵机器人
百度语音识别和语音识别
● Linux系统/网络编程
● 各种第三方库和第三方工具的安装与使用

项目简介

  • 使用C++编写一个智能AI对话和语音命令执行的语音管理工具,其中可执行命令支持配置。
  • 主要采用C++进程编写,当程序启动后,加载配置文件,启动录音功能进行录音,调用百度语音识别平台对所录音文件进行识别;再对所识别到的文字进行判断,是命令还是普通对话,命令则执行系统命令执行模块;普通对话则交给图灵机器人进行交流,所返回的文字交给百度语音合成平台,启动播放功能,则成功进行对话。

准备工作

  • 使用图灵机器人实现对话,需要注册图灵机器人,拥有一个属于自己的机器人
  • 使用百度语音识别和语音合成,同样也需要注册,在之后的使用中,我们选择的技术文档为C++SDK,需要下载百度C++语音识别SDK
  • 安装jsoncpp、 安装openssl、安装libcurl(需要支持https)
  • 还要准备录音和播放工具,在我的Centos 7上有系统自带的录音工具arecord,安装vlc/cvlc播放器

编码过程

● 先建立项目目录,创建工程文件,引入百度语音识别SDK

#mkdir Boyfriend 
#ls build.sh

  • 构建项目的shell脚本,简单实现 command.etc
  • 语音命令配置文件 Boyfriend.cc
  • 源文件 Boyfriend.hpp
  • 核心代码 Makefile speech
  • 百度语音识别SDK temp_file
  • 保存临时语音文件目录

核心代码

LInux语音AI相关代码

  #Boyfriend.hpp
  //1、创建相关类,包含相关头文件 
   #pragma once
   #include <map>
   #include <iostream>
   #include <cstdio>
   #include <sstream>
   #include <memory>
   #include <fstream>
   #include <unistd.h>
   #include <stdlib.h>
   #include <unordered_map>
   #include <json/json.h>
   #include <string>
   #include <pthread.h>
   #include "base/http.h"
   #include "speech.h"
  
   //#define TTS_PATH "temp_file/tts.mp3"
   #define TTS_PATH "temp_file/tts.wav"
   #define ASR_PATH "temp_file/asr.wav"
   #define CMD_ETC "command.etc"
   #define LOG "log.txt"
  
  class Util{
   
      private:
          static pthread_t id;
      public:
         static bool Exec(std::string command, bool is_print)
          {
   
            if(!is_print){
   
                  command += ">/dev/null 2>&1";
                  }
             FILE *fp = popen(command.c_str(), "r");
             if(nullptr == fp){
   
                  std::cerr << "popen exec \'" << command << "\' Error" << std::endl;
                  return false;
             }
                  if(is_print){
   
                          char ch;
                          while(fread(&ch,1,1,fp) >0){
   
                                  fwrite(&ch,1,1,stdout);
                          }
                  }
                  pclose(fp);
                  return true;
          }
          static void *ThreadRun(void *arg)
          {
   
             const char *tips = (char*)arg;
             int i = 0;
             char bar[103] = {
   0};
             const char *lable = "|/-\\";
             for(; i<=50;i++){
   
                  printf("%s[%-51s][%d%%][%c]\r",tips,bar,i*2,lable[i%4]);
                  fflush(stdout);
                  bar[i] = '=';
                  bar[i+1] = '>';
                  //bar[i+2] = 0;
                  usleep(49000*2);
             }
             printf("\n");
          }
          static void PrintStart(std::string tips)
          {
   
             pthread_create(&id,NULL,ThreadRun,(void*)tips.c_str());
          }
          static void PrintEnd()
          {
   
             pthread_cancel(id);
          }
  };
  pthread_t Util::id;
  //2、采用图灵机器人,进行智能对话 
  class Robot{
   
     private:
        std::string url;
        std::string api_key;
        std::string user_id;
        aip::HttpClient client;
      private:
             bool I
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值