基于PyQt5GUI的人脸识别系统设计与实现

目 录
前 言 1
第 1 章 人脸识别系统概述 1
第 2 章 人脸检测技术 1
§2.1 基于 Harr 级联的人脸检测 2
§2.2 基于 face_recognition 开源库的人脸检测… 错误!未定义书签。第 3 章 人脸识别技术 5
§3.1 构造人脸数据集 5
§3.2 模型训练 7
§3.3 实时人脸识别 9
第 4 章 基于 PyQt5 的应用平台 10
总 结 12
附 录 14
1、人脸识别系统概述
人脸识别技术现在已经愈发成熟,有 OpenCV 的 Harr 分类器、Dlib 库等等,他们可以高精度实现人脸识别。本文希望运用已经成熟的技术搭建一个人脸识别系统的应用程序,通过摄像头采集图像,实现在线识别,并可以在线添加新的使用者,可以运用在电脑开机人脸检测等场景。本系统编程语言使用 Python3.7,在 PyCharm 平台上开发,主要依赖于 OpenCV 库函数,通过对采集到图像帧进行预处理、人脸检测、裁剪、最后再进行识别;再此基础上,再添加基于 PyQt 的应用程序框架,对系统进行完善,美化。
主要实现过程:
1)使用摄像头采集图像显示,并检测出人脸
2)实现在线生成数据集,对模型进行训练、识别
3)将程序封装在应用程序中

2、人脸检测技术
早期人们的主要研究对象是人脸识别,即只根据人脸来识别身份,但是
随着应用环境越来越复杂,人脸识别越来越困难。往往需要先将人脸提取出来进行裁剪、旋转、对齐等,再进行人脸识别。本文转载自http://www.biyezuopin.vip/onews.asp?id=15002本章主要采用 Harr 开源库、和 face_recognition 库分别进行人脸检测实验,并对比好坏。

在上面几个过程中我们已经实现了人脸实时检测和识别,并且在后台输出信息,但是这个界面效果不太好看,使用起来还要一个文件一个文件的去点,不方便。所以我们使用 PyQt5 库搭建 GUI 界面,并于之前的程序相结合打造一款不错的应用。
PyQt5 是一套 Python 绑定 Digia QT5 应用的框架,Qt 库是最强大的 GUI 库之一。为什么选择 qt 还有一个重要原因就是在 python 中依然可以使用 Qt Designer 来设计界面,这会很方便我们的调试过程。设计应用界面如图 4-1 所示。我们只需要编写简单的响应函数就可以把现在的界面和之前的程序串接起来。

import sys
import cv2
from PyQt5.QtCore import *
from PyQt5.QtGui import *
from PyQt5.QtWidgets import QFileDialog, QMainWindow
from pyqt import *  #引用界面文件
import recognition


class PyQtMainEntry(QMainWindow, Ui_MainWindow):
    def __init__(self):
        super().__init__()
        self.setupUi(self)

        self.camera = cv2.VideoCapture(0)  # 0-调用笔记本内置摄像头,1-调用usb摄像头
        self.is_camera_opened = False  # 摄像头有没有打开标记

        # 定时器:30ms捕获一帧
        self._timer = QtCore.QTimer(self)
        self._timer.timeout.connect(self._queryFrame)
        self._timer.setInterval(30)

    def btnOpenCamera_Clicked(self):
        '''
        打开和关闭摄像头
        '''
        self.is_camera_opened = ~self.is_camera_opened
        if self.is_camera_opened:#摄像头开着呢
            self.camera = cv2.VideoCapture(0)
            self.pushButton_2.setText("Close Camera")
            self._timer.start()
        else:
            self.camera.release()
            self.pushButton.setText("Open Camera")
            self._timer.stop()

    def btnCloseCamera_Clicked(self):
       pass

    @QtCore.pyqtSlot()
    def _queryFrame(self):
        '''
        循环捕获图片
        '''
        self.frame = recognition.face_rec(self.camera)
        # ret, self.frame = self.camera.read()
        img_rows, img_cols, channels = self.frame.shape
        bytesPerLine = channels * img_cols

        cv2.cvtColor(self.frame, cv2.COLOR_BGR2RGB, self.frame)
        QImg = QImage(self.frame.data, img_cols, img_rows,
                      bytesPerLine, QImage.Format_RGB888)
        self.label.setPixmap(QPixmap.fromImage(self.frame).scaled(
            self.label.size(), Qt.KeepAspectRatio, Qt.SmoothTransformation))


if __name__ == "__main__":
    app = QtWidgets.QApplication(sys.argv)
    window = PyQtMainEntry()
    window.show()
    sys.exit(app.exec_())

基于PyQt5GUI的人脸识别系统设计与实现_第1张图片
基于PyQt5GUI的人脸识别系统设计与实现_第2张图片
基于PyQt5GUI的人脸识别系统设计与实现_第3张图片
基于PyQt5GUI的人脸识别系统设计与实现_第4张图片
基于PyQt5GUI的人脸识别系统设计与实现_第5张图片
基于PyQt5GUI的人脸识别系统设计与实现_第6张图片
基于PyQt5GUI的人脸识别系统设计与实现_第7张图片
基于PyQt5GUI的人脸识别系统设计与实现_第8张图片
基于PyQt5GUI的人脸识别系统设计与实现_第9张图片
基于PyQt5GUI的人脸识别系统设计与实现_第10张图片

你可能感兴趣的:(计算机视觉,opencv,pyQT5,GUI,毕业设计)