基于卷积神经网络的人脸识别用python代码
时间: 2023-10-16 11:08:29 浏览: 120
人脸识别是计算机视觉领域的研究热点之一,而卷积神经网络(Convolutional Neural Network,CNN)是实现人脸识别的重要工具之一。下面是一个基于CNN的人脸识别的Python代码示例:
```python
import os
import cv2
import numpy as np
from sklearn.model_selection import train_test_split
from keras.models import Sequential
from keras.layers import Dense, Dropout, Flatten
from keras.layers import Conv2D, MaxPooling2D
# 加载数据集
def load_dataset():
images = []
labels = []
label = 0
image_dir = "path/to/dataset"
for subdir in os.listdir(image_dir):
subpath = os.path.join(image_dir, subdir)
for image_name in os.listdir(subpath):
image_path = os.path.join(subpath, image_name)
image = cv2.imread(image_path)
image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
images.append(image)
labels.append(label)
label += 1
images = np.array(images)
labels = np.array(labels)
return images, labels
# 数据集预处理
def preprocess_dataset(images, labels):
images = images.reshape(images.shape[0], images.shape[1], images.shape[2], 1)
images = images.astype('float32') / 255
labels = np.eye(np.max(labels) + 1)[labels]
return images, labels
# 构建模型
def build_model(input_shape, num_classes):
model = Sequential()
model.add(Conv2D(32, kernel_size=(3, 3), activation='relu', input_shape=input_shape))
model.add(Conv2D(64, (3, 3), activation='relu'))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Dropout(0.25))
model.add(Flatten())
model.add(Dense(128, activation='relu'))
model.add(Dropout(0.5))
model.add(Dense(num_classes, activation='softmax'))
model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy'])
return model
# 训练模型
def train_model(model, images, labels):
x_train, x_test, y_train, y_test = train_test_split(images, labels, test_size=0.2, random_state=42)
model.fit(x_train, y_train, batch_size=32, epochs=10, verbose=1, validation_data=(x_test, y_test))
# 加载数据集
images, labels = load_dataset()
# 数据集预处理
images, labels = preprocess_dataset(images, labels)
# 构建模型
input_shape = images[0].shape
num_classes = labels.shape[1]
model = build_model(input_shape, num_classes)
# 训练模型
train_model(model, images, labels)
```
这个代码示例中,首先定义了一个函数`load_dataset()`用于加载人脸数据集。然后定义了一个函数`preprocess_dataset()`用于对数据集进行预处理,包括将图片转换为灰度图、归一化处理和标签转换为one-hot编码。接着定义了一个函数`build_model()`用于构建CNN模型,包括卷积层、池化层、全连接层等。最后定义了一个函数`train_model()`用于训练模型。
需要注意的是,这个代码示例只是一个简单的示例,实际应用中需要根据具体情况对模型进行调整和优化。
阅读全文