使用 tesseract 从扫描的 pdf 文件中提取 csv 文本

问题描述 投票:0回答:1

我需要帮助从扫描的 pdf 中提取文本。我尝试使用 pymupdf、pillow 和 pytesseract 来提取它,但我没有得到正确的结果,有一些文本返回不正确。 我尝试增加清晰度和亮度,但仍然没有得到好的结果。

我已经使用 OpenCV 检查了很多答案,但我对 OpenCV 还很陌生。请帮忙。

def pdf_to_text(pdf_file,text_file_name,rotate_pdf=False,adj_sharpness=False,adj_contract=False,adj_brightness=False):
    try:
        doc = fitz.open(pdf_file)
        zoom_x=2.5
        zoom_y=2.5
        mat = fitz.Matrix(zoom_x,zoom_y)
        files = []
        for n in range(doc.page_count):
            #print(f'Extracting {n} image')
            page = doc.load_page(n)
            if rotate_pdf:
                page.set_rotation(-90)
            #pix = page.get_pixmap(dpi=600)    
            pix = page.get_pixmap(alpha=False,matrix=mat,dpi=300)
            
            folder=os.path.join(os.getcwd(),"images")
            if not os.path.exists(folder):
                os.makedirs(folder)
            fname = os.path.join(folder,"page-%i.png"%n)

            pix.save(fname)
            
            im = Image.open(fname)
            
            im = adjust_sharpness(im,2.5)
            im = adjust_brightness(im,1.1)
            im = adjust_contrast(im,2.8)
            #im = im.filter(ImageFilter.SMOOTH)
            im.save(fname)
            #remove_lines(fname)
          
            
            files.append(fname)
            #if n>1:
            #    break   
        print("Extracting Images Completed")
        print("Now Extracting data from image file")
        
        for file in files:
            #file = "./images/page-0.png"
            
            text = image_to_string(file, lang_code="eng")
            
            #text = image_to_string(file, lang_code="fra+eng")
            make_textfile(text, text_file_name)
        print("Extracting and saving text files completed")
    except FileNotFoundError:
        print(f"File not available {pdf_file}")
        return None    
    
    pytesseract.image_to_string(image=Image.open(image_name))
opencv image-processing ocr python-tesseract mupdf
1个回答
0
投票

要在 Tesseract 中处理表格,您可能需要删除表格行以帮助 OCR 引擎对图像进行分割。不过,您可以先尝试一下,看看 Tesseract 的表现如何。

text = image_to_data(file, lang="eng", config="--psm 6")

这会将您的图像视为一个块,以避免丢失尽可能多的文本,但删除线条并对图像进行二值化会带来更好的结果。此链接将帮助您删除线条

© www.soinside.com 2019 - 2024. All rights reserved.