我正在尝试使用 pytesseract 从图像中提取数字。
它适用于其中一些(1、2、3、5、6、20...),但我想让它适用于所有人。
这是我正在使用的数据示例:
图像非常小(75x26),字体很差,但人类可读。
我尝试做一些预处理,因为它并没有检测到太多,但即使进行了预处理,我也无法检测到 7、11、415 这样的数字...
我已经测试了很多东西,但这里有一个版本可以检测我的大部分数字:
from PIL import Image, ImageEnhance
image = Image.open(f"{i}.png")
gray = image.convert("L")
enhancer = ImageEnhance.Contrast(gray)
image_enhanced = enhancer.enhance(2.0)
text = pytesseract.image_to_string(image_enhanced, config="--psm 6 -c tessedit_char_whitelist=0123456789")
print(text)
我也尝试过使用 cv2 应用阈值,但没有取得更大的成功,尽管有时看起来更干净的数字(未找到 1,发现 0 代表 11,3 代表 9...)
img = cv2.imread(f'/content/{i}.png')
img_rgb = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
gray = cv2.cvtColor(img_rgb, cv2.COLOR_BGR2GRAY)
_, thresh = cv2.threshold(gray, 170, 255, cv2.THRESH_BINARY)
text = pytesseract.image_to_string(thresh, config="--psm 6 -c tessedit_char_whitelist=0123456789")
为了获得更好的结果,我还应该添加更多的预处理步骤吗?
我知道我可以“微调”pytesseract,但它看起来像是一个基本的事情,所以我想知道在浪费更多时间之前我是否做错了......
您可能会在白色背景上使用黑色数字获得更好的结果,请参阅为什么 Pytesseract 无法识别黑色上的纯白色文本?和图像处理以提高 tesseract OCR 准确性