Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >基于Aidlux平台的智能版面分析

基于Aidlux平台的智能版面分析

原创
作者头像
用户10686717
发布于 2024-01-09 11:52:01
发布于 2024-01-09 11:52:01
42800
代码可运行
举报
文章被收录于专栏:Aidlux人工智能Aidlux人工智能
运行总次数:0
代码可运行

版面分析是将文档图像进行文档对象识别并判断各区域所属类别,如配图、表格、公式、分栏等,并对不同类型的区域进行切分、识别。后面的工作是实现包括组卷、以题搜题、文档电子化存储、结构化解析等功能。

版面分析的背景介绍:

目标:

图像版面分析任务拆解:

PDF转Word:

本实战采用CDLA数据集(A Chinese document layout analysis (CDLA) dataset 进行YOLOv8训练,将训练结果生成的best.pth进行onnx转化:

首先,ONNX是一种通用的深度学习模型格式,支持广泛的深度学习框架,包括

PyTorch、TensorFlow、MXNet等。

因此,将PyTorch模型转换为ONNX格式可以方便地在其他框架上部署和运行。

其次,ONNX支持模型优化和压缩,可以将模型大小和计算性能进一步优化,以满足实际应用的需求。

在Aidlux平台上上传代码包后,分别进行相关配置后,进行PDF转图片->版面检测->文本检测和识别等流程,输出Word。

具体的代码如下:

代码语言:python
代码运行次数:0
运行
AI代码解释
复制
from layout_engine import *
# cap = cvs.VideoCapture()

if __name__ == "__main__":

    print("----------------------------- 相关配置 --------------------------------")
    # 加载检测和识别模型
    OCR_model = OcrEngine()
    layout_model = predictor.load_layout_model()
    print("-->模型加载成功")

    # 输入的PDF路径
    pdf_path = "inputs/paper1.pdf"
    pdf_name = pdf_path.split("/")[-1].split(".pdf")[0]

    print("----------------------------- PDF转图片 --------------------------")
    # 获取当前请求时间
    ti = time.localtime()
    date = f"{ti[0]}_{ti[1]}_{ti[2]}"
    uid = uuid.uuid4().hex[:10]

    # 需要储存图片的目录
    imagePath = f"outputs/pdf/{ti[0]}_{ti[1]}_{ti[2]}_{ti[3]}_{ti[4]}_{ti[5]}_{uid}"
    os.makedirs(imagePath, exist_ok=True)
    pyMuPDF_fitz(pdf_path, imagePath)

    # 创建一个doc文档,用于后续填充内容
    doc = docx.Document()
    default_section = doc.sections[0]
    default_section.page_width = Cm(21)
    default_section.page_height = Cm(30)

    pdf_image_path_list = os.listdir(imagePath)
    # os.listdir的数字从小到大排序
    pdf_image_path_list.sort(key=lambda x: int(x[:-4]))
    img_num = 0
    for pdf_image in tqdm.tqdm(pdf_image_path_list):
        print("----------------------------- 版面检测--------------------------")
        pdf_image_path = os.path.join(imagePath, pdf_image)
        im_cv2 = cv2.imread(pdf_image_path)
        im_b64 = np2base64(im_cv2)
        layout_result,results = predictor.layout_predict(layout_model, im_b64)
        results = results[0].plot()

        # 填充图像、表格、页眉、页脚区域为白色,避免文本OCR的干扰
        im_cv2_plot = im_cv2.copy()
        for item in layout_result:
            points = item.values()
            for point in points:
                im_cv2_plot = cv2.rectangle(im_cv2_plot, (point[0], point[1]), (point[2], point[3]), (255, 255, 255),
                                            -1)

        print("----------------------------- 文本检测和识别--------------------------")
        img_draw, result_list = OCR_model.text_predict(im_cv2_plot, 960)  # 文本检测和识别
        # 将绘制后的图片从BGR格式转换为RGB格式
        img_draw_PIL = Image.fromarray(cv2.cvtColor(results, cv2.COLOR_BGR2RGB))
        ocr_result = []
        for result in result_list:
            ocr_dict = {}
            box, text = result[0].tolist(), result[1]
            box_xy = [box[0][0], box[0][1], box[2][0], box[2][1]]
            ocr_dict[text] = box_xy
            ocr_result.append(ocr_dict)
            img_draw_PIL = cv2ImgAddText(img_draw_PIL, text, box[0][0], box[0][1])
        img_draw_cv = cv2.cvtColor(np.asarray(img_draw_PIL), cv2.COLOR_RGB2BGR)
        # cvs.imshow(img_draw_cv)
        cv2.imwrite(f"outputs/plot/{img_num}.jpg",img_draw_cv)
        img_num = img_num + 1

        print("----------------------------- 写入Word--------------------------")
        # 图片和文本行按照y轴方向进行排序(单栏适用,多栏请先做好分栏操作)
        final_result = ocr_result + layout_result
        final_result_sort = sorted(final_result, key=lambda x: x[list(x.keys())[0]][1])

        for item in final_result_sort:
            keys_list = item.keys()
            for key in keys_list:
                # 对图片和表格进行处理:裁剪-->保存-->写入Word文档
                if key in ["Figure", "Table"]:
                    points = item[key]
                    crop_img = im_cv2[points[1]:points[3], points[0]:points[2]]
                    uid = uuid.uuid4().hex[:10]
                    name = f"{ti[0]}_{ti[1]}_{ti[2]}_{ti[3]}_{ti[4]}_{ti[5]}_{uid}"
                    crop_img_path = f"outputs/crop/{name}.jpg"
                    cv2.imwrite(crop_img_path, crop_img)
                    doc.add_picture(crop_img_path, width=Cm(11))

                # 对页眉和页脚不做写入操作,跳过
                elif key in ["Header", "Footer"]:
                    continue

                # 对其他情况(Text正文部分):保存并设置字体和大小
                else:
                    paragraph = doc.add_paragraph()
                    run = paragraph.add_run(key)
                    font = run.font
                    font.name = 'Times New Roman'
                    font.size = docx.shared.Pt(11)

    # 保存文档
    word_name = f"{pdf_name}_{ti[0]}_{ti[1]}_{ti[2]}_{ti[3]}_{ti[4]}_{ti[5]}_{uid}"
    word_path = f'outputs/words/{word_name}.docx'
    doc.save(word_path)
    print("Done!")

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

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

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

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

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
OpenCv+Qt5.12.2:文字检测与文本识别
好久没有进行一些相关的更新的了,去年一共更新了四篇,最近一直在做音视频相关的直播服务,又是重新学习积攒经验的一个过程。去年疫情也比较严重,等到解封,又一直很忙,最近又算有了一些时间,所以想着可以做一些更新了,又拿起了 OpenCV,做一些相关更新了。其实代码相关的工作,在上一篇 OpenCV-摄像头相关的完成之后已经做完了,只是一直没有写相关博客,这次先给做完。
何其不顾四月天
2023/03/19
1.8K0
深度解读RAGFlow的深度文档理解DeepDoc
4 月 1 日,Infinity宣布端到端 RAG 解决方案 RAGFlow 开源,仅一天收获上千颗星,到底有何魅力? 我们来安装体验并从代码层面来分析看看。
JadePeng
2024/04/10
12.5K0
深度解读RAGFlow的深度文档理解DeepDoc
让OCR更简单 | PaddleOCR+OpenCV实现文字识别步骤与代码演示
本期将介绍并演示PaddleOCR+Python+OpenCV实现车牌识别、身份证信息识别和车票信息识别的步骤与效果。
Color Space
2021/03/10
9.8K2
在 C++ 项目中,通过源码使用 PaddlePaddle 实现 OCR 功能
如何在 C++ 项目中,通过源码使用 PaddlePaddle 实现 OCR 功能。 本项目的所有源码:gitee: paddleocr
绿巨人
2024/03/01
1.4K0
利用机器学习识别验证码(从0到1)
利用机器学习识别验证码的思路是:让计算机经过大量数据和相应标签的训练,计算机习得了各种不同标签之间的差别与关系。形成一个庞大的分类器。此时再向这个分类器输入一张图片。分类器将输出这个图片的“标签”。图片识别过程就完毕了。
李玺
2021/11/22
8430
利用机器学习识别验证码(从0到1)
基于 OpenCV 和 Dlib 头部姿态评估简单Demo
庐山烟雨浙江潮,未到千般恨不消。到得还来别无事,庐山烟雨浙江潮。 ----《庐山烟雨浙江潮》苏轼
山河已无恙
2023/08/21
7730
基于 OpenCV 和 Dlib 头部姿态评估简单Demo
opencv 视觉项目学习笔记(二): 基于 svm 和 knn 车牌识别
    训练数据: 所有训练数据存储再一个 N x M 的矩阵中, 其中 N 为样本数, M 为特征数(每个样本是该训练矩阵中的一行)。这些数据  所有数据存在  xml 文件中, 
用户2434869
2018/10/11
3.2K0
PP-Structure版面分析、表格识别使用指南
版面分析指的是对图片形式的文档进行区域划分,定位其中的关键区域,如文字、标题、表格、图片等。
算法之名
2022/10/31
6.9K0
机器视觉基础之PP-Structure入门
PaddleOCR下的PP-Structure一般用于文档图片的版面分析、表格识别等理解工作, 通俗些说就是自动帮助识别图片哪些部分是图片分组, 哪些是文字, 哪些是表格等, 且提取出里面的文字和图片内容。
Zeal
2023/01/11
3.8K0
Yolov8 源码解析(四十三)
ApacheCN_飞龙
2024/09/13
3420
基于Aidlux平台的工业视觉缺陷检测
工业视觉缺陷检测是一种利用计算机视觉技术,对工业制品进行自动化检测,以识别和分类可能存在的缺陷的方法。它是现代工业生产中的重要环节,可以大大提高生产效率,降低产品缺陷率,提高产品质量。
用户10686717
2023/09/08
4060
OpenPose 基于OpenCV DNN 的单人姿态估计
原文: OpenPose 基于OpenCV DNN 的单人姿态估计 - AIUAI
AIHGF
2019/04/01
3.5K0
OpenPose 基于OpenCV DNN 的单人姿态估计
PaddleOCR C++(三)---动态库返回识别结果及矩形位置
《PaddleOCR C++学习笔记(二)》尝试做图像的分割,结果都效果不明显,所以这篇我们从OCR识别这里来处理,将返回的识别字符和对应的识别矩形框都显示出来,用于区分识别的效果。
Vaccae
2021/07/30
2.3K1
PaddleOCR C++(三)---动态库返回识别结果及矩形位置
python智能图片识别系统(图片切割、图片识别、区别标识)
你好! python flask图片识别系统使用到的技术有:图片背景切割、图片格式转换(pdf转png)、图片模板匹配、图片区别标识。
用户6334815
2020/08/13
16.7K1
python智能图片识别系统(图片切割、图片识别、区别标识)
Transformers 4.37 中文文档(五)
目标检测是计算机视觉任务,用于检测图像中的实例(如人类、建筑物或汽车)。目标检测模型接收图像作为输入,并输出检测到的对象的边界框的坐标和相关标签。一幅图像可以包含多个对象,每个对象都有自己的边界框和标签(例如,它可以有一辆汽车和一座建筑物),每个对象可以出现在图像的不同部分(例如,图像可以有几辆汽车)。这个任务通常用于自动驾驶,用于检测行人、道路标志和交通灯等。其他应用包括在图像中计数对象、图像搜索等。
ApacheCN_飞龙
2024/06/26
5170
Transformers 4.37 中文文档(五)
关键点检测项目代码开源了!
本文通过自建手势数据集,利用YOLOv5s检测,然后通过开源数据集训练squeezenet进行手部关键点预测,最后通过指间的夹角算法来判断具体的手势,并显示出来。文章第四部分为用C++实现整体的ncnn推理(代码较长,可先马后看)
Datawhale
2022/02/17
8640
关键点检测项目代码开源了!
使用Python和OCR进行文档解析的完整代码演示(附代码)
来源:DeepHub IMBA本文约2300字,建议阅读5分钟本文中将使用Python演示如何解析文档(如pdf)并提取文本,图形,表格等信息。 文档解析涉及检查文档中的数据并提取有用的信息。它可以通过自动化减少了大量的手工工作。一种流行的解析策略是将文档转换为图像并使用计算机视觉进行识别。而文档图像分析(Document Image Analysis)是指从文档的图像的像素数据中获取信息的技术,在某些情况下,预期结果应该是什么样的没有明确的答案(文本、图像、图表、数字、表格、公式……)。 OCR (Op
数据派THU
2022/08/29
1.9K0
使用Python和OCR进行文档解析的完整代码演示(附代码)
【深入OpenCV图像处理:从基础到实战应用】
在医疗影像分析、工业质检、自动驾驶等领域,OpenCV作为计算机视觉的基石工具,为图像处理提供强大支持。本文将通过代码级细节剖析和工业级实践案例,系统讲解OpenCV核心功能,并深入解读参数配置原理。
机器学习司猫白
2025/03/05
3100
51. Python 数据处理(2)
#所以,由上代码可以分析出,如果文件原本就存在,而你要修改它,不能直接使用xlwt,必须使用 xlutils.copy 方法复制一份出来再修改,最后保存或覆盖原文件。
py3study
2020/01/10
6770
51. Python 数据处理(2)
《Aidlux智慧社区AI实战训练营》大作业总结及心得
https://mp.weixin.qq.com/s/ASnaFA7D4jfHWoO_IqQ6aQ
用户10149871
2023/02/26
6080
推荐阅读
相关推荐
OpenCv+Qt5.12.2:文字检测与文本识别
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档