前往小程序,Get更优阅读体验!
立即前往
发布
社区首页 >专栏 >【图像区域识别改名】JPG的图片和扫描件如何区域识别重命名,并将区域内容保存为表格,基于QT和腾讯API的实现方案

【图像区域识别改名】JPG的图片和扫描件如何区域识别重命名,并将区域内容保存为表格,基于QT和腾讯API的实现方案

原创
作者头像
不负众望
修改2025-02-24 17:56:37
修改2025-02-24 17:56:37
10000
代码可运行
举报
运行总次数:0
代码可运行

档案管理:在大型企业或政府机构的档案管理中,有大量的纸质文件被扫描成 JPG 格式保存。这些文件的关键信息(如文件编号、日期、主题等)可能分布在图片的特定区域。通过区域识别重命名,可以将图片文件按照关键信息命名,同时将这些信息保存到表格中,方便后续的检索和管理。

以下是一个基于 QT 和腾讯云 OCR API 实现对 JPG 图片和扫描件进行区域识别重命名,并将区域内容保存为表格的详细方案:

1. 环境准备

  • 安装 QT:从 QT 官方网站下载并安装适合你操作系统的 QT 开发环境。
  • 注册腾讯云账号:在腾讯云官网注册账号,并开通 OCR 服务,获取 API 密钥(SecretId 和 SecretKey)。

2. 创建 QT 项目

使用 QT Creator 创建一个新的 QT Widgets Application 项目。

3. 配置项目

在项目的.pro文件中添加网络模块:

pro

代码语言:javascript
代码运行次数:0
复制
QT += network

4. 实现步骤

4.1 引入必要的头文件

mainwindow.h文件中添加以下头文件:

cpp

代码语言:javascript
代码运行次数:0
复制
#include <QNetworkAccessManager>
#include <QNetworkRequest>
#include <QNetworkReply>
#include <QJsonDocument>
#include <QJsonObject>
#include <QFile>
#include <QFileDialog>
#include <QTableWidget>
#include <QTableWidgetItem>
#include <QStandardPaths>
4.2 实现腾讯云 OCR 请求函数

mainwindow.cpp中实现一个函数用于发送 OCR 请求:

cpp

代码语言:javascript
代码运行次数:0
复制
void MainWindow::sendOCRRequest(const QString &imagePath) {
    // 读取图片文件
    QFile file(imagePath);
    if (!file.open(QIODevice::ReadOnly)) {
        return;
    }
    QByteArray imageData = file.readAll();
    file.close();

    // 构建请求URL和请求体
    QString url = "https://ocr.tencentcloudapi.com/";
    QNetworkRequest request(QUrl(url));
    request.setHeader(QNetworkRequest::ContentTypeHeader, "application/json");

    // 构建请求体JSON
    QJsonObject json;
    json["Action"] = "GeneralBasicOCR";
    json["Version"] = "2018-11-19";
    json["Region"] = "ap-guangzhou";
    json["ImageBase64"] = imageData.toBase64();

    QJsonDocument doc(json);
    QByteArray postData = doc.toJson();

    // 发送请求
    QNetworkAccessManager *manager = new QNetworkAccessManager(this);
    QNetworkReply *reply = manager->post(request, postData);

    connect(reply, &QNetworkReply::finished, [=]() {
        if (reply->error() == QNetworkReply::NoError) {
            QByteArray responseData = reply->readAll();
            QJsonDocument responseDoc = QJsonDocument::fromJson(responseData);
            QJsonObject responseObj = responseDoc.object();

            // 处理OCR结果
            processOCRResult(responseObj, imagePath);
        }
        reply->deleteLater();
    });
}
4.3 处理 OCR 结果

cpp

代码语言:javascript
代码运行次数:0
复制
void MainWindow::processOCRResult(const QJsonObject &response, const QString &imagePath) {
    QJsonArray textDetections = response["Response"]["TextDetections"].toArray();
    QString recognizedText;
    for (const auto &detection : textDetections) {
        QJsonObject detectionObj = detection.toObject();
        recognizedText += detectionObj["DetectedText"].toString() + " ";
    }

    // 重命名图片
    QString newName = recognizedText.trimmed().replace("/", "_") + ".jpg";
    QFile::rename(imagePath, QFileInfo(imagePath).absolutePath() + "/" + newName);

    // 将识别结果保存到表格
    int row = ui->tableWidget->rowCount();
    ui->tableWidget->insertRow(row);
    ui->tableWidget->setItem(row, 0, new QTableWidgetItem(newName));
    ui->tableWidget->setItem(row, 1, new QTableWidgetItem(recognizedText));
}
4.4 选择图片并处理

mainwindow.cpp的构造函数中添加一个按钮点击事件处理函数:

cpp

代码语言:javascript
代码运行次数:0
复制
MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    ui->setupUi(this);

    connect(ui->selectButton, &QPushButton::clicked, [=]() {
        QStringList filePaths = QFileDialog::getOpenFileNames(this, "选择图片", QStandardPaths::writableLocation(QStandardPaths::PicturesLocation), "JPEG Images (*.jpg)");
        for (const QString &filePath : filePaths) {
            sendOCRRequest(filePath);
        }
    });
}
4.5 保存表格数据到文件

cpp

代码语言:javascript
代码运行次数:0
复制
void MainWindow::saveTableToCSV() {
    QString filePath = QFileDialog::getSaveFileName(this, "保存表格", QStandardPaths::writableLocation(QStandardPaths::DocumentsLocation), "CSV Files (*.csv)");
    if (!filePath.isEmpty()) {
        QFile file(filePath);
        if (file.open(QIODevice::WriteOnly | QIODevice::Text)) {
            QTextStream out(&file);
            for (int i = 0; i < ui->tableWidget->rowCount(); ++i) {
                for (int j = 0; j < ui->tableWidget->columnCount(); ++j) {
                    QTableWidgetItem *item = ui->tableWidget->item(i, j);
                    if (item) {
                        out << item->text();
                    }
                    if (j < ui->tableWidget->columnCount() - 1) {
                        out << ",";
                    }
                }
                out << "\n";
            }
            file.close();
        }
    }
}

5. UI 设计

在 QT Designer 中设计界面,添加一个按钮用于选择图片,一个表格用于显示识别结果,另一个按钮用于保存表格数据到文件。

6. 注意事项

  • 上述代码中的腾讯云 API 请求部分需要进行签名验证,实际使用时需要根据腾讯云的签名规则进行修改。
  • 确保你的腾讯云账号有足够的权限和额度使用 OCR 服务。

通过以上步骤,你可以实现对 JPG 图片和扫描件的区域识别重命名,并将识别结果保存为表格。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1. 环境准备
  • 2. 创建 QT 项目
  • 3. 配置项目
  • 4. 实现步骤
    • 4.1 引入必要的头文件
    • 4.2 实现腾讯云 OCR 请求函数
    • 4.3 处理 OCR 结果
    • 4.4 选择图片并处理
    • 4.5 保存表格数据到文件
  • 5. UI 设计
  • 6. 注意事项
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档