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

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

版面分析是将文档图像进行文档对象识别并判断各区域所属类别,如配图、表格、公式、分栏等,并对不同类型的区域进行切分、识别。后面的工作是实现包括组卷、以题搜题、文档电子化存储、结构化解析等功能。
版面分析的背景介绍:
image.png
目标:
image.png
图像版面分析任务拆解:
image.png
PDF转Word:
image.png
本实战采用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/

相关文章
|
1月前
|
机器学习/深度学习 API 开发工具
视觉智能平台常见问题之实现卡通效果图如何解决
视觉智能平台是利用机器学习和图像处理技术,提供图像识别、视频分析等智能视觉服务的平台;本合集针对该平台在使用中遇到的常见问题进行了收集和解答,以帮助开发者和企业用户在整合和部署视觉智能解决方案时,能够更快地定位问题并找到有效的解决策略。
117 3
|
1月前
|
人工智能 数据可视化 搜索推荐
Katalist官网体验入口 生成式AI视觉故事板工具
【2月更文挑战第26天】Katalist官网体验入口 生成式AI视觉故事板工具
51 4
Katalist官网体验入口 生成式AI视觉故事板工具
|
3月前
|
机器学习/深度学习 人工智能 文字识别
文档图像智能分析与处理:CCIG技术论坛的思考与展望
文档图像智能分析与处理:CCIG技术论坛的思考与展望
70 1
文档图像智能分析与处理:CCIG技术论坛的思考与展望
|
机器学习/深度学习 JSON 算法
智能零售柜商品检测软件(Python+YOLOv5深度学习模型+清新界面)
智能零售柜商品检测软件(Python+YOLOv5深度学习模型+清新界面)
587 0
|
1月前
|
人工智能 编解码 数据安全/隐私保护
才发现百度自带的AI图片助手这么好用,去水印、画质优化、AI扩图、涂抹消除等功能一应俱全!
才发现百度自带的AI图片助手这么好用,去水印、画质优化、AI扩图、涂抹消除等功能一应俱全!
202 0
|
1月前
|
机器学习/深度学习 算法 开发工具
视觉智能平台常见问题之视频封面输出的图片会出现过曝如何解决
视觉智能平台是利用机器学习和图像处理技术,提供图像识别、视频分析等智能视觉服务的平台;本合集针对该平台在使用中遇到的常见问题进行了收集和解答,以帮助开发者和企业用户在整合和部署视觉智能解决方案时,能够更快地定位问题并找到有效的解决策略。
22 0
|
6月前
|
SQL 弹性计算 自然语言处理
AIGC-知识库-LLM:在云上从0开始搭建智能问答机器人Streamlit网页版
本文描述在阿里云上从0开始构建个人/企业专属,具备私域知识库+LLM智能问答能力的网页版聊天机器人。网页采用streamlit实现,知识库技术方案使用了Lindorm AI数据服务平台知识库能力,LLM使用了开源ChatGLM2-6B。 Streamlit使用起来非常简便,可以让开发者快速(短则几十分钟即可)搭建一个具备公网访问能力的网页。尤其在人工智能开发上,可使用Streamlit快速搭建应用环境,让开发人员将更多精力集中在人工智能本身,本文从0开始详细讲解整个应用的构建过程,代码实现了一个简洁的具备公网访问能力的网页版聊天机器人。
|
9月前
|
人工智能 城市大脑 API
基于阿里云视觉智能开放平台的动漫化视频产出方案
阿里云视觉智能开放平台的现有API能力,做出一个批量化生成动漫化视频的方案。
634 2
基于阿里云视觉智能开放平台的动漫化视频产出方案
|
9月前
|
开发工具 计算机视觉 文字识别
接入阿里视觉智能平台免费体验—人脸人体识别ocr与二次元风格转化使用
接入阿里视觉智能平台免费体验—人脸人体识别ocr与二次元风格转化使用
21245 4
接入阿里视觉智能平台免费体验—人脸人体识别ocr与二次元风格转化使用
|
10月前
|
语音技术 信息无障碍
直播源码搭建平台技术知识:实时语音识别字幕呈现功能
回到我们的直播源码平台开发上来,对于直播源码平台来说实时语音识别字幕呈现功能也是重要的功能之一,好了,正式进入我们今天的主题内容:直播源码搭建平台技术知识:实时语音识别字幕呈现功能!
直播源码搭建平台技术知识:实时语音识别字幕呈现功能