tensorflow 表情识别1

2018年06月15日 14:41:17

阅读数:403

此次分享的项目是利用tensorflow构建一个CNN网络来对fer2013数据集进行训练以实现面部表情识别的小项目。

首先,我们需要现在官网上下载fer2013数据集,将数据集进行解压,会生成一个fer2013.csv文件,我们首先要对这个.csv文件进行简单的处理。

fer2013数据集将表情大致分为7类,fer2013.csv中分别标注了每张图片的标签,特征值和分类。我们首先根据分类将数据集划分为train, test和val。

 
  1. # 项目数据集使用了表情识别的fer2013数据集

  2. # 该数据集下载下来是.csv格式,需要先对数据集进行分割,得到train.csv, test.csv, val.csv

  3. import csv

  4. import os

  5.  
  6.  
  7. database_path = ' '#数据集的路径

  8. datasets_path = 'D:/fer2013'

  9. #将路径组合后返回

  10. csv_file = os.path.join(database_path, 'fer2013.csv')

  11. train_csv = os.path.join(datasets_path, 'train.csv')

  12. val_csv = os.path.join(datasets_path, 'val.csv')

  13. test_csv = os.path.join(datasets_path, 'test.csv')

  14.  
  15.  
  16. with open(csv_file) as f:

  17. #使用csv中的reader()打开.csv文件

  18. csvr = csv.reader(f)

  19. #将迭代器指向文件的第二行,第一行为标签

  20. header = next(csvr)

  21. rows = [row for row in csvr]

  22. #按最后一列的标签将数据集进行分割

  23. trn = [row[:-1] for row in rows if row[-1] == 'Training']

  24. csv.writer(open(train_csv, 'w+'), lineterminator='\n').writerows([header[:-1]] + trn)

  25. print(len(trn))

  26.  
  27. val = [row[:-1] for row in rows if row[-1] == 'PublicTest']

  28. csv.writer(open(val_csv, 'w+'), lineterminator='\n').writerows([header[:-1]] + val)

  29. print(len(val))

  30.  
  31. tst = [row[:-1] for row in rows if row[-1] == 'PrivateTest']

  32. csv.writer(open(test_csv, 'w+'), lineterminator='\n').writerows([header[:-1]] + tst)

  33. print(len(tst))

之后,我们需要将根据其特征值将其还原为48*48的灰度图像:

 
  1. #将.csv文件还原为48*48的8位灰度图

  2. import csv

  3. import os

  4. from PIL import Image

  5. import numpy as np

  6.  
  7.  
  8. datasets_path = 'D:/fer2013'

  9. train_csv = os.path.join(datasets_path, 'train.csv')

  10. val_csv = os.path.join(datasets_path, 'val.csv')

  11. test_csv = os.path.join(datasets_path, 'test.csv')

  12.  
  13. train_set = os.path.join(datasets_path, 'train')

  14. val_set = os.path.join(datasets_path, 'val')

  15. test_set = os.path.join(datasets_path, 'test')

  16.  
  17. for save_path, csv_file in [(train_set, train_csv), (val_set, val_csv), (test_set, test_csv)]:

  18. if not os.path.exists(save_path):

  19. os.makedirs(save_path)

  20.  
  21. num = 1

  22. with open(csv_file) as f:

  23. csvr = csv.reader(f)

  24. header = next(csvr)

  25. #使用enumerate遍历csvr中的标签(label)和特征值(pixel)

  26. for i, (label, pixel) in enumerate(csvr):

  27. #将特征值的数组转化为48*48的矩阵

  28. pixel = np.asarray([float(p) for p in pixel.split()]).reshape(48, 48)

  29. subfolder = os.path.join(save_path, label)

  30. if not os.path.exists(subfolder):

  31. os.makedirs(subfolder)

  32. #将该矩阵转化为RGB图像,再通过convert转化为8位灰度图像,L指灰度图模式,L=R*299/1000+G*587/1000+B*114/1000

  33. im = Image.fromarray(pixel).convert('L')

  34. image_name = os.path.join(subfolder, '{:05d}.jpg'.format(i))

  35. print(image_name)

  36. im.save(image_name)

在这之后,我们就可以对数据集构建batch和CNN网络对其进行训练了。

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值