id3*_*678 3 python filenames tesseract tiff python-tesseract
更新:我发现从 OCRed 文件创建 pdf 文件是不合理的
所以最好保持原样,不进行转换。我仍然遇到一些图像已连接而其他图像是 1 个寻呼机的问题。
data = []
listOfPages = glob.glob(r"C:/Users/name/test/*.tif")
for entry in listOfPages:
text = pytesseract.image_to_string(
Image.open(entry), lang="en"
)
data.append(text)
df0 = pd.DataFrame(data, columns =['raw_text'])
Run Code Online (Sandbox Code Playgroud)
这将创建一个 pandas df,其中每一行都是文件第一(单)页的字符串.tif。我如何连接 tif 文件(参见原始问题)以获得完整的多页字符串?
原始问题:我想将单页 .tif 文件转换my_folder为. 没有后续页面的 TIFF 也应转换为单页 PDF。最终,我想要一个通过 OCR 处理多个基于图像的 TIFF 文件创建的文本 PDF。.pdfpdf_folder
.tiff因此,我从文件名模式推断应该放在一起的文件组:
Drs_1_00109_1_ADS.tif
Drs_1_00099_1_ADS_000.tif
Drs_1_00099_1_ADS_001.tif
Drs_1_00099_1_ADS_002.tif
Drs_1_00186_1_ADS.tif
Drs_1_00192_1_ADS_000.tif
Drs_1_00192_1_ADS_001.tif
Run Code Online (Sandbox Code Playgroud)
例如,我想将Drs_1_00192_1_ADS_000.tif和
Drs_1_00192_1_ADS_001.tif(这是两张[单页]图片)转换为Drs_1_00192_1_ADS.pdf包含这两张图片文本数据的 2 页。该代码适用于单页 pdf 创建。我怎样才能使这个工作适用于文件名中的所述多页模式?
谢谢!
我会通过遍历所有以 结尾的文件来实现这一点000.tif,这可能是多页文档的起点,然后附加通过增加后缀直到文件丢失而产生的文件。
#!/usr/bin/env python3
import os
from PIL import Image
from glob import glob
# Iterate over all files ending in '000.tif' and find their friends (subsequent pages)
for filename in glob('*_000.tif'):
# Work out stem of filename
stem = filename.replace('_000.tif', '')
print(f'DEBUG: stem={stem}')
# Build list of images to be put in this PDF
images = [Image.open(filename)]
index = 1
while True:
this = f'{stem}_{index:03d}.tif'
print(f'DEBUG: this={this}')
if os.path.isfile(this):
images.append(Image.open(this))
index += 1
else:
break
output = stem + '.pdf'
print(f'DEBUG: Saving {len(images)} pages to {output}')
images[0].save(output, save_all=True, append_images=images[1:])
Run Code Online (Sandbox Code Playgroud)
样本输出
DEBUG: stem=Drs_1_00192_1_ADS
DEBUG: this=Drs_1_00192_1_ADS_001.tif
DEBUG: this=Drs_1_00192_1_ADS_002.tif
DEBUG: this=Drs_1_00192_1_ADS_003.tif
DEBUG: this=Drs_1_00192_1_ADS_004.tif
DEBUG: Saving 4 pages to Drs_1_00192_1_ADS.pdf
DEBUG: stem=Drs_1_00099_1_ADS
DEBUG: this=Drs_1_00099_1_ADS_001.tif
DEBUG: this=Drs_1_00099_1_ADS_002.tif
DEBUG: this=Drs_1_00099_1_ADS_003.tif
DEBUG: Saving 3 pages to Drs_1_00099_1_ADS.pdf
Run Code Online (Sandbox Code Playgroud)
请注意,您可以轻松地使用OpenCV来读取文件,只需替换:
image = Image.open(filename)
Run Code Online (Sandbox Code Playgroud)
和
image = cv2.imread(filename)
Run Code Online (Sandbox Code Playgroud)
然而,你不能像使用PIL那样简单地使用OpenCV编写 PDF ,所以我只是坚持使用PIL。如果您还记得PIL使用 RGB 排序而OpenCV使用 BGR,您可以轻松地在PIL和OpenCV之间移动,因此您可以使用以下命令从PIL转到OpenCV:
OpenCVImage = np.array(PILImage)[...,::-1]
Run Code Online (Sandbox Code Playgroud)
和
PILImage = Image.fromarray(OpenCVImage[...,::-1])
Run Code Online (Sandbox Code Playgroud)