QT聊天机器人(百度语音+青云客API)

本文详细介绍了一款基于图灵和青云客API的文字与语音聊天机器人的设计与实现过程,包括前期准备、功能开发、代码实现及可改进之处。

代码已上传到github: https://github.com/HMY777/RobotChat

效果

  1. 运行界面: 请无视这个简陋的布局
    在这里插入图片描述

  2. 文字聊天:
    在这里插入图片描述
    在这里插入图片描述

  3. 语音聊天:
    为了压缩GIF大小已经裁剪过,实际上一次对话没有这么快
    在这里插入图片描述

前期准备

  • 图灵机器人100条/天,根本不够聊啊,换成青云客API,无限制
  • 接入用百度语音,方便,快
    了解一下QT HTTP,post,get操作就行了
    ?
    青云客API文档
    百度语音API文档

设计

因为是计网的课设要赶时间所以我做得很简陋(其实是菜),所有操作都在MainWindow.cpp里面完成,一共就这几个类
在这里插入图片描述

功能

  • 文字聊天功能
    这个只涉及到图灵的API,具体流程是

    • 输入文本,按发送按钮
    • 槽函数里面发送get命令来获取请求(官方
  • 语音聊天功能

    • 录音
    • 百度API识别语音获得文本
    • 文本发送给图灵机器人获得回答文本
    • 显示回答文本和调用百度语音API播放音频

流程图,功能之后跟的是函数名。在这里插入图片描述
在这里插入图片描述

下面是代码,有一些是get比较适合,有一些是post比较适合,视情况采用就好。
? HTTP GET POST区别

?代码

文字聊天代码

青云客api get就好

//直接聊天
void MainWindow::on_SendBtn_clicked()
{
   
   

    QString Url="http://api.qingyunke.com/api.php?key=free&appid=0&msg="+ui->InputTextEdit->toPlainText();
    QUrl url;
    url.setUrl(Url);
    QNetworkRequest request(url);
    QNetworkAccessManager *manager=new QNetworkAccessManager(this);
    connect(manager,SIGNAL(finished(QNetworkReply*)),this,SLOT(Tuling_replyFinish(QNetworkReply*)));
    manager->get(request);
}

相应的槽函数,想做的好一点可以多加几个if处理异常

//解析图灵API返回的json数据
void MainWindow::Tuling_replyFinish(QNetworkReply *reply)
{
   
   

    QString data=reply->readAll();//读取回话信息
    qDebug()<<"这是返回的结果 "+data;
    QJsonParseError json_error;
    //一定要toUtf8 否则会出错!
    QJsonDocument json=QJsonDocument::fromJson(data.toUtf8(),&json_error);
    //判断有没有错
    if(json_error.error==QJsonParseError::NoError)
    {
   
   
        if(json.isObject())
        {
   
   
            QJsonObject jsonObj=json.object();
            //取到text内容
            if(jsonObj.contains("content"))
            {
   
   
                qDebug()<<"成功获取text";
                QJsonValue text_value=jsonObj.take("content");
                if(text_value.isString())
                {
   
   
                    tuling_get_ans=text_value.toVariant().toString();
                    tuling_get_ans.replace("br","\n");
                    qDebug()<<"!!!返回的ans:"<<tuling_get_ans;
                }
            }
        }
    }
    reply->deleteLater();
    ui->OutputTextEdit->setText(tuling_get_ans);

}

语音聊天代码

一些需要用到的声明和初始化

	//用于播放音频
    QMediaPlayer* media_player;
    //用于设置audio_input
    QAudioDeviceInfo SpeechCurrentDevice;
    //用于录音,数据存储在JsonBuffer里面
    QAudioInput* audio_input=NULL;
    QBuffer* JsonBuffer=NULL;
    
void MainWindow::AudioInit()
{
   
   
    const auto &&availableDevices = QAudioDeviceInfo::availableDevices(
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值