需求背景
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】并加入到系统变量中,因为最新的识别速度将大大提高!
最终运行结果
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)