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

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

需求背景

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)

代码目录

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

 避坑:在main.py中的【images = convert_from_path(fname, **kwargs)】这句话中,直接采用先进先出的方式取出列表中的对象进行使用,否则会导致内存泄露并无法释放

grayscale=True参数表示采用灰度方式,尽可能的避免pdf中大量色彩导致识别率下降,识别速度降低等问题

 考虑采用 最新的【Tesseract-OCR】并加入到系统变量中,因为最新的识别速度将大大提高!

最终运行结果

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

你可能感兴趣的:(人工智障,python,开发语言,后端,图像识别,ocr)