我正在尝试做火车或卡车等车辆的OCR来识别写在其上的数字和字符。 (请注意这不是车牌识别OCR)如何提高写在车辆上的文字的OCR?
我拍了这张照片。这个想法是能够提取文字 - BN SF 721 734写在它上面。
对于前处理,我先转换此图片灰度,然后将其转换成看起来像这样
我在正方体写一些代码的二进制图像。
myimg = "image.png"
image = Image.open(myimg)
with PyTessBaseAPI() as api:
api.SetImage(image)
api.Recognize()
words = api.GetUTF8Text()
print words
print api.AllWordConfidences()
此代码给了我95的置信度值,这意味着正方体为95%,相信没有文字此图像中存在一个空白的输出。
然后,我使用Tesseract中的setrectangle api来限制图像内特定窗口上的OCR,而不是尝试在整个图像上执行OCR。
myimg = "image.png"
image = Image.open(myimg)
with PyTessBaseAPI() as api:
api.SetImage(image)
api.SetRectangle(665,445,75,40)
api.Recognize()
words = api.GetUTF8Text()
print words
print api.AllWordConfidences()
print "----"
坐标665,445,75和40对应于包含图像中的文本BNSF 721 734的矩形。 665 - 顶部,445-左侧,75-宽度和40-高度。
我得到的输出是这样的:
an s
m,m
我的问题是我怎么提高成绩?我玩弄了setrectangle函数中的值,结果稍有不同,但所有这些都同样糟糕。
有没有办法改善这一点?
如果你有兴趣我是如何转换的图像二值化的图像,我用的OpenCV
img = cv2.imread(image)
grayscale_img = cv2.cvtColor(img, cv2.COLOR_RGB2GRAY)
(thresh, im_bw) = cv2.threshold(grayscale_img, 128, 255, cv2.THRESH_BINARY | cv2.THRESH_OTSU)
thresh = 127
binarized_img = cv2.threshold(grayscale_img, thresh, 255, cv2.THRESH_BINARY)[1]
尝试使用OpenCV提取MSER区域。喂这个给Tesseract –
@JeruLuke:会试试这个选项。我需要阅读有关MSER地区的信息,因为我不确定他们目前的工作方式。我的问题是它会帮助提高OCR的准确性,还是它会帮助我自动提取文本的矩形?谢谢 – Piyush
尝试使用“描边宽度变换”首先识别图像中文字的位置。它专门设计用于查找文本。通常,避免过早二元化。 – Rethunk