gpt4 book ai didi

python - 检测具有轮廓的文本区域后从图像中提取文本

转载 作者:太空狗 更新时间:2023-10-29 23:57:01 24 4
gpt4 key购买 nike

我想在 Python 中使用机器学习为图像构建 OCR。我通过将图像转换为灰度来预处理图像,应用 otsu thresholding。然后我使用轮廓找到文本区域并在其上绘制矩形框。但是在那之后我如何提取检测到的文本。我不想使用 pytesseract 。我想使用 knn 或 SVM 或 CNN 进行预测但是我面临的主要问题是如何使用 contours 从图像中获取检测到的文本。

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

enter image description here

现在我如何只使用这些检测到的区域并将它们发送到我的机器学习算法(KNN、SVM 或 CNN)以从图像中获取文本。

最佳答案

要裁剪文本区域,您可以使用 numpy 切片(因为图像实际上是一个 numpy 数组):

字母 = I[y:y+h, x:x+w]

在您的循环中,可以为每个字母创建一个新的 numpy 数组(裁剪后的图像)。调整每一个的大小,例如28x28 并且您拥有适合流行的 MNIST 示例的正确形状。

如需更多想法,我可以推荐以下 git-repo,它为手写字母创建了 ML 模型: EMNIST

您如何处理不正确/过于粗粒度的文本检测(例如部门中的“DE”或“RT”)将会很有趣。 Andrew NG 在他的 Coursera 机器学习类(class)中建议使用 ML 模型来检测字母之间的间隙并据此进行拆分。

关于python - 检测具有轮廓的文本区域后从图像中提取文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48597099/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com