手把手教你使用TensorFlow 2.7完成人脸识别系统(Web + PyQt界面)
在本教程中,我们将使用TensorFlow 2.7构建一个简单的人脸识别系统,并使用Flask框架创建Web接口,以及使用PyQt创建图形用户界面。整个过程分为几个步骤:环境准备、模型训练、Flask API实现,最后是PyQt界面的搭建。
环境准备
首先,确保你的计算机上安装了Python和相关的库。可以通过以下命令安装所需的库:
pip install tensorflow Flask PyQt5 opencv-python
一、模型训练
我们需要一个人脸识别模型。这里我们可以使用TensorFlow的预训练模型,例如Facenet
模型。由于训练人脸识别模型需要大量的数据和时间,我们可以直接使用已训练好的模型进行迁移学习。
下面是一个简单的示例代码,演示如何加载预训练的Facenet模型:
import tensorflow as tf
def load_model(model_path):
model = tf.keras.models.load_model(model_path)
return model
model = load_model('path_to_facenet_model.h5')
二、Flask API实现
接下来,我们利用Flask框架创建一个Web接口。用户可以通过该接口上传图片,系统将进行人脸识别并返回结果。
我们创建一个app.py
文件,并编写以下代码:
from flask import Flask, request, jsonify
import cv2
import numpy as np
from tensorflow.keras.preprocessing import image
app = Flask(__name__)
@app.route('/recognize', methods=['POST'])
def recognize():
if 'file' not in request.files:
return jsonify({'error': 'No file uploaded'}), 400
file = request.files['file']
img = image.load_img(file, target_size=(160, 160)) # 调整为模型输入大小
img_array = image.img_to_array(img) / 255.0 # 归一化
img_array = np.expand_dims(img_array, axis=0)
# 进行人脸识别
predictions = model.predict(img_array)
# 处理预测结果(例如,返回标识或相似度等)
return jsonify({'result': 'recognized_face'})
if __name__ == '__main__':
app.run(debug=True)
测试API
启动Flask应用后,可以使用Postman
或curl
命令进行测试:
curl -X POST -F 'file=@path_to_image.jpg' http://127.0.0.1:5000/recognize
三、PyQt界面搭建
现在我们来搭建一个简单的PyQt界面,让用户能够上传图片进行人脸识别。
创建一个gui.py
文件,并编写如下代码:
import sys
from PyQt5.QtWidgets import QApplication, QWidget, QPushButton, QFileDialog, QLabel
import requests
class FaceRecognitionApp(QWidget):
def __init__(self):
super().__init__()
self.initUI()
def initUI(self):
self.setGeometry(100, 100, 400, 300)
self.setWindowTitle('人脸识别')
self.label = QLabel('请选择要识别的图片', self)
self.label.setGeometry(50, 50, 300, 50)
self.uploadBtn = QPushButton('上传图片', self)
self.uploadBtn.setGeometry(50, 150, 100, 50)
self.uploadBtn.clicked.connect(self.upload_image)
self.resultLabel = QLabel(self)
self.resultLabel.setGeometry(50, 220, 300, 50)
def upload_image(self):
options = QFileDialog.Options()
fileName, _ = QFileDialog.getOpenFileName(self, "选择图片", "", "Images (*.png *.xpm *.jpg *.jpeg)", options=options)
if fileName:
self.label.setText(f'选择的文件: {fileName}')
self.recognize_face(fileName)
def recognize_face(self, file_path):
url = 'http://127.0.0.1:5000/recognize'
files = {'file': open(file_path, 'rb')}
response = requests.post(url, files=files)
self.resultLabel.setText(response.json().get('result', '识别失败'))
if __name__ == '__main__':
app = QApplication(sys.argv)
window = FaceRecognitionApp()
window.show()
sys.exit(app.exec_())
四、运行程序
- 首先,启动Flask应用:
bash
python app.py
- 然后,启动PyQt界面:
bash
python gui.py
- 使用PyQt界面选择一张图片,触发识别操作,系统将返回识别的结果。
结语
通过以上步骤,我们成功构建了一个简单的人脸识别系统,整合了Flask Web API和PyQt图形界面。对于初学者而言,这是一个很好的入门项目,后续可以根据需要对模型进行微调或者添加更多的功能,如存储识别结果、进行更复杂的模型训练等。希望这个教程能够对你有所帮助!