将PNG图像切分为条状用于银行对账单OCR识别的方案咨询
银行对账单行级切片及识别方案
自定义水平条状切片实现
你目前用的image_slicer仅支持网格切分,不适合行级条状切分需求,直接通过OpenCV+PIL实现自适应行切分即可,核心逻辑是通过水平投影算法自动识别每行文字的上下边界,比固定高度切分准确率更高,完整实现代码如下:
import cv2 import numpy as np from PIL import Image from pdf2image import convert_from_path # 图像预处理:二值化、去噪,提升行边界识别准确率 def preprocess_image(img_path): # 灰度读取 img = cv2.imread(img_path, 0) # 自适应二值化 _, binary = cv2.threshold(img, 0, 255, cv2.THRESH_BINARY_INV + cv2.THRESH_OTSU) # 小噪点去除 kernel = np.ones((2, 2), np.uint8) binary = cv2.morphologyEx(binary, cv2.MORPH_OPEN, kernel, iterations=1) return binary # 计算水平投影获取所有行的上下边界 def get_line_ranges(binary_img): # 统计每一行的有效像素总和 horizontal_projection = np.sum(binary_img, axis=1) img_height = binary_img.shape[0] line_ranges = [] in_line = False line_start = 0 for y in range(img_height): # 检测到有效像素,标记行开始 if horizontal_projection[y] > 0 and not in_line: line_start = y in_line = True # 有效像素结束,标记行结束 elif horizontal_projection[y] == 0 and in_line: line_end = y in_line = False # 过滤高度不足的噪声行 if line_end - line_start > 10: # 上下各留2px边距避免切到文字边缘 line_ranges.append((max(0, line_start - 2), min(img_height, line_end + 2))) return line_ranges if __name__ == "__main__": # PDF转图片逻辑和你原有逻辑一致 pages = convert_from_path('OCRBeebun/Bacon.pdf', 500) first_run = False if first_run: for idx, page in enumerate(pages): page.save(f"img_{idx}.png", "PNG") # 对单张图片做行切分示例 test_img_path = "img_0.png" binary_img = preprocess_image(test_img_path) line_ranges = get_line_ranges(binary_img) origin_img = Image.open(test_img_path) # 逐行切分保存 for line_idx, (y_start, y_end) in enumerate(line_ranges): line_img = origin_img.crop((0, y_start, origin_img.width, y_end)) line_img.save(f"line_0_{line_idx}.png")
成熟银行对账单识别方案推荐
如果不需要自行开发切分和识别逻辑,可以直接用以下成熟方案:
- Tesseract优化方案:无需手动切分,直接调用pytesseract的
image_to_data接口,即可直接获取每行文字的坐标、置信度和内容,配合参数--psm 6(假设页面为统一格式的文本块)或者--psm 12(适配稀疏文本布局),再加入银行对账单专用训练字库,识别准确率会大幅提升。 - PaddleOCR:百度开源的OCR工具,自带结构化识别模型已经适配国内常见银行对账单格式,可直接输出行级内容以及交易时间、金额、摘要等关键字段,无需自行做切分和后处理,开箱即用的准确率远高于原生Tesseract。
- 商用OCR API:如果对准确率和结构化程度要求极高,可直接使用阿里云、腾讯云等云服务商提供的专门银行对账单识别接口,传入PDF或图片即可直接返回完整结构化结果,无需任何预处理开发。
内容的提问来源于stack exchange,提问作者Governor
相关产品推荐
相关产品推荐

