在对技术图纸进行OCR处理时,大多数(全部?)ocr引擎都存在周围几何图形的问题,有时会错误地将直线解释为字母。
为了提高OCR的质量,我首先要从图像中删除某些元素,主要是圆形和矩形。
所有图纸都是黑白的,看起来与下面的示例非常相似。
实现此目标的最佳方法是什么?我玩过image magick和opencv效果不佳...
这是部分解决方案。这个问题可以分为两个步骤:
1)通过删除水平线和垂直线来删除矩形
我们创建垂直和水平内核,然后执行变形变形以检测线条。在这里,我们使用按位运算来删除行。
垂直线(左)和水平线(右)
已删除的行
import cv2
image = cv2.imread('1.jpg')
vertical_kernel = cv2.getStructuringElement(cv2.MORPH_RECT,(1,15))
remove_vertical = 255 - cv2.morphologyEx(image,cv2.MORPH_CLOSE,vertical_kernel)
horizontal_kernel = cv2.getStructuringElement(cv2.MORPH_RECT,(15,1))
remove_horizontal = 255 - cv2.morphologyEx(image,horizontal_kernel)
result = cv2.add(cv2.add(remove_vertical,remove_horizontal),image)
cv2.imshow('result',result)
cv2.waitKey()
2)检测/删除圈子
有几种方法可以删除圆圈
cv2.HoughCircles()
。这是detect circles in images using Hough Circles cv2.getStructuringElement()
来构建cv2.MORPH_ELLIPSE
内核,然后执行morphological operations来分离圆轮廓cv2.arcLength()
和cv2.approxPolyDP()
进行轮廓逼近。使用此方法的一个折衷方案是,它仅适用于“完美”形状。看看detect simple geometric shapes和opencv shape detection