当前位置: 首页 > news >正文

百度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

相关文章:

  • 低成本 高性价比 12V电压 YB5011 非隔离AC-DC 助力智能家电
  • 软考高级之系统分析师及系统架构设计师备考过程记录
  • 第4篇 区块链的优势与挑战:为什么区块链如此重要?
  • C#面:如何把一个array复制到arrayist里
  • 数据结构 - 图
  • DockerDesktop中mysql容器无法使用Exec窗口解决
  • TypeScript 中 const enum 和 enum 的核心区别在哪?日常开发应该使用哪个?
  • MySQL实训项目——餐饮点餐系统
  • HarmonyOS--开发者证书考试地址
  • 顾客满意度调查指标如何设计
  • Asp.net Core 反射加载dll
  • 在C++中,工厂模式的思考(《C++20设计模式》及常规设计模式对比)
  • Word中输入文字时,后面的文字消失
  • 如何在OpenEuler 上快速部署一套Zabbix7.0监控系统
  • 性能测试方法与工具比较
  • Django 博客开发教程 8 - 博客文章详情页
  • Java方法详解
  • MySQL的数据类型
  • mysql外键的使用
  • Python学习之路16-使用API
  • SegmentFault 2015 Top Rank
  • Terraform入门 - 3. 变更基础设施
  • 成为一名优秀的Developer的书单
  • 创建一种深思熟虑的文化
  • 从setTimeout-setInterval看JS线程
  • 代理模式
  • 翻译 | 老司机带你秒懂内存管理 - 第一部(共三部)
  • 分享一份非常强势的Android面试题
  • 观察者模式实现非直接耦合
  • 今年的LC3大会没了?
  • 看图轻松理解数据结构与算法系列(基于数组的栈)
  • 深度学习入门:10门免费线上课程推荐
  • 学习笔记DL002:AI、机器学习、表示学习、深度学习,第一次大衰退
  • 一个SAP顾问在美国的这些年
  • 一个完整Java Web项目背后的密码
  • 长三角G60科创走廊智能驾驶产业联盟揭牌成立,近80家企业助力智能驾驶行业发展 ...
  • 进程与线程(三)——进程/线程间通信
  • ​DB-Engines 12月数据库排名: PostgreSQL有望获得「2020年度数据库」荣誉?
  • ​html.parser --- 简单的 HTML 和 XHTML 解析器​
  • ​什么是bug?bug的源头在哪里?
  • (Mac上)使用Python进行matplotlib 画图时,中文显示不出来
  • (动手学习深度学习)第13章 计算机视觉---微调
  • (二刷)代码随想录第16天|104.二叉树的最大深度 559.n叉树的最大深度● 111.二叉树的最小深度● 222.完全二叉树的节点个数
  • (三分钟)速览传统边缘检测算子
  • (五十)第 7 章 图(有向图的十字链表存储)
  • (一)C语言之入门:使用Visual Studio Community 2022运行hello world
  • ***检测工具之RKHunter AIDE
  • **《Linux/Unix系统编程手册》读书笔记24章**
  • .NET BackgroundWorker
  • /var/log/cvslog 太大
  • @kafkalistener消费不到消息_消息队列对战之RabbitMq 大战 kafka
  • @TableLogic注解说明,以及对增删改查的影响
  • [\u4e00-\u9fa5] //匹配中文字符
  • [].slice.call()将类数组转化为真正的数组
  • [acm算法学习] 后缀数组SA