Избегайте извлечения повторных изображений из PDF - PullRequest
1 голос
/ 03 апреля 2019

Я пытаюсь использовать Оптическое распознавание символов на PDF-файлах отсканированных изображений в python. Это требует извлечения изображений из текста, и именно здесь я столкнулся с проблемами. Некоторые из PDF-файлов, из которых я извлекаю, имеют заголовок ~ на каждой странице, который извлекается один раз на страницу. Есть ли способ избежать этого? В первую очередь я пытаюсь уменьшить количество изображений, которые я должен подать в свой алгоритм OCR.

В настоящее время я занимаюсь извлечением изображений с помощью следующих двух методов, хотя я согласен с использованием другого метода (хотя у меня было несколько часов трудности, когда я просто пытался установить textract и до сих пор не получил его, так что, возможно, не тот пакет).

Метод 1: Poppler's pdfimages tool через командную строку через os

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: Фитц / 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

Оба они по сути являются копиями кода, который я нашел в другом месте ( Извлечение изображений из PDF без повторной выборки, в python? является одним из источников).

Я должен также упомянуть, что у меня очень мало понимания структуры самого документа PDF. Так что у меня происходят другие странные вещи (извлечение инвертированных цветных изображений, супер размытых изображений, image1 из pg_x, где есть полученный текст со случайными буквами, отсутствующими, и image2 того же самого pg_x со случайными пропущенными буквами, но ни одной из букв в image1, и т. Д.) , Таким образом, возможно, не менее актуален вопрос, есть ли способ объединить все изображения на одной странице в одно изображение, которое я могу отсканировать с помощью своего кода OCR? В первую очередь я стараюсь не сканировать огромное количество изображений.

...