首页 > 其他分享 >基于Aidlux平台的智能版面分析

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

时间:2024-01-09 20:00:35浏览次数:51  
标签:img Aidlux cv2 智能 result ti 版面 pdf path

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

版面分析的背景介绍:

基于Aidlux平台的智能版面分析_深度学习

目标:

基于Aidlux平台的智能版面分析_深度学习_02

图像版面分析任务拆解:

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

PDF转Word:

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

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

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

PyTorch、TensorFlow、MXNet等。

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

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

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

具体的代码如下:

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!")

效果视频:

https://www.bilibili.com/video/BV13K4y1r7gs/

标签:img,Aidlux,cv2,智能,result,ti,版面,pdf,path
From: https://blog.51cto.com/u_16211690/9165417

相关文章

  • 软件测试/人工智能/全日制测试开发|利用ChatGPT自动生成自动化测试脚本
    自动化测试是软件测试过程中不可或缺的一部分,它能够提高测试效率,减少测试成本,保障软件质量。然而,编写和维护自动化测试脚本仍然是一个具有挑战性的任务,需要花费大量的时间和精力。学会借助ChatGPT自动生成自动化测试脚本,就可以减少编写自动化脚本的工作量,提高测试效率。如何借助Cha......
  • 企业培训系统源码:构建智能、可扩展的学习平台
    企业培训系统在现代企业中扮演着至关重要的角色。本文将通过深度解析企业培训系统的源码,介绍如何构建一个智能、可扩展的学习平台,涉及关键技术和代码实例。1.技术栈选择与项目初始化在构建企业培训系统之前,选择适当的技术栈是至关重要的。以下是一个基于Django框架的Python项目初......
  • 视频分析丨AI智能分析网关V4如何进行在线播放?具体步骤是什么?
    AI智能分析网关V4是一款高效智能的边缘计算分析网关,可实现人体行为检测、车辆事件检测、环境卫生检测与消防事件检测等,广泛应用在工地、工厂、园区、楼宇、校园、仓储等场景中。将智能分析网关V4结合我们的视频融合平台EasyCVR一起使用,可以实现多现场的前端摄像头等设备统一集中接......
  • 智能电子秤——蓝牙厨房秤PCBA技术方案
     随着科技的发展,现代厨房工具越来越智能化。今天,我们就来介绍一款能够让烹饪变得更精准、更智能的蓝牙厨房秤的方案——它不仅能够帮助您轻松实现精确称量,还能与手机APP无缝连接,为您提供更多实用功能。下面就让我们一起来详细了解蓝牙厨房秤方案的特点及优势吧! 一、蓝牙厨房......
  • 中亿睿拼接屏助力东莞南山府花园项目,打造智能营销中心
    拼接屏在智能家居、智能办公等领域中的应用越来越广泛。其中,中亿睿拼接屏以其卓越的性能和品质,成为了众多企业和机构的首选。小编今天重点介绍一下中亿睿拼接屏如何助力东莞南山府花园项目,打造智能营销中心。一、 项目背景东莞南山府花园项目是一个高端住宅项目,为了更好地展示房源......
  • Java+springboot开发医院智能导诊小程序源码
    智慧医院如何实现智能导诊服务?1、数据收集和整合:医院需要收集和整合患者的医疗数据,包括病历、化验结果、影像资料等。同时,还可以整合相关的医学数据库和知识库,以便为导诊提供支持。2、患者信息采集:在患者来院时,可以通过智能问诊系统收集患者的基本信息、症状描述、病史等。这可以......
  • Java药物不良反应ADR智能监测系统源码
    药物不良反应(AdverseDrugReaction,ADR)是指在使用合格药品时,在正常的用法和用量下出现的与用药目的无关的有害反应。这些反应往往因药物种类、使用方式、个体差异等因素而异,可能导致患者身体不适、病情恶化。 为保障患者用药安全,及时发现药物不良反应迹象,亟需一套智能化监测系统......
  • AR眼镜定制_ar智能眼镜光学显示整机硬件解决方案
    当今的AR眼镜因为易于佩戴、轻巧耐用、功能强大而用途广泛。AR眼镜的使用场景非常广泛,不仅在消费级领域有应用,还包括旅游、教育、工业和医疗等领域。新的工业AR穿戴技术以及工业级语音交互操作系统,能够让一线工作者解放双手。远程协作、数据采集、数字工单等智能应用有助于......
  • 三维轮廓测量仪:革命性技术在工业智能制造中的多重应用
    现代工业智能制造领域中,三维轮廓测量仪是一项重要的测量技术。三维轮廓测量仪利用光学、激光或光电等技术手段,通过测量物体表面轮廓的三维坐标信息,能实现对物体形状、尺寸和表面特征的准确测量。它可以广泛应用于工业自动化、制造工艺控制、产品质量检测等领域,为工业生产提供了更......
  • 智能媒体计算(视频编解码课程)
    课程链接:https://edu.aliyun.com/course/315432/ 课程介绍高校精品课-华中科技大学-智能媒体计算出品讲师:于俊清课时列表 第0章:学习资源领取课时0:免费领取云资源额度 第1章:章节一共13课时课时1:科技革命28:42 课时2:互联网时代、课程简介36:44 课时3:走进多媒体、模拟信号的数......