模块一:准备工作:进入语音识别官网,创建账号,使用语音识别应用,记下APIKey和SecretKey,并且别忘了领取免费额度(*很关键)并且了解百度语音翻译的通信过程
模块二:搭建ui界面 录制音频文件
模块三:搭建一个Http模块 第一次访问 获取access_token
模块四:再次调用http 把音频文件和access_token都发给官方 解析服务器反馈的结果
免费申请语音应用
百度语音官方文档地址:
百度语音官方文档地址:
1、创建账号,使用语音识别
进入百度语音识别官网申请账号,然后添加语音识别应用,记下框住的id 和 secret 并且领取免费额度

2、整个访问的通信流程如下:第一步发给服务器id 和secret ,第二步发音频和认证码

3、搭建ui界面 一个翻译的按钮pushButton1 一个清除按钮pushButton2 还有一个label显示翻译结果 还有一个QTextEdit 写上名字。
pushButton1转到槽的选项是press 和 released而不是click 这和之前不同

4、主界面头文件(.h)
#ifndef WIDGET_H
#define WIDGET_H
#include
#include"audio.h"
#include"speech.h"
QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACE
class Widget : public QWidget
{
Q_OBJECT
public:
Widget(QWidget *parent = nullptr);
~Widget();
private slots:
void on_pushButton_pressed();
void on_pushButton_released();
void on_clearButton_clicked();
private:
Ui::Widget *ui;
Audio *audio;
};
#endif
5、主界面===================
源代码
#include "widget.h"
#include "ui_widget.h"
Widget::Widget(QWidget *parent)
: QWidget(parent)
, ui(new Ui::Widget)
{
ui->setupUi(this);
ui->pushButton->setText("按住说话");
ui->label->setText("语音识别");
ui->label->move(this->width()/2,0);
}
Widget::~Widget()
{
delete ui;
}
void Widget::on_pushButton_pressed()
{
ui->pushButton->setText("开始识别");
audio = new Audio;
audio->startAudio("D:\\1.pcm");
}
void Widget::on_pushButton_released()
{
audio->stopAudio();
ui->pushButton->setText("正在识别");
Speech m_speech;
QString text = m_speech.speechIdentify("D:\\1.pcm");
ui->textEdit->setText(text);
ui->pushButton->setText("按住说话");
}
void Widget::on_clearButton_clicked()
{
ui->textEdit->clear();
}
6、audio录音 项目文件(.pro)中加 QT += multiaudio
头文件
#ifndef AUDIO_H
#define AUDIO_H
#include
#include
#include
#include
#include
#include
#include
class Audio : public QObject
{
Q_OBJECT
public:
explicit Audio(QObject *parent = nullptr);
void startAudio(QString fileName);
void stopAudio();
signals:
public slots:
private:
QAudioInput * m_audio;
QFile *m_file;
};
#endif
Audio录音源文件
//注意生成的格式:翻阅百度语音官方要求的音频格式,如下图:(其实可以直接看例子,参数说明有点看不懂、、、、)
主要是采样频率和语音文件格式
[En]
Mainly sampling frequency and voice file format

#include "audio.h"
Audio::Audio(QObject *parent) : QObject(parent)
{
}
void Audio::startAudio(QString fileName)
{
QAudioDeviceInfo device = QAudioDeviceInfo::defaultInputDevice();
if(device.isNull())
{
QMessageBox::warning(NULL,"QAudioDeviceInfo","不存在录音设备");
}else
{
QAudioFormat m_format;
m_format.setSampleRate(16000);
m_format.setCodec("audio/pcm");
m_format.setChannelCount(1);
m_format.setSampleSize(16);
if(!device.isFormatSupported(m_format))
{
m_format = device.nearestFormat(m_format);
}
m_file = new QFile;
m_file->setFileName(fileName);
m_file->open(QIODevice::WriteOnly);
m_audio = new QAudioInput(m_format,this);
m_audio->start(m_file);
}
}
void Audio::stopAudio()
{
m_audio->stop();
m_file->close();
delete m_file;
m_file =NULL;
}
//=============这里我总结一下文档的新建与删除


//
7、Http发送请求
Step1:先获取access_token 翻阅百度语音官方文档:

Http模块post()发送请求的类有两个 #include这个是负责发送的对象 #include 这个是发送的内容
Http头文件
#ifndef HTTP_H
#define HTTP_H
#include
#include
#include
#include
#include
#include
#include
#include
#include
class Http : public QObject
{
Q_OBJECT
public:
explicit Http(QObject *parent = nullptr);
bool post_ssync(QString Url,QMap<QString ,QString> header,
QByteArray requesData,QByteArray &replyData);
signals:
public slots:
};
#endif
Http 源文件发送请求

通过manager把第一次请求发过去

http的源文件完整代码就是:
#include "http.h"
Http::Http(QObject *parent) : QObject(parent)
{
}
bool Http::post_ssync(QString Url, QMap<QString, QString> header, QByteArray requesData, QByteArray &replyData)
{
QNetworkAccessManager manager;
QNetworkRequest request;
request.setUrl(Url);
QMapIterator<QString,QString> it(header);
while (it.hasNext())
{
it.next();
request.setRawHeader(it.key().toLatin1(),it.value().toLatin1());
}
QNetworkReply *reply =manager.post(request,requesData);
QEventLoop l;
connect(reply,&QNetworkReply::finished,&l,&QEventLoop::quit);
l.exec();
if(reply != nullptr && reply->error() ==QNetworkReply::NoError)
{
replyData = reply->readAll();
return true;
}
else
{
qDebug()<<"请求失败!";
return false;
}
}
8、发起第二次请求 并且把服务器翻译的结果解析出来(json)
首先翻官方文档 我们需要解析的是键”access_token”下的 access_token值!

第二次请求 依旧是http文件下的post_ssync(QString Url, QMap

这样反馈值text就是我们需要的结果了。
//说明一下,作为Qt小白,学习第一个项目的心路历程,只是记录一下
Original: https://blog.csdn.net/weixin_50981935/article/details/113813005
Author: 你我_山巅自相逢
Title: 实例:Qt | 百度语音识别
原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/526435/
转载文章受原作者版权保护。转载请注明原作者出处!