为了账号安全,请及时绑定邮箱和手机立即绑定

tesseract 无法识别易于阅读的文本

tesseract 无法识别易于阅读的文本

慕田峪4524236 2023-05-23 16:33:02
我使用了EAST (高效准确的场景文本检测器)的以下PyTorch 实现来识别和绘制许多图像中文本周围的边界框,效果非常好!pytesseract但是,为了从这些图像中提取文本并将它们转换为字符串,我正在尝试使用 OCR 的下一步——失败得很厉害。--oem使用和的所有可能配置--psm,我无法检测到pytesseract看起来非常清晰的文本,例如:已识别的文本位于图像下方。即使我应用了对比度增强,并尝试了扩张和腐蚀,我也无法让 tesseract 识别文本。这只是许多图像中文本更大更清晰的示例之一。关于转换、配置或其他库的任何建议都会有所帮助!更新:在尝试高斯模糊 + Otso 阈值处理后,我能够在白色背景上获得黑色文本(显然这是 pytesseract 的理想选择),并且还添加了西班牙语,但它仍然无法阅读非常纯文本 - 例如:读起来是胡言乱语。处理后的文本图像是和我正在使用的代码:img_path = './images/fesa.jpg'img = Image.open(img_path)boxes = detect(img, model, device)origbw = cv2.imread(img_path, 0)for box in boxes:        box = box[:-1]    poly = [(box[0], box[1]),(box[2], box[3]),(box[4], box[5]),(box[6], box[7])]    x = []    y = []    for coord in poly:        x.append(coord[0])        y.append(coord[1])    startX = int(min(x))    startY = int(min(y))    endX = int(max(x))    endY = int(max(y))    #use pre-defined bounding boxes produced by EAST to crop the original image         cropped_image = origbw[startY:endY, startX:endX]    #contrast enhancement     clahe = cv2.createCLAHE(clipLimit=4.0, tileGridSize=(8,8))    res = clahe.apply(cropped_image)    text = pytesseract.image_to_string(res, config = "-psm 12")        plt.imshow(res)    plt.show()    print(text)
查看完整描述

1 回答

?
qq_笑_17

TA贡献1818条经验 获得超7个赞

本指南批评了开箱即用的性能(也许准确性也会受到影响):

训练有素的数据。在撰写本文时,适用于 Ubuntu 18.10 的 tesseract-ocr-eng APT 包具有糟糕的开箱即用性能,可能是因为训练数据损坏。

根据我所做的以下测试,使用更新的数据文件似乎可以提供更好的结果。这是我使用的代码:

import pytesseract 
from PIL import Image 
print(pytesseract.image_to_string(Image.open('farmacias.jpg'), lang='spa', config='--tessdata-dir ./tessdata --psm 7'))

我将spa.traineddata(您的示例图像有西班牙语单词,对吗?)下载到./tessdata/spa.traineddata. 结果是:

ARMACIAS

对于第二张图片:

PECIALIZADA:

我之所以使用,--psm 7是因为这里说它的意思是“将图像视为单个文本行”,我认为这对您的测试图像应该有意义。

查看完整回答
反对 回复 2023-05-23
  • 1 回答
  • 0 关注
  • 192 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信