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

qlvxas9a  于 2023-10-24  发布在  其他
关注(0)|答案(3)|浏览(101)

我正在尝试从扫描的技术图纸中提取文本。出于保密原因,我不能发布实际的图纸,但它看起来与this相似,但形状中有更多的文本。由于字母相互接触以及周围的边框/符号的问题,这个问题非常复杂。
我发现了一篇有趣的论文,它正是这样做的,叫做“从数字工程图纸中检测文本区域”。这篇论文在付费墙后面,所以你可能无法访问它,但本质上它试图通过两个步骤从图像中删除所有非文本的内容:
1)擦除线性组件,包括长和短的孤立线
2)根据笔划的连接组件分析擦除非文本笔划
什么样的OpenCV函数可以帮助执行这些操作?我宁愿不从头开始写一些东西来做这些,但我怀疑我可能不得不这样做。
我尝试过使用基于模板的方法来隔离文本,但由于文本位置在图形之间没有完全标准化(即使在同一个项目中),因此它无法检测到第一个扫描图形之后的文本。

hof1towb

hof1towb1#

我正在解决一个类似的问题。技术图纸是一个问题,因为OCR软件大多试图找到文本基线和图纸工件在你指定的图中,没有太多的字符相互接触,所以我建议把图像分成连续的(黑色)像素,然后分别扫描这些像素。相邻区域的高度也应该给予一个指示,如果相邻区域是文本,或绘图的一部分。要将图像分割为相邻像素,请使用泛色填充算法,宇宙魔方的扫描效果很好

fivyi3re

fivyi3re2#

显然我从来没有尝试过这个特定的任务,但是如果图像真的看起来像你给我看的那样,我会从删除所有垂直和水平的线条开始。这可以很容易地完成,只需设置一个宽度阈值和强度大于某个N值的所有像素,然后查看垂直于假设线条方向的像素的阈值数量。如果它看起来像一条线,就删除它。
更优雅,也许更好的方法是对直线和圆进行霍夫变换,并以这种方式删除这些元素。
你也可以尝试一些基于FFT的滤波,但我不太确定。
我从来没有使用过OpenCV,但我猜它可以做我提到的事情。

7lrncoxx

7lrncoxx3#

我正在解决一个类似的问题,只是我的图纸没有那么复杂。

import keras_ocr

image = "pid.PNG"

# Load Keras OCR model (detector and recognizer)
pipeline = keras_ocr.pipeline.Pipeline()

img_array = keras_ocr.tools.read(image)

# Perform text detection
detected_texts = pipeline.recognize([img_array])

# Print the detected texts for each page
for d in detected_texts[0]:
    print(d[0])  # d[0] contains the detected text

相关问题