首页 > 解决方案 > Python 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]'

有人有任何改进建议吗?我很想知道是否有人可以从图像中提取完整的细节 - 我的直觉告诉我'/'和':'正在搞乱算法,所以也许一种方法是手动将它们从图像中删除图像阵列。

这是使用的图像:

示例图片

标签: pythonocrtesseract

解决方案


感谢您的反馈,只是想我会发布我现在工作得很好的解决方案!

我学到了关于 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'

原图:

在此处输入图像描述

改变图像:

在此处输入图像描述


推荐阅读