我是靠谱客的博主 动人果汁,最近开发中收集的这篇文章主要介绍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网络对其进行训练了。

最后

以上就是动人果汁为你收集整理的tensorflow 表情识别1的全部内容,希望文章能够帮你解决tensorflow 表情识别1所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(35)

评论列表共有 0 条评论

立即
投稿
返回
顶部