需求背景
1.调用第三方接口存在调用量限制,还需要付费,识别量比较大,所以需要本地识别
技术实现
采用python+pytesseract+pdf2image+poppler实现pdf和图片转文字
具体代码【main.py】
import pytesseract
from pdf2image import convert_from_path
import os
import time
try:
import Image
except ImportError:
from PIL import Image
from sys import getsizeof
# TODO:存放pdf的位置
pdfPath = "./pdf"
def pdf_ocr(fname, **kwargs):
#优化避免图片一堆加载到内存中导致大量内存占用
images = convert_from_path(fname, **kwargs)
#创建文件 用于记录内容
txtName = os.path.basename(fname)
# TODO:存放结果的目录
txtPath = "./genText/"+txtName+".txt"
with open(txtPath,mode="w",encoding="utf-8") as f:
for index in range(len(images)):
item = images.pop(0)
if item != None:
text = pytesseract.image_to_string(item,lang="chi_sim")
del item
print(text)
f.write('\n'+text)
for filename in os.listdir(pdfPath):
file_path = os.path.join(pdfPath, filename)
fname = file_path
#创建图片缓存文件夹
imgtmpPath = "./imgtmp"
text = pdf_ocr(fname,fmt='jpeg',grayscale=True,output_folder=imgtmpPath,output_file="imgtemps",thread_count=6,poppler_path=r'【poppler的路径】')
print(text)
代码目录
避坑:在main.py中的【images = convert_from_path(fname, **kwargs)】这句话中,直接采用先进先出的方式取出列表中的对象进行使用,否则会导致内存泄露并无法释放
grayscale=True参数表示采用灰度方式,尽可能的避免pdf中大量色彩导致识别率下降,识别速度降低等问题
考虑采用 最新的【Tesseract-OCR】并加入到系统变量中,因为最新的识别速度将大大提高!
最终运行结果