这是代码的要点:
import fitz
import easyocr
from PIL import Image
def extract_text_from_pdf(pdf_path):
reader = easyocr.Reader(['en'], download_enabled=False)
extracted_text = ""
for page_number in range(pdf_document.page_count):
page = pdf_document[page_number]
resolution = 300
zoomfactor = resolution/72.0
pixmap = page.get_pixmap(matrix-fitz.Matrix(zoomfactor, zoomfactor))
image = pixmap.tobytes()
result = reader.readtext(image, paragraph=True)
print("Page {page_number + 1} - OCR Result:")
for detection in result:
extracted_text += detection[1]
pdf_document.close()
return extracted_text
传递的图像看起来像这样:
但是提取的文本看起来像这样: “帐号:1234网址:xyz”
期望是:
“账号:1234
网址:xyz”
easyOCR 似乎是单独提取每个单词,而不是逐行读取图像。可能是因为一行中的单词之间有很大的空格。
你能推荐一些东西吗?
根据文档,您可以指定边界框合并。
x_ths (float, default = 1.0) - 当 paragraph=True 时合并文本框的最大水平距离。 y_ths (float, default = 0.5) - 当 paragraph=True 时合并文本框的最大垂直距离。
修改其中一个应该可以解决问题😉
更新:
根据操作,将
x_ths
设置为 1000.0 确实解决了问题。