我的代码打开一个 pdf,将第一页转换为图像,然后通过坐标从该图像中剪切出矩形,并使用 Tesseract 从每个剪切的矩形中提取文本。
我发现,在某些情况下,对于较大的图像,OCR 的表现比其他情况下要差得多。
在命令行中使用 Tesseract 后,我还发现对于某些图像 Tesseract 会估计分辨率本身,这会影响结果。
我还尝试了 --dpi 参数。对于某些图像,使用 --dpi 1800 可以获得最佳结果,对于某些图像,使用 --dpi 300 可以获得最佳结果。 我正在寻找一种在提取文本之前设置图像 dpi 的方法,或者一种查找图像 dpi 的方法。
我还尝试使用
pix.set_dpi()
和 get_pixmap(dpi = ..)
,但没有任何改善。如果有任何建议我将不胜感激
这是我使用的代码:
page = doc.load_page(0)
page_size = page.rect
zoom = 3
mat = fitz.Matrix(zoom, zoom)
pix = page.get_pixmap(matrix=mat)
img_data = pix.samples
img_array = np.frombuffer(img_data, dtype=np.uint8)
img_array = img_array.reshape(pix.height, pix.width, pix.n)
img = cv.cvtColor(img_array, cv.COLOR_RGB2BGR)
#...
k=0
result_dict = {}
for i, rect in enumerate(rectangles):
x1, y1, x2, y2 = rect
roi = img[y1:y2, x1:x2]
k+=1
text = pytesseract.image_to_string(roi, lang="eng+deu")
使用 PyMuPDF 及其 Tesseract 界面对 PDF 页面进行 OCR。
import fitz # PyMuPDF
doc = fitz.open("input.pdf") # some PDF (or any other supported file type!)
page = doc[0] # load page via page number
# OCR images parts of the page
tp = page.get_textpage_ocr(flags=3, language='eng', dpi=72, full=False, tessdata=None)
text = page.get_text()
注意: 我是 PyMuPDF 的维护者和原始创建者。