在此图像中,tesseract将文本检测为LOOOPCS,但它是1000PCS。我正在使用的命令是

tesseract "item_04.png" stdout --psm 6


我已经尝试了所有psm值0到13

python - Tesseract将1和0检测为L和O-LMLPHP

根据其他博客的建议以及SO和Internet上的问题,还尝试了裁剪图像和阈值后的处理。

python - Tesseract将1和0检测为L和O-LMLPHP

python - Tesseract将1和0检测为L和O-LMLPHP

还尝试了-c tessedit_char_whitelist=PCS0123456789,但是得到了00PCS。
但是我没有得到1000PCS。有人可以尝试这些,让我知道我在想什么吗?

编辑:
根据@nathancy给出的建议,尝试使用-cv2.THRESH_BINARY_INV + cv2.THRESH_OTSU对此1和0起作用,但对于下面的图像失败。被检测为LL8gPcs:
python - Tesseract将1和0检测为L和O-LMLPHP

最佳答案

您需要预处理图像。一种简单的方法是达到Otsu的阈值,然后反转图像,使文本为黑色,背景为白色。这是使用Pytesseract OCR和--psm 6处理的图像和结果。

python - Tesseract将1和0检测为L和O-LMLPHP

结果

1000PCS




import cv2
import pytesseract

pytesseract.pytesseract.tesseract_cmd = r"C:\Program Files\Tesseract-OCR\tesseract.exe"

# Grayscale, Otsu's threshold
image = cv2.imread('1.png')
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
thresh = cv2.threshold(gray, 0, 255, cv2.THRESH_BINARY_INV + cv2.THRESH_OTSU)[1]

# Invert and perform text extraction
thresh = 255 - thresh
data = pytesseract.image_to_string(thresh, lang='eng',config='--psm 6')
print(data)

cv2.imshow('thresh', thresh)
cv2.waitKey()

10-08 15:32