对双栏 | 单双栏混合 | 图表文字混合的复杂布局的图片OCR识别(对布局复杂的整个pdf进行OCR识别)

简介: 这个故事告诉我们要多尝试不同的库和引擎,尤其是需求比较偏门或者少见的时候。同一个方向不同的库所擅长的领域是不一样的。 博客不应该只有代码和解决方案,重点应该在于给出解决方案的同时分享思维模式,只有思维才能可持续地解决问题,只有思维才是真正值得学习和分享的核心要素。如果这篇博客能给您带来一点帮助,麻烦您点个赞支持一下,还可以收藏起来以备不时之需,有疑问和错误欢迎在评论区指出~


一、常用的OCR识别工具

  先上一个表,分享一下我最近接触到的三个OCR引擎,其实各有各的特点,说不上最好和最坏,按需使用。

识别引擎 python库 识别准确度 识别速度 特点
tesseract pytesseract 较差 最慢 可二次训练,可调整识别速度,可识别复杂布局
paddleOCR ppstructure 较好 最快 表格识别准确
CnOCR Pix2Text 一般 一般 中文识别率不错,能识别公式转化为Latex

  这里需要强调一个问题,识别准确度是针对手写体、内容残缺或者噪声较多的图片,如果是清晰度高的纯文本图片,这几个引擎实测识别率都在99%以上,非常准确。至于识别速度的问题,最慢的tesseract在识别一篇20页的论文PDF(识别结果一千多行)的时候,也大概只用了2-3分钟,这个按照项目需求选用吧。

二、确定布局情况的分割方法

2.1、在线分割工具

  如果只有少量的图片,那就可以直接对图片下手,然后随便使用一个OCR工具即可

  免费的图片分割网站:Split PDF pages in the middle using DeftPDF online for free

2.2、代码分割

  如果能够确定批量图片的布局情况,比如确定图片都是双栏的布局,也可以使用一个分割脚本。就是获取图片的宽高,然后将图片拆分为高度不变,宽度为原图的一半就行(如果不是均分的两栏就按照实际比例分割)这个实现代码到处都是,就不占用篇幅赘述了。

三、重点:布局不规律,无法事先预料情况下的内容识别

3.1、需求重述

①问题

  最近做了一个需求,要求用户上传论文的PDF,然后就能通过OCR获取其中的信息,关键是要做成一个web的功能,面向一般的用户,再加上论文的布局是复杂多样的,没法预设。

  可是如果把双列内容不做任何处理去识别,结果往往是将左边一列的第一行和右边一列的第一行视作同一行,可真正的阅读顺序应该是将左边一列读完再读右边一列的第一行。

②解决

  后来寻思让用户指出哪几页是双栏,哪几页是单栏,这样不但麻烦,而且有的页面同时有单栏和双栏(图片表格单栏,正文双栏),用户体验肯定不好,最后发现pytesseract是可以处理内容的位置信息,识别布局情况,并且可以按照正常的阅读习惯将识别的内容拼接,于是问题迎刃而解。

3.2、代码实现

  废话不多说,上代码,记得提前安装tesseract引擎,并下载需要的训练库。

import pytesseract
from PIL import Image
import os
import fitz
# 设置TESSDATA_PREFIX环境变量,这是你自己的训练库所在位置,训练库去官网下载
# os.environ['TESSDATA_PREFIX'] = r'D:\Program Files\Tesseract-OCR\tessdata'
# 设置Tesseract OCR引擎的路径,下载的引擎路径
pytesseract.pytesseract.tesseract_cmd = r'D:\Program Files\Tesseract-OCR\tesseract.exe'
def recognize_text_from_pdf(pdf_path, output_path, language='eng+chi_sim'):
    # 打开PDF文件
    pdf_document = fitz.open(pdf_path)
    all_text = ""
    # 将PDF的每一页转化为图片,再识别内容
    for pg in range(pdf_document.page_count):
        page = pdf_document[pg]
        rotate = int(0)
        # 清晰度在这改(设为1.33333333是1056x816像素;设为2是>1584x1224像素)
        zoom_x = 2
        zoom_y = 2
        mat = fitz.Matrix(zoom_x, zoom_y).prerotate(rotate)
        pix = page.get_pixmap(matrix=mat, alpha=False)
        image = Image.frombytes("RGB", [pix.width, pix.height], pix.samples)
        # 使用Tesseract OCR引擎识别图片中的文本
        text = pytesseract.image_to_string(image, lang=language)
        all_text += text + "\n\n"
    # 关闭PDF文件
    pdf_document.close()
    with open(output_path+'/'+'pdf1output.txt', 'w', encoding='utf-8') as file:
        file.write(all_text)
# PDF路径和输出路径
pdf_path = './data/chinese.pdf'
output_folder = './output'
recognize_text_from_pdf(pdf_path, output_folder)

image.gif

3.3、测试效果

  测试下方这张从论文中拆分出来的图片,其中图表都是单栏,正文是双栏。识别结果完全符合读者的阅读顺序(只是图表内容可能会错位,这个方面tesseract确实不太行)

image.gif 编辑

四、总结

       这个故事告诉我们要多尝试不同的库和引擎,尤其是需求比较偏门或者少见的时候。同一个方向不同的库所擅长的领域是不一样的。

       更多OCR方面的小技巧和经验贴:各种常用OCR,分享特殊情况下的OCR解决方案

       博客不应该只有代码和解决方案,重点应该在于给出解决方案的同时分享思维模式,只有思维才能可持续地解决问题,只有思维才是真正值得学习和分享的核心要素。如果这篇博客能给您带来一点帮助,麻烦您点个赞支持一下,还可以收藏起来以备不时之需,有疑问和错误欢迎在评论区指出~

相关文章
|
13天前
|
人工智能 自然语言处理 算法
科研论文翻译神器!BabelDOC:开源AI工具让PDF论文秒变双语对照,公式图表全保留
BabelDOC 是一款专为科学论文设计的开源AI翻译工具,采用先进的无损解析技术和智能布局识别算法,能完美保留原文格式并生成双语对照翻译。
386 11
科研论文翻译神器!BabelDOC:开源AI工具让PDF论文秒变双语对照,公式图表全保留
|
12天前
|
文字识别 BI
【工具教程】批量PDF和图片OCR识别指定区域文字自动改图片名字,多个区域一次性批量识别改名批量重命名
本内容介绍了一款用于企业档案、医院病历及办公文件管理的图片和PDF文字识别工具。通过框选识别区域,软件可批量提取关键信息,实现文件重命名或导出为表格,极大提升管理效率。支持图片与PDF两种模式,操作简单,适用于合同、病历、报告等场景。提供详细步骤指导,包含区域设置、文件导入、批量处理及结果校验等功能。
77 8
|
26天前
|
人工智能 文字识别 自然语言处理
1.6K star!这个开源文本提取神器,5分钟搞定PDF/图片/Office文档!
Kreuzberg 是一个基于 Python 的文本提取库,支持从 PDF、图像、Office 文档等 20+ 格式中提取文本内容。采用 MIT 开源协议,具备本地处理、异步架构、智能 OCR 等特性,特别适合需要隐私保护的文档处理场景。
|
1月前
|
文字识别 BI API
3.4K star!全能PDF处理神器开源!文档转换/OCR识别一键搞定
PDF-Guru 是一款开箱即用的全能型PDF处理工具,支持跨平台文档转换、智能OCR识别、多格式解析等核心功能。项目采用模块化架构设计,提供简洁的Web界面和API接口,开发者可快速集成到现有系统中。
|
2月前
|
人工智能 编解码 文字识别
OCRmyPDF:16.5K Star!快速将 PDF 文件转换为可搜索、可复制的文档的命令行工具
OCRmyPDF 是一款开源命令行工具,专为将扫描的 PDF 文件转换为可搜索、可复制的文档。支持多语言、图像优化和多核处理。
432 17
OCRmyPDF:16.5K Star!快速将 PDF 文件转换为可搜索、可复制的文档的命令行工具
|
2月前
|
文字识别 Serverless 开发工具
【全自动改PDF名】批量OCR识别提取PDF自定义指定区域内容保存到 Excel 以及根据PDF文件内容的标题来批量重命名
学校和教育机构常需处理成绩单、报名表等PDF文件。通过OCR技术,可自动提取学生信息并录入Excel,便于统计分析和存档管理。本文介绍使用阿里云服务实现批量OCR识别、内容提取、重命名及导出表格的完整步骤,包括开通相关服务、编写代码、部署函数计算和设置自动化触发器等。提供Python示例代码和详细操作指南,帮助用户高效处理PDF文件。 链接: - 百度网盘:[链接](https://pan.baidu.com/s/1mWsg7mDZq2pZ8xdKzdn5Hg?pwd=8866) - 腾讯网盘:[链接](https://share.weiyun.com/a77jklXK)
180 5
|
2月前
|
文字识别 BI
【图片型PDF】批量识别扫描件PDF指定区域局部位置内容,将识别内容导出Excel表格或批量改名文件,基于阿里云OCR对图片型PDF识别改名案例实现
在医疗和政务等领域,图片型PDF文件(如病历、报告、公文扫描件)的处理需求广泛。通过OCR技术识别这些文件中的文字信息,提取关键内容并保存为表格,极大提高了信息管理和利用效率。本文介绍一款工具——咕嘎批量OCR系统,帮助用户快速处理图片型PDF文件,支持区域识别、内容提取、导出表格及批量改名等功能。下载工具后,按步骤选择处理模式、进行区域采样、批量处理文件,几分钟内即可高效完成数百个文件的处理。
239 8
|
3月前
|
机器学习/深度学习 人工智能 文字识别
Zerox:AI驱动的万能OCR工具,精准识别复杂布局并输出Markdown格式,支持PDF、DOCX、图片等多种文件格式
Zerox 是一款开源的本地化高精度OCR工具,基于GPT-4o-mini模型,支持PDF、DOCX、图片等多种格式文件,能够零样本识别复杂布局文档,输出Markdown格式结果。
289 4
Zerox:AI驱动的万能OCR工具,精准识别复杂布局并输出Markdown格式,支持PDF、DOCX、图片等多种文件格式
|
4月前
|
人工智能 文字识别 数据挖掘
MarkItDown:微软开源的多格式转Markdown工具,支持将PDF、Word、图像和音频等文件转换为Markdown格式
MarkItDown 是微软开源的多功能文档转换工具,支持将 PDF、PPT、Word、Excel、图像、音频等多种格式的文件转换为 Markdown 格式,具备 OCR 文字识别、语音转文字和元数据提取等功能。
690 9
MarkItDown:微软开源的多格式转Markdown工具,支持将PDF、Word、图像和音频等文件转换为Markdown格式
|
4月前
|
JavaScript
jquery图片和pdf文件预览插件
EZView.js是一款jquery图片和pdf文件预览插件。EZView.js可以为图片和pdf格式文件生成在线预览效果。支持的文件格式有pdf、jpg、 png、jpeg、gif。
128 16

热门文章

最新文章