python - Python Tesseract 努力解释计算机文本日期
问题描述
所以我一直在解决一个问题,以识别照片上的大量日期。到目前为止,我已经尝试在不同的页面分割方法中使用 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]'
有人有任何改进建议吗?我很想知道是否有人可以从图像中提取完整的细节 - 我的直觉告诉我'/'和':'正在搞乱算法,所以也许一种方法是手动将它们从图像中删除图像阵列。
这是使用的图像:
解决方案
感谢您的反馈,只是想我会发布我现在工作得很好的解决方案!
我学到了关于 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'
原图:
改变图像:
推荐阅读
- twitter - Social Studio Radian6 获取推文数据
- python - 无法在烧瓶中使用 monogdb 运行 docker-compose
- java - 无法从数据库中检索数据(Firebase)
- ibm-mq - 我能否在仍使用 WAS 8.5.5 的同时将我的 MQ 版本升级到 9.0?
- r - 无法对下载按钮进行条件检查
- typescript - 打字稿推断方法的错误返回?
- angular - mat-select 覆盖变换 (cdk-overlay-pane)
- python - 在 PySpark 中加入多个数据框
- reactjs - 将元素放入变量中进行命名(反应)
- php - Ajax 调用问题