PyTesseract不识别小数

2024-09-28 16:22:17 发布

您现在位置:Python中文网/ 问答频道 /正文

这并不是真正的How to extract decimal in image with Pytesseract的复制品,因为这些答案并没有解决我的问题,我的用例也不同

我正在使用PyTesseract识别表格单元格中的文本。当涉及到用小数点识别药物剂量时,OCR无法识别.,尽管它对其他方面都是准确的。我正在Windows10上使用tesseract v5.0.0-alpha.20200328

我的预处理包括使用立方体放大400%,转换为黑白,膨胀和侵蚀,形态和模糊。我尝试了所有这些(以及每一个)的合理组合,但是没有任何东西能够识别出.

我尝试了--psm各种值以及字符白名单。我相信字体是Sergoe UI

处理前: pre pre-processed

处理后:enter image description here

PyteSeract输出:25mg »p

处理代码:

import cv2, pytesseract
import numpy as np

image = cv2.imread( '01.png' )
upscaled_image = cv2.resize(image, None, fx = 4, fy = 4, interpolation = cv2.INTER_CUBIC)
bw_image = cv2.cvtColor(upscaled_image, cv2.COLOR_BGR2GRAY)

kernel = np.ones((2, 2), np.uint8)
dilated_image = cv2.dilate(bw_image, kernel, iterations=1)
eroded_image = cv2.erode(dilated_image, kernel, iterations=1)

thresh = cv2.threshold(eroded_image, 205, 255, cv2.THRESH_BINARY)[1]
kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (3, 3))
morh_image = cv2.morphologyEx(thresh, cv2.MORPH_CLOSE, kernel)
            
blur_image = cv2.threshold(cv2.bilateralFilter(morh_image, 5, 75, 75), 0, 255, cv2.THRESH_BINARY + cv2.THRESH_OTSU)[1]

final_image = blur_image
text = pytesseract.image_to_string(final_image, lang='eng', config='--psm 10')

Tags: toimageimportnpcv2kernelbwpsm
2条回答

我有一个类似的例子,通过使用图像处理方法和放大图像,我能够增加正确小数的数量。然而,一小部分小数没有被正确识别

我找到的解决方案是更改pytesseract的语言设置:

我使用的是非英语设置,但将配置更改为lang='eng'修复了所有剩余的问题

不过,这可能对原来的问题没有帮助,因为设置已经是eng

如果您还没有确定这一点,请查看此链接

访问https://groups.google.com/g/tesseract-ocr/c/Wdh_JJwnw94/m/xk2ErJnFBQAJ

对于许多问题,一个主要的解决方案是文本高度,我曾面临许多问题,但无法找出原因,但向tesseract发送具有正确大小字母的图像似乎解决了许多问题。 不要放大到随机的百分比,试试你的图像中字母接近30-40px的数字

此外,如果您的预处理以某种方式将“.”更改为类似于char的噪声,那么它也将被忽略

相关问题 更多 >