识别手写数字,集成django web应用,djangoweb,# import the


# import the necessary packagesimport pandas as pdfrom sklearn.ensemble import RandomForestClassifierfrom sklearn.linear_model import SGDClassifierfrom sklearn.svm import LinearSVCfrom sklearn.neighbors import KNeighborsClassifierfrom sklearn.cross_validation import train_test_splitfrom sklearn.metrics import classification_reportfrom sklearn import datasetsfrom sklearn.decomposition import PCA as pcafrom nolearn.dbn import DBNfrom matplotlib import pyplotfrom PIL import Imageimport numpy as npimport scipySTANDARD_SIZE = (28, 28)class DigitProphet(object):    def __init__(self):        # load train.csv        # train = pd.read_csv("data/train.csv")        # data_train=train.as_matrix()        # values_train=data_train[:,0]        # images_train=data_train[:,1:]        # trainX, _trainX, trainY, _trainY = train_test_split(images_train/255.,values_train,test_size=0.5)        # #load test.csv        # test = pd.read_csv("data/test.csv")        # data_test=test.as_matrix()        # testX, _testX = train_test_split(data_test/255.,test_size=0.99)        # Random Forest        # self.clf = RandomForestClassifier()        # Stochastic Gradient Descent        # self.clf = SGDClassifier()        # Support Vector Machine        # self.clf = LinearSVC()        # Nearest Neighbors        # self.clf = KNeighborsClassifier(n_neighbors=13)        train = pd.read_csv("data/train.csv")        data_train=train.as_matrix()        values_train=data_train[:,0]        images_train=data_train[:,1:]        trainX, _trainX, trainY, _trainY = train_test_split(images_train/255.,values_train,test_size=0.995)        # Neural Network        self.clf = DBN([trainX.shape[1], 300, 10],learn_rates=0.3,learn_rate_decays=0.9,epochs=10,verbose = 1)        #Training        self.clf.fit(trainX, trainY)        pass    def predictImage(self,array):        image=np.atleast_2d(array)        return self.clf.predict(image)[0]def trim(image):    image_data = np.array(image)    image_data_bw = image_data.min(axis=2)    row_min = np.where(image_data_bw.min(axis=1)<255)[0].min()    row_max = np.where(image_data_bw.min(axis=1)<255)[0].max()    col_min = np.where(image_data_bw.min(axis=0)<255)[0].min()    col_max = np.where(image_data_bw.min(axis=0)<255)[0].max()    size=int((max(row_max-row_min,col_max-col_min))*1.3)    cropBox = (row_min, row_max, col_min, col_max)    image_data_new = image_data[cropBox[0]:cropBox[1]+1, cropBox[2]:cropBox[3]+1 , :]    new_image = Image.fromarray(image_data_new)    img_w, img_h = new_image.size    background = Image.new('RGBA', (size, size), (255, 255, 255, 255))    bg_w, bg_h = background.size    offset = ((bg_w-img_w)/2,(bg_h-img_h)/2)    background.paste(new_image, offset)    return backgrounddef getimgdata(filename):    img = Image.open(filename)    img=alpha_to_color(img)    img = trim(img)    img = img.convert('L')    img = img.getdata()    img = img.resize(STANDARD_SIZE)    img = np.array(img)/255.    img = [1-i for i in img]    return imgdef alpha_to_color(image, color=(255, 255, 255)):    x = np.array(image)    r, g, b, a = np.rollaxis(x, axis=-1)    r[a == 0] = color[0]    g[a == 0] = color[1]    b[a == 0] = color[2]     x = np.dstack([r, g, b, a])    return Image.fromarray(x, 'RGBA')def saveImage(array,path='outfile.jpg'):    # Get the training data back to its original form.    matrix = np.reshape(array, (STANDARD_SIZE))    # Get the original pixel values.    matrix = matrix*255.     # pyplot.imshow(sample, cmap = pyplot.cm.gray)    # result=predictImg(clf,image)    scipy.misc.imsave(path, matrix)dp=DigitProphet()pointer=0def main():    # filename="imageToSave.png"    # data=getimgdata(filename)    # saveImage(data)    # preds=dp.predictImage(data)    # print preds    passif __name__ == '__main__':    main()

评论关闭