百度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();

    //转成base64
    QByteArray buf64 = buf.toBase64().toPercentEncoding();
    QByteArray body = "image="+buf64;

    //发送请求
    m_pManager->post(req, body);
}

4.demo执行效果:

在这里插入图片描述

5.QT-demo下载:

链接: link

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

浅笑一斤

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值