智能图片识别表格

news2024/9/20 1:13:03

文章目录

  • 在线体验
  • 快速开始
  • 一、项目介绍篇
    • 1.1 PP-Structure概述
    • 1.2 PP-Structure核心功能:表格识别
    • 1.3 PP-Structure特点
    • 1.4 模块介绍
      • 1.4.1 TableDec.py
      • 1.4.2 app.py
  • 二、核心代码介绍篇
    • 2.1 app.py
    • 2.2 TableDec.py
    • 2.3 扩展-模型选择
      • 3.4.1 版面分析模型
      • 3.4.2 表格识别模型
  • 三、总结

在线体验

智能图片识别表格
image.png

快速开始

  1. 创建anaconda环境
conda create -n XXX python=3.10
  1. 安装依赖包
pip install -r requirements.txt
  1. 启动app.py,访问网页 127.0.0.1:7860
python app.py
  1. 网页界面如下,可在示例图片中快速进行试验

image.png

一、项目介绍篇

在数字化办公的浪潮中,将图片中的数据转换成可编辑的Excel格式已成为一项日益增长的需求。PP-Structure,由飞桨PaddleOCR团队开发,提供了强大的文档分析能力,包括版面分析和表格识别,使得图片数据结构化输出成为可能。本文将深入探讨PP-Structure技术,分析其工作原理、实现过程,并探讨其在数字化办公中的应用价值。

1.1 PP-Structure概述

官方 github 地址:https://github.com/PaddlePaddle/PaddleOCR

PP-Structure是一款基于AI的图片到Excel转换工具,以其快速和高准确率的转换能力在技术社区中受到广泛关注。这一工具的内部逻辑和智能转化技术,为文档格式转换提供了一种全新的解决方案。

1.2 PP-Structure核心功能:表格识别

PP-Structure的核心功能是表格识别,它通过调用PP-Structure的PPStructure类实现表格识别功能,并将识别结果保存到临时文件中。此外,还实现了图片方向分类功能,用于判断图片是否需要旋转以适应版面分析。

1.3 PP-Structure特点

  • 本地部署:支持本地部署,方便企业内部使用。
  • 多模型支持:提供了多种模型以适应不同的识别需求,如PP-Structure和PP-StructureV2。
  • 高准确率:基于SLANet在PubTabNet数据集上训练的模型,保证了识别的高准确率。

1.4 模块介绍

image.png

1.4.1 TableDec.py

  • 整合了pp-structure的核心实现类

1.4.2 app.py

  • gradio页面代码

二、核心代码介绍篇

2.1 app.py

path = os.path.join("./pp_models")

tdModel = TableDec(det_model_dir=os.path.join(path, "det"),
                   rec_model_dir=os.path.join(path, "rec"),
                   cls_model_dir=os.path.join(path, "cls"),
                   table_model_dir=os.path.join(path, "table"),
                   layout_model_dir=os.path.join(path, "layout"))


def dec_fn(image):
    global tempdir
    im_show, excel_file, execl_str = tdModel.run_dec(tempdir, image)
    return im_show, excel_file, execl_str


if __name__ == "__main__":
    # 使用临时文件夹保存数据
    global tempdir
    with tempfile.TemporaryDirectory() as tempdir:
        with gr.Blocks() as app:
            with gr.Column(variant="panel"):
                image = gr.Image(label="请上传表格图像")
            with gr.Row(variant="panel"):
                btn = gr.Button(value="识别")
                clear_bu = gr.ClearButton([image], value="清除")
            with gr.Tabs():
                with gr.Tab(label="OCR识别结果"):
                    ocr_res = gr.Image(label="OCR识别结果")
                    gr.Button(value="flag")
                with gr.Tab(label="表格识别结果"):
                    table_res = gr.File(label="识别出的表格文件")
                    table_text = gr.TextArea(label="识别出的表格内容")
                    gr.Button(value="flag")
            clear_bu.add([ocr_res, table_res, table_text])
            btn.click(fn=dec_fn, inputs=image, outputs=[ocr_res, table_res, table_text])

            # 添加演示用例
            gr.Examples(examples='./examples', fn=dec_fn,
                        inputs=image,
                        outputs=[ocr_res, table_res, table_text],
                        cache_examples=True)

        app.launch()

  1. 此段代码主要是用于生成前端页面,以及配置按钮点击事件触发时的回调函数
  2. 生成的csv文件会保存在临时文件夹中,关闭程序后文件会自动删除

2.2 TableDec.py

class TableDec:
    def __init__(self, **kwargs):
        self.table_engine = PPStructure(show_log=True, image_orientation=True, **kwargs)

    def run_dec(self, savedirpath, image):
        ... use the PPStructure implementation to recognize the table structure and save the result to a temporary file ...
  1. 此段代码是表格识别的核心代码,通过调用PP-Structure的PPStructure类实现表格识别功能,并将识别结果保存到临时文件中
  2. 此段代码还实现了图片方向分类功能,用于判断图片是否需要旋转
  3. 将识别结果保存到临时文件中,供前端页面展示
  4. 另外,还调用excel_util.pyexecl2text实现了读取excel文件并转换为展示文本

2.3 扩展-模型选择

  • PP-Structure提供了多种模型以适应不同的识别需求。作为本项目可扩展性的探索方向,您可以在TableDec中初始化PPStructure时携带structure_version属性用于选择不同的模型。例如:
self.table_engine = PPStructure(show_log=True, image_orientation=True, structure_version='PP-Structure', **kwargs)
  • 目前支持PP-StructurePP-StructureV2两种模型,默认使用PP-StructureV2
    • paddleocr设定的全局模型参数
DEFAULT_STRUCTURE_MODEL_VERSION = 'PP-StructureV2'
SUPPORT_STRUCTURE_MODEL_VERSION = ['PP-Structure', 'PP-StructureV2']
  • 模型对应的下载链接和字典路径
{
  'PP-Structure': {
    'table': {
      'en': {
        'url': 'https://paddleocr.bj.bcebos.com/dygraph_v2.0/table/en_ppocr_mobile_v2.0_table_structure_infer.tar',
        'dict_path': 'ppocr/utils/dict/table_structure_dict.txt'
      }
    }
  },
  'PP-StructureV2': {
    'table': {
      'en': {
        'url': 'https://paddleocr.bj.bcebos.com/ppstructure/models/slanet/en_ppstructure_mobile_v2.0_SLANet_infer.tar',
        'dict_path': 'ppocr/utils/dict/table_structure_dict.txt'
      },
      'ch': {
        'url': 'https://paddleocr.bj.bcebos.com/ppstructure/models/slanet/ch_ppstructure_mobile_v2.0_SLANet_infer.tar',
        'dict_path': 'ppocr/utils/dict/table_structure_dict_ch.txt'
      }
    },
    'layout': {
      'en': {
        'url': 'https://paddleocr.bj.bcebos.com/ppstructure/models/layout/picodet_lcnet_x1_0_fgd_layout_infer.tar',
        'dict_path': 'ppocr/utils/dict/layout_dict/layout_publaynet_dict.txt'
      },
      'ch': {
        'url': 'https://paddleocr.bj.bcebos.com/ppstructure/models/layout/picodet_lcnet_x1_0_fgd_layout_cdla_infer.tar',
        'dict_path': 'ppocr/utils/dict/layout_dict/layout_cdla_dict.txt'
      }
    }
  }
}
  • 可以看到,PP-StructureV2模型使用了layouttable两种模型,分别是:picodet_lcnet_x1_0_fgd_layout_cdla_inferch_ppstructure_mobile_v2.0_SLANet

3.4.1 版面分析模型

模型名称模型简介推理模型大小下载地址dict path
picodet_lcnet_x1_0_fgd_layout基于PicoDet LCNet_x1_0和FGD蒸馏在PubLayNet 数据集训练的英文版面分析模型,可以划分文字、标题、表格、图片以及列表5类区域9.7M推理模型 / 训练模型PubLayNet dict
ppyolov2_r50vd_dcn_365e_publaynet基于PP-YOLOv2在PubLayNet数据集上训练的英文版面分析模型221.0M推理模型 / 训练模型同上
picodet_lcnet_x1_0_fgd_layout_cdlaCDLA数据集训练的中文版面分析模型,可以划分为表格、图片、图片标题、表格、表格标题、页眉、脚本、引用、公式10类区域9.7M推理模型 / 训练模型CDLA dict
picodet_lcnet_x1_0_fgd_layout_table表格数据集训练的版面分析模型,支持中英文文档表格区域的检测9.7M推理模型 / 训练模型Table dict
ppyolov2_r50vd_dcn_365e_tableBank_word基于PP-YOLOv2在TableBank Word 数据集训练的版面分析模型,支持英文文档表格区域的检测221.0M推理模型同上
ppyolov2_r50vd_dcn_365e_tableBank_latex基于PP-YOLOv2在TableBank Latex数据集训练的版面分析模型,支持英文文档表格区域的检测221.0M推理模型同上

3.4.2 表格识别模型

模型名称模型简介推理模型大小下载地址
en_ppocr_mobile_v2.0_table_structure基于TableRec-RARE在PubTabNet数据集上训练的英文表格识别模型6.8M推理模型 / 训练模型
en_ppstructure_mobile_v2.0_SLANet基于SLANet在PubTabNet数据集上训练的英文表格识别模型9.2M推理模型 / 训练模型
ch_ppstructure_mobile_v2.0_SLANet基于SLANet的中文表格识别模型9.3M推理模型 / 训练模型

三、总结

  • 通过本项目,您可以了解到如何使用飞桨PP-Structure实现图片到Excel的转换。我们提供了环境配置、代码实现和模型选择的详细步骤。如果您在使用过程中遇到任何问题,欢迎在ModelScope创空间-智能图片识别表格上提出issue,我们会及时为您解答。
  • 希望本项目能够帮助您提高工作效率,享受数字化办公的便捷。如果您觉得本项目对您有帮助,请给项目点个star,并持续关注我的个人主页ModelBulider的个人主页

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1936209.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Linux-mysql数据备份恢复

MySQL数据备份与恢复 一、备份介绍 1、为什么要备份 备份:能够防止由于机械故障以及人为误操作带来的数据丢失,例如将数据库文件保存在了其它地方。 冗余: 数据有多份冗余,但不等备份,只能防止机械故障带来的数据丢…

netty如何结合Zookeeper如何高并发的代码实现步骤 —— 慧哥充电桩开源平台

Netty是一个高性能、异步事件驱动的NIO(非阻塞IO)网络通信框架,而Zookeeper是一个分布式、开放源码的分布式应用程序协调服务,常用于维护配置信息、命名空间和提供分布式同步。 在高并发环境下,Netty与Zookeeper的结合…

昇思25天学习打卡营第13天 | mindspore 实现 ShuffleNet 图像分类

1. 背景: 使用 mindspore 学习神经网络,打卡第 13 天;主要内容也依据 mindspore 的学习记录。 2. 迁移学习介绍: mindspore 实现 ShuffleNet 图像分类; ShuffleNet 基本介绍: ShuffleNetV1 是旷视科技提…

RabbitMQ学习实践一:MQ的安装

文章是本人在学习springboot实现消息队列功能时所经历的过程的记录,仅供参考,如有侵权请随时指出。 参考文章地址: RabbitMQ安装与入门_rabbitmq win11配置-CSDN博客 RabbitMQ入门到实战一篇文章就够了-CSDN博客 RabbitMQ系列&#xff08…

进程通信(5):POSIX消息队列

随进程持续:IPC对象一直存在直到最后一个进程关闭该对象为止(管道和FIFO)。 随内核持续:IPC对象存在一直到内核自举(系统重新启动)或者显示删除该对象。 如System V消息队列,System V信号量,S…

固态继电器的实际使用和有效应用

固态继电器(SSR)已成为现代电气和电子系统中不可或缺的组件,与传统的机电继电器相比具有众多优势。在本文中,我们将深入探讨SSR的实际方面、其应用以及有效部署的关键考虑因素。 什么是固态继电器? 固态继电器是使用半导体器件(如…

ORB_SLAM2 ORBSLAM2 Ubuntu20.04 ROS Noetic虚拟机镜像下载

下图是build.sh 和 build_ros.sh 编译完成截图: slam测试视频: orbslam2 ubuntu20.04 test 下载地址(付费使用,不能接受请勿下载): 链接:https://pan.baidu.com/s/16R7Pb6LjgR5SeoeBSZfgaQ?pwdu05r 提取…

前端小知识点——按钮之间出现很小的空隙如何规避

前端小知识点——按钮之间出现很小的空隙如何规避 文章介绍问题再现总结 文章介绍 本文主要介绍页面中两个按钮相邻时会出现一点空隙,导致在后续自定义填充的时候出现换行或其它问题,特此记录。 问题再现 这个图片能看到我们给外面的div设置的是300的宽…

stack模拟实现【C++】

文章目录 全部的实现代码放在了文章末尾什么是适配器模式?stack准备工作包含头文件定义命名空间类的成员变量 默认成员函数emptysizetoppushpop全部代码 全部的实现代码放在了文章末尾 stack的模拟实现我采用了C适配器模式 stack的适配器一般是deque,也…

SpringBoot系列—2.SpringBoot拦截器篇

SpringBoot系列—1.IDEA搭建SpringBoot框架 SpringBoot系列—2.SpringBoot拦截器篇 SpringBoot系列—3.SpringBoot Redis篇 SpringBoot系列—4.SpringBoot 整合Mybatis、MP(MyBatis-Plus) SpringBoot系列—5.SpringBoot 整合Mybatis-Plus分页 1.新建拦截…

C# 之工控机数据类型 高低位(大小端)、BitConverter、IsLittleEndian、字节数组转换(高低位)

八种基本数据类型:byte、short、int、long、float、double、boolean、char byte 8位、有符号的以二进制补码表示的整数 min : -128(-2^7) max: 127(2^7-1) default: 0 对应包装类:Byte short 16位、有符号的以二进制补码表示…

将微信聊天记录导出成html等格式

通过github上的开源项目WechatMsg,可以将微信中的聊天记录(包括文字、图片、语音、表情包甚至拍一拍)导出,方便我们随时分享和查看,此外还有聊天记录分析等有趣的功能,感兴趣的小伙伴可以研究一下。我个人认…

静态网站怎么更新数据

今天看到个问题 我不是行业从业者,但目前遇到一个问题 我公司网站为纯静态,除了直接从html里修改文字外能不能这样 建立一个xml或者txt文档,其中有很多信息,例如网站名称,电话,备案号等,一行一行…

AI赋能项目集成:我的实战经验与洞见

背景 在传统的教学模式中,教师往往难以兼顾每位学生的个性化需求,学习信息的收集与分析也受限于时间和精力的限制,难以做到全面而深入。然而,每位学生都是独一无二的个体,他们拥有不同的学习风格、兴趣偏好以及理解能…

【IC前端虚拟项目】sanity_case的编写与通包测试

【IC前端虚拟项目】数据搬运指令处理模块前端实现虚拟项目说明-CSDN博客 在花了大力气完成reference model之后,整个验证环境的搭建就完成了,再多看一下这个结构然后就可以进行sanity_case和通包测试: 关于sanity_case和通包测试我在很多篇文章中说过好多次了在这里就不赘述…

如何安装Visual Studio Code

Visual Studio Code(简称 VS Code) Visual Studio Code 是一款由微软开发的免费、开源的现代化轻量级代码编辑器。 主要特点包括: 跨平台:支持 Windows、Mac 和 Linux 等主流操作系统,方便开发者在不同平台上保持一…

ETL电商项目总结

ETL电商项目总结 ETL电商业务简介及各数据表关系 业务背景 ​ 本案例围绕某个互联网小型电商的订单业务来开发。某电商公司,每天都有一些的用户会在线上采购商品,该电商公司想通过数据分析,查看每一天的电商经营情况。例如:电商…

科普文:字节码class文件和字节码增强技术

1. 引言 1.1. 什么是字节码 Java字节码是指Java语言编译后生成的一种二进制文件格式,它包含了Java程序的所有信息,包括类信息、方法信息、变量信息等。字节码是Java程序执行的基础,它被用于实现Java虚拟机(JVM)的加载…

随手记:vsCode修改主题色为自定义颜色

因为工作需要长时间面对vscode,视力不好,想要把工具改成护眼色,于是就把vscode改成了自定义的护眼色 效果图: 操作步骤: 快捷键打开设置页面: 按住ctrlshiftp 选择Open setting 按回车键 打开setting页面编…

【STM32CubeMX】一 TIME定时器Mode and Configuration的详解

使用STM32CubeMX软件学习配置定时器,对Mode and Configuration进行分析各部分选项的功能。本次以TIM2为例进行分析。 一、 Slave Mode 可以配置的选项有: Disable External Clock Mode 1 外部时钟源模式1 Reset Mode 复位模式 Gated Mode 门控模式 Tri…