以下是我想处理的原始图片的链接: -
使用opencv2处理图像后,得到以下结果: -
但即使使用上面的图像,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
答案 0 :(得分:0)
我建议用这种新字体训练tesseract,因为有些字符正在工作,有些则不然。假设你正在识别并且英文字母“e”我会猜测附在“e”底部的向上部分会丢掉结果。如果您按照文档创建一个新的.traineddata文件,训练过程相对简单,这基本上涉及添加诸如此类的样本字符,并指定该字符实际上是.box文件中的“e”。
您还可以访问Tesseracts页面,向Improve Quality
提出建议