【问题标题】:How can I recognize text inside another shape in an image using Tesseract如何使用 Tesseract 识别图像中另一个形状内的文本
【发布时间】:2017-03-22 21:56:03
【问题描述】:

我正在尝试识别六边形内的文本“25”。如果文本在六边形上方或下方,我的代码可以识别文本,但在六边形内部时则不能。任何指针?另外,我正在尝试获取文本的坐标。 一种选择是将六边形(使用 opencv 轮廓)提取到另一个图像中,然后使用 tesseract。但是我可以使用更简单的解决方案吗?

这里是识别文本是否在形状之外的代码 sn-p(程序将图像文件名作为 arg 并打印出它识别的文本。)

from PIL import Image, ImageEnhance, ImageFilter  
import sys  
import pytesseract  
import cv2

load image filename = sys.argv[1]

img = Image.open(filename) 
img = img.filter(ImageFilter.SHARPEN) 
enhancer = ImageEnhance.Contrast(img) 
img = enhancer.enhance(10) 
img = img.convert('1') 
img.save('temp.jpg')

im = cv2.imread('temp.jpg',cv2.COLOR_RGB2GRAY)  
im = cv2.blur(im,(4,4))
_, im = cv2.threshold(im, 200 , 200, cv2.THRESH_BINARY_INV)

#This is just to see what has happened, has no meaning! 
cv2.imshow('gray', im)  
cv2.waitKey(0)  
cv2.destroyAllWindows()

#Actual Text recognition 
cv2.imwrite('temp2.jpg', im)  
text = pytesseract.image_to_string(Image.open('temp2.jpg'))  
print(text)

【问题讨论】:

  • 你是如何识别六边形上方和下方的?
  • @Sruti 如上所述,让我们知道您如何在六边形上方和下方执行 OCR?
  • 将程序添加到问题中。

标签: opencv ocr tesseract python-tesseract


【解决方案1】:

数字在形状的中心,你可以通过玩坐标轻松获得。

例如:

  • height/2-30height/2+30
  • width/2-30width/2+30

然后应用阈值

Result
Part of the image
Threshold
Pytesseract 25

有时候不能得到想要的结果,需要申请pre-processing

代码:


import cv2
import pytesseract

img = cv2.imread('769b9.jpg')
gry = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
(h, w) = gry.shape[:2]
gry = gry[int(h/2)-30:int(h/2)+30, int(w/2)-30:int(w/2)+30]
thr = cv2.threshold(gry, 0, 255, cv2.THRESH_BINARY + cv2.THRESH_OTSU)[1]
txt = pytesseract.image_to_string(thr)
print(txt)
cv2.imshow("thr", thr)
cv2.waitKey(0)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-04
    • 2016-10-09
    相关资源
    最近更新 更多