【发布时间】:2019-06-19 09:15:08
【问题描述】:
我有多个要解析的 pdf 发票。我将它们转换为图像并使用 ocr 从图像中获取文本。其中一个 pdf 有 3 页中的 2 页旋转 90 度。我如何检测这些旋转的页面并正确旋转它们以使 ocr 返回正确的信息?
【问题讨论】:
标签: python pdf ocr python-tesseract image-preprocessing
我有多个要解析的 pdf 发票。我将它们转换为图像并使用 ocr 从图像中获取文本。其中一个 pdf 有 3 页中的 2 页旋转 90 度。我如何检测这些旋转的页面并正确旋转它们以使 ocr 返回正确的信息?
【问题讨论】:
标签: python pdf ocr python-tesseract image-preprocessing
要保持图像完整,可以将参数'expand'设置为True
image = image.rotate(270, expand=True)
【讨论】:
这是一个适用于一个图像的解决方案,但您可以对一个图像列表执行此操作,并在将其保存回 PDF 之前检查每个图像:
#import library
enter code here
from PIL import Image
#open image file
f=Image.open('test.jpg')
#conver to pdf
pdf=f.convert('RGB')
#if width > than height, rotate it to get portrait
if pdf.width > pdf.height:
pdf=pdf.rotate(270,expand=True)
#save pdf
pdf.save('test.pdf')
【讨论】:
当您说它们被旋转时,是不是就像它们都应该是纵向的而某些页面是横向的那样简单?您应该能够从 PDF 中读取页面方向的元数据,或者如果由于某种原因不可用,您可能需要使用这个简单的逻辑来确定它,例如 rotated = image.width > image.height
使用 Pillow/PIL 可以很容易地在 OCR 之前旋转图像:
if rotated:
image = image.rotate(270)
可能会出现页面倒置的情况,除非您有可靠的 PDF 元数据,否则您可能必须首先使用最可能的方向进行 OCR(如上文所述逆时针 90 度),如果那样旋转 180 度后不返回任何文本再试一次。
【讨论】:
您可以使用 imutils 进行旋转,而不会在旋转后切掉图像边界。
import cv2 as cv
import imutils
img = cv.imread('your_image.png')
imutils.rotate_bound(img, 270) #### 270 for anti-clockwise or 90 for clockwise
【讨论】: