pytesseract是基于Python的OCR工具, 底层使用的是Tesseract-OCR 引擎,支持识别图片中的文字,支持jpeg, png, gif, bmp, tiff等图片格式。

本文概要

  • tesseract-ocr安装,以及python开发环境搭建
  • PDF转为imge后
  • 通过 pytesseract 识别中文的示例

环境搭建

1)安装 tesseract-ocr

操作系统 : Ubuntu 22.04
apt install tesseract-ocr
安装中文语言包
apt install tesseract-ocr-chi-sim
添加环境变量TESSDATA_PREFIX
cd ~
vim .bashrc , 添加环境变量,将路径更换为本机路径。
export TESSDATA_PREFIX=/usr/share/tesseract-ocr/4.00/tessdata

2)准备Python环境

创建虚拟环境
mkdir tess
python3 –m venv tess
cd tess
激活虚拟环境
source bin/activate

安装相关库
pip3 install pillow
pip3 install pytesseract
pip3 install pdf2image

新建1个测试项目目录
mkdir myproject
cd myproject

准备1个pdf文件,本例主要是验证pytesseract 基本功能,未涉及图像增强处理,因此测试用的 PDF要求文字清晰。

编写代码

新建1个文件,内容如下

import pytesseract
from PIL import  Image
import os
from pdf2image import convert_from_path
from io import BytesIOif os.path.exists("result.txt"):os.remove("result.txt")
fo = open("result.txt","w")pages=convert_from_path("text-2.pdf")for i,page in enumerate(pages):buf = BytesIO()page.save(buf,format="JPEG")buf.seek(0)img_page=Image.open(buf)txt=pytesseract.image_to_string(img_page,lang='chi_sim')fo.write(txt+"\n")print(f"No {i} page result: {txt}")fo.close()

说明如下

  • pages=convert_from_path("text-2.pdf"), 读取pdf文件,并将其转换为 image 列表,每页pdf转为1页page.
  • for i,page in enumerate(pages) 循环处理所有图片
  • buf = BytesIO() 这里使用 ByteIO 缓存来模拟文件流,操作与读写文件类似,不需要保存为实际Image文件了, 可加快速度,
  • img_page=Image.open(buf) , 用pillow读取图像,其格式可做为 tesseract 的输入。
  • txt=pytesseract.image_to_string(img_page,lang='chi_sim') , 调用 tesseract的 imgage_to_string() 方法识别图片中的文字, lang=“chi_sim” 是指文字类型为中文简体,识别后的文字保存在txt变量中。
  • fo.write(txt+"\n") , 保存识别结果到文件

测试

原PDF文件为

识别结果:

靖难之役与建文帝生死之谜(1)明太祖朱元璋有二十六个儿子,他因自己出身插微,当上旦帝后,生怕那些
开国元勋“尾大不掉” 将长子立为太子,九子、二十六子早死,其余二十三个
儿子都封王建藩。燕王朱棣、晋王朱桐、宁王朱权等率兵驻守北方,抵御蒙古;
轩王朱、齐王朱村等驻于内地各省, 监督地方官吏。朱元璋规定, 如遇奸臣专权,
洲王可以声讨奸臣,甚至可以发兵“清君侧” 他的本意是企图     室亲戚来维
护星权,丈不知事与愿违。
位理应由朱多习的父亲朱标继承,朱标作为长子,早就被立为太子。可惜
岂英年早逝,死于洪武二十五年(1392 年),朱元璋按照病长子继承的原则,把
长孙朱允蚊立为皇储。洪武三十一年 (1398 年) 朱元璋病逝,长孙朱允灼即位。
出生于洪武十年(1377 年) 的朱允,此时已是一个英姿勃发的青年了,书生气
十足而又温文尔雅, 却缺少祖父与报父们雄才大略的草苦习气。他在位仅仅四年,
就被叔父一一燕王朱棣赶下台,祸根是他的祖父朱元璋种下的。
朱元璋给儿子们封王建藩,并授予他们“清君人出”特权的做法,同样出身插
微的刘邦也采用过。刘邦建立汉朝后,立即分封同姓诸侯王,作为刘家天下的屏
障。出乎意料的是,那些同姓诸侯王野心勃勃,与中央分庭抗礼。汉景帝接受晃
错的“削藩”主张,引来了洲王的反叛一一吴楚七国之乱,他们的借口就是“请
诛晃错,以清君侧”

还可以调整配置参数,获取更好效果:

custom_oem_psm_config = r'--oem 2 --psm 6'
pytesseract.image_to_string(image, config=custom_oem_psm_config, lang="chi_sim")

更详细请参考
pytesseract 项目目录
tesseract 官方文档

使用 pytesseract 实现PDF中文识别(附源码及解释)相关推荐

  1. 简单实现 Android M 指纹识别(附源码)

    众所周知, Android阵营里的指纹兼容真可谓是一团糟, 每个厂家几乎都有一套自己的API, 直到Android M的出现, 才慢慢地走上正途. 那么今天我们就一起来探讨一下, Android M里 ...

  2. [实例开发教程] Unity3D 创建迷你地图中文教程 附源码

    打开你的 Unity project: 1.选择 GameObject -> Create Other -> Camera, 重命名为你想要的 2.选择 Assets -> Crea ...

  3. 【Python机器学习】聚类算法任务,评价指标SC、DBI、ZQ等系数详解和实战演示(附源码 图文解释)

    需要源码和数据集请点赞关注收藏后评论区留言私信~~~ 一.聚类任务 设样本集S={x_1,x_2,-,x_m}包含m个未标记样本,样本x_i=(x_i^(1),x_i^(2),-,x_i^(n))是一 ...

  4. OpenCV+TensorFlow图片手写数字识别(附源码)

    初次接触TensorFlow,而手写数字训练识别是其最基本的入门教程,网上关于训练的教程很多,但是模型的测试大多都是官方提供的一些素材,能不能自己随便写一串数字让机器识别出来呢?纸上得来终觉浅,带着这 ...

  5. 迁移学习人民币面值识别(附源码)-InceptionResNetV2

    向AI转型的程序员都关注了这个号

  6. java使用freemark实现word(.doc/.docx)/pdf生成和导出(附源码和模板文件)

    freemark生成word/pdf 一. 背景 二.实现的技术选型以及遇到的坑 三.最终的效果 2.1 `.doc` word效果展示 2.1 `.docx` word效果展示 2.2 docx w ...

  7. 人脸检测MTCNN和人脸识别Facenet(附源码)

    原文链接:人脸检测MTCNN和人脸识别Facenet(附源码) 在说到人脸检测我们首先会想到利用Harr特征提取和Adaboost分类器进行人脸检测(有兴趣的可以去一看这篇博客第九节.人脸检测之Haa ...

  8. PyQt5 + Python3.7 + OpenCV人脸识别身份认证系统(附源码)

    基于PyQt5 + Python3.7 + OpenCV实现的人脸识别身份认证系统,附源码. 技术选型 PyQt5 + Python3.7 + OpenCV 功能概述 实现人员注册,信息修改,人脸识别 ...

  9. 疯狂python讲义视频 百度云-疯狂Python讲义 PDF高清版附源码

    内容简介 本书全面,深入地介绍了Python编程的相关内容,大致可分为四个部分.*系统部分介绍了Python的基本语法结构,函数编程,类和对象,模块和包,异常处理等: 第二部分主要介绍Python常用 ...

  10. 反光衣识别算法冠军方案总结(附源码)|极市打榜

    反光衣识别算法冠军方案总结(附源码)|极市打榜 原创 CV开发者都爱看的 [极市平台](javascript:void(0)

最新文章

  1. python tableview_在PyQ中清除TableView
  2. 【综述】MV3D-Net、AVOD-Net 用于自动驾驶的多视图3D目标检测网络
  3. Nature封面,硅量子计算达到99%的准确率
  4. 【读书笔记《Android游戏编程之从零开始》】17.游戏开发基础(游戏适屏的简述和作用、让游戏主角动起来)...
  5. keil 使用AC6 中文警告解决办法
  6. Oracle客户端安装教程
  7. 《后浪》刷屏力图破壁二次元,B站还有哪些短板?
  8. [Xcode 实际操作]四、常用控件-(5)UILabel文本标签自定义文字样式
  9. sqlite to mysql_SqliteToMysql官方版
  10. 洛谷P1984 SDOI2008烧水问题
  11. java集合终极总结
  12. SAS(十二)PROC步
  13. 《哪吒》票房直指40亿,闯中国影史前三!导演饺子:最怕你的梦想只有一腔热血
  14. 电容倍增器作为电源滤波器
  15. 共享充电宝广告机功能与特点
  16. 初始C语言——求算法,求1-1/2+1/3-1/4+……+1/99-1/100的值
  17. unity3d 一键截图与调用
  18. springboot停车场车辆定位管理可视化分析系统的设计与实现毕业设计源码101702
  19. ColorMatrix 5*5颜色矩阵
  20. C#.NET 窗体停靠控件WeifenLuo.WinFormsUI.Docking.dll的使用

热门文章

  1. MP3音频解码详细过程(二)
  2. Renderdoc截帧
  3. FPGA信号处理系列文章——定点数据截位处理
  4. 用javascript的正则表达式来验证Email地址是否格式正确
  5. K8S应用(一)—— master节点完整安装教程
  6. PostgreSQL中创建空间拓展(创建空间数据库)并连接到空间数据库,导入数据表操作
  7. 服务器操作系统有哪些?
  8. 在VC6.0下设置Unicode编译环境
  9. C语言因式分解的程序框图,C语言编写方案-因式分解
  10. kaggle下载output中的文件