1

我是计算机视觉世界的新手。

我正在尝试使用 Tesseract 检测写在卡车侧面的数字。

一辆卡车的图片取自维基百科

所以对于这个例子,我希望看到 CMA CGM 作为输出。

我通过命令行将此图像提供给 Tesseract

tesseract image.JPG out -psm 6

但它产生了一个空白文件。

然后我阅读了Tesserocr(Tesseract的python包装器)的文档并尝试了以下代码

with PyTessBaseAPI() as api:
    api.SetImage(image)
    boxes = api.GetComponentImages(RIL.TEXTLINE, True)
    print 'Found {} textline image components.'.format(len(boxes))
    for i, (im, box, _, _) in enumerate(boxes):
        # im is a PIL image object
        # box is a dict with x, y, w and h keys
        api.SetRectangle(box['x'], box['y'], box['w'], box['h'])
        ocrResult = api.GetUTF8Text()
        conf = api.MeanTextConf()
        print (u"Box[{0}]: x={x}, y={y}, w={w}, h={h}, "
               "confidence: {1}, text: {2}").format(i, conf, ocrResult, **box)

再次它无法读取图像中的任何字符。

我的问题是我应该如何解决这个问题?(我不是在寻找现成的代码,而是在寻找如何解决这个问题的方法)。

我是否需要使用示例图像来训练 tesseract,或者我可以使用现有库编写代码以某种方式检测卡车的坐标并尝试仅在卡车的边界内进行 OCR?

4

2 回答 2

0

Tesseract 需要仅文档图像,但您的图像中有非文档对象。在将其提供给 Tesseract-OCR 之前,您需要一个复杂的分割(然后可能是一些图像处理)过程。

于 2017-02-04T08:50:00.753 回答
0

我有一个三步解决方案

您可以使用范围来获取图像的一部分。

  • 例如,如果您选择
    • 高度范围为:从(int(h/4) + 40int(h/2)-20)
    • 宽度范围为:从int(w/2)int((w*3)/4)
结果
参与 在此处输入图像描述
高斯 在此处输入图像描述
临界点 在此处输入图像描述
Pytesseract 达飞轮船

代码:


import cv2
import pytesseract

img = cv2.imread('YizU3.jpg')
gry = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
(h, w) = gry.shape[:2]
gry = gry[int(h/4) + 40:int(h/2)-20, int(w/2):int((w*3)/4)]
blr = cv2.GaussianBlur(gry, (3, 3), 0)
thr = cv2.threshold(gry, 128, 255, cv2.THRESH_BINARY + cv2.THRESH_OTSU)[1]
txt = pytesseract.image_to_string(thr)
print(txt)
cv2.imshow("thr", thr)
cv2.waitKey(0)
于 2021-02-11T21:47:00.637 回答