展开菜单
首页 精品内容 本月促销 装机必备 Windows PDF教程 macOS软件 IOS软件 Android AI 专题
全部分类

当前位置:

首页 > 编程开发 > Python OCR文档解析的完整代码演示

Python OCR文档解析的完整代码演示

文档解析涉及检查文档中的数据并提取有用的信息。它可以通过自动化减少了大量的手工工作。一种流行的解析策略是将文档转换为图像并使用计算机视觉进行识别。而文档图像分析(DocumentImageAnalysis)是指从文档的图像的像素数据中获取信息的技术,在某些情况下,预期结果应该是什么样的没有明确的答案(文本、图像、图表、数字、表格、公式……)。OCR(OpticalCharacterRecognition,光学字符识别)是通过计算机视觉对图像中的文本进行检测和提取的过程。它是在第一次世界大战期间发

本文目录

    Python OCR文档解析的完整代码演示

    文档解析涉及检查文档中的数据并提取有用的信息。它可以通过自动化减少了大量的手工工作。一种流行的解析策略是将文档转换为图像并使用计算机视觉进行识别。而文档图像分析(Document Image Analysis)是指从文档的图像的像素数据中获取信息的技术,在某些情况下,预期结果应该是什么样的没有明确的答案(文本、图像、图表、数字、表格、公式……)。

    Python OCR文档解析的完整代码演示

    OCR (Optical Character Recognition,光学字符识别)是通过计算机视觉对图像中的文本进行检测和提取的过程。它是在第一次世界大战期间发明的,当时以色列科学家伊曼纽尔·戈德堡(Emanuel Goldberg)发明了一台能读取字符并将其转换为电报代码的机器。到了现在该领域已经达到了一个非常复杂的水平,混合图像处理、文本定位、字符分割和字符识别。基本上是一种针对文本的对象检测技术。

    在本文中我将展示如何使用OCR进行文档解析。我将展示一些有用的Python代码,这些代码可以很容易地用于其他类似的情况(只需复制、粘贴、运行),并提供完整的源代码下载。

    这里将以一家上市公司的PDF格式的财务报表为例(链接如下)。

    https://s2.q4cdn.com/470004039/files/doc_financials/2021/q4/_10-K-2021-(As-Filed).pdf

    Python OCR文档解析的完整代码演示

    检测和提取该PDF中的 文本、图形和表格

    环境设置

    文档解析令人烦恼的部分是,有太多的工具用于不同类型的数据(文本、图形、表格),但没有一个能够完美地工作。下面是一些最流行方法和软件包:

    •  以文本方式处理文档:用PyPDF2提取文本,用Camelot或TabulaPy提取表,用PyMuPDF提取图形。
    •  将文档转换为图像(OCR):使用pdf2image进行转换,使用PyTesseract以及许多其他的库提取数据,或者只使用LayoutParser。

    也许你会问:“为什么不直接处理PDF文件,而要把页面转换成图像呢?”你可以这么做。这种策略的主要缺点是编码问题:文档可以采用多种编码(即UTF-8、ASCII、Unicode),因此转换为文本可能会导致数据丢失。因此为了避免产生该问题,我将使用OCR,并用pdf2image将页面转换为图像,需要注意的是PDF渲染库Poppler是必需的。

    # with pip
    pip install python-poppler
    # with conda
    conda install -c conda-forge poppler

    你可以很容易地读取文件:

    # READ AS IMAGE
    import pdf2imagedoc = pdf2image.convert_from_path("doc_apple.pdf")
    len(doc) #<-- check num pages
    doc[0] #<-- visualize a page

    跟我们的截图一模一样,如果想将页面图像保存在本地,可以使用以下代码:

    # Save imgs
    import osfolder = "doc"
    if folder not in os.listdir():
     os.makedirs(folder)p = 1
    for page in doc:
     image_name = "page_"+str(p)+".jpg"
     page.save(os.path.join(folder, image_name), "JPEG")
     p = p+1

    最后,我们需要设置将要使用的CV引擎。LayoutParser似乎是第一个基于深度学习的OCR通用包。它使用了两个著名的模型来完成任务:

    Detection: Facebook最先进的目标检测库(这里将使用第二个版本Detectron2)。

    pip install layoutparser torchvision && pip install "git+https://github.com/facebookresearch/detectron2.git@v0.5#egg=detectron2"

    Tesseract:最著名的OCR系统,由惠普公司在1985年创建,目前由谷歌开发。

    pip install "layoutparser[ocr]"

    现在已经准备好开始OCR程序进行信息检测和提取了。

    import layoutparser as lp
    import cv2
    import numpy as np
    import io
    import pandas as pd
    import matplotlib.pyplot as plt

    检测

    (目标)检测是在图片中找到信息片段,然后用矩形边框将其包围的过程。对于文档解析,这些信息是标题、文本、图形、表……

    让我们来看一个复杂的页面,它包含了一些东西:

    Python OCR文档解析的完整代码演示

    这个页面以一个标题开始,有一个文本块,然后是一个图和一个表,因此我们需要一个经过训练的模型来识别这些对象。幸运的是,Detectron能够完成这项任务,我们只需从这里选择一个模型,并在代码中指定它的路径。

    Python OCR文档解析的完整代码演示

    我将要使用的模型只能检测4个对象(文本、标题、列表、表格、图形)。因此,如果你需要识别其他东西(如方程),你就必须使用其他模型。

    ## load pre-trained model
    model = lp.Detectron2LayoutModel(
     "lp://PubLayNet/mask_rcnn_X_101_32x8d_FPN_3x/config",
     extra_config=["MODEL.ROI_HEADS.SCORE_THRESH_TEST", 0.8],
     label_map={0:"Text", 1:"Title", 2:"List", 3:"Table", 4:"Figure"})
    ## turn img into array
    i = 21
    img = np.asarray(doc[i])
    ## predict
    detected = model.detect(img)
    ## plot
    lp.draw_box(img, detected, box_width=5, box_alpha=0.2,
     show_element_type=True)

    Python OCR文档解析的完整代码演示

    结果包含每个检测到的布局的细节,例如边界框的坐标。根据页面上显示的顺序对输出进行排序是很有用的:

    ## sort
    new_detected = detected.sort(key=lambda x: x.coordinates[1])
    ## assign ids
    detected = lp.Layout([block.set(id=idx) for idx,block in
     enumerate(new_detected)])## check
    for block in detected:
     print("---", str(block.id)+":", block.type, "---")
     print(block, end='nn')

    Python OCR文档解析的完整代码演示

    完成OCR的下一步是正确提取检测到内容中的有用信息。

    提取

    我们已经对图像完成了分割,然后就需要使用另外一个模型处理分段的图像,并将提取的输出保存到字典中。

    由于有不同类型的输出(文本,标题,图形,表格),所以这里准备了一个函数用来显示结果。

    '''
    {'0-Title': '...',
    '1-Text': '...',
    '2-Figure': array([[ [0,0,0], ...]]),
    '3-Table': pd.DataFrame,
    }
    '''
    def parse_doc(dic):
     for k,v in dic.items():
     if "Title" in k:
     print('x1b[1;31m'+ v +'x1b[0m')
     elif "Figure" in k:
     plt.figure(figsize=(10,5))
     plt.imshow(v)
     plt.show()
     else:
     print(v)
     print(" ")

    首先看看文字:

    # load model
    model = lp.TesseractAgent(languages='eng')
    dic_predicted = {}
    for block in [block for block in detected if block.type in ["Title","Text"]]:
     ## segmentation
     segmented = block.pad(left=15, right=15, top=5,
     bottom=5).crop_image(img)
     ## extraction
     extracted = model.detect(segmented)
     ## save
     dic_predicted[str(block.id)+"-"+block.type] =
     extracted.replace('n',' ').strip()
    # check
    parse_doc(dic_predicted)

    Python OCR文档解析的完整代码演示

    再看看图形报表

    for block in [block for block in detected if block.type == "Figure"]:
     ## segmentation
     segmented = block.pad(left=15, right=15, top=5,
     bottom=5).crop_image(img)
     ## save
     dic_predicted[str(block.id)+"-"+block.type] = segmented
    # check
    parse_doc(dic_predicted)

    Python OCR文档解析的完整代码演示

    上面两个看着很不错,那是因为这两种类型相对简单,但是表格就要复杂得多。尤其是我们上看看到的的这个,因为它的行和列都是进行了合并后产生的。

    for block in [block for block in detected if block.type == "Table"]:
     ## segmentation
     segmented = block.pad(left=15, right=15, top=5,
     bottom=5).crop_image(img)
     ## extraction
     extracted = model.detect(segmented)
     ## save
     dic_predicted[str(block.id)+"-"+block.type] = pd.read_csv(
     io.StringIO(extracted) )
    # check
    parse_doc(dic_predicted)

    Python OCR文档解析的完整代码演示

    正如我们的预料提取的表格不是很好。好在Python有专门处理表格的包,我们可以直接处理而不将其转换为图像。这里使用TabulaPy 包:

    import tabula
    tables = tabula.read_pdf("doc_apple.pdf", pages=i+1)
    tables[0]

    Python OCR文档解析的完整代码演示

    结果要好一些,但是名称仍然错了,但是效果要比直接OCR好的多。

    总结

    本文是一个简单教程,演示了如何使用OCR进行文档解析。使用Layoutpars软件包进行了整个检测和提取过程。并展示了如何处理PDF文档中的文本,数字和表格。

    本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系bd@zhengruan.com
    作者最新文章
    编程开发 Python OCR
    相关文章 更多
    精品专题 更多
    装机必备

    正软商城装机必备专区,精选办公、浏览器、安全防护、影音播放、压缩解压、设计创作和系统工具等电脑常用正版软件,帮助用户快速完成新电脑软件配置。

    Windows

    正软商城Windows软件专区,汇集适用于Windows电脑的办公、设计、安全防护、影音播放、开发工具和系统优化软件,提供软件介绍、系统要求、正版授权及购买下载服务。

    PDF教程

    正软商城PDF教程频道提供PDF编辑、转换、合并、拆分、压缩及格式处理方法,同时介绍常用PDF软件和工具的使用技巧。

    macOS软件

    正软商城macOS软件专区,精选适用于Mac电脑的办公、设计、影音、效率、开发和系统工具,提供软件功能介绍、macOS兼容版本、正版授权及购买下载服务。

    IOS软件

    正软商城iOS软件专区,精选适用于iPhone和iPad的办公、学习、影音、设计、效率及AI应用,提供功能介绍、适用设备、系统要求和正版获取方式等信息。

    AI

    正软商城AI软件专区,汇集AI写作、AI绘画、AI视频、AI办公、AI编程、AI翻译、智能客服和数据分析等人工智能工具,提供功能介绍、适用平台、收费方式及正版购买信息。

    Mac软件 更多
    Aperty macOS版
    Aperty macOS版

    Aperty 是 Skylum 推出的 AI 人像修图软件,支持自然肤质修饰、瑕疵处理、面部与身体调整、预设及批量同步。

    火山引擎 网页版
    火山引擎 网页版

    火山引擎是字节跳动旗下企业级云与AI服务平台。聚焦大模型核心能力,依托字节自研豆包多模态大模型,凭借火山方舟一站式平台,提供模型精调、推理部署、智能应用搭建等全链路服务,结合高性能AI算力,助力各行业快速落地大模型数字化与智能化应用。

    立刻MV 网页版
    立刻MV 网页版

    立刻MV 面向音乐人、内容创作者和品牌团队,帮助用户低成本完成歌曲 MV、歌词视频、AI 分镜、图生视频与最终合成。

    蛙蛙写作 网页版
    蛙蛙写作 网页版

    蛙蛙写作 AI 创作工具,覆盖小说、剧本、文案,一键生成文稿,打通文字转视频全流程,高效解决创作难题。

    讯飞智作 网页版
    讯飞智作 网页版

    讯飞智作是一款基于语音合成技术、虚拟人驱动技术与数字人形象声音构建能力的 AI 数字人音视频创作平台。

    超级简历WonderCV 网页版
    超级简历WonderCV 网页版

    超级简历WonderCV是面向应届生和AI小白的智能求职平台,覆盖简历、面试与职业规划。

    音述AI 网页版
    音述AI 网页版

    音述AI,是一个以“用声音述说故事”为核心的 AI 音乐创作与声音分享社区。

    AionClaw macOS版
    AionClaw macOS版

    AionClaw 是可在桌面端运行的任务型 AI 助手,通过数字专家与技能市场组合办公、创作、数据和开发能力。

    Loomy macOS版
    Loomy macOS版

    Loomy 是科大讯飞推出的桌面 AI 助手,可通过对话、任务与工作目录协助处理办公、内容创作和资料整理。

    AirBuddy 3 macOS版
    AirBuddy 3 macOS版

    AirBuddy 3 是面向 macOS 的蓝牙外设增强工具,可集中查看 AirPods、Beats 与苹果设备电量,提供快速连接、播放控制、电量提醒、桌面小组件和多台 Mac 外设接力等功能。

    AirServer macOS版
    AirServer macOS版

    AirServer macOS版可把 Mac 转换为无线投屏接收端,通过 AirPlay 或 Google Cast 接收手机、平板和电脑画面,并支持多设备同时连接、高清镜像及会话录制,适合家庭娱乐、课堂教学、会议演示和应用展示。

    AnyDesk macOS版
    AnyDesk macOS版

    AnyDesk macOS版是一款适用于远程办公、设备维护和客户支持的远程桌面工具,可连接并操作异地计算机,支持文件传输、无人值守访问、会话权限控制及跨平台协作。

    WINDOWS 更多
    讯飞绘文 网页版
    讯飞绘文 网页版

    讯飞绘文网页版是科大讯飞推出的AI图文创作与内容运营工具,覆盖热点选题、文章生成、稿件校对、智能配图、排版发布和数据复盘等环节,适合自媒体创作者及内容团队在线使用。

    Maya(Autodesk Maya) Windows版
    Maya(Autodesk Maya) Windows版

    Autodesk Maya 是面向影视、电视、动画和游戏行业的专业三维制作软件,集多边形与 NURBS 建模、角色绑定、关键帧和动作捕捉动画、Bifrost 特效模拟、材质开发及 Arnold 渲染于一体,

    Aperty Windows版
    Aperty Windows版

    Aperty 是 Skylum 推出的 AI 人像修图软件,支持自然肤质修饰、瑕疵处理、面部与身体调整、预设及批量同步。

    火山引擎 网页版
    火山引擎 网页版

    火山引擎是字节跳动旗下企业级云与AI服务平台。聚焦大模型核心能力,依托字节自研豆包多模态大模型,凭借火山方舟一站式平台,提供模型精调、推理部署、智能应用搭建等全链路服务,结合高性能AI算力,助力各行业快速落地大模型数字化与智能化应用。

    立刻MV 网页版
    立刻MV 网页版

    立刻MV 面向音乐人、内容创作者和品牌团队,帮助用户低成本完成歌曲 MV、歌词视频、AI 分镜、图生视频与最终合成。

    蛙蛙写作 网页版
    蛙蛙写作 网页版

    蛙蛙写作 AI 创作工具,覆盖小说、剧本、文案,一键生成文稿,打通文字转视频全流程,高效解决创作难题。

    讯飞智作 网页版
    讯飞智作 网页版

    讯飞智作是一款基于语音合成技术、虚拟人驱动技术与数字人形象声音构建能力的 AI 数字人音视频创作平台。

    超级简历WonderCV 网页版
    超级简历WonderCV 网页版

    超级简历WonderCV是面向应届生和AI小白的智能求职平台,覆盖简历、面试与职业规划。

    音述AI 网页版
    音述AI 网页版

    音述AI,是一个以“用声音述说故事”为核心的 AI 音乐创作与声音分享社区。

    AionClaw Windows版
    AionClaw Windows版

    AionClaw 是可在桌面端运行的任务型 AI 助手,通过数字专家与技能市场组合办公、创作、数据和开发能力。

    Loomy Windows版
    Loomy Windows版

    Loomy 是科大讯飞推出的桌面 AI 助手,可通过对话、任务与工作目录协助处理办公、内容创作和资料整理。

    AirServer Windows版
    AirServer Windows版

    AirServer Windows版可把电脑变成AirPlay、Google Cast和Miracast无线投屏接收端,适合会议演示、课堂教学及家庭大屏分享。发送设备通常无需另装客户端,并可同时接收和智能排列多个镜像会话。