Pytesseract 错号
Pytesseract Wrong Number
我的识别有问题,在 .image_to_string() 命令后,我的一些输入图像明显是 1 变成了 4。
我的输入图片是这样的:
unedited img
然后我 运行 对它进行了一些预处理步骤(灰度、使用 otsu 进行阈值处理并放大图片),结果如下:
preprocessed img
我也试过放大图片,但输出变化没有改善。
运行宁后:
custom_config = "-c tessedit_char_whitelist=0123456789LV --psm 13"
pytesseract.image_to_string(processed_img, config=custom_config)
最终结果是一个字符串显示:
4LV♀
我不明白我可以更改什么来获得 1 而不是 4。
提前感谢您的宝贵时间。
尝试设置“--psm 8 --oem 3”所有列表都在 enter link description here,虽然 psm 8 和 oem 3 通常工作正常。
♀ or \n\x0c
是因为您需要 custom_config = "-c page_separator=''"
作为配置,因为出于某种原因它将其添加为页面分隔符。您的配置中不需要任何其他内容。
拿到你的号码就是做加工,主要是尺寸。但是我发现这段代码效果最好。
import pytesseract
from PIL import Image
import cv2
pytesseract.pytesseract.tesseract_cmd = r'C:\Program Files\Tesseract-OCR\tesseract.exe'
import numpy as np
imagepath = "./Pytesseract Wrong Number/kD3Zy.jpg"
read_img = Image.open(imagepath)
# convert PIL image to cv2 image locally
read_img = read_img.convert('RGB')
level_img = np.array(read_img)
level_img = level_img[:, :, ::-1].copy()
# convert to grayscale
level_img = cv2.cvtColor(level_img, cv2.COLOR_RGB2GRAY)
level_img, img_bin = cv2.threshold(level_img, 128, 255, cv2.THRESH_BINARY | cv2.THRESH_OTSU)
level_img = cv2.bitwise_not(img_bin)
kernel = np.ones((2, 1), np.uint8)
# make the image bigger, because it needs at least 30 pixels for the height for the characters
level_img = cv2.resize(level_img,(0,0),fx=4,fy=4, interpolation=cv2.INTER_CUBIC)
level_img = cv2.dilate(level_img, kernel, iterations=1)
# --debug--
#cv2.imshow("Debug", level_img)
#cv2.waitKey()
#cv2.destroyAllWindows
#cv2.imwrite("1.png", level_img)
custom_config = "-c page_separator=''"
level = pytesseract.image_to_string(level_img, config=custom_config)
print(level)
如果你想保存取消注释#cv2.imwrite("1.png", level_img)
我的识别有问题,在 .image_to_string() 命令后,我的一些输入图像明显是 1 变成了 4。
我的输入图片是这样的:
unedited img
然后我 运行 对它进行了一些预处理步骤(灰度、使用 otsu 进行阈值处理并放大图片),结果如下: preprocessed img
我也试过放大图片,但输出变化没有改善。
运行宁后:
custom_config = "-c tessedit_char_whitelist=0123456789LV --psm 13"
pytesseract.image_to_string(processed_img, config=custom_config)
最终结果是一个字符串显示:
4LV♀
我不明白我可以更改什么来获得 1 而不是 4。
提前感谢您的宝贵时间。
尝试设置“--psm 8 --oem 3”所有列表都在 enter link description here,虽然 psm 8 和 oem 3 通常工作正常。
♀ or \n\x0c
是因为您需要 custom_config = "-c page_separator=''"
作为配置,因为出于某种原因它将其添加为页面分隔符。您的配置中不需要任何其他内容。
拿到你的号码就是做加工,主要是尺寸。但是我发现这段代码效果最好。
import pytesseract
from PIL import Image
import cv2
pytesseract.pytesseract.tesseract_cmd = r'C:\Program Files\Tesseract-OCR\tesseract.exe'
import numpy as np
imagepath = "./Pytesseract Wrong Number/kD3Zy.jpg"
read_img = Image.open(imagepath)
# convert PIL image to cv2 image locally
read_img = read_img.convert('RGB')
level_img = np.array(read_img)
level_img = level_img[:, :, ::-1].copy()
# convert to grayscale
level_img = cv2.cvtColor(level_img, cv2.COLOR_RGB2GRAY)
level_img, img_bin = cv2.threshold(level_img, 128, 255, cv2.THRESH_BINARY | cv2.THRESH_OTSU)
level_img = cv2.bitwise_not(img_bin)
kernel = np.ones((2, 1), np.uint8)
# make the image bigger, because it needs at least 30 pixels for the height for the characters
level_img = cv2.resize(level_img,(0,0),fx=4,fy=4, interpolation=cv2.INTER_CUBIC)
level_img = cv2.dilate(level_img, kernel, iterations=1)
# --debug--
#cv2.imshow("Debug", level_img)
#cv2.waitKey()
#cv2.destroyAllWindows
#cv2.imwrite("1.png", level_img)
custom_config = "-c page_separator=''"
level = pytesseract.image_to_string(level_img, config=custom_config)
print(level)
如果你想保存取消注释#cv2.imwrite("1.png", level_img)