首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >平面布置图文本识别与OCR

平面布置图文本识别与OCR
EN

Stack Overflow用户
提问于 2018-09-20 22:50:29
回答 1查看 1.4K关注 0票数 4

目标是使用文本识别方法(例如: OpenCV)为美国平面图图像创建边界框,然后可以将其送入文本阅读器(例如: LSTM或tesseract)。

已经尝试了cv2.findContour和cv2.bindingRect方法的几种方法,但是在很大程度上不能推广到不同类型的楼层平面图(楼层平面图看起来有很大的不同)。

例如,在应用cv2.findContour函数之前,使用灰度、自适应阈值、侵蚀和膨胀(具有各种迭代)的cv2.findContour会产生以下结果。请注意,Bedroom 2和Kitchen未正确拾取。

其他找不到地域的示例:

有没有关于文本识别模型或清理过程的想法,以提高文本识别模型的准确性,最好是使用代码示例?

EN

回答 1

Stack Overflow用户

发布于 2018-09-21 22:40:38

这个答案是基于这样的假设,即图像之间是相似的(比如它们的大小、墙的厚度、字母……)。如果不是,这将不是一个好的方法,因为您将不得不更改每个图像的阈值。也就是说,我会尝试将图像转换为二值化并搜索轮廓。在此之后,您可以添加标准,如高度,重量等,以过滤掉墙壁。之后,您可以在蒙版上绘制轮廓,然后放大图像。这将把彼此接近的字母组合成一个轮廓。然后你可以为所有的轮廓创建边界框,这就是你的ROI。然后,您可以在该区域上使用任何OCR。希望它能帮上点忙。干杯!

示例:

代码语言:javascript
运行
复制
import cv2
import numpy as np

img = cv2.imread('floor.png')
mask = np.zeros(img.shape, dtype=np.uint8)
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
_, threshold = cv2.threshold(gray,150,255,cv2.THRESH_BINARY_INV)
_, contours, hierarchy = cv2.findContours(threshold,cv2.RETR_TREE,cv2.CHAIN_APPROX_NONE)

ROI = []

for cnt in contours:
    x,y,w,h = cv2.boundingRect(cnt)
    if h < 20:
        cv2.drawContours(mask, [cnt], 0, (255,255,255), 1)

kernel = np.ones((7,7),np.uint8)
dilation = cv2.dilate(mask,kernel,iterations = 1)
gray_d = cv2.cvtColor(dilation, cv2.COLOR_BGR2GRAY)
_, threshold_d = cv2.threshold(gray_d,150,255,cv2.THRESH_BINARY)
_, contours_d, hierarchy = cv2.findContours(threshold_d,cv2.RETR_TREE,cv2.CHAIN_APPROX_NONE)

for cnt in contours_d:
    x,y,w,h = cv2.boundingRect(cnt)
    if w > 35:
        cv2.rectangle(img,(x,y),(x+w,y+h),(0,255,0),2)
        roi_c = img[y:y+h, x:x+w]
        ROI.append(roi_c)

cv2.imshow('img', img)
cv2.waitKey(0)
cv2.destroyAllWindows()

结果:

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

https://stackoverflow.com/questions/52427909

复制
相关文章

相似问题

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