手写汉字数字识别详细过程(构建数据集+CNN神经网络+Tensorflow)

手写汉字数字识别(构建数据集+CNN神经网络)

期末,P老师布置了一个大作业,自己构建数据集实现手写汉字数字的识别。太捞了,记录一下过程。大概花了一个下午加半个晚上,主要是做数据集花时间。

一、构建数据集——使用h5py

1.收集数据,这部分由我勤劳的室友们一起手写了800个汉字 一、二、三、四、五、六、七、八、九、十完成。这部分也没啥好说的,慢慢写呗。我们用了IPAD,然后截图,这样出来的图片质量比较好。
2.对图像进行处理。将图像转化为(64,64,3)的矩阵,对图像批量编号及分类。这里新建了一个py文件,代码如下。

import h5py
import os
import numpy as np
from PIL import Image
import tensorflow as tf
import matplotlib.pyplot as plt
import sklearn
from sklearn import preprocessing
import scipy

#未处理图片位置
orig_picture = r'C:\Users\10595\Desktop\dataset\image'
 
#已处理图片存储位置
gen_picturn = r'C:\Users\10595\Desktop\dataset\data'
 
#查询需要分类的类别以及总样本个数
classes = ["one","two","three","four","five","six","seven","eight","nine","ten"]

 
def get_traindata(orig_dir,gen_dir,classes):
    i = 0
    for index,name in enumerate(classes):
        class_path = orig_dir + '\\' + name + '\\' #扫描原始图片
        gen_train_path = gen_dir +'\\' + name   #判断是否有文件夹
        folder = os.path.exists(gen_train_path)
        if not folder :
            os.makedirs(gen_train_path)
            print(gen_train_path,'new file')
        else:
            print('There is this flie')
        #给图片加编号保存
        for imagename_dir in os.listdir(class_path):
            i += 1
            origimage_path = class_path + imagename_dir
            #统一格式
            image_data = Image.open(origimage_path).convert('RGB')
            image_data = image_data.resize((64,64))
            image_data.save(gen_train_path + '\\' + name + str(i) + '.jpg' )
            num_samples = i
    print('picturn :%d' % num_samples)
 
if __name__ == '__main__':
    get_traindata(orig_picture,gen_picturn,classes)

生成的data截图示例
3.使用h5py将图像打包成数据集

import os
import numpy as np
from PIL import Image
import h5py
import scipy
import matplotlib.pyplot as plt
#搞了十个我也很困惑,不知道有什么简便方法
one = []
label_one = []
two = []
label_two = []
three = []
label_three = []
four = []
label_four = []
five = []
label_five = []
six = []
label_six = []
seven = []
label_seven = []
eight = []
label_eight = []
nine = []
label_nine = []
ten = []
label_ten = []

def get_files(file_dir):
	for file in os.listdir(file_dir + '\\' + 'one'):
		one.append(file_dir +'\\'+'one'+'\\'+ file) 
		label_one.append(0)
	for file in os.listdir(file_dir + '\\' + 'two'):
		two.append(file_dir +'\\'+'two'+'\\'+ file) 
		label_two.append(1)
	for file in os.listdir(file_dir + '\\' + 'three'):
		three.append(file_dir +'\\'+'three'+'\\'+ file) 
		label_three.append(2)
	for file in os.listdir(file_dir + '\\' + 'four'):
		four.append(file_dir +'\\'+'four'+'\\'+ file) 
		label_four.append(3)
	for file in os.listdir(file_dir + '\\' + 'five'):
		five.append(file_dir +'\\'+'five'+'\\'+ file) 
		label_five.append(4)
	for file in os.listdir(file_dir + '\\' + 'six'):
		six.append(file_dir +'\\'+'six'+'\\'+ file) 
		label_six.append(5)
	for file in os.listdir(file_dir + '\\' + 'seven'):
		seven.append(file_dir +'\\'+'seven'+'\\'+ file) 
		label_seven.append(6)
	for file in os.listdir(file_dir + '\\' + 'eight'):
		eight.append(file_dir +'\\'+'eight'+'\\'+ file) 
		label_eight.append(7)
	for file in os.listdir(file_dir + '\\' + 'nine'):
		nine.append(file_dir +'\\'+'nine'+'\\'+ file) 
		label_nine.append(8)
	for file in os.listdir(file_dir + '\\' + 'ten'):
		ten.append(file_dir +'\\'+'ten'+'\\'+ file) 
		label_ten.append(9)
	#把所有数据集进行合并
	image_list = np.hstack((one,two,three,four,five,six,seven,eight,nine,ten))
	label_list = np.hstack((label_one,label_two,label_three,label_four,label_five,label_six,label_seven,label_eight,label_nine,label_ten))
 
    #利用shuffle打乱顺序
	temp = np.array([image_list, label_list])
	temp = temp.transpose()
	np.random.shuffle(temp)
 
    #从打乱的temp中再取出list(img和lab)
	image_list = list(temp[:, 0]
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值