【问题标题】:How to improve OCR of text written on vehicles?如何提高车辆上文字的 OCR?
【发布时间】:2017-02-11 22:30:56
【问题描述】:

我正在尝试对火车或卡车等车辆进行 OCR,以识别写在上面的数字和字符。 (请注意这不是车牌识别 OCR)

我拍了这张照片。这个想法是能够提取文本 - BN SF 721 734 写在上面。

为了进行预处理,我首先将这张图片转换为灰度图,然后再将其转换为二值化图片,看起来像这样

我在 tesseract 中写了一些代码。

myimg = "image.png"
image = Image.open(myimg)
with PyTessBaseAPI() as api:
    api.SetImage(image)
    api.Recognize()
    words = api.GetUTF8Text()
    print words
    print api.AllWordConfidences()

这段代码给了我一个置信度值为 95 的空白输出,这意味着 tesseract 有 95% 的把握认为这张图片中不存在任何文本。

然后我在 Tesseract 中使用 setrectangle api 来限制图像中特定窗口的 OCR,而不是尝试对整个图像进行 OCR。

myimg = "image.png"
image = Image.open(myimg)
with PyTessBaseAPI() as api:
    api.SetImage(image)
    api.SetRectangle(665,445,75,40)
    api.Recognize()
    words = api.GetUTF8Text()
    print words
    print api.AllWordConfidences()
    print "----"

坐标 665、445、75 和 40 对应于图像中包含文本 BNSF 721 734 的矩形。 665 - 顶部,445- 左侧,75 - 宽度和 40 - 高度。

我得到的输出是这样的:

an s
m,m

我的问题是如何改进结果?我尝试了 setrectangle 函数中的值,结果略有不同,但都同样糟糕。

有什么办法可以改善吗?

如果您对我如何将图像转换为二值化图像感兴趣,我使用 OpenCV

img = cv2.imread(image)
grayscale_img = cv2.cvtColor(img, cv2.COLOR_RGB2GRAY)
(thresh, im_bw) = cv2.threshold(grayscale_img, 128, 255, cv2.THRESH_BINARY | cv2.THRESH_OTSU)
thresh = 127
binarized_img = cv2.threshold(grayscale_img, thresh, 255, cv2.THRESH_BINARY)[1]

【问题讨论】:

  • 尝试使用 OpenCV 提取 MSER 区域。将此馈送到 Tesseract
  • @JeruLuke:会试试这个选项。我需要阅读有关 MSER 区域的信息,因为我不确定它们目前是如何工作的。我的问题是它会帮助提高 OCR 的准确性,还是只会帮助我自动提取文本周围的矩形?谢谢
  • 尝试使用笔画宽度变换首先确定图像中文本的位置。它专门用于查找文本。通常,避免过早进行二值化。

标签: opencv ocr tesseract python-tesseract pytesser


【解决方案1】:

我建议在裁剪的矩形中找到轮廓并设置一些参数以匹配角色的轮廓。例如:面积大于或小于某些阈值的轮廓。然后在空位图上一一绘制轮廓并进行OCR。

我知道这似乎需要做很多工作,但它可以为您提供更好、更可靠的结果。 祝你好运!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-07-13
    • 2011-10-15
    • 1970-01-01
    • 1970-01-01
    • 2016-06-02
    • 1970-01-01
    相关资源
    最近更新 更多