问题描述
我有这张图片: Unprocessed Image 从下面的代码,我能够将其转换为: Processed Image
图片的编号为: 8276 但我的代码将其读取为 776
如何成功使我的代码能够读取为 8276 ? 对于这个图像处理/ cv2 / pytesseract,我是一个新手,经过太多的搜索,我才知道这一点。
import cv2
import pytesseract
from PIL import Image
pytesseract.pytesseract.tesseract_cmd = r'C:\Users\hamza.rana\AppData\Local\Tesseract-OCR\tesseract.exe'
image = cv2.imread('captcha.jpg')
gray = cv2.cvtColor(image,cv2.COLOR_BGR2GRAY)
gray = cv2.threshold(gray,255,cv2.THRESH_BINARY | cv2.THRESH_OTSU)[1]
gray = cv2.medianBlur(gray,3)
gray = cv2.adaptiveThreshold(gray,cv2.ADAPTIVE_THRESH_GAUSSIAN_C,cv2.THRESH_BINARY,11,2)
filename = "{}.png".format("temp")
cv2.imwrite(filename,gray)
text = pytesseract.image_to_string(Image.open('temp.png'),config='--psm 13 --oem 3 -c tessedit_char_whitelist=0123456789')
print(text)
解决方法
开箱即用的Tesseract培训最适合字体,并且(以我的经验)在手工印刷方面效果不佳,而在较长的手写体上却会忘记它。
在紧缩的情况下,对边框有一点帮助的是将边框扩大几个像素。但是从一个混乱的验证码开始...这可能是您需要为其训练模型的东西。