我正在使用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)
我能做些什么来获得更一致的结果吗?
答案 0 :(得分:2)
为了使第一张图片更正确,我还做了三件事。
您可以为Tesseract设置白名单。在你的情况下,我们知道
此列表中只有字符 01234567890.:
。这个
显着提高了准确度。
我调整了图片的大小,以便更轻松地使用tesseract。
<强>代码:强>
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图像。您不必写入磁盘并再次读取它。