Python_科学计算库,,文字识别# -*-


文字识别

技术分享图片
# -*- coding: utf-8 -*-"""简介:用样本训练数据,再识别"""import cv2import numpy as npfrom PIL import Image  #Python Image Libimport skimage.feature as feature2dimport sklearn.neighbors as nhbfrom sklearn.externals import joblib  #对训练模型保存或读取#cvhog=cv2.HOGDescriptor()#预处理图片def imgPrepare(filename):    img=cv2.imread(filename,0)    img=np.uint8(img/img.ptp()*255)    img=np.where(img>128,255,img)    img=np.where(img<=128,0,img)    img=np.bitwise_not(img)    return img#横切    def splitchar(img,axis=1):    idxrowb=np.all(img<64,axis=axis)    idxrowi=np.uint8(idxrowb).ravel()    dy=idxrowi[1:]-idxrowi[:-1]    #print(dy)    rowb=np.argwhere(dy==255).ravel()    rowe=np.argwhere(dy==1).ravel()    #print(rowb,rowe)    if axis==1:        imglines=[img[b:e+1,:] for b,e in zip(rowb,rowe)]    else:        imglines=[img[:,b:e+1] for b,e in zip(rowb,rowe)]      return imglines#切块def splitBox(img):    idxrowb=np.all(img<64,axis=1)    idxrowi=np.uint8(idxrowb).ravel()    dy=idxrowi[1:]-idxrowi[:-1]    #print(dy)    rowb=np.argwhere(dy==255).ravel()    rowe=np.argwhere(dy==1).ravel()    b=0    e=-1    if len(rowe)>0:        e=rowe[-1]+1    if len(rowb)>0:        b=rowb[0]    return img[b:e,:]#把图片整成一样大小def myResize(img,size=(48,48)):    h,w=img.shape    bw=max(h,w)    bh=bw    bimg=np.zeros((bh,bw),np.uint8)    if bw==w:        dh=(bh-h)//2        bimg[dh:dh+h,:]=img[:,:]    else:        dw=(bw-w)//2        bimg[:,dw:dw+w]=img[:,:]            bimg=cv2.resize(bimg,size)    return bimg#获取hog向量   图片转为向量def getHog(img,cell=(16,16),block=(3,3)):    vec=feature2d.hog(img,12,cell,block,‘L2‘)    return vec#训练的主方法gimg=imgPrepare(‘e:/sx.jpg‘)lines=splitchar(gimg,axis=1)chars=[]for line in lines:    charlist=splitchar(line,axis=0)    cchars=[  myResize(splitBox(c))  for c in charlist]    chars.append(cchars)chars=np.asarray(chars)X=[]Y=[]y=0for linech in chars:        for ch in linech:        chhog=getHog(ch)        X.append(chhog)        Y.append(y)        y+=1KNC=nhb.KNeighborsClassifier(algorithm=‘ball_tree‘,n_neighbors=3)KNC.fit(X,Y)joblib.dump(KNC,‘knc.knn‘)# 识别的主方法def predict(img):     knc=nhb.KNeighborsClassifier(algorithm=‘ball_tree‘,n_neighbors=3)     knc=joblib.load(‘knc.knn‘)     lines=splitchar(img,axis=1)     chars=[]     for line in lines:         charlist=splitchar(line,axis=0)         cchars=[  myResize(splitBox(c))  for c in charlist]         chars.append(cchars)         chars=np.asarray(chars)         Y=[]     for linech in chars:        x=[]        for ch in linech:            chhog=getHog(ch)            x.append(chhog)                    y=knc.predict(x)        print(y)        Y.append(y)         return Y          
文字识别

Python_科学计算库

评论关闭