我想在python中使用机器学习为图像构建一个OCR。我已经对图像进行了预处理,将其转换为灰度,应用了otsu阈值。然后,我使用轮廓线找到文本区域,并在其上绘制矩形框。但是,在此之后如何提取检测到的文本呢?我不想使用pytesseract。我想使用knn或SVM或CNN进行预测,但我面临的主要问题是如何使用轮廓从图像中获取检测到的文本。
Image=cv2.imread('DL.png')
I=Image.copy()
i=Image.copy()
G_Image=cv2.cvtColor(Image,cv2.COLOR_BGR2GRAY)
#Otsu Thresholding
blur = cv2.GaussianBlur(G_Image,(1,1),0)
ret,th = cv2.threshold(blur,0,255,cv2.THRESH_BINARY_INV+cv2.THRESH_OTSU)
image, contours, hierarchy = cv2.findContours(th,cv2.RETR_EXTERNAL,cv2.CHAIN_APPROX_SIMPLE)
#img = cv2.drawContours(Image, contours, -1, (0,255,0), 3)
for contour in contours:
# get rectangle bounding contour
[x, y, w, h] = cv2.boundingRect(contour)
if h>20:
continue
# draw rectangle around contour on original image
cv2.rectangle(I, (x, y), (x + w, y + h), (255, 0, 255), 0)
上面是我写的代码。This is the output image after contour rectangles are formed on detected text
现在,我如何只使用这些检测到的区域,并将它们发送到我的机器学习算法(KNN,SVM或CNN),以便从图像中获取文本。
发布于 2018-02-03 12:46:08
要裁剪文本区域,可以使用numpy切片(因为图像实际上是一个numpy数组):
letter = Iy:y+h,x:x+w
在您的循环中,可以为每个字母创建一个新的numpy数组(裁剪后的图像)。将它们的大小调整为28x28,您就拥有了流行的MNIST示例的正确形状。
对于进一步的想法,我可以推荐下面的git-repo,它为手写字母创建了一个ML模型:EMNIST
如何处理不正确/太粗粒度的文本检测,比如DEPARTMENT中的"DE“或"RT”,这将是很有趣的。Andrew NG在他的机器学习Coursera课程中建议使用ML模型来检测字母之间的间隔并按这些间隔进行拆分。
https://stackoverflow.com/questions/48597099
复制