我正在尝试在python中的扫描图像pdf上使用光学字符识别。这需要提取文本中的图像,这就是我遇到的问题。我从中提取的某些PDF在每页上都有一个〜header图片,每页提取一次。有办法避免这种情况吗?我主要是在尝试减少必须送入OCR算法的图像数量。
目前,我可以使用以下两种方法进行图像提取,尽管我可以使用其他方法(尽管我在尝试安装textract时遇到了数小时的困难,但到目前为止还没有得到解决,所以也许不是那个包裹。
方法1:通过os命令行通过Poppler的pdfimages工具
def image_exporter(pdf_path, output_dir):
if not os.path.exists(output_dir):
os.makedirs(output_dir)
cmd = ['pdfimages', '-png', '-p', pdf_path,
'{}/prefix'.format(output_dir)]
subprocess.call(cmd)
print('Images extracted')
方法2:Fitz / PyMuPDF
def img_extract(pdf_path, output_dir):
name_start = pdf_path.split('\\')[-1][:15]
doc = fitz.open(pdf_path)
for i in range(len(doc)):
for img in doc.getPageImageList(i):
xref = img[0]
pix = fitz.Pixmap(doc, xref)
name = "p%s-%s.png" % (i, xref)
name = name_start + ' ' + name
name = output_dir + '\\' + name
if pix.n < 5: # this is GRAY or RGB
#pix.writePNG(name)
pix.writeImage(name)
else: # CMYK: convert to RGB first
pix1 = fitz.Pixmap(fitz.csRGB, pix)
#pix1.writePNG(name)
pix1.writeImage(name)
pix1 = None
pix = None
这两个代码本质上都是我在其他地方找到的代码的副本(Extract images from PDF without resampling, in python?是其中之一)。
我还应该提到,我对pdf文档本身的结构了解甚少。因此,我发生了其他奇怪的事情(提取反色图像,超级模糊图像,pg_x的image1,其中缺少随机字母的文本和相同pg_x的image2具有随机丢失的字母,但image1中没有字母等) 。因此,也许同样有效的问题是,是否有一种方法可以将一页上的所有图像组合成一个我可以使用OCR代码扫描的图像?我主要是在尝试避免扫描大量图像。