QT的语音识别

难点:
难点就是如何跟百度云的语音应用进行通信。
首先,要获取应用的API Key、Secret Key,并通过请求鉴权接口换取 token。向授权服务地址https://aip.baidubce.com/oauth/2.0/token发送请求(推荐使用POST),并在URL中带上以下参数:
并在URL中带上以下参数:

grant_type: 必须参数,固定为client_credentials;
client_id: 必须参数,应用的API Key;
client_secret: 必须参数,应用的Secret Key;

也就是
https://aip.baidubce.com/oauth/2.0/token?grant_type=client_credentials&client_id=%14&client_secret=%2&
%1处填API KEY,%2处填secret key.

之后调用 QNetworkReply *reply=manager.post(request,requestdata);函数发送第一次http请求。(request里面设置url以及”头“)
requestdata第一次可以为空,不需要传什么东西,只是获取token。获取得到的json需要进行处理,以得出真正的token。

之后再用post函数来发送第二次请求,这次的request的url需要设置为http://vop.baidu.com/server_api?dev_pid=1537&cuid=%1&token=%2,其中%1需要设置为主机号(随便一个数字都可以),%2需要设置access token.也就是第一次请求获取的token,头与上次一样,requestdata需要传入需要识别的文件(这里打开音频文件,获取里面的全部内容放入QByteArray requestdata中,之后再发送过去,然后就可以接受数据,接受过来的数据里面包含一个result数组,此数组里面第一个元素包含的就是翻译后的结果。

解析json:
QString speech::getjsonvalue(QByteArray ba, QString key)
{
QJsonParseError error;
QJsonDocument jsondocument=QJsonDocument::fromJson(ba,&error);
if(error.error==QJsonParseError::NoError)
{
if(jsondocument.isObject())
{
QJsonObject jsonboj=jsondocument.object();
if(jsonboj.contains(key))
{
QJsonValue jsonvalue=jsonboj.value(key);
if(jsonvalue.isString())
{
return jsonvalue.toString();
}
else if(jsonvalue.isArray())
{
QJsonArray arr=jsonvalue.toArray();
QJsonValue jv=arr.at(0);
return jv.toString();
}
}
}
}
return “”;
}

前三个循环用来判断接收到的数据是否正常,然后判断是数组还是字符串,如果是字符串就是第一次post收来的数据,如果是数组就是第二次传来的数据。然后再最终获取数据。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值