如果验证码字母相互连接,OpenCV OCR 无法正确检测
OpenCV OCR could not detect properly if the capcha letter is inter-connected
原图:
然后我把图片转了,图片清晰度更好:
然而,我发现OpenCV返回错误,因为我发现字母'U'和'B'是相互连接的。
请问我能不能解决这个问题?
非常感谢大家。
我不认为问题是字符相互连接。
我知道您想通过应用二进制逆阈值操作来识别验证码,但问题是每个字符的表示方式。例如 B
和 8
无法被 pytesseract
识别,您需要 train 来表示当前字符。
即使您将每个字符分开并应用 erosion
U
e
J
4
B
和8
无法正确识别,在当前状态下。
代码:
import cv2
from pytesseract import image_to_string
img = cv2.imread("input.png")
gry = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
(h, w) = gry.shape[:2]
start = 0
end = int(w/4)
for _ in range(0, 4):
cropped = gry[0:h, start:end]
start = end
end = start + int(w/4)
erd = cv2.erode(cropped, None, iterations=1)
txt = image_to_string(erd, config="--psm 6")
print([character for character in txt if character.isalnum()][0])
cv2.imshow("erd", erd)
cv2.waitKey(0)
原图:
然后我把图片转了,图片清晰度更好:
然而,我发现OpenCV返回错误,因为我发现字母'U'和'B'是相互连接的。
请问我能不能解决这个问题?
非常感谢大家。
我不认为问题是字符相互连接。
我知道您想通过应用二进制逆阈值操作来识别验证码,但问题是每个字符的表示方式。例如 B
和 8
无法被 pytesseract
识别,您需要 train 来表示当前字符。
即使您将每个字符分开并应用 erosion
U | e | J | 4 |
B
和8
无法正确识别,在当前状态下。
代码:
import cv2
from pytesseract import image_to_string
img = cv2.imread("input.png")
gry = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
(h, w) = gry.shape[:2]
start = 0
end = int(w/4)
for _ in range(0, 4):
cropped = gry[0:h, start:end]
start = end
end = start + int(w/4)
erd = cv2.erode(cropped, None, iterations=1)
txt = image_to_string(erd, config="--psm 6")
print([character for character in txt if character.isalnum()][0])
cv2.imshow("erd", erd)
cv2.waitKey(0)