AI语音助手

一、项目简介

ai语音管家接入了图灵机器人,利用百度的语音识别和语音合成以及各种第三方库实现了和机器人的智能对话,

二、应用技术

C++STL,cmake,图灵机器人,百度语音识别和语音合成,HTTP第三方库,jsoncpp,libcurl,centos7录音工具和vlc播放工具,Linux系统/网络编程

三、用到的工具

四、项目框架图

在这里插入图片描述

  • 录音:利用Centos自带的录音工具arecord
  • 语音识别接口(ASR):将录制的语音文件进行识别,识别后的信息以json串的形式存储,最后再提取出语音信息,以字符串的方式打印。
  • 加载配置文件(Exec接口):配置文件中加入Linux的常见命令,识别出来的语音文件若是命令,就调Exec将其执行。
  • 图灵机器人(Talk接口):主要将用户录制的音频识别出来之后转为json串发给图灵机器人,然后图灵机器人将信息转为字符串响应给用户,总之就是序列化----->request----->反序列化
  • 语音合成(TTL):将图灵机器人响应回来的信息转成语音,利用vlc工具播放出来。

五、项目成果

在这里插入图片描述

六、项目部分代码

  • 项目运行核心逻辑
 void Run()
        {
        //将错误和调试信息写入文件中
#ifdef _LOG_
            int fd = open(LOG, O_WRONLY|O_CREAT, 0644);
            if(fd < 0)
            {
                return;
            }
            dup2(fd,2);
#endif
            fflush(stdout);
            volatile bool quit = false;
            while(!quit)
            {
                std::cout << "Record ... " << std::endl;
                Util::PrintStart("录音中 ");
                if(this->Record())
                {
                    //语音识别
                    std::string message;
                    if(sr.ASR(ASR_PATH, message))
                    {
                        //1、判断是不是命令
                        std::string cmd = "";
                        if(IsCommands(message,cmd))
                        {
                            std::cout << "[zlj@localhost Jarvis]" << cmd << std::endl;
                            Util::Exec(cmd, true);
                            //继续下一次
                            continue;
                        }
                        //2、交给图图
                        std::cout << "波妞# " << message << std::endl;
                        if(message == "明天见。")
                        {
                            std::string quit_message = "goodbye";
                            std::cout << "波妞# " << quit_message << std::endl;
                            exit(0);
                        }
                        std::string echo = rb.Talk(message);
                        if(sr.TTS(TTS_PATH, echo))
                        {
                            //合成成功,播放
                            this->Play();
                        }
                        std::cout << "宗介# " << echo << std::endl;
                    }
                    else
                    {
                        std::cerr << "ASR  error" << std::endl;
                    }
                }
                else
                {
                    std::cout << "Record error" << std::endl;
                }
                Util::PrintEnd();
            }
        }
  • 工具类的Exec函数执行命令
 static bool Exec(std::string command, bool Is_Print)
        {
            FILE* fp = popen(command.c_str(), "r");
            if(fp == nullptr)
            {
                std::cerr << "popen error" << std::endl;
                return false;
            }
            if(Is_Print == true)
            {
                char c;
                while(fread(&c, 1, 1, fp)>0)
                {
                    fwrite(&c, 1, 1, stdout);
                }
            }
            pclose(fp);
            return true;
        }
  • 配置文件
查看当前目录:pwd
创建目录:mkdir
关闭防火墙:systemctl stop firewalld
打开防火墙:systemctl start firewalld
  • Makefile
CC=g++
bin=TUTU
src=TUTU.cc
INCLUDE=-Ispeech/
LIB=-ljsoncpp -lcurl -lcrypto -lpthread
FLAGS=-D_LOG_

$(bin):$(src)
	$(CC) -o $@ $^ $(FLAGS) $(INCLUDE) $(LIB)
.PHONY:clean
clean:
	rm -f $(bin)

关于语音识别和语音合成接口的使用可参考C++SDK文档!!!

七、总结

项目源码:https://github.com/sunshineyam/Linux/tree/master/Jarvis
ai语音管家这个项目代码没有很难,对我而言比较陌生的是json串的序列化和反序列化,不过仔细研读也能解决啦,比较麻烦的是需要借助很多第三方平台,使用的工具比较多。但是还是比较有意思的,而且可移植性较高,有兴趣的大佬可以和我一起扩展鸭!

  • 3
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值