opencv + Tessert-OCR
安装指令:
pip install pytesseract
Tesseracr-OCR 验证码识别
1、预处理——去除干扰线与点
2、不同的结构元素中选择
3、Image与numpy array相互转化
4、识别与输出
OCR(Optional Character Recognition,光学字符识别)是通过扫描字符,然后通过其形状将其翻译成电子文本的过程。
from matplotlib import pyplot as plt
from cv2 import cv2 as cv
import numpy as np
from PIL import Image
import pytesseract as tess
def recognize_test():
blurred = cv.GaussianBlur(img,(3,3),0) #高斯降噪,适度
gray = cv.cvtColor(blurred,cv.COLOR_BGR2GRAY)
ret,binary = cv.threshold(gray,0,255,cv.THRESH_BINARY_INV|cv.THRESH_OTSU)
cv.imshow('binary',binary)
#步骤不是一层不变的,要是二值化后得到很好的,就不在需要进行下列操作
kernel = cv.getStructuringElement(cv.MORPH_RECT,(1,3))#构造3*3的元素
binl = cv.morphologyEx(binary,cv.MORPH_OPEN,kernel)#进行开操作
kernel = cv.getStructuringElement(cv.MORPH_RECT,(3,1))#构造3*3的元素
open__out = cv.morphologyEx(binl,cv.MORPH_OPEN,kernel)#进行开操作
cv.imshow('binl',open__out)
#要用白色背景
cv.bitwise_not(open__out,open__out)
testImage = Image.fromarray(open__out)
text = tess.image_to_string(testImage)
print("识别结果:%s"%text)
if __name__ == "__main__":
filepath = "C:\\pictures\\others\\1-26.jpg"
#filepath = "C:\\pictures\\1-26.jpg"
img = cv.imread(filepath) # blue green red
cv.namedWindow("input image",cv.WINDOW_AUTOSIZE)
cv.imshow("input image",img)
recognize_test()
cv.waitKey(0)
cv.destroyAllWindows()
结果: