Keras-中文手写识别

原始图像:

对图片进行裁剪并分别存储在对应目录中:

from PIL import Image as img
def cutimg(path1,path2,x,y):
    thisimg=img.open(path1)
    a,b= thisimg.size
    #a:width;b:height
    xsize=a//x
    ysize=b//y
    print(xsize)
    print(ysize)
    n=0
    for i in range(0,x):
        for j in range(0,y):
            cutvalue=(j*xsize,i*ysize,(j+1)*xsize,(i+1)*ysize)
            thiscut=thisimg.crop(cutvalue)
            #thiscut.convert('1').save(path2+str(n)+".jpg")
            thiscut.save(path2+str(n)+".jpg")
            print("正在处理第"+str(n)+"张图片")
            n+=1
cutimg("D:/中文识别数据集/原始数据/中.jpg","D:/中文识别数据集/训练数据/中/",8,8)
cutimg("D:/中文识别数据集/原始数据/国.jpg","D:/中文识别数据集/训练数据/国/",8,8)
from skimage import transform
import pandas as pda
import os
import skimage.io as io
import skimage.color as cl
import skimage.exposure as expos
def readimg(path,xsize,ysize):
    #读取图片
    img=io.imread(path)
    #灰度处理
    img_gray=cl.rgb2gray(img)
    #调整为44*32
    img_resize=transform.resize(img_gray,(xsize,ysize))
    #直方图均衡化处理
    img_hist=expos.equalize_hist(img_resize)
    #二维数组转一维
    img_vector=img_hist.flatten()
    return img_vector.tolist()
#img1=readimg("D:/中文识别数据集/训练数据/中/0.jpg",44,32)
#批量读取训练数据
train_x=[]
train_y=[]
zhong_all=os.listdir("D:/中文识别数据集/训练数据/中/")
for i in zhong_all:
    path="D:/中文识别数据集/训练数据/中/"+str(i)
    thisdata=readimg(path,44,32)
    train_x.append(thisdata)
    train_y.append(0)
guo_all=os.listdir("D:/中文识别数据集/训练数据/国/")
for i in guo_all:
    path="D:/中文识别数据集/训练数据/国/"+str(i)
    thisdata=readimg(path,44,32)
    train_x.append(thisdata)
    train_y.append(1)
xf=pda.DataFrame(train_x)
yf=pda.DataFrame(train_y)
train_x=xf.as_matrix().astype(float)
train_y=yf.as_matrix().astype(float)
#建立神经网络模型
from keras.models import Sequential
from keras.layers.core import Dense,Activation
model=Sequential()
#输入层
model.add(Dense(10,input_dim=len(train_x[0])))
model.add(Activation("relu"))
#输出层
model.add(Dense(1,input_dim=3))
#模型的编译categorical_crossentropy
model.compile(loss="mean_squared_error",optimizer="adam")
#训练
model.fit(train_x,train_y,nb_epoch=100,batch_size=100)
#----------
#实现预测
#测试一下“中”能否识别
test_x=[]
zhong_test_all=os.listdir("D:/中文识别数据集/测试数据/中/")
for i in zhong_test_all:
    path="D:/中文识别数据集/测试数据/中/"+str(i)
    thisdata=readimg(path,44,32)
    test_x.append(thisdata)
xf=pda.DataFrame(test_x)
test_x=xf.as_matrix().astype(float)
rst=model.predict_classes(test_x)
for i in rst:
    if(str(i[0])=="0"):
        print("识别结果:中")
    else:
        print("识别结果:国")
#测试一下“国”能否识别
test_x=[]
guo_test_all=os.listdir("D:/中文识别数据集/测试数据/国/")
for i in guo_test_all:
    path="D:/中文识别数据集/测试数据/国/"+str(i)
    thisdata=readimg(path,44,32)
    test_x.append(thisdata)
xf=pda.DataFrame(test_x)
test_x=xf.as_matrix().astype(float)
rst=model.predict_classes(test_x)
for i in rst:
    if(str(i[0])=="0"):
        print("识别结果:中")
    else:
        print("识别结果:国")

#测试一下测试2中的数据能否正常输出
print("------接下来是测试2中的图片识别结果----------")
test_x=[]
test2_all=os.listdir("D:/中文识别数据集/测试数据2/")
for i in range(0,len(test2_all)):
    path="D:/中文识别数据集/测试数据2/"+str(i)+".jpg"
    thisdata=readimg(path,44,32)
    test_x.append(thisdata)
xf=pda.DataFrame(test_x)
test_x=xf.as_matrix().astype(float)
rst=model.predict_classes(test_x)
print("识别结果:",end="")
for i in rst:
    if(str(i[0])=="0"):
        print("中",end="")
    else:
        print("国",end="")

发表评论