Python Tesseract努力解释计算机文本日期

时间:2019-02-20 09:10:53

标签: python ocr tesseract

因此,我一直在研究一个问题,以确定照片上的大量日期。到目前为止,我已经尝试在各种页面分割方法中使用pyTesseract,但没有成功。我本来以为OCR可以像下面这样相对容易地识别ASCII文本,但是很麻烦。

以下是输出:

https://ocr.space/

****** Result for Image/Page 1 ******

22,ü2t201B 11 .Ah,l 

这是python tesseract的输出:

pytesseract.image_to_string(constant,config= '--psm 7')

Out[88]: 'Pe EEE]'

任何人都有改进的建议吗?我很想知道是否有人可以从图像中提取全部细节-我的直觉告诉我'/'和':'弄乱了算法,所以也许一种方法是手动从图像中删除它们。图像数组。

这是使用的图像:

Example image

2 个答案:

答案 0 :(得分:2)

感谢您的反馈,只是以为我会发布自己的解决方案,证明我现在工作很好!

有关OCR的两件事:

  • 当文本为黑色,背景为白色时,效果明显更好。
  • 在每个字符之间留有更多空格“空白”时效果更好
  • psm配置设置可以提高质量。

这是我的代码:

#timestamp section
def grabStamp(image):  
    #load image and invert black & whites
    image = cv2.cvtColor(cv2.imread(image), cv2.COLOR_BGR2GRAY)
    im = np.invert(image)
    #exxtract the time stamp section    
    timeStamp = image[:15,:112]
    #add a boarder & create only binary colors (0,255)
    constant= cv2.copyMakeBorder(timeStamp,10,10,10,10,cv2.BORDER_CONSTANT,value=0)
    _, contrasted = cv2.threshold(constant,127,255,cv2.THRESH_BINARY)    

    #loop to find colons
    for x in range(0,113):
        if is_slice_in_list(semiColon, np.ndarray.tolist(contrasted[:,x])) == True:
            if np.where(contrasted[:,x]==255)[0][0] == 17:
            #converting back to black pixils        
             contrasted[:,x][ contrasted[:,x] == 255] = 0                

    #loop to find slashes         
    for x in range(0,113):
        if is_slice_in_list(slash, np.ndarray.tolist(contrasted[:,x])) == True: 
            if np.where(contrasted[:,x]==255)[0][0] == 17:
                if is_slice_in_list(slash_, np.ndarray.tolist(contrasted[:,x - 1])) == True:                  
                    contrasted[:,x][ contrasted[:,x] == 255] = 0 
                    contrasted[:,x-1][ contrasted[:,x-1] == 255] = 0 
                    contrasted[:,x+1][ contrasted[:,x+1] == 255] = 0                    
    #invert back
    im = np.invert(contrasted)

    return pytesseract.image_to_string(im,config= '--psm 7')

以下是进行更改以提高准确性的过程:

grabStamp(image)
Out[250]: '22022018 1157 38'

这是不做任何调整(只是反转颜色)的过程:

pytesseract.image_to_string(timeStamp,config= '--psm 7')
Out[254]: 'Prlivd7ihl Rete 3'

原始图片:

enter image description here

更改的图像:

enter image description here

答案 1 :(得分:0)

Tesseract在文本为黑白的图像中表现更好。因此,我建议您为此目的使用opencv。 反转图像的颜色并应用高斯模糊使图像平滑。 所有这些方法都可以在opencv的文档中轻松获得 希望这会有所帮助。