gpt4 book ai didi

opencv - tesseract 无法准确读取所有数字

转载 作者:太空宇宙 更新时间:2023-11-03 21:04:50 24 4
gpt4 key购买 nike

我正在使用 Tesseract 从手机摄像头拍摄的屏幕图像中识别数字。我对图像做了一些预处理:processed image ,并使用 Tesseract,我能够得到一些混合结果。在上面的图像上使用以下代码,我得到以下输出:“EOE”。然而,有了这张图片,processed image ,我得到一个完全匹配:“39:45.8”

import cv2
import pytesseract
from PIL import Image, ImageEnhance
from matplotlib import pyplot as plt

orig_name = "time3.jpg";
image_name = "time3_.jpg";

img = cv2.imread(orig_name, 0)
img = cv2.medianBlur(img, 5)

img_th = cv2.adaptiveThreshold(img, 255,\
cv2.ADAPTIVE_THRESH_MEAN_C,cv2.THRESH_BINARY, 11, 2)

cv2.imshow('image', img_th)
cv2.waitKey(0)
cv2.imwrite(image_name, img_th)

im = Image.open(image_name)

time = pytesseract.image_to_string(im, config = "-psm 7")
print(time)

我能做些什么来获得更一致的结果吗?

最佳答案

我做了三件额外的事情来使第一张图片正确无误。

  1. 您可以为 Tesseract 设置白名单。在你的情况下,我们知道只有此列表 01234567890.: 中的字符。这显着提高了准确性。

  2. 我调整了图像的大小,使 tesseract 更容易。

  3. 我从 psm 模式 7 切换到 11(尽可能重新识别)

代码:

import cv2
import pytesseract
from PIL import Image, ImageEnhance

orig_name = "./time1.jpg";
img = cv2.imread(orig_name)

height, width, channels = img.shape
imgResized = cv2.resize(img, ( width*3, height*3))
cv2.imshow("img",imgResized)
cv2.waitKey()
im = Image.fromarray(imgResized)
time = pytesseract.image_to_string(im, config ='--tessdata-dir "/home/rvq/github/tesseract/tessdata/" -c tessedit_char_whitelist=01234567890.: -psm 11 -oem 0')
print(time)

注意:您可以使用 Image.fromarray(imgResized) 将 opencv 图像转换为 PIL 图像。您不必写入磁盘并再次读取。

关于opencv - tesseract 无法准确读取所有数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45098640/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com