import os
import tensorflow as tf
import matplotlib.pyplot as plt
import matplotlib.image as mpimg
from keras_preprocessing.image import ImageDataGenerator
import numpy as np
from keras.preprocessing import image
import pandas as pd
angry_dir = os.path.join('./train/angry/')
disgusted_dir = os.path.join('./train/disgusted/')
fearful_dir = os.path.join('./train/fearful/')
happy_dir = os.path.join('./train/happy/')
neutral_dir = os.path.join('./train/neutral/')
sad_dir = os.path.join('./train/sad/')
surprised_dir = os.path.join('./train/surprised/')
print('total training angry images:', len(os.listdir(angry_dir)))
print('total training disgusted images:', len(os.listdir(disgusted_dir)))
print('total training fearful images:', len(os.listdir(fearful_dir)))
print('total training happy images:', len(os.listdir(happy_dir)))
print('total training neutral images:', len(os.listdir(neutral_dir)))
print('total training sad images:', len(os.listdir(sad_dir)))
print('total training surprised images:', len(os.listdir(surprised_dir)))
angry_files = os.listdir(angry_dir)
print(angry_files[:10])
disgusted_files = os.listdir(disgusted_dir)
print(disgusted_files[:10])
fearful_files = os.listdir(fearful_dir)
print(fearful_files[:10])
happy_files = os.listdir(happy_dir)
print(happy_files[:10])
neutral_files = os.listdir(neutral_dir)
print(neutral_files[:10])
sad_files = os.listdir(sad_dir)
print(sad_files[:10])
surprised_files = os.listdir(surprised_dir)
print(surprised_files[:10])
pic_index = 2
next_angry = [os.path.join(angry_dir,fname)
for fname in angry_files[pic_index-2 : pic_index]]
for i, img_path in enumerate(next_angry):
img = mpimg.imread(img_path)
plt.imshow(img)
plt.axis('Off')
plt.show()
gpu_device_name = tf.test.gpu_device_name()
print(gpu_device_name)
TRAINING_DIR = './train/'
training_datagen = ImageDataGenerator(
rescale=1. / 255, # 值将在执行其他处理前乘到整个图像上
rotation_range=40, # 整数,数据提升时图片随机转动的角度
width_shift_range=0.2, # 浮点数,图片宽度的某个比例,数据提升时图片随机水平偏移的幅度
height_shift_range=0.2, # 浮点数,图片高度的某个比例,数据提升时图片随机竖直偏移的幅度
shear_range=0.2, # 浮点数,剪切强度(逆时针方向的剪切变换角度)。是用来进行剪切变换的程度
zoom_range=0.2, # 用来进行随机的放大
validation_split=0.25,
horizontal_flip=True, # 布尔值,进行随机水平翻转。随机的对图片进行水平翻转,这个参数适用于水平翻转不影响图片语义的时候
fill_mode='nearest' # 'constant','nearest','reflect','wrap'之一,当进行变换时超出边界的点将根据本参数给定的方法进行处理
)
train_generator = training_datagen.flow_from_directory(
TRAINING_DIR,
subset='training',
target_size=(48, 48),
class_mode='categorical'
)
validation_generator = training_datagen.flow_from_directory(
TRAINING_DIR,
subset='validation',
target_size=(48, 48),
class_mode='categorical'
)
print(train_generator.class_indices)
# os.environ["KMP_DUPLICATE_LIB_OK"] = "TRUE"
model = tf.keras.models.Sequential([
tf.keras.layers.Conv2D(16, (5, 5), activation='relu', input_shape=(48, 48, 3), padding='same'),
tf.keras.layers.MaxPooling2D(2, 2),
tf.keras.layers.Conv2D(32, (5, 5), activation='relu', padding='same'),
tf.keras.layers.MaxPooling2D(2, 2),
tf.keras.layers.Conv2D(32, (5, 5), activation='relu', padding='same'),
tf.keras.layers.MaxPooling2D(2, 2),
tf.keras.layers.Flatten(),
tf.keras.layers.Dense(128, activation='relu'),
tf.keras.layers.Dropout(0.5),
tf.keras.layers.Dense(7, activation='softmax')
])
model.summary()
model.compile(loss='categorical_crossentropy', optimizer='Adam', metrics=['accuracy'])
history = model.fit_generator(train_generator, epochs=100, validation_data=validation_generator, verbose=1)
model.save('face(4).h5')
acc = history.history['accuracy']
val_acc = history.history['val_accuracy']
loss = history.history['loss']
val_loss = history.history['val_loss']
epochs = range(len(acc))
plt.plot(epochs, acc, 'r', label='Training accuracy')
plt.plot(epochs, val_acc, 'b', label='validation accuracy')
plt.title('Training and validation accuracy')
plt.legend(loc=0)
plt.show()
gpus = tf.config.experimental.list_physical_devices('GPU')
tf.config.experimental.set_memory_growth(gpus[0], True)
from keras.models import load_model
model = load_model("face(2).h5")
dataframe = pd.DataFrame(columns=['name','label'])
os.chdir('./test/') # 原 D:\\python\\15、情绪识别
# test_num = 1
for file_name in os.listdir():
img = image.load_img(file_name,target_size=(48,48))
x = image.img_to_array(img)
x = np.expand_dims(x, axis=0)
images = np.vstack([x])
classes = model.predict(images, batch_size=10)
num = np.argmax(classes)
if num == 0:
face = 'angry'
print(file_name+ ' ' + face) # {'angry': 0, 'disgusted': 1, 'fearful': 2, 'happy': 3, 'neutral': 4, 'sad': 5, 'surprised': 6}
if num == 1:
face = 'disgusted'
print(file_name+ ' ' + face)
if num == 2:
face = 'fearful'
print(file_name+ ' ' + face)
if num == 3:
face = 'happy'
print(file_name+ ' ' + face)
if num == 4:
face = 'neutral'
print(file_name+ ' ' + face)
if num == 5:
face = 'sad'
print(file_name+ ' ' + face)
if num == 6:
face = 'surprised'
print(file_name+ ' ' + face)
dataframe = dataframe.append({'name':file_name,'label':face},ignore_index=True)
# test_num = test_num + 1
# if test_num > 10:
# break
dataframe.to_csv('submit.csv')
没有合适的资源?快使用搜索试试~ 我知道了~
基于卷积神经网络的人脸情绪识别
共2000个文件
png:35887个
csv:8个
h5:7个
需积分: 5 3 下载量 31 浏览量
2023-03-05
20:03:31
上传
评论 1
收藏 373.67MB RAR 举报
温馨提示
给定人脸照片完成具体的情绪识别,选手需要根据训练集数据构建情绪识别任务,并对测试集图像进行预测,识别人脸的7种情绪。
资源推荐
资源详情
资源评论
收起资源包目录
基于卷积神经网络的人脸情绪识别 (2000个子文件)
face_resnet.csv 133KB
submit2(36.974).csv 131KB
submit(0.31443).csv 130KB
submit2(0.47548).csv 128KB
submit2(0.45904).csv 128KB
submit4.csv 128KB
submit5(0.4355).csv 127KB
submit6.csv 122KB
face_resnet.h5 270.64MB
face_classify3(0.47548).h5 25.21MB
face_classify4.h5 25.21MB
face_classify(0.45).h5 13.06MB
face.h5 4.26MB
face2.h5 4.26MB
face_classify5.h5 2.84MB
lenet5_membrane.hdf5 4.26MB
科大讯飞人脸情绪识别挑战赛-Resnet.ipynb 394KB
科大讯飞人脸情绪识别挑战赛-LittleVGG.ipynb 293KB
科大讯飞人脸情绪识别挑战赛-测试集验证.ipynb 100KB
06853.png 2KB
05157.png 2KB
06909.png 2KB
05722.png 2KB
im2938.png 2KB
im373.png 2KB
im1813.png 2KB
im2188.png 2KB
im1414.png 2KB
04496.png 2KB
im2562.png 2KB
im3294.png 2KB
im572.png 2KB
im4649.png 2KB
05116.png 2KB
im468.png 2KB
im3507.png 2KB
im490.png 2KB
06533.png 2KB
im3139.png 2KB
02227.png 2KB
im2395.png 2KB
im2926.png 2KB
im4501.png 2KB
im1949.png 2KB
im1758.png 2KB
im275.png 2KB
02168.png 2KB
im2746.png 2KB
im1000.png 2KB
im2958.png 2KB
im2881.png 2KB
im6885.png 2KB
im3845.png 2KB
im6487.png 2KB
06927.png 2KB
im802.png 2KB
im362.png 2KB
05151.png 2KB
im3480.png 2KB
05223.png 2KB
im1644.png 2KB
im1804.png 2KB
06823.png 2KB
im3365.png 2KB
im3679.png 2KB
im2273.png 2KB
im2904.png 2KB
01715.png 2KB
im416.png 2KB
03048.png 2KB
im6505.png 2KB
02791.png 2KB
im4298.png 2KB
im575.png 2KB
im3785.png 2KB
im3760.png 2KB
02543.png 2KB
01191.png 2KB
im955.png 2KB
im721.png 2KB
im154.png 2KB
im3195.png 2KB
im3272.png 2KB
im1310.png 2KB
im799.png 2KB
im3778.png 2KB
im3156.png 2KB
im3097.png 2KB
im407.png 2KB
im2493.png 2KB
im5130.png 2KB
im804.png 2KB
im1728.png 2KB
im3718.png 2KB
01722.png 2KB
im2694.png 2KB
im364.png 2KB
im1960.png 2KB
im1405.png 2KB
im1881.png 2KB
共 2000 条
- 1
- 2
- 3
- 4
- 5
- 6
- 20
资源评论
爱敲代码的小雨
- 粉丝: 123
- 资源: 30
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- Screenshot_20240430_144340_com.ss.android.ugc.live.jpg
- 回到山沟沟.mp3
- 111111111111111111
- 基于matlab实现关于语音信号声源定位DOA估计所用的一些传统算法.rar
- 基于ultralytics-yolov8, 将其检测/分类/分割/姿态等任务移植到rk3588上
- Screenshot_2024-04-30-21-47-24-26.jpg
- 基于matlab实现波束形成,包括线阵、平面阵和圆阵
- Python自动生成excel周期报告源码
- 基于matlab实现DOA 估计和自适应波束形成.rar
- 一个基于yolov8的火灾检测部署
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功