简单用形态学做线检测(也就是你在 paddle_table_classifier 里的做法)在你的这个例子(数字原生 PDF,线条清晰)中效果确实很好,但在通用场景下,之所以还需要 UNet,是因为鲁棒性(Robustness)和语义理解能力。
以下是详细对比:
| 特性 | 传统线检测 (OpenCV 形态学) | 深度学习模型 (UNet) |
|---|---|---|
| 原理 | 基于像素:只看哪里有连续的黑像素。 | 基于上下文:理解"表格长什么样"。 |
| 断线处理 | 失败:扫描件如果线条有断点或打印不清晰,它就认为是断开的,无法构成封闭单元格。 | 成功:能够"脑补"连接断线,因为它学过表格的结构,知道这里应该有一条线。 |
| 抗干扰 | 差:容易把文字下划线、删除线、或者背景噪点误判为表格线。 | 强:经过训练,能学会忽略文字内容的干扰(如下划线),只提取表格骨架。 |
| 复杂场景 | 困难:面对双线边框、虚线、或者线宽不一致的情况很难调参。 | 灵活:预测的是逻辑上的网格,对线条样式不敏感。 |
| 泛化性 | 低:换个分辨率或线宽可能就需要重新调参(kernel size)。 | 高:模型训练后能适应各种分辨率和来源的文档。 |
PaddleTableClassifier 的任务只是快速筛选:
MinerUWiredTableRecognizer 的任务是精准重构:
对于你当前这种高质量、数字原生的银行流水单,简单的 OpenCV 线检测确实足够准,甚至可能比 UNet 更快更干净。
但在工业级流水线中,为了兼容扫描件、拍照件、模糊传真等各种不可预测的输入,UNet 是目前的标准选择,因为它更“聪明”,能看懂图像的语义而不仅仅是像素。