将每张图像的OCR检索文本写入对应于每张图像的单独的文本文件

时间:2019-06-18 18:36:46

标签: python ocr tesseract

我正在阅读pdf文件,并将每个页面转换为图像,然后保存。接下来,我需要在每个图像上运行OCR,识别每个图像文本并将其写入新的文本文件。

我知道如何从所有图像中获取所有文本并将其转储到一个文本文件中。

pdf_dir = 'dir path'
os.chdir(pdf_dir)

for pdf_file in os.listdir(pdf_dir):
    if pdf_file.endswith(".pdf"):
        pages = convert_from_path(pdf_file, 300)
        pdf_file = pdf_file[:-4]
        for page in pages:
            page.save("%s-page%d.jpg" % (pdf_file,pages.index(page)), "JPEG") 

img_dir = 'dir path'
os.chdir(img_dir)

docs = []

for img_file in os.listdir(img_dir):
    if img_file.endswith(".jpg"):
        texts = str(((pytesseract.image_to_string(Image.open(img_file)))))
        text = texts.replace('-\n', '')  
        print(texts)
        img_file = img_file[:-4]
        for text in texts:
            file = img_file + ".txt"
#          create the new file with "w+" as open it
            with open(file, "w+") as f:
                for texts in docs:
                # write each element in my_list to file
                    f.write("%s" % str(texts))
                    print(file)   

我需要编写一个文本文件,对应于识别该图像中文本的每个图像。目前写入的文件都是空的,我不确定出了什么问题。有人可以帮忙吗?

1 个答案:

答案 0 :(得分:1)

这里有很多要解压的东西:

  1. 您要遍历一个空列表docs来创建文本文件,因此,每个文本文件都只是创建(空),而{{ 1}}永远不会执行。
  2. 您要分配file.write,但是您没有对其进行任何操作,而是遍历text = texts.replace('-\n', ''),因此在那个循环中,for text in texts不是text的结果,而是可迭代replace中的一项。
  3. 由于textstexts,因此每个str字符
  4. 然后,您将text in texts(先前也已分配)用作texts上的迭代器(同样,此字段为空)。

2和4不一定有问题,但可能不是好习惯。 1似乎是导致您生成空文本文件的主要原因。 3似乎也是一个逻辑错误,因为您几乎可以肯定不想将单个字符写出到文件中。

所以我认为这就是您想要的,但是未经测试:

docs