python+pytesseract本地pdf识别转文字,图片识别转文字,避坑大量识别转文字时的内存泄露问题解决

需求背景

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】并加入到系统变量中,因为最新的识别速度将大大提高!

最终运行结果

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值