实例:Qt | 百度语音识别



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

1、创建账号,使用语音识别
进入百度语音识别官网申请账号,然后添加语音识别应用,记下框住的id 和 secret 并且领取免费额度

实例:Qt | 百度语音识别

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

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

实例:Qt | 百度语音识别
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

实例:Qt | 百度语音识别
#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;

}

//=============这里我总结一下文档的新建与删除

实例:Qt | 百度语音识别
实例:Qt | 百度语音识别
//

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

实例:Qt | 百度语音识别
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 源文件发送请求

实例:Qt | 百度语音识别
通过manager把第一次请求发过去
实例:Qt | 百度语音识别
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值!

实例:Qt | 百度语音识别
第二次请求 依旧是http文件下的post_ssync(QString Url, QMap

实例:Qt | 百度语音识别
这样反馈值text就是我们需要的结果了。

//说明一下,作为Qt小白,学习第一个项目的心路历程,只是记录一下

Original: https://blog.csdn.net/weixin_50981935/article/details/113813005
Author: 你我_山巅自相逢
Title: 实例:Qt | 百度语音识别

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/526435/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球