我需要帮助从扫描的 pdf 中提取文本。我尝试使用 pymupdf、pillow 和 pytesseract 来提取它,但我没有得到正确的结果,有一些文本返回不正确。 我尝试增加清晰度和亮度,但仍然没有得到好的结果。
我已经使用 OpenCV 检查了很多答案,但我对 OpenCV 还很陌生。请帮忙。
def pdf_to_text(pdf_file,text_file_name,rotate_pdf=False,adj_sharpness=False,adj_contract=False,adj_brightness=False):
try:
doc = fitz.open(pdf_file)
zoom_x=2.5
zoom_y=2.5
mat = fitz.Matrix(zoom_x,zoom_y)
files = []
for n in range(doc.page_count):
#print(f'Extracting {n} image')
page = doc.load_page(n)
if rotate_pdf:
page.set_rotation(-90)
#pix = page.get_pixmap(dpi=600)
pix = page.get_pixmap(alpha=False,matrix=mat,dpi=300)
folder=os.path.join(os.getcwd(),"images")
if not os.path.exists(folder):
os.makedirs(folder)
fname = os.path.join(folder,"page-%i.png"%n)
pix.save(fname)
im = Image.open(fname)
im = adjust_sharpness(im,2.5)
im = adjust_brightness(im,1.1)
im = adjust_contrast(im,2.8)
#im = im.filter(ImageFilter.SMOOTH)
im.save(fname)
#remove_lines(fname)
files.append(fname)
#if n>1:
# break
print("Extracting Images Completed")
print("Now Extracting data from image file")
for file in files:
#file = "./images/page-0.png"
text = image_to_string(file, lang_code="eng")
#text = image_to_string(file, lang_code="fra+eng")
make_textfile(text, text_file_name)
print("Extracting and saving text files completed")
except FileNotFoundError:
print(f"File not available {pdf_file}")
return None
pytesseract.image_to_string(image=Image.open(image_name))
要在 Tesseract 中处理表格,您可能需要删除表格行以帮助 OCR 引擎对图像进行分割。不过,您可以先尝试一下,看看 Tesseract 的表现如何。
text = image_to_data(file, lang="eng", config="--psm 6")
这会将您的图像视为一个块,以避免丢失尽可能多的文本,但删除线条并对图像进行二值化会带来更好的结果。此链接将帮助您删除线条。