手把手教你使用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应用后,可以使用Postmancurl命令进行测试:

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_())

四、运行程序

  1. 首先,启动Flask应用:

bash python app.py

  1. 然后,启动PyQt界面:

bash python gui.py

  1. 使用PyQt界面选择一张图片,触发识别操作,系统将返回识别的结果。

结语

通过以上步骤,我们成功构建了一个简单的人脸识别系统,整合了Flask Web API和PyQt图形界面。对于初学者而言,这是一个很好的入门项目,后续可以根据需要对模型进行微调或者添加更多的功能,如存储识别结果、进行更复杂的模型训练等。希望这个教程能够对你有所帮助!

点赞(0) 打赏

微信小程序

微信扫一扫体验

微信公众账号

微信扫一扫加关注

发表
评论
返回
顶部