CNOCR和PaddleOCR提取pdf中文字-个人记录

目录

一、PyMuPDF

二、CNOCR

 三、PaddleOCR

四、Tesseract(没试)


一、PyMuPDF

1.安装PyMuPDF

pip install pymupdf

2.pdf转txt样例

import os
import datetime
import fitz  # fitz就是pip install PyMuPDFdef pyMuPDF_fitz(pdfPath):startTime_pdf2img = datetime.datetime.now()  # 开始时间text_list = []pdfDoc = fitz.open(pdfPath)for page in pdfDoc:text = page.get_text()text_list.append(text)text_list = "\n".join(text_list)try:with open("/home/bingxing2/ailab/group/ai4agr/wzf/LLM/txt/test.txt", 'a+') as neirong:neirong.write(text_list)except IOError as e:print("An error occurred while writing the file:", e)endTime_pdf2img = datetime.datetime.now()  # 结束时间print('pdf2img时间=', (endTime_pdf2img - startTime_pdf2img).seconds)def process_all_pdfs_in_directory(directory):for filename in os.listdir(directory):if filename.endswith('.pdf'):pdf_path = os.path.join(directory, filename)pyMuPDF_fitz(pdf_path)if __name__ == "__main__":# 指定PDF所在的目录pdf_directory = r'/home/bingxing2/ailab/group/ai4agr/wzf/LLM/pdf/'process_all_pdfs_in_directory(pdf_directory)

注:

pymupdf不能直接提取表格,要使用pdfplumber来实现

提取图片使用img=page.getImageList()

提取后发现,文字可以正常提取但是数字不能正常提取

原因:数字在PDF文件中以图像形式呈现,而不是文本形式。这种情况下,提取数字就需要进行OCR(光学字符识别)处理

因此先将pdf转为图片,在对图片提取文字(采用cnocr、paddleocr、tesseract)

pdf转图片:

import os
import datetime
import fitz  # fitz就是pip install PyMuPDFdef pdf_to_images(directory, filename, output_folder):pdf_path = os.path.join(directory, filename)pdf_doc = fitz.open(pdf_path)for page_number in range(len(pdf_doc)):page = pdf_doc[page_number]image = page.get_pixmap(matrix=fitz.Matrix(4, 4), alpha=False)image_path = os.path.join(output_folder, f"{filename[:-4]}_page_{page_number + 1}.png")image.save(image_path)pdf_doc.close()def process_all_pdfs_in_directory(directory, output_folder):#pdf to imgfor filename in os.listdir(directory):if filename.endswith('.pdf'):pdf_to_images(directory, filename, output_folder)if __name__ == "__main__":# 指定PDF所在的目录pdf_directory = r'/home/bingxing2/ailab/group/ai4agr/wzf/LLM/pdf/books/'# 指定输出图片的目录output_folder = r'/home/bingxing2/ailab/group/ai4agr/wzf/LLM/images/books/'process_all_pdfs_in_directory(pdf_directory, output_folder)

二、CNOCR

1.安装cnocr

pip install cnocr

2.图片转文字,存入同一个txt文件


import cnocr
import os
import datetimedef recognize_text(txt_directory, image_directory):# 初始化 cnocrocr = cnocr.CnOcr()text = []for filename in os.listdir(image_directory):if filename.endswith('.png'):startTime_pdf2img = datetime.datetime.now()  # 开始时间image_path = os.path.join(image_directory, filename)# 读取图片并识别文字results = ocr.ocr(image_path)# text = [result['text'] for result in results]text = ''.join([result['text'].replace('\n', '') for result in results])# print(text)# sys# 读取一张写入一张with open(txt_directory, 'a+', encoding='utf-8') as f:f.write(text + '\n')endTime_pdf2img = datetime.datetime.now()  # 结束时间print('img2txt时间 =', (endTime_pdf2img - startTime_pdf2img).seconds, ",", filename, "已写入")return textif __name__ == "__main__":# 图片文件路径image_directory = '/home/bingxing2/ailab/group/ai4agr/wzf/LLM/images/books'# txt文件路径txt_directory = "/home/bingxing2/ailab/group/ai4agr/wzf/LLM/txt/test.txt"# 识别文字recognize_text(txt_directory, image_directory)

 三、PaddleOCR

步骤:

1.安装PaddleOCR

2.准备pdf文件

3.将pdf转为图片,在对图片提取文字

安装:

1.安装PaddleOCR

pip install "paddleocr>=2.0.1"

2.安装paddlepaddle (默认安装cpu版本,gpu版本目前似乎不支持arm64架构?安装指南-使用文档-PaddlePaddle深度学习平台)

gpu版本安装官网:开始使用_飞桨-源于产业实践的开源深度学习平台

pip install paddlepaddle -i https://mirror.baidu.com/pypi/simple

验证paddlepaddle是否安装成功

进入python环境验证paddle是否安装成功
python
import paddle
paddle.utils.run_check() 

3. 图片转文字,存入同一个txt文件

import paddleocr
import os
import datetime
import fitzdef recognize_text(txt_directory, image_directory, pdf_directory):# 初始化 PaddleOCRocr = paddleocr.PaddleOCR(use_angle_cls=True, lang='ch')for filename in os.listdir(pdf_directory):if filename.endswith('.pdf'):pdf_path = os.path.join(pdf_directory, filename)pdf_doc = fitz.open(pdf_path)for page_number in range(len(pdf_doc)):image_path = os.path.join(image_directory, f"{filename[:-4]}_page_{page_number + 1}.png")startTime_pdf2img = datetime.datetime.now()  # 开始时间# 读取图片并识别文字results = ocr.ocr(image_path, cls=True)text = ''.join([result[1][0] for result in results[0]])# print(text)# 写入识别结果到文本文件with open(txt_directory, 'a+', encoding='utf-8') as f:f.write(text + '\n')endTime_pdf2img = datetime.datetime.now()  # 结束时间print('img2txt时间 =', (endTime_pdf2img - startTime_pdf2img).seconds, ",", f"{filename[:-4]}_page_{page_number + 1}.png", "已写入")if __name__ == "__main__":# 图片文件路径image_directory = '/home/bingxing2/ailab/group/ai4agr/wzf/LLM/images/books'# txt文件路径txt_directory = "/home/bingxing2/ailab/group/ai4agr/wzf/LLM/txt/testpaddlepaddleocr.txt"# 指定PDF所在的目录pdf_directory = '/home/bingxing2/ailab/group/ai4agr/wzf/LLM/pdf/books/'# 识别文字recognize_text(txt_directory, image_directory, pdf_directory)

4.报错:

from paddleocr import PaddleOCR
import reocr = PaddleOCR(lang="ch")  # 使用中文识别
result = ocr.ocr("/home/bingxing2/ailab/group/ai4agr/wzf/LLM/images/page_1.png")for line in result:(myenv)  [scxlab0069@paraai-n32-h-01-ccs-master-1 wzf]$ python /home/bingxing2/ailab/group/ai4agr/wzf/LLM/ocr/paddleocr/img_to_txt.py
download https://paddleocr.bj.bcebos.com/PP-OCRv4/chinese/ch_PP-OCRv4_det_infer.tar to /home/bingxing2/ailab/scxlab0069/.paddleocr/whl/det/ch/ch_PP-OCRv4_det_infer/ch_PP-OCRv4_det_infer.tar
100%|███████████████████████████████████████████████████████████████████████| 4.89M/4.89M [00:00<00:00, 13.9MiB/s]--------------------------------------
C++ Traceback (most recent call last):
--------------------------------------
0   inflateReset2----------------------
Error Message Summary:
----------------------
FatalError: `Segmentation fault` is detected by the operating system.[TimeInfo: *** Aborted at 1715233076 (unix time) try "date -d @1715233076" if you are using GNU date ***][SignalInfo: *** SIGSEGV (@0x4ad7b62366b7a28) received by PID 4127064 (TID 0x40000b615370) from PID 913013288 ***]Segmentation faultprint(line)  # 输出识别结果 报错

解决办法:paddlepaddle2.6版本太高了,重新安装paddlepaddle2.5.2版本即可, 参考CPU版本下的报错信息:`Segmentation fault` is detected by the operating system · Issue #12075 · PaddlePaddle/PaddleOCR · GitHub

四、Tesseract(没试)

1.安装依赖

>  yum install autoconf automake libtool  libjpeg-devel libpng-devel libtiff-devel zlib-devel make

报错,没限权。改为pip,报错。原因:libjpeg-devellibpng-devellibtiff-develzlib-devel 这些包通常是系统软件包管理器(如 yum)提供的,而不是通过 Python 包管理器(如 pip)安装的。它们是用于开发和编译过程中的依赖库,不是 Python 包。 

2.安装依赖的Leptonica库

wget https://github.com/DanBloomberg/leptonica/releases/download/1.80.0/leptonica-1.80.0.tar.gztar -xzvf leptonica-1.80.0.tar.gzcd leptonica-1.80.0./configure --prefix=/home/tess4j/leptonica-1.80.0  && make && make install

3,将 Leptonica加入环境变量

vim /etc/profile插入export LD_LIBRARY_PATH=$LD_LIBRARY_PAYT:/home/tess4j/leptonica-1.80.0/libexport LIBLEPT_HEADERSDIR=/home/tess4j/leptonica-1.80.0/includeexport PKG_CONFIG_PATH=/home/tess4j/leptonica-1.80.0/lib/pkgconfig

 退出后让配置生效

source /etc/profile

 4.安装Tesseract-OCR

wget https://github.com/tesseract-ocr/tesseract/archive/refs/tags/4.1.1.tar.gz重名名下压缩包mv 4.1.1.tar.gz tesseract-4.1.1.tar.gztar -xzvf tesseract-4.1.1.tar.gz cd tesseract-4.1.1/./autogen.sh./configure --prefix=/home/tess4j/tesseract-4.1.1  && make && make installsudo ldconfig

 5.配置Tesseract环境变量

vim /etc/profilePATH=$PATH:/home/tess4j/tesseract-4.1.1/bin
export PATH
export TESSDATA_PREFIX=/home/temp/tessData  ##注意:该位置是训练库所在文件目录
export PATH=$PATH:$TESSDATA_PREFIXsource /etc/profile

6.测试安装是否成功

tesseract --version

 7.测试

识别图片命令
tesseract 567.png outputteee -l chi_sim+eng参数说明
tesseract = 命令
567.png=当前目录文件
outputteee=会在当前目录生成outputteee.txt文件
-l chi_sim+eng=中文+英文,如果是单个语言-l chi_sim就可以了

 参考:

Linux 最全安装Tesseract_linux安装tesseract-CSDN博客

参考:

PaddleOCR—图片文字识别提取—快速使用教程_paddleocr使用教程-CSDN博客

Paddlepaddle-GPU版本安装_paddlepaddle-gpu 安装版本-CSDN博客

【paddle-gpu2.5版本安装踩坑记录】_paddle2.5-CSDN博客 

PaddleOCR详解和识别图片中文字_paddle ocr-CSDN博客

PaddleOCR详解和识别图片中文字_paddle ocr-CSDN博客

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/11156.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

47岁古天乐唯一承认女友约「御用阿妈」过母亲节

日前关宝慧在IG晒出一张聚会照&#xff0c;并写道&#xff1a;「预祝各位#母亲节快乐&#x1f339;#dinner #happy #friends #好味」相中所见&#xff0c;前TVB金牌监制潘嘉德、卢宛茵、黄&#x28948;莹、黎萨达姆都有出席饭局。 当中黄&#x28948;莹身穿卡其色西装褛&…

blender 为世界环境添加纹理图像

1、打开世界环境配置项 2、点击颜色右侧的黄色小圆&#xff0c;选择环境纹理 3、打开一张天空图像 4、可以通过调整强度/力度&#xff0c;调整世界环境的亮度

《工具分享-整合功能网页》标星5.3k⭐开发人员的在线工具集:it-tools

IT Tools - 为方便开发人员提供的在线工具 部署自己的it-tools: 有两个版本&#xff0c;目前有中文支持。 直接部署使用docker指令获取出来的是英文的&#xff1a; 英文版&#xff1a; docker run -d --name it-tools --restart unless-stopped -p 8080:80 corentinth/it-…

TCP服务器实现将客服端发送的信息广播发送(使用内核链表管理客户端信息)

目录 1.服务器端实现思路 2.服务器端代码 3.客户端代码 4.内核链表代码 5.运行格式 一、服务器端 二、客户端 6.效果 1.服务器端实现思路 Tcp广播服务初始化 等待客户端连接 广播发送 2.服务器端代码 #include "list.h" #include <signal.h> #def…

基于数据挖掘与机器学习揭秘脱发主因

&#x1f31f;欢迎来到 我的博客 —— 探索技术的无限可能&#xff01; &#x1f31f;博客的简介&#xff08;文章目录&#xff09; 基于数据挖掘与机器学习揭秘脱发主因 目录 一、绪论背景描述数据说明内容大概 二、导入包以及数据读取三、数据预览四、探究导致脱发的因素4.1…

连续因子要点和难点具体应用和代码实例

连续因子是指在实验设计或数据分析中,表示可以在一定范围内连续变化的自变量或因素。与离散因子不同,连续因子的取值是无限的,并且可以是任意精度的实数值。在实验设计和统计分析中,连续因子通常用于探索变量之间的关系、预测结果或优化系统性能。 要点和难点: 要点: …

yh-hw

1 为什么选择各项指标的加权值 因为训练样本分布不均&#xff0c;2700的数据行中&#xff0c;1700左右的样本是neutral&#xff0c;而加权平均考虑了每个类别的样本数量&#xff0c;将每个类别的指标与其样本数量相乘&#xff0c;然后求和后除以总样本数。这种方法使得样本量大…

2.3. 连续时间鞅-平方可积的连续鞅

平方可积的连续鞅 平方可积的连续鞅1. 随机区间和简单过程2. 简单过程随机积分的平方变差3. 连续鞅的平方变差过程3.1. 连续鞅与有限变差过程3.2. 连续鞅平方的分解3.3. 连续鞅的交互变差过程平方可积的连续鞅 1. 随机区间和简单过程 数学分析及实变函数论中, 在处理一般函数…

设计模式:迭代器模式(Iterator)

设计模式&#xff1a;迭代器模式&#xff08;Iterator&#xff09; 设计模式&#xff1a;迭代器模式&#xff08;Iterator&#xff09;模式动机模式定义模式结构时序图模式实现在单线程环境下的测试在多线程环境下的测试模式分析优缺点适用场景应用场景参考 设计模式&#xff1…

python爬虫(四)之九章智算汽车文章爬虫

python爬虫&#xff08;四&#xff09;之九章智算汽车文章爬虫 闲来没事就写一条爬虫抓取网页上的数据&#xff0c;现在数据已经抓完&#xff0c;将九章智算汽车文章的爬虫代码分享出来。当前代码采用python编写&#xff0c;可抓取所有文章&#xff0c;攻大家参考。 import r…

STL中的优先级队列

目录 1.引言 2.简介 3.基本操作 4.实现原理 5.自定义优先级比较 6.相关题目 7.能特点 8.总结 1.引言 在C标准库中&#xff0c;优先级队列是一种非常有用的数据结构&#xff0c;它允许我们根据元素的优先级来对其进行排序和访问。这种数据结构在多种应用场景中都发挥着重…

DockerFile介绍与使用

一、DockerFile介绍 大家好&#xff0c;今天给大家分享一下关于 DockerFile 的介绍与使用&#xff0c;DockerFile 是一个用于定义如何构建 Docker 镜像的文本文件&#xff0c;具体来说&#xff0c;具有以下重要作用&#xff1a; 标准化构建&#xff1a;提供了一种统一、可重复…

最大子矩阵:前缀和、动态规划

最近在学习动态规划&#xff0c;在牛客上刷题时碰到了这一题。其实最初的想法是暴力和前缀和&#xff0c;但是时间复杂度极高&#xff0c;需要套4层循环。后来去网上搜了一下相关的题解和做法&#xff0c;进而了解到了前缀和&#xff0b;线性动态规划的做法。但是在成功做出这题…

JVM 类的加载过程详解

文章目录 1. 哪些类需要加载2. 类加载步骤2.1 装载2.1.1 这个过程都做了什么事2.1.2 类的模板对象2.1.3 二进制流获取方式2.1.4 Class 实例的位置2.1.5 数组类的加载有什么不同 2.2 链接2.2.1 验证2.2.2 准备2.2.3 解析 2.3 初始化 1. 哪些类需要加载 在 Java 中数据类型分为 …

最好的网校在线教育系统,怎样才能有效的提高听课质量效率?

课堂是学生获得知识的主要渠道&#xff0c;课堂听课效率是会影响到学习效果的&#xff0c;听课质量是关系着学生学习成绩好和坏的因素之一&#xff0c;那怎样提高听课效率&#xff1f; 第一、养成课前预习。学生课前不预习&#xff0c;缺乏知识准备&#xff0c;容易导致上课听不…

Python 整数类型(int)详解:无限范围与多种进制

引言 在编程中&#xff0c;整数是最基本的数据类型之一。不同编程语言对整数的处理方式各不相同&#xff0c;这往往影响到程序的性能和开发者的选择。本文将深入探讨 Python 中的整数类型&#xff08;int&#xff09;&#xff0c;其独特的处理方式&#xff0c;以及它在日常编程…

Ubuntu24 文件目录结构——用户——权限 详解

目录 权限 用户 文件目录结构 一个目录可以有程序&#xff0c;目录&#xff0c;文件&#xff0c;以及这三者的链接。可以看到还分别有使用者和权限信息。 每个文件和目录都有与之关联的三个主要属性&#xff1a;所有者&#xff08;owner&#xff09;、组&#xff08;group&a…

软件工程期末复习(3)

软件生命周期 一般问题的解决过程&#xff1a; 问题的阐述&#xff1a;界定问题&#xff0c;用较宽的范围而不是细节来定义和描述待解问题&#xff1b; 问题的分析&#xff1a;问题定义的提炼&#xff0c;把问题分成可以理解和处理的子问题&#xff0c;进而提供基本细节&…

小区物业管理系统

文章目录 小区物业管理系统一、项目演示二、项目介绍三、部分功能截图四、部分代码展示五、底部获取项目源码&#xff08;9.9&#xffe5;带走&#xff09; 小区物业管理系统 一、项目演示 小区物业管理系统 二、项目介绍 基于springbootvue的前后端分离物业管理系统 系统角…

Java锁事

1.1 大厂面试题 一、Synchronized相关问题 1.Synchronized 用过吗&#xff0c;其原理是什么? 2.你刚才提到获取对象的锁&#xff0c;这个“锁”到底是什么?如何确定对象的领? 3.什么是可重入性&#xff0c;为什么说Synchronized是可重入锁? 4.JVM对Java的原生锁做了哪些优化…