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 BytesIO
if 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 官方文档