eliwang

思路:利用 pymupdf+pytesseract

通过pymupdf提取pdf文件中的图片,并写入到本地,然后利用tesseract-ocr去处理

1、安装pymupdf

pip install pymupdf

虽然安装的库为pymupdf,实际上调用的包名为fitz

 

2、示例:提取pdf文件图片中的俄文

# coding:utf-8
import os

import time
import fitz
import pytesseract
from PIL import Image

class TestHandler:
    def __init__(self):
        self.dir_path = \'./imgs\'

    def run(self):
        if not os.path.exists(self.dir_path):
            os.mkdir(self.dir_path)
        start_time = time.time()
        text = self.extract_text(\'./russia.pdf\')
        print(text)
        print(f\'总耗时:{time.time()-start_time}秒\')

    def extract_text(self,file_name):
        extract_text = \'\' # 用于存储提取的文本
        doc = fitz.open(file_name)
        # 遍历每一页pdf
        for i in range(len(doc)):
            img_list = doc.get_page_images(i) # 提取该页中的所有img
            # 遍历每页中的图片,
            for num, img in enumerate(img_list):
                img_name = f"{self.dir_path}/{i + 1}_{num + 1}.png" # 存储的图片名
                pix = fitz.Pixmap(doc, img[0])  # image转pixmap
                if pix.n - pix.alpha >= 4:  # 如果差值大于等于4,需要转化后才能保存为png
                    pix = fitz.Pixmap(fitz.csRGB, pix)
                pix.save(img_name) # 存储图片
                pix = None  # 释放Pixmap资源
                image = Image.open(img_name)
                text = pytesseract.image_to_string(image,\'rus\') # 调用tesseract,使用俄语库
                extract_text += text # 写入文本
                os.remove(img_name)
        return extract_text

if __name__ == \'__main__\':
    TestHandler().run()

 

分类:

技术点:

相关文章:

  • 2021-04-20
  • 2021-12-30
  • 2021-11-17
  • 2021-06-16
  • 2021-10-19
  • 2021-12-17
  • 2021-12-30
  • 2022-12-23
猜你喜欢
  • 2021-04-11
  • 2021-05-02
  • 2021-04-24
  • 2021-04-11
  • 2021-11-23
  • 2021-11-30
相关资源
相似解决方案