【区域识别PDF】如何使用飞桨模型和QT实现对PDF扫描件批量识别指定区域内容导出表格?

一、整体思路

  1. 使用 QT 创建一个用户界面,允许用户选择 PDF 扫描件所在的目录,定义需要识别的区域(可以通过鼠标绘制区域),并开始处理流程。
  2. 利用 Poppler 库将 PDF 文件转换为图像文件。
  3. 使用飞桨的 OCR 模型对用户指定的区域进行内容识别。
  4. 从识别结果中提取表格数据,并将其导出为表格文件格式(如 CSV 或 Excel)。

二、环境搭建

1. QT 开发环境安装

2. 安装 Poppler 库

  • Linux 系统

    bash

    sudo apt-get install libpoppler-cpp-dev
    
  • Windows 系统
    • 从 Poppler 官方网站(例如:Poppler)下载预编译的库。
    • 在 QT 项目的 .pro 文件中添加库和头文件的路径:

      plaintext

      INCLUDEPATH += path/to/poppler/include
      LIBS += -Lpath/to/poppler/lib -lpoppler-cpp
      

3. 安装飞桨库

  • 打开命令行终端,输入以下命令安装飞桨库:
    pip install paddlepaddle
    
  • 从飞桨的官方网站下载所需的 OCR 预训练模型,并将其放置在项目可访问的位置。

三、QT 界面设计与实现

1. 创建主窗口类

#include <QApplication>
#include <QWidget>
#include <QPushButton>
#include <QVBoxLayout>
#include <QFileDialog>
#include <QListWidget>
#include <QProgressBar>
#include <QLineEdit>
#include <QLabel>
#include <QGraphicsScene>
#include <QGraphicsView>
#include <QGraphicsRectItem>
#include <iostream>
#include <vector>
#include <poppler/cpp/poppler-document.h>
#include <poppler/cpp/poppler-page.h>
#include <poppler/cpp/poppler-image.h>


class PDFTableExtractor : public QWidget {
    Q_OBJECT
public:
    PDFTableExtractor(QWidget *parent = nullptr) : QWidget(parent) {
        // 创建界面元素
        selectButton = new QPushButton("Select PDF Directory", this);
        fileList = new QListWidget(this);
        progressBar = new QProgressBar(this);
        processButton = new QPushButton("Start Processing", this);
        regionLabel = new QLabel("Specify Region (x,y,width,height):", this);
        regionEdit = new QLineEdit(this);
        graphicsView = new QGraphicsView(this);
        scene = new QGraphicsScene(this);
        graphicsView->setScene(scene);


        QVBoxLayout *layout = new QVBoxLayout(this);
        layout->addWidget(selectButton);
        layout->addWidget(fileList);
        layout->addWidget(regionLabel);
        layout->addWidget(regionEdit);
        layout->addWidget(graphicsView);
        layout->addWidget(progressBar);
        layout->addWidget(processButton);


        // 连接按钮点击信号
        connect(selectButton, &QPushButton::clicked, this, &PDFTableExtractor::selectDirectory);
     
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值