我想从图像中读取文本。
我在Python中使用pytesseract
。
这是我的代码:
import pytesseract
from PIL import Image
pytesseract.pytesseract.tesseract_cmd = r"C:\Program Files\Tesseract-OCR\tesseract.exe"
image = Image.open(r'a.jpg')
image.resize((150, 50),Image.ANTIALIAS).save("pic.jpg")
image = Image.open("pic.jpg")
captcha = pytesseract.image_to_string(image).replace(" ", "").replace("-", "").replace("$", "")
但是,它返回空字符串。
正确的方法是什么?
谢谢。
答案 0 :(得分:2)
Tesseract用于对文本文档执行OCR。以我的经验,这很好,但即使有非常干净的数据也有点不完整。
在这种情况下,您似乎正在尝试解决专门用于击败OCR软件的CAPTCHA。 您极有可能无法使用Tesseract解决此问题,因为:
如果您要继续,我建议:
答案 1 :(得分:1)
我同意@Jon Betts
但是,如果您确实需要执行此操作,则需要提出相应的手动步骤,
我为您提供的验证码类型专门创建了以下代码(但是它完全僵化,并未针对所有情况进行通用/优化)
伪代码
代码
from PIL import Image
import pytesseract
import numpy as np
import cv2
img = cv2.imread('a.jpg')
img = cv2.medianBlur(img, 3)
# extract blue parts
img2 = np.zeros((img.shape[0], img.shape[1]), dtype=np.uint8)
cond = np.bitwise_and(img[:, :, 0] >= 100, img[:, :, 2] < 100)
img2[np.where(cond)] = 255
img = img2
# delete the noise
kernel = cv2.getStructuringElement(cv2.MORPH_CROSS, (3, 3))
img = cv2.morphologyEx(img, cv2.MORPH_OPEN, kernel)
str1 = pytesseract.image_to_string(Image.fromarray(img),
config='-c tessedit_char_whitelist=abcedfghijklmnopqrtuvwxyz0123456789 -oem 3 -psm 8')
cv2.imwrite("frame.png", img)
print(str1)
输出
f2e4
要查看tesseract的完整选项,请键入以下命令tesseract --help-extra
或引用this_link