使用 Tessseract 的七段数字数据识别 / Java
Seven Segment Digital Data Recognition using Tessseract / Java
我正在尝试使用 tess4J 从图像中识别七段数字 文本。
我的意见在这里
我做了一些规范化如下
1 ] 图片裁剪。
2 ] 将其 转换为二进制
我想去除图像中文本的锯齿状边缘。我该如何实现?
我尝试了来自 GitHub 的不同训练数据。但没有任何效果如我所愿。
如何手动创建训练数据? .
我正在等待您的宝贵建议,在此先感谢您。 . . .
您可以尝试结合使用 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
img_3.jpg
您可以尝试使用这两种类型的图像来确定哪种图像在 Tess4J 中效果较好,您可能不需要在细化边缘后对图像进行模糊处理,因为数字更容易识别。
如果之后需要,您可以尝试细化整个数字,直到它们有 1 个像素厚。也许这对 Tess4J 很有效。
我正在尝试使用 tess4J 从图像中识别七段数字 文本。
我的意见在这里
我做了一些规范化如下
1 ] 图片裁剪。
2 ] 将其 转换为二进制
我想去除图像中文本的锯齿状边缘。我该如何实现?
我尝试了来自 GitHub 的不同训练数据。但没有任何效果如我所愿。
如何手动创建训练数据? .
我正在等待您的宝贵建议,在此先感谢您。 . . .
您可以尝试结合使用 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
img_3.jpg
您可以尝试使用这两种类型的图像来确定哪种图像在 Tess4J 中效果较好,您可能不需要在细化边缘后对图像进行模糊处理,因为数字更容易识别。
如果之后需要,您可以尝试细化整个数字,直到它们有 1 个像素厚。也许这对 Tess4J 很有效。