给我写一个基于tensorflow2.0的简单人脸识别系统
时间: 2024-02-07 11:02:56 浏览: 71
好的,下面是一个基于TensorFlow 2.0的简单人脸识别系统的示例代码:
首先,我们需要导入所需的库:
```python
import tensorflow as tf
from tensorflow.keras import layers, models
import numpy as np
import cv2
import os
```
然后,定义一些常量:
```python
IMAGE_SIZE = 64 # 图像大小
BATCH_SIZE = 32 # 批量大小
EPOCHS = 20 # 训练轮数
NUM_CLASSES = 2 # 类别数(人脸和非人脸)
```
接下来,我们定义数据集加载函数:
```python
def load_dataset():
faces_path = 'faces' # 人脸图像路径
non_faces_path = 'non_faces' # 非人脸图像路径
# 加载人脸图像
faces = []
for filename in os.listdir(faces_path):
img = cv2.imread(os.path.join(faces_path, filename))
img = cv2.resize(img, (IMAGE_SIZE, IMAGE_SIZE))
img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
img = np.expand_dims(img, axis=-1)
faces.append(img)
# 加载非人脸图像
non_faces = []
for filename in os.listdir(non_faces_path):
img = cv2.imread(os.path.join(non_faces_path, filename))
img = cv2.resize(img, (IMAGE_SIZE, IMAGE_SIZE))
img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
img = np.expand_dims(img, axis=-1)
non_faces.append(img)
# 将人脸和非人脸图像合并为一个数据集
X = np.array(faces + non_faces)
y = np.array([1] * len(faces) + [0] * len(non_faces))
# 随机打乱数据集
indices = np.arange(len(X))
np.random.shuffle(indices)
X = X[indices]
y = y[indices]
# 将标签转换为独热编码
y = tf.keras.utils.to_categorical(y, num_classes=NUM_CLASSES)
return X, y
```
接下来,定义模型:
```python
def build_model():
model = models.Sequential()
# 卷积层1
model.add(layers.Conv2D(32, (3, 3), padding='same', activation='relu', input_shape=(IMAGE_SIZE, IMAGE_SIZE, 1)))
model.add(layers.MaxPooling2D((2, 2)))
# 卷积层2
model.add(layers.Conv2D(64, (3, 3), padding='same', activation='relu'))
model.add(layers.MaxPooling2D((2, 2)))
# 卷积层3
model.add(layers.Conv2D(128, (3, 3), padding='same', activation='relu'))
model.add(layers.MaxPooling2D((2, 2)))
# 全连接层
model.add(layers.Flatten())
model.add(layers.Dense(128, activation='relu'))
model.add(layers.Dropout(0.5))
model.add(layers.Dense(NUM_CLASSES, activation='softmax'))
return model
```
接下来,加载数据集和构建模型:
```python
# 加载数据集
X, y = load_dataset()
# 构建模型
model = build_model()
model.compile(optimizer='adam', loss='categorical_crossentropy', metrics=['accuracy'])
```
最后,训练模型:
```python
model.fit(X, y, batch_size=BATCH_SIZE, epochs=EPOCHS, validation_split=0.2)
```
这样,我们就可以得到一个简单的人脸识别系统了。注意,这只是一个简单的示例,实际应用中可能需要更复杂的模型和更大的数据集来提高准确率。
阅读全文