如何帮助Tesseract识别这个简单图像中的角色?

时间:2016-06-26 07:03:39

标签: ocr tesseract

以下是我想处理的原始图片的链接: -

http://imgur.com/KpreCiZ

使用opencv2处理图像后,得到以下结果: -

http://imgur.com/UbgUxFY

但即使使用上面的图像,Tesseract也无法识别图像中的字符。这种情况发生在许多具有与上例相同风格的图像中。

关于如何提高图像质量或使用其他Tesseract模式的任何建议都是最受欢迎的。

此外,如果上述技术无法提供替代方案,例如培训Tesseract或使用其他OCR或方法吗?

谢谢

编辑:我也包括代码

        # Read the image
        im = cv2.imread("image.jpg")
        # Convert to grayscale and apply Gaussian filtering
        im_gray = cv2.cvtColor(im, cv2.COLOR_BGR2GRAY)
        im_gray = cv2.GaussianBlur(im_gray, (5, 5), 0)
        # Threshold the image
        ret, im_th = cv2.threshold(im_gray, 90, 255, cv2.THRESH_BINARY_INV)

        # Find contours in the image
        ctrs, hier = cv2.findContours(im_th.copy(), cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)

        # Get rectangles contains each contour
        rects = [cv2.boundingRect(ctr) for ctr in ctrs]
        for rect in rects:
            # Only consider rects which are bigger than a certain area
            if rect[3]*rect[2] > 300:
                # Draw the rectangles
                    cv2.rectangle(im, (rect[0], rect[1]), (rect[0] + rect[2], rect[1] + rect[3]), (0, 255, 0), 3) 
                    # Make the rectangular region around the digit
                    leng = int(rect[3] * 1.6)
                    pt1 = int(rect[1] + rect[3] // 2 - leng // 2)
                    pt2 = int(rect[0] + rect[2] // 2 - leng // 2)
                    if pt2 < 0:
                        pt2 = rect[0] + rect[2]
                    roi = im_th[pt1:pt1+leng, pt2:pt2+leng]
                    # Invert the image such that the text is black and background is white
                    roi = (255-roi)
                    # roi is the final processed image
                    try:
                        cv2.imwrite("test.jpg", roi)
                        # call the terminal command: tesseract test.jpg out -psm 10
                        call(["tesseract", "test.jpg", "out", "-psm", "10"])
                        file = open('out.txt', 'rb+')
                        text = file.read()
                        file.close()
                        if text:
                            print text
                    except:
                        pass

1 个答案:

答案 0 :(得分:0)

我建议用这种新字体训练tesseract,因为有些字符正在工作,有些则不然。假设你正在识别并且英文字母“e”我会猜测附在“e”底部的向上部分会丢掉结果。如果您按照文档创建一个新的.traineddata文件,训练过程相对简单,这基本上涉及添加诸如此类的样本字符,并指定该字符实际上是.box文件中的“e”。

您还可以访问Tesseracts页面,向Improve Quality

提出建议