【问题标题】:Tesseract (pytesseract) does not read numbers reliableTesseract (pytesseract) 不读取可靠的数字
【发布时间】:2022-09-28 07:21:05
【问题描述】:

在基本相同的图像上运行我的 Python 脚本时,通过 pytesseract 使用 Tesseract 得到了一个奇怪的行为。

背景: 我有一个 Raspberry Pi 正在运行,通过摄像头检索图像。凸轮的图片以其原始分辨率存储。 通过 cv2 我裁剪了感兴趣的部分 - 那是一个数字。对于这张图片,我增加了对比度,我还尝试改变黑白(反转图像) 您可以在此处评估此图片的质量:

我运行 Tesseract 的部分是:

value = pytesseract.image_to_string(image, config=r\"--psm 6 --oem 3 digits\")

但是运行我的脚本有时可以完美地识别数字(大约 10 次运行中的 1 次),但更常见的情况是根本没有识别出数字,有时只有一位数字,甚至超过所显示的五位数字。

我不知道是什么导致了结果质量的这些变化——有什么想法可以改进吗? 你能根据上面显示的图像复制这种行为吗?

    标签: ocr tesseract python-tesseract


    【解决方案1】:

    为了提高准确性,您必须确保图像尽可能清晰。图像本身对人眼来说看起来很清晰,但 tesseract 需要文本和背景颜色之间的大对比。我就是这样做的:

    image=cv2.imread("image.png",0)
    

    上面的行以灰度读取图像。(您的图像已经是灰度的)一般来说,像素表示为RGB(红色,绿色,蓝色)。以灰度读取时,像素只能具有介于 0(黑色)和 255(白色)之间的值。所以你将有 255 种灰度。

    _,thresh1 = cv2.threshold(image,100,255,cv2.THRESH_BINARY) 
    

    上面的行获取每个像素并将其与阈值(在本例中为 100)进行比较。如果像素的值小于阈值,则该像素将其值更改为 0。如果其较大,则在这种情况下将其颜色设置为 255。您可以调整这些值以获得最干净的图像。这是二值化后的图像。

    从这张图片中阅读文字后,我每次都会得到 70150。不要忘记import cv2。我将留下一些链接以供进一步阅读,以了解如何提高图像质量以获得更好的准确性。 https://docs.opencv.org/4.x/d7/d4d/tutorial_py_thresholding.html

    https://nanonets.com/blog/ocr-with-tesseract/

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-03-07
      • 2020-11-07
      • 2018-03-16
      • 2023-02-07
      • 1970-01-01
      • 2021-12-12
      • 1970-01-01
      • 2020-10-28
      相关资源
      最近更新 更多