如何基于Python boxdetect检测的文本框提取表单文本?
基于boxdetect检测文本框后的文本提取方案
你已经通过boxdetect完成了KYC表单中文本框的检测,接下来可以结合OCR工具(如Tesseract)提取文本框内的内容,最终输出Name: Mr William Smith Jons , PAN: 577634563744格式的结果。
实现步骤
1. 依赖安装
首先需要安装Tesseract OCR引擎,以及Python对应的pytesseract库:
# 安装pytesseract pip install pytesseract
注:Tesseract引擎需根据系统单独安装,Windows可下载官方安装包,Linux可通过apt install tesseract-ocr安装
2. 完整代码实现
基于你现有的代码,添加OCR提取逻辑,根据检测到的文本框坐标裁剪对应区域并识别文本:
import cv2 import numpy as np from boxdetect import config from boxdetect.pipelines import get_boxes import matplotlib.pyplot as plt import pytesseract # 设置Tesseract路径(如果系统未自动识别,Windows需指定) # pytesseract.pytesseract.tesseract_cmd = r'C:\Program Files\Tesseract-OCR\tesseract.exe' # 读取并预处理图片 image1 = cv2.imread('kyc_sample1.jpg') img = cv2.cvtColor(image1, cv2.COLOR_BGR2GRAY) ret, thresh4 = cv2.threshold(img, 120, 255, cv2.THRESH_TOZERO) # boxdetect配置与文本框检测 cfg = config.PipelinesConfig() cfg.width_range = (30,55) cfg.height_range = (25,40) cfg.scaling_factors = [0.7] cfg.wh_ratio_range = (0.5, 1.7) cfg.group_size_range = (2, 100) cfg.dilation_iterations = 0 rects, grouping_rects, image, output_image = get_boxes(thresh4, cfg=cfg, plot=False) # 定义标签与对应文本框组(根据表单布局,Name对应第一个分组,PAN对应第二个) labels = ["Name", "PAN"] result = [] # 遍历每个文本框分组,提取文本 for idx, group_rect in enumerate(grouping_rects): if idx >= len(labels): break # 裁剪分组区域:x, y, w, h x, y, w, h = group_rect roi = image1[y:y+h, x:x+w] # 预处理ROI提升识别准确率 roi_gray = cv2.cvtColor(roi, cv2.COLOR_BGR2GRAY) _, roi_thresh = cv2.threshold(roi_gray, 127, 255, cv2.THRESH_BINARY_INV) # 使用Tesseract识别文本,配置参数优化结果 custom_config = r'--oem 3 --psm 6' text = pytesseract.image_to_string(roi_thresh, config=custom_config).strip() result.append(f"{labels[idx]}: {text}") # 输出最终结果 print(" , ".join(result)) # 可视化结果 plt.figure(figsize=(20,20)) plt.imshow(output_image) plt.show()
代码说明
- Tesseract路径配置:如果系统未自动识别Tesseract位置,需手动指定安装路径
- ROI裁剪与预处理:针对每个文本框分组裁剪区域,通过二值化反转增强文本对比度,提升OCR准确率
- OCR参数配置:
--oem 3使用默认OCR引擎模式,--psm 6假设图像为单一文本块,适合表单文本框识别 - 结果映射:根据表单布局,将检测到的文本框分组与
Name、PAN标签对应,最终拼接成目标格式
内容的提问来源于stack exchange,提问作者Levin Jose
相关产品推荐
相关产品推荐

