百度AI使用-图像文字识别
前言
百度AI接口可以免费试用,本文描述如何申请使用该资源,以及在QT-Demo下使用百度AI接口,实现图像文字识别功能。
一、百度AI资源申请使用
1.浏览器访问:https://apis.baidu.com, 注册百度智能云账号
2.可以购买试用资源:
购买成功后,显示订单状态-支付完成:
3.菜单栏:产品-》图像技术-》图像识别
4.可以领取免费资源,领取免费资源后,点击创建应用:
5.点击API在线调试,可以进行在线API调试
通过以上AK 和 SK 可以获取 access_token,复制access_token的值:
点击通用文字识别(标准版)-》粘连access_token -》上传带文字的图片 -》点击调试按钮,如下图所示,返回内容显示出识别的文字:
二、Qt-Demo中调用百度AI接口,实现图像文字识别功能
1.通过python,获取access_token
通过执行GetToken.py, python方式获取access_token,注意检查python是否安装,是否安装了requests模块,是否安装pip。检查是否安装python,可以使用命令:python --version , 安装高版本的python会自动安装pip,通过pip可以下载requests模块,命令是:cmd切换到C:\Users\FF\AppData\Local\Programs\Python\Python38\Scripts\,执行:pip install requests。
更改GetToken.py文件,替换为自己申请的AK与SK的值:
如未安装python,python的安装包在该文件中:
执行GetToken.py后,获取到access_token的值:
2.在qt工程中,由于接口访问的是https,会出现openssl报错问题
qt中,用百度api请求时,出现openssl问题:qt.network.ssl: QSslSocket::connectToHostEncrypted: TLS initialization failed
解决办法:
代码中加入:
qDebug()<<"QSslSocket="<<QSslSocket::sslLibraryBuildVersionString();
qDebug() << "OpenSSL support:" << QSslSocket::supportsSsl();
可以提示该QT版本下,需要安装的openssl的版本,我的是需要安装OpenSSL 1.1.1d版本,安装后,安装之后,找到安装目录下的两个文件(libcrypto-1_1-x64.dll 和libssl-1_1-x64.dll),拷贝到QT编译器目录下即可(E:\Qt-5.14\5.14.0\msvc2017_64\bin)。拷贝后,再次执行,就会显示true:
openssl的安装包openssl-1.1.1d也在下载文件夹中:
3.demo核心代码
mianwindow.cpp
#include "mainwindow.h"
#include "ui_mainwindow.h"MainWindow::MainWindow(QWidget *parent): QMainWindow(parent), ui(new Ui::MainWindow)
{ui->setupUi(this);m_pManager = new QNetworkAccessManager(this);connect(m_pManager, SIGNAL(finished(QNetworkReply*)), this, SLOT(replyFinished(QNetworkReply*)));initLPR();
}MainWindow::~MainWindow()
{delete ui;
}void MainWindow::initLPR()
{m_sRequestUrl = "https://aip.baidubce.com/rest/2.0/ocr/v1/general_basic";m_sAccessToken = "24.63fb5160d1eee513974b0f1433d21d08.2592000.1722418605.282335-89662542";
}void MainWindow::replyFinished(QNetworkReply *reply)
{int nStatus = reply->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt();if(nStatus != 200){qDebug() << "Status code is error:" << nStatus;return;}QByteArray replyData = reply->readAll();qDebug() << "reply data is:" << QString(replyData);QJsonParseError json_error;QJsonDocument doc = QJsonDocument::fromJson(replyData, &json_error);if(json_error.error == QJsonParseError::NoError){if(doc.isObject()){QJsonObject obj = doc.object();if(obj.contains("words_result")){QJsonArray resultsArray = obj["words_result"].toArray();for (const QJsonValue& val : resultsArray){QJsonObject resultObj = val.toObject();QString text = resultObj["words"].toString();ui->label_result->setText(text);}}}}
}void MainWindow::on_pushButton_LPR_selectPic_clicked()
{ui->label_result->clear();ui->label_pic->clear();m_sImagePath = QFileDialog::getOpenFileName(this, tr("Open Image"), "./", tr("Image files(*.jpg *.png *.jpeg);All file(*.*)"));if(m_sImagePath.isEmpty()){QMessageBox msgBox;msgBox.warning(this, "Warn", "Open picture failed!");return;}else{QImage img(m_sImagePath);img = img.scaled(ui->label_pic->width(), ui->label_pic->height());ui->label_pic->setPixmap(QPixmap::fromImage(img));}ui->lineEdit_Path->setText(m_sImagePath);
}void MainWindow::on_pushButton_LPR_Identify_clicked()
{//qDebug()<<"QSslSocket="<<QSslSocket::sslLibraryBuildVersionString();//qDebug() << "OpenSSL support:" << QSslSocket::supportsSsl();QUrl url(m_sRequestUrl + "?access_token=" + m_sAccessToken);qDebug() << "url:" << url;QNetworkRequest req(url);req.setHeader(QNetworkRequest::ContentTypeHeader, "application/x-www-form-urlencoded");QFile file(m_sImagePath);file.open(QIODevice::ReadOnly);QByteArray buf = file.readAll();//转成base64QByteArray buf64 = buf.toBase64().toPercentEncoding();QByteArray body = "image="+buf64;//发送请求m_pManager->post(req, body);
}
4.demo执行效果:
5.QT-demo下载:
链接: link