qt java接口_Qt使用百度AI接口,实现OCR
主要参考梦里蓝天的代码还有飞扬青天的博客1.注册百度AI的帐号后,申请文字识别应用 2.打开应用管理后,记录下api key跟securitykey 3.根据api key跟security key获取accesstoken百度给的文档是Qt的实现如下pNetManager是QNetworkAccessManager类型的void MainWindow::getAccessToken(){i...
主要参考梦里蓝天的代码
还有飞扬青天的博客
1.注册百度AI的帐号后,申请文字识别应用

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

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());
}
更多推荐
所有评论(0)