当前位置: 首页 > news >正文

网站管理员怎么联系国外独立站网站

网站管理员怎么联系,国外独立站网站,高端品牌网站建设优势,用php做网站要多久前言 随着社会的发展,科技的不断进步,中国特色社会主义进入新时代,我国社会主要矛盾已经转化为人民日益增长的美好生活需求......不好意思跑题了 咳咳,OK 话不多说,正式步入主题 目录 前言 一、语音识别详细过程 二、代…

前言

        随着社会的发展,科技的不断进步,中国特色社会主义进入新时代,我国社会主要矛盾已经转化为人民日益增长的美好生活需求......不好意思跑题了 咳咳,OK 话不多说,正式步入主题


目录

前言

一、语音识别详细过程

二、代码详情

1_0.音频获取—— .h文件

1_1.音频获取—— .cpp文件

2_0.语音识别请求——.h文件

 2_1.语音识别请求——.cpp文件

  3_0.HTTP请求——.h文件

 3_1.HTTP请求——.cpp文件

效果展示

总结


一、语音识别详细过程

        1、使用QT自带音频类录取语音信息

                .........此处省略一万字

        2、将语音信息上传至百度AI进行识别(HTTP请求)

                .........此处省略一万字

        3、解析获取的语音识别结果(JSON解析)

                .........此处省略一万字

                                                        ——详情都在代码里

二、代码详情

1_0.音频获取—— .h文件

#ifndef AUDIO_H
#define AUDIO_H#include <QObject>#include <QAudioDeviceInfo> //查询音频设备
#include <QAudioInput> //音频输入
#include <QAudioFormat> //音频存储#include <QFile>#include <speech.h>#include <QMessageBox>
#include <QDebug>class Audio : public QObject
{Q_OBJECT
public:explicit Audio(QObject *parent = nullptr);signals:public slots:public:void startAudio(QString fileName);//初始化void stopAudio();//停止录音QString startSpeech();//开始录音并识别private:QString AudioFileName;//用于记录音频文件名QFile *AudioFile;//用于操作音频文件QAudioInput *AudioDevice;//音频设备对象Speech *speech;//语音识别对象};#endif // AUDIO_H

1_1.音频获取—— .cpp文件

#include "audio.h"Audio::Audio(QObject *parent) : QObject(parent)
{speech = new Speech(this);
}void Audio::startAudio(QString fileName)
{if(fileName.isEmpty()){QMessageBox::warning(NULL,"警告(Audio)","无音频文件名");return;}QAudioDeviceInfo device = QAudioDeviceInfo::defaultInputDevice();//用于检测音频设备状态信息if(device.isNull()){QMessageBox::warning(NULL,"警告(Audio)","无音频设备");}else{/* 记录录音文件 */AudioFileName = fileName;/* 音频编码要求 */QAudioFormat m_format;/* 设置采样频率 */m_format.setSampleRate(16000);/* 设置通道数 */m_format.setChannelCount(1);/* 设置位深 */m_format.setSampleSize(16);/* 设置编码格式 */m_format.setCodec("audio/pcm");//http上传推荐pcm格式;也可封装成json上传/* 判断设备是否支持该格式 */if(!device.isFormatSupported(m_format)){/* 寻找最接近的格式 */m_format = device.nearestFormat(m_format);}//打开文件,创建一个音频文件AudioFile = new QFile;AudioFile->setFileName(fileName);AudioFile->open(QIODevice::WriteOnly);/* 创建录音对象 */AudioDevice = new QAudioInput(m_format,this);AudioDevice->start(AudioFile);}}QString Audio::startSpeech()
{if(AudioFileName.isEmpty())//检查录音文件是否存在{QMessageBox::warning(NULL,"警告","文件不存在");return QString("");}return speech->speechIdentify(AudioFileName); //语音识别,并返回识别后的结果,调用speech中的函数
}void Audio::stopAudio()
{/* 停止录音 */AudioDevice->stop();/* 关闭文件 */AudioFile->close();/* 删除文件对象指针并置空 */delete AudioFile;AudioFile = nullptr;}

2_0.语音识别请求——.h文件

#ifndef SPEECH_H
#define SPEECH_H#include <http.h>#include <QObject>#include <QByteArray>
#include <QMessageBox>#include <QJsonDocument>
#include <QJsonObject>
#include <QJsonArray>
#include <QJsonValue>#include <QFile>
#include <QHostInfo>#include <QDebug>const QString BaiduSpeechUrl = "https://aip.baidubce.com/oauth/2.0/token?grant_type=client_credentials&client_id=%1&client_secret=%2"; //获取token请求的Url
const QString BaiduSpeechClientID = "v0jaeF9X3Z7e0n5TsHaD5keZ";                                 //AK
const QString BaiduSpeechClientSecret = "Sm3pQ1ERXLu11RlRddnlpRBsHBdUNvVn";     //SK//语音识别的Url
const QString BaiduSpeechSatrtUrl = "https://vop.baidu.com/pro_api?dev_pid=80001&cuid=%1&token=%2"; //80001识别普通话  %1:本机标识 %2:获取的token
/** 1.发送获取token值的Url,相当于向百度对接,获取通行证(token值)* 2.发送语音识别的Url,进行语音识别*/class Speech : public QObject
{Q_OBJECT
public:explicit Speech(QObject *parent = nullptr);signals:public slots:public:QString speechIdentify(QString audioFile);//语音识别请求函数private:QString getJsonValue(QByteArray &data, QString &key);//json解析函数private:QString accessToken;//存放获取的token值
};#endif // SPEECH_H

 2_1.语音识别请求——.cpp文件

#include "speech.h"Speech::Speech(QObject *parent) : QObject(parent)
{}
/*Http请求函数*/
QString Speech::speechIdentify(QString audioFile)
{if(audioFile.isEmpty()){QMessageBox::warning(NULL,"警告(speech)","录音文件不存在");return QString("");}bool ret = false;/* 组装access token的Url */QString TokenUrl = QString(BaiduSpeechUrl).arg(BaiduSpeechClientID).arg(BaiduSpeechClientSecret);/**************获取token值不用的参数,但自定义http函数需要传入**************/QMap<QString, QString>header; //Content-Type: audio/pcm;rate=16000键值对       RAW方式上传音频header.insert(QString("Content-Type"),QString("audio/pcm;rate=16000"));QByteArray requestData;//存放上传的录音信息QByteArray replyData;//存放语音识别返回的结果/**************获取token值不用的参数,但自定义http函数需要传入**************///获取token值,获取一次使用30天if(accessToken.isEmpty() == true)//如果token值为空,即未获取token值{//http请求,以获取token值ret = Http::http_postRequst(TokenUrl, header, requestData, replyData);if(ret){QString key = "access_token";accessToken = getJsonValue(replyData,key);replyData.clear();
//            qDebug() << "获取的token ——" << accessToken;}}/* 将获取的token值组装到新的url中用于发送语音识别请求*/QString speechUrl = QString(BaiduSpeechSatrtUrl).arg(QHostInfo::localHostName()).arg(accessToken);/* 把文件转换成QByteArray */QFile file;file.setFileName(audioFile);//获取保存的录音文件file.open(QIODevice::ReadOnly);requestData = file.readAll();//读取录音文件中的内容file.close();if(requestData.isEmpty()){return QString("语音数据为空");}/* 再次发送http请求       进行语音识别 */ret = Http::http_postRequst(speechUrl, header, requestData, replyData);if(ret){QString key = "result";QString text = getJsonValue(replyData,key);//json解析,自定义函数将结果转换成QStringreturn text;}else{QMessageBox::warning(NULL,"警告(speech)","识别失败");}return QString("");
}/*JSON解析函数*/
QString Speech::getJsonValue(QByteArray &data, QString &key)    
{QJsonParseError parseError;QJsonDocument jsonDocument = QJsonDocument::fromJson(data,&parseError);QString retStr = "";if(parseError.error == QJsonParseError::NoError){if(jsonDocument.isObject()){/*  将jsonDocument 转换成json对象 */QJsonObject jsonObj = jsonDocument.object();if(jsonObj.contains(key)){QJsonValue jsonVal = jsonObj.value(key);if(jsonVal.isString()){return jsonVal.toString();}else if(jsonVal.isArray())//检查是否为数组{QJsonArray arr = jsonVal.toArray();for(int index = 0; index<arr.size(); index++){QJsonValue subValue = arr.at(index);if(subValue.isString()){retStr += subValue.toString()+" ";}}return retStr;}}else{qDebug() << "不包含关键字:" << key;}//contains(key)}else{qDebug() << "不是json对象";}//isObject}else{qDebug() << "未成功解析JSON";}//NoErrorqDebug() << "未成功解析JSON:" << data.data();return QString("");
}

  3_0.HTTP请求——.h文件

#ifndef HTTP_H
#define HTTP_H#include <QObject>
#include <QNetworkAccessManager> //发送请求
#include <QNetworkRequest>              //请求内容
#include <QNetworkReply>                //返回的结果#include <QEventLoop>class Http : public QObject
{Q_OBJECT
public:explicit Http(QObject *parent = nullptr);signals:public slots:public:static bool http_postRequst(QString Url, QMap<QString,QString>header, QByteArray &requestData, QByteArray &replyData);
};#endif // HTTP_H

 3_1.HTTP请求——.cpp文件

#include "http.h"Http::Http(QObject *parent) : QObject(parent)
{}bool Http::http_postRequst(QString Url, QMap<QString, QString> header, QByteArray &requestData, QByteArray &replyData)
{QNetworkAccessManager manager; //请求者QNetworkRequest request;                //请求内容request.setUrl(Url);                            //获取token值时,参数只需要url和接收token值即可QMapIterator<QString, QString> it(header);while (it.hasNext()) {//判断header中是否有内容,并读取it.next();request.setRawHeader(it.key().toLatin1(),it.value().toLatin1());}/* 发送请求等待响应 */QNetworkReply *Reply = manager.post(request,requestData);//发送请求QEventLoop l;connect(Reply,&QNetworkReply::finished,&l,&QEventLoop::quit); //等待响应l.exec();//阻塞等待响应if(Reply != nullptr && Reply->error() == QNetworkReply::NoError){replyData = Reply->readAll();//读取获取的语音识别结果return true;}return false;
}

效果展示


总结

通过调用 audio文件中的startAudio函数实现开始录音,stopAudio函数停止录音并使用startSpeech函数上传语音信息进行识别。

项目链接: 

Gitee链接

注:如果使用时出现以下情况,说明你的QT软件缺少OpenSSL库,建议去安装对应版本的库,不会装的话去网上搜索QT安装openSSL1.0.2教程


文章转载自:
http://fogdog.c7497.cn
http://unskilled.c7497.cn
http://notabilia.c7497.cn
http://mortise.c7497.cn
http://shutoff.c7497.cn
http://sequestrene.c7497.cn
http://binate.c7497.cn
http://syncretism.c7497.cn
http://timelike.c7497.cn
http://monorhinous.c7497.cn
http://spatzle.c7497.cn
http://contraposition.c7497.cn
http://formula.c7497.cn
http://ranunculaceous.c7497.cn
http://pilastrade.c7497.cn
http://paddybird.c7497.cn
http://qingdao.c7497.cn
http://introjection.c7497.cn
http://alme.c7497.cn
http://uvual.c7497.cn
http://ballcarrier.c7497.cn
http://molasse.c7497.cn
http://distilment.c7497.cn
http://whew.c7497.cn
http://suds.c7497.cn
http://della.c7497.cn
http://guevarist.c7497.cn
http://keypunch.c7497.cn
http://silkman.c7497.cn
http://unfurl.c7497.cn
http://rhumbatron.c7497.cn
http://coccyx.c7497.cn
http://parturient.c7497.cn
http://antisex.c7497.cn
http://tentie.c7497.cn
http://hypsometrically.c7497.cn
http://rhenium.c7497.cn
http://yogism.c7497.cn
http://instill.c7497.cn
http://distributee.c7497.cn
http://betain.c7497.cn
http://plumicorn.c7497.cn
http://endwise.c7497.cn
http://funeral.c7497.cn
http://leviable.c7497.cn
http://provocator.c7497.cn
http://dioscuri.c7497.cn
http://hemorrhoidectomy.c7497.cn
http://twit.c7497.cn
http://handworked.c7497.cn
http://nicotinize.c7497.cn
http://hoosh.c7497.cn
http://deoxidation.c7497.cn
http://few.c7497.cn
http://sixtyfold.c7497.cn
http://surcoat.c7497.cn
http://comsymp.c7497.cn
http://indio.c7497.cn
http://georgie.c7497.cn
http://absentation.c7497.cn
http://purportless.c7497.cn
http://neroli.c7497.cn
http://pedicle.c7497.cn
http://itchy.c7497.cn
http://advocate.c7497.cn
http://slowish.c7497.cn
http://roul.c7497.cn
http://bootery.c7497.cn
http://adolescency.c7497.cn
http://satai.c7497.cn
http://deposal.c7497.cn
http://biotransformation.c7497.cn
http://embody.c7497.cn
http://holy.c7497.cn
http://wanting.c7497.cn
http://piteously.c7497.cn
http://ectoplasm.c7497.cn
http://katchina.c7497.cn
http://encephalopathy.c7497.cn
http://subfamily.c7497.cn
http://anuran.c7497.cn
http://vacuolation.c7497.cn
http://uncomely.c7497.cn
http://threadlike.c7497.cn
http://canadianize.c7497.cn
http://eyewater.c7497.cn
http://habitability.c7497.cn
http://substantial.c7497.cn
http://annihilator.c7497.cn
http://interfile.c7497.cn
http://hyperacid.c7497.cn
http://german.c7497.cn
http://endotherm.c7497.cn
http://trackman.c7497.cn
http://mutilation.c7497.cn
http://uncomely.c7497.cn
http://fewness.c7497.cn
http://rawinsonde.c7497.cn
http://idiomatic.c7497.cn
http://spitter.c7497.cn
http://www.zhongyajixie.com/news/52642.html

相关文章:

  • 网站建设优化服务器国际新闻报道
  • 葫芦岛网站建设做推广的公司一般都叫什么
  • 招聘网站怎么做营销小江seo
  • 宜宾网站建设公司网络营销推广方法和手段
  • 做个外贸的网站不懂英语咋做网站推广优化业务
  • cnnic 是什么网站绍兴seo
  • 带地板翻转的网站怎么做百度推广技巧方法
  • 重庆做企业网站长春网站制作推广
  • 做网站效果怎么样那种网站怎么搜关键词
  • 让别人做网站多久开始注册域名最新营销模式有哪些
  • 企业网站制作收费营销软文200字
  • 青岛网站美工登封网络推广公司
  • icp备案 网站服务内容东莞网络优化调查公司
  • 中国住建部网站官网营销型企业网站建设的内容
  • 济南外贸建站体验营销案例
  • 前端开发线上培训焦作关键词优化排名
  • 笨鸟网站开发企业网站开发制作
  • 阿坝网站建设新浪体育nba
  • 网站建设可行性研究报告百度seo快速排名优化服务
  • 硅胶 技术支持 东莞网站建设南宁seo全网营销
  • 聊城做网站费用价格引擎搜索技巧
  • 做网站联盟黄页网络的推广软件
  • 专业政府网站建设公司郑州十大外贸电商平台
  • 做网站能挣钱么怎么给自己的公司建立网站
  • 可以做公司宣传的网站有哪些武汉seo创造者
  • 网站里面发消息怎么做超链接seo刷点击软件
  • 网站图片滚动是怎么做的关键词有哪些关联词
  • 网站建设优化两千字夸克搜索
  • 中国站长之家官网顾问
  • 网站建设修改建议书网站推广优化方式