主要参考梦里蓝天的代码

还有飞扬青天的博客

1.注册百度AI的帐号后,申请文字识别应用

a84c1d75a647df2011d3886ba83f64e8.png

2.打开应用管理后,记录下api key跟 security key

a2448b9ad11961f7ad6fdca00731def3.png

3.根据api key跟security key获取access token

百度给的文档是

Qt的实现如下

pNetManager是QNetworkAccessManager类型的

void MainWindow::getAccessToken()

{

if (!pNetManager)

{

return;

}

QString key = ui->lineEdit_api->text();

QString secret = ui->lineEdit_secret->text();

QString param = "https://aip.baidubce.com/oauth/2.0/token?grant_type=client_credentials&client_id="+key+"&client_secret="+secret+"&";

QUrl url(param);

connect(pNetManager, &QNetworkAccessManager::finished, this, &MainWindow::replyAccessToken);

pNetManager->get(QNetworkRequest(param));

}

4.收到的应答代码如下

accessToken 为QString,这个是百度返回的

void MainWindow::replyAccessToken(QNetworkReply* pReply)

{

QNetworkReply::NetworkError err = pReply->error();

if(err != QNetworkReply::NoError) {

qDebug() << "Failed: " << pReply->readAll();

}else {

//获取内容

QJsonParseError jsonErr;

QJsonDocument jsonDoc = QJsonDocument::fromJson(pReply->readAll(), &jsonErr);

if (jsonDoc.isObject()){

QJsonObject jsonObj = jsonDoc.object();

accessToken = jsonObj.take("access_token").toString();

ui->lineEdit->setText(accessToken);

}

}

}

5.打开加载的图片,转换为BASE64

void MainWindow::openImag()

{

QString openFile;

QImage image;

openFile = QFileDialog::getOpenFileName(

this,

tr("打开相片"),

"",

"Image Files(*.jpg *.png *.bmp *.pgm *.pbm);;All(*.*)");

if( openFile != "" && image.load(openFile))

{

QByteArray imageData;

QBuffer buff(&imageData);

image.save(&buff, "jpg");

ui->textBrowser_base64->setText(imageData.toBase64());

}

}

6.发送给百度

void MainWindow::reganize()

{

QString param = ui->textBrowser_base64->toPlainText();

if (param.isEmpty())

{

qDebug() << "base64 empty";

return;

}

if (ui->lineEdit->text().isEmpty())

{

qDebug() << "accessToken empty";

return;

}

if (accessToken.isEmpty())

{

accessToken = ui->lineEdit->text();

}

QUrl url;

url.setUrl("https://aip.baidubce.com/rest/2.0/ocr/v1/general_basic?access_token="+accessToken);

QNetworkRequest request;

request.setUrl(url);

request.setHeader(QNetworkRequest::ContentTypeHeader,QVariant("application/x-www-form-urlencoded"));

QByteArray byteArr;

byteArr.append("image=");

byteArr.append(QUrl::toPercentEncoding(param));

connect(pNetManager, &QNetworkAccessManager::finished, this, &MainWindow::reganizeResult);

pNetManager->post(request, byteArr);

}

7.收到识别结果

void MainWindow::reganizeResult(QNetworkReply* pReply)

{

QNetworkReply::NetworkError err = pReply->error();

if(err != QNetworkReply::NoError) {

qDebug() << "Failed: " << pReply->readAll();

}else {

//获取内容

QJsonParseError jsonErr;

QJsonDocument jsonDoc = QJsonDocument::fromJson(pReply->readAll(), &jsonErr);

if (jsonDoc.isObject()){

QJsonObject jsonObj = jsonDoc.object();

int wordsNum = jsonObj.take("words_result_num").toInt();

QJsonArray jsonArr = jsonObj.take("words_result").toArray();

QString text;

for (int i = 0; i < wordsNum; i++){

text.append(jsonArr[i].toObject().take("words").toString());

text.append("
");

}

if (!text.isEmpty()){

ui->textBrowser_result->setText(text);

}

}

}

}

8.需要的话加个拷贝结果的

void MainWindow::copyBoard()

{

QClipboard *board = QApplication::clipboard();

board->setText(ui->textBrowser_result->toPlainText());

}

Logo

开源鸿蒙跨平台开发社区汇聚开发者与厂商,共建“一次开发,多端部署”的开源生态,致力于降低跨端开发门槛,推动万物智联创新。

更多推荐