因此,我一直在研究一个问题,以确定照片上的大量日期。到目前为止,我已经尝试在各种页面分割方法中使用pyTesseract,但没有成功。我本来以为OCR可以像下面这样相对容易地识别ASCII文本,但是很麻烦。
以下是输出:
****** Result for Image/Page 1 ******
22,ü2t201B 11 .Ah,l
这是python tesseract的输出:
pytesseract.image_to_string(constant,config= '--psm 7')
Out[88]: 'Pe EEE]'
任何人都有改进的建议吗?我很想知道是否有人可以从图像中提取全部细节-我的直觉告诉我'/'和':'弄乱了算法,所以也许一种方法是手动从图像中删除它们。图像数组。
这是使用的图像:
答案 0 :(得分:2)
感谢您的反馈,只是以为我会发布自己的解决方案,证明我现在工作很好!
有关OCR的两件事:
这是我的代码:
#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'
原始图片:
更改的图像:
答案 1 :(得分:0)
Tesseract在文本为黑白的图像中表现更好。因此,我建议您为此目的使用opencv。 反转图像的颜色并应用高斯模糊使图像平滑。 所有这些方法都可以在opencv的文档中轻松获得 希望这会有所帮助。