从扫描的工程图纸中提取文本

时间:2017-08-10 18:28:47

标签: python opencv image-processing ocr tesseract

我正在尝试从扫描的技术图纸中提取文本。出于保密原因,我无法发布实际绘图,但它看起来与this类似,但在形状内有更多文本更繁忙。由于字母相互接触并且周围的边界/符号相互关联,问题非常复杂。

我发现了一篇有趣的论文,正是由赵朝阳发起的“数字工程图检测文本区域”。它位于付费专区后面,因此您可能无法访问它,但实际上它主要通过两个步骤尝试擦除图像中不是文本的所有内容:

1)删除线性分量,包括长和短的隔离线

2)在分析笔画的连通成分方面删除非文字笔画

哪种OpenCV功能有助于执行这些操作?我宁愿不从头开始写一些东西来做这些,但我怀疑我可能不得不这样做。

我尝试使用基于模板的方法来尝试隔离文本,但由于文本位置未在图形之间完全标准化(即使在同一个项目中),因此无法检测到第一个扫描图形之后的文本。

2 个答案:

答案 0 :(得分:0)

显然我从来没有尝试过这个特定的任务,但是如果图像真的看起来像你给我看的那个,我会从删除所有垂直和水平线开始。这可以非常容易地完成,只需设置宽度阈值,并且对于强度大于某个N值的所有像素,然后查看垂直于假设线方向的阈值量的像素。如果它看起来像一行擦除它。

更优雅,也许更好的方法是对线条和圆圈进行霍夫变换,然后去掉那些元素。

你也可以尝试一些基于FFT的过滤,但我不太确定。

我从未使用过OpenCV,但我猜它可以做我提到的事情。

答案 1 :(得分:0)

我正在研究类似的问题。技术图纸是一个问题,因为OCR软件通常会尝试查找文本基线,而图形工件(线条等)会妨碍这种方法。在指定的图形中,相互接触的字符很少。因此,我建议将图像分成连续的(黑色)像素,然后分别进行扫描。连续区域的高度还应指示您连续区域是文本还是图形。要将图像分解为连续的像素,请使用泛洪填充算法,Tesseract的扫描效果很好。