使用Tessseract / Java进行七段数字数据识别

时间:2015-03-06 06:19:42

标签: java tesseract image-recognition tess4j seven-segment-display

我正在尝试使用 tess4J 识别图像中的七段数字文字。

我的输入在这里

enter image description here

我已经一些规范化如下

1]图片裁剪

enter image description here

2]将转换为二进制

enter image description here

我希望从图像中删除文本的锯齿状边缘。如何实现这一目标?

我尝试过来自GitHub的不同训练数据。但是没有什么能按照我的意愿行

如何手动创建受过训练的数据

我在等你的好建议和非常感谢提前。 。 。 。

1 个答案:

答案 0 :(得分:3)

您可以尝试组合使用Sobel滤镜(以细化边缘)和高斯滤镜(以模糊图像)。

你没有在Java中指定用于图像处理的API,而且我不熟悉 Tess4J 我将展示从Python可以实现的功能(你可以使用你的首选用于Java中图像处理的库,过程将是相同的):

import scipy
import scipy.misc
import scipy.ndimage.filters
import numpy

def save_image(img_data, counter):
    img_fn = "img_{}.jpg".format(counter)
    scipy.misc.imsave(img_fn, img_data)


if __name__ == "__main__":
    # This loads the second image of your post
    img_0 = scipy.misc.imread("TqO53.jpg")
    img_0 = scipy.average(img_0, -1) 
    #save_image(img_0, 0)

    # Obtain edges
    img_x = scipy.ndimage.filters.sobel(img_0, 0)
    img_y = scipy.ndimage.filters.sobel(img_0, 1)
    img_1 = numpy.hypot(img_x, img_y)
    #save_image(img_1, 1)

    # Remove edges from original image (i.e. thinning edges)
    img_2 = img_0 - img_1
    img_2[img_2 < 10] = 0 
    save_image(img_2, 2)

    # Blur image if you want to get rid of the sketchy borders
    img_3 = scipy.ndimage.gaussian_filter(img_2, sigma=1)
    save_image(img_3, 3)

这将生成以下图像:

img_2.jpg

With edges thined

img_3.jpg

Blurred

您可以尝试使用这两种类型的图像来确定使用 Tess4J 获得良好效果的图像,可能在边缘变细后不需要模糊图像,因为数字可以是更容易认识到。

如果您想要之后,可以尝试将整个数字细化,直到它们为1像素厚。也许这适用于 Tess4J