现有单页TIF识别代码如何修改以适配多页TIF文件的Tesseract识别
适配多页tif文件的代码修改方案
核心改动是在原有单文件处理逻辑中新增tif帧遍历逻辑,逐页识别文本即可同时兼容单页、多页tif文件,修改后的完整代码如下:
import glob import os import re import pandas as pd import pytesseract from PIL import Image data = [] data1 = [] listOfPages = glob.glob(r"C:/Users/name/folder/*.tif") # 正则预编译放在循环外,避免重复编译提升性能 regex1 = re.compile(r'(www(i|ı)a\s+bbb(\:)?(\s+|\s+\.)?\s+(de(s|r(:)?))?)', flags = re.IGNORECASE) for entry in listOfPages: # 修复原逻辑中非文件场景下filenames变量复用的bug if not os.path.isfile(entry): continue # 整合你提供的多页tif读取逻辑 img = Image.open(entry) # 遍历tif所有页面 for page_idx in range(img.n_frames): img.seek(page_idx) # 单页识别 page_text = pytesseract.image_to_string(img, lang="en") # 替换换行符 cleaned_text = re.sub(r'\n',' ', page_text) # 正则匹配 var1 = None try: var1a = regex1.search(cleaned_text) if var1a: var1 = var1a.group(1) except: pass # 记录数据,每一页对应DataFrame的一行 data.append([cleaned_text, var1]) # 记录对应文件名,后缀加页号区分同一tif的不同页面 data1.append(f"{entry}_第{page_idx+1}页") # 生成DataFrame逻辑和原逻辑一致 df0 = pd.DataFrame(data, columns =['raw_text', 'var1']) df01= pd.DataFrame(data1,columns =['filename']) df1 = pd.concat([df0, df01], axis=1) df1 = df1.reset_index(drop = True)
如果你需要将单个tif的所有页文本合并为一条记录(而不是每页单独一条),可以调整单文件处理逻辑:
单tif多页合并为一条记录的处理逻辑参考:
for entry in listOfPages: if not os.path.isfile(entry): continue img = Image.open(entry) all_text = "" # 遍历所有页累加文本 for page_idx in range(img.n_frames): img.seek(page_idx) page_text = pytesseract.image_to_string(img, lang="en") all_text += f" {page_text}" # 后续清洗、匹配、记录逻辑放在帧遍历外即可 cleaned_text = re.sub(r'\n',' ', all_text) var1 = None try: var1a = regex1.search(cleaned_text) if var1a: var1 = var1a.group(1) except: pass data.append([cleaned_text, var1]) data1.append(entry)
内容的提问来源于stack exchange,提问作者id345678
相关产品推荐
相关产品推荐

