首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >带轮廓的文本区域检测后图像中的文本提取

带轮廓的文本区域检测后图像中的文本提取
EN

Stack Overflow用户
提问于 2018-02-03 19:57:43
回答 1查看 7K关注 0票数 6

我想在python中使用机器学习为图像构建一个OCR。我已经对图像进行了预处理,将其转换为灰度,应用了otsu阈值。然后,我使用轮廓线找到文本区域,并在其上绘制矩形框。但是,在此之后如何提取检测到的文本呢?我不想使用pytesseract。我想使用knn或SVM或CNN进行预测,但我面临的主要问题是如何使用轮廓从图像中获取检测到的文本。

代码语言:javascript
复制
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),以便从图像中获取文本。

EN

回答 1

Stack Overflow用户

发布于 2018-02-03 20: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模型来检测字母之间的间隔并按这些间隔进行拆分。

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48597099

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档