Qt学习:Qt将语音转换为文字

qt本身没有提供将语音转换为文字的功能,但是可以通过调用一些第三方的语音识别API来实现。根据搜索结果,我找到了以下几种方法:

// 创建网络管理对象
QNetworkAccessManager *manager = new QNetworkAccessManager(this);
// 设置请求头
QNetworkRequest request;
request.setUrl(QUrl("http://vop.baidu.com/server_api"));
request.setHeader(QNetworkRequest::ContentTypeHeader,"application/json");
// 设置请求参数
QJsonObject obj;
obj.insert("format","wav");
obj.insert("rate",16000);
obj.insert("channel",1);
obj.insert("cuid","baidu_workshop");
obj.insert("token",token); // token是之前获取的授权码
obj.insert("len",file.size()); // file是要识别的音频文件
obj.insert("speech",base64); // base64是音频文件经过Base64编码后的字符串
QJsonDocument doc(obj);
QByteArray data = doc.toJson();
// 发送POST请求并接收返回数据
QNetworkReply *reply = manager->post(request,data);
connect(reply,&QNetworkReply::finished,[=](){
    if(reply->error() == QNetworkReply::NoError){
        QByteArray array = reply->readAll();
        qDebug() << array;
        QJsonDocument doc = QJsonDocument::fromJson(array);
        QJsonObject obj = doc.object();
        if(obj.value("err_no").toInt() == 0){
            QString result = obj.value("result").toArray().at(0).toString();
            qDebug() << "result:" << result;
            ui->textEdit->setText(result); // 将识别结果显示在文本框中
        }
    }
    else{
        qDebug() << "error:" << reply->errorString();
    }
});
// 创建云端声音对象
QCloudVoice *voice = new QCloudVoice(this);
// 设置项目信息
voice->setProjectInfo(secretId,secretKey); // secretId和secretKey是之前获取的密钥信息
// 设置回调函数
connect(voice,&QCloudVoice::onResult,this,[=](int code,QVariant result){
    if(code == 0){
        qDebug() << "result:" << result.toString();
        ui->textEdit->setText(result.toString()); // 将识别结果显示在文本框中
    }
    else{
        qDebug() << "error:" << result.toString();
    }
});
// 调用SDK方法进行语音识别(以短语音为例)
voice->shortRecognize(file.fileName(),engineModelType); // file是要识别的音频文件,engineModelType是要使用的引擎模型类型(如8k_zh、16k_zh等)
  • 使用OpenAI API,它可以提供基于GPT-3.5模型的自然语言处理服务,并且支持多种任务类型,包括语音转文字、文本生成、文本摘要等。你需要先注册一个OpenAI账号,然后申请一个API Key。然后在qt中使用QNetworkAccessManager类来发送HTTP请求,并处理返回的JSON数据。例如:
  • // 创建网络管理对象
    QNetworkAccessManager *manager = new QNetworkAccessManager(this);
    // 设置请求头
    QNetworkRequest request;
    request.setUrl(QUrl("https://api.openai.com/v1/answers"));
    request.setRawHeader("Authorization","sk-xxxxxxxxxxxxxxxxxxxxxxx"); // sk-xxxxxxxxxxxxxxxxxxxxxxx是之前获取的API Key
    request.setHeader(QNetworkRequest::ContentTypeHeader,"application/json");
    // 设置请求参数
    QJsonObject obj;
    obj.insert("question","What is the text of this speech?");
    obj.insert("speech_file","https://example.com/speech.wav"); // speech_file是要识别的音频文件的URL
    obj.insert("model","gpt-3.5-turbo"); // model是要使用的模型名称(如gpt-3.5-turbo)
    QJsonDocument doc(obj);
    QByteArray data = doc.toJson();
    // 发送POST请求并接收返回数据
    QNetworkReply *reply = manager->post(request,data);
    connect(reply,&QNetworkReply::finished,[=](){
        if(reply->error() == QNetworkReply::NoError){
            QByteArray array = reply->readAll();
            qDebug() << array;
            QJsonDocument doc = QJsonDocument::fromJson(array);
            QJsonObject obj = doc.object();
            if(obj.value("object").toString() == "answer"){
                QString result = obj.value("answer").toString();
                qDebug() << "result:" << result;
                ui->textEdit->setText(result); // 将识别结果显示在文本框中
            }
        }
        else{
            qDebug() << "error:" << reply->errorString();
        }
    });

 

  • 2
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值