以fer2013为数据集,cnn的人脸表情图片识别,先在一个文件中创建cnn模型,再在另一个文件中进行实际图片识别,请帮我写出详细的代码
时间: 2024-03-15 15:44:38 浏览: 74
基于TensorFlow+CNN+fer2013实现的人脸表情识别源码+详细代码注释.zip
5星 · 资源好评率100%
好的,以下是详细的代码:
首先,在一个文件中创建cnn模型:
```python
import tensorflow as tf
# 定义CNN模型
def create_model():
model = tf.keras.models.Sequential([
tf.keras.layers.Conv2D(32, (3,3), padding='same', activation='relu', input_shape=(48, 48, 1)),
tf.keras.layers.BatchNormalization(),
tf.keras.layers.Conv2D(32, (3,3), padding='same', activation='relu'),
tf.keras.layers.BatchNormalization(),
tf.keras.layers.MaxPooling2D(pool_size=(2,2)),
tf.keras.layers.Dropout(0.25),
tf.keras.layers.Conv2D(64, (3,3), padding='same', activation='relu'),
tf.keras.layers.BatchNormalization(),
tf.keras.layers.Conv2D(64, (3,3), padding='same', activation='relu'),
tf.keras.layers.BatchNormalization(),
tf.keras.layers.MaxPooling2D(pool_size=(2,2)),
tf.keras.layers.Dropout(0.25),
tf.keras.layers.Conv2D(128, (3,3), padding='same', activation='relu'),
tf.keras.layers.BatchNormalization(),
tf.keras.layers.Conv2D(128, (3,3), padding='same', activation='relu'),
tf.keras.layers.BatchNormalization(),
tf.keras.layers.MaxPooling2D(pool_size=(2,2)),
tf.keras.layers.Dropout(0.25),
tf.keras.layers.Flatten(),
tf.keras.layers.Dense(1024, activation='relu'),
tf.keras.layers.BatchNormalization(),
tf.keras.layers.Dropout(0.5),
tf.keras.layers.Dense(7, activation='softmax')
])
return model
```
接下来,在另一个文件中进行实际图片识别:
```python
from PIL import Image
import numpy as np
import cv2
# 加载保存的模型
model = tf.keras.models.load_model('model.h5')
# 加载待识别的图片
img = Image.open('test.jpg').convert('L')
img = np.array(img)
img = cv2.resize(img, (48, 48)).astype('float32')
img /= 255
# 对图片进行预测
result = model.predict(np.expand_dims(img, axis=0))
label = np.argmax(result)
# 打印预测结果
print(label)
```
需要注意的是,在实际使用时,需要将数据集fer2013下载下来,并将其转换成numpy数组进行训练模型。此处仅提供识别代码的示例。
阅读全文