借用一下马先生的图()
if __name__ == '__main__': app = QApplication(sys.argv) main_window = QMainWindow() ui = boke_ui.Ui_MainWindow() ui.setupUi(main_window) main_window.show() my_face = Campus_face(ui) sys.exit(app.exec())main函数也没什么
class Campus_face: img_label = None face_label = None car_label = None classroom_img = None face_collection = 0 def __init__(self, my_ui): self.my_ui = my_ui self.set_face_label() my_ui.pushButton.clicked.connect(self.face_reg_thread) my_ui.pushButton_2.clicked.connect(self.face_face_collection_yz) def set_face_label(self): hbox = QHBoxLayout(self.my_ui.groupBox) self.img_label = QLabel() hbox.addWidget(self.img_label) hbox2 = QHBoxLayout(self.my_ui.groupBox_2) self.face_label = QLabel() hbox2.addWidget(self.face_label) hbox3 = QHBoxLayout(self.my_ui.groupBox_3) self.car_label = QLabel() hbox3.addWidget(self.car_label) def face_face_collection_yz(self): self.face_collection = 1 def face_reg_thread(self): th = threading.Thread(target=self.face_reg) th.start() def face_reg(self): self.face_collection = 0 cap = cv2.VideoCapture(1) frame_num = cap.get(propId=cv2.CAP_PROP_FPS) # 获取视频帧数 frame_fourcc = cap.get(propId=cv2.CAP_PROP_FOURCC) # 视频编码格式 frame_count = cap.get(propId=cv2.CAP_PROP_FRAME_COUNT) # 视频有多少帧 frame_height = cap.get(propId=cv2.CAP_PROP_FRAME_HEIGHT) # 视频 高 frame_width = cap.get(propId=cv2.CAP_PROP_FRAME_WIDTH) # 视频 宽 while cap.isOpened(): flag, frame = cap.read() frame = cv2.resize(src=frame, dsize=(int(frame_width / 1.2), int(frame_height / 1.2)), interpolation=None) frame = cv2.flip(frame, 1) img = frame frame = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY) faces = face_cascade.detectMultiScale(frame, scaleFactor=1.2, minNeighbors=5, flags=None, minSize=None, maxSize=None) for (x, y, w, h) in faces: # 人脸检测 img = cv2.rectangle(img=img, pt1=(x, y), pt2=(x + w, y + h), color=[int(np.random.randint(0, 256, size=1)[0]), int(np.random.randint(0, 256, size=1)[0]), int(np.random.randint(0, 256, size=1)[0])], thickness=2) face_area = img[y:y + h, x:x + w] img_face_name = r'.\tmp\tmp_face_img.jpg' cv2.imwrite(img_face_name, face_area) self.face_label.setPixmap(QPixmap(img_face_name)) # 人眼 eyes = eye_cascade.detectMultiScale(face_area, scaleFactor=1.2, minNeighbors=2, flags=None, minSize=None, maxSize=None) for (ex, ey, ew, eh) in eyes: cv2.rectangle(face_area, (ex, ey), (ex + ew, ey + eh), color=[int(np.random.randint(0, 256, size=1)[0]), int(np.random.randint(0, 256, size=1)[0]), int(np.random.randint(0, 256, size=1)[0])], thickness=1, lineType=None, shift=None) # cv2.imshow('campus face', img) img_name = r'.\tmp\tmp_img.jpg' cv2.imwrite(img_name, img) self.img_label.setPixmap(QPixmap(img_name)) if ord('q') == cv2.waitKey(int(1000 / frame_num)) or flag == False: break if self.face_collection == 1: break cv2.destroyAllWindows() cap.release()内容也不算多,知识挺多的
import sys import cv2 import numpy as np from PyQt5.QtGui import QPixmap from PyQt5.QtWidgets import QHBoxLayout, QLabel, QVBoxLayout, QApplication, QMainWindow, QFormLayout, QLineEdit, QWidget import threading from Campus_security import boke_ui face_cascade = cv2.CascadeClassifier( r'G:\huwei_welding\Campus_security\cascade_file\haarcascade_frontalface_default.xml') eye_cascade = cv2.CascadeClassifier(r'G:\huwei_welding\Campus_security\cascade_file\haarcascade_eye.xml')下面两个是人脸和人眼的级联器而已
# -*- coding: utf-8 -*- # Form implementation generated from reading ui file 'boke_ui.ui' # # Created by: PyQt5 UI code generator 5.15.0 # # WARNING: Any manual changes made to this file will be lost when pyuic5 is # run again. Do not edit this file unless you know what you are doing. from PyQt5 import QtCore, QtGui, QtWidgets class Ui_MainWindow(object): def setupUi(self, MainWindow): MainWindow.setObjectName("MainWindow") MainWindow.resize(1148, 724) self.centralwidget = QtWidgets.QWidget(MainWindow) self.centralwidget.setObjectName("centralwidget") self.horizontalLayout = QtWidgets.QHBoxLayout(self.centralwidget) self.horizontalLayout.setObjectName("horizontalLayout") self.tabWidget = QtWidgets.QTabWidget(self.centralwidget) font = QtGui.QFont() font.setFamily("黑体") font.setPointSize(14) self.tabWidget.setFont(font) self.tabWidget.setObjectName("tabWidget") self.tab = QtWidgets.QWidget() self.tab.setObjectName("tab") self.pushButton = QtWidgets.QPushButton(self.tab) self.pushButton.setGeometry(QtCore.QRect(280, 560, 171, 61)) self.pushButton.setObjectName("pushButton") self.pushButton_2 = QtWidgets.QPushButton(self.tab) self.pushButton_2.setGeometry(QtCore.QRect(60, 560, 181, 61)) self.pushButton_2.setObjectName("pushButton_2") self.pushButton_5 = QtWidgets.QPushButton(self.tab) self.pushButton_5.setGeometry(QtCore.QRect(490, 560, 171, 61)) self.pushButton_5.setObjectName("pushButton_5") self.widget = QtWidgets.QWidget(self.tab) self.widget.setGeometry(QtCore.QRect(10, 10, 1101, 541)) self.widget.setObjectName("widget") self.horizontalLayout_2 = QtWidgets.QHBoxLayout(self.widget) self.horizontalLayout_2.setContentsMargins(0, 0, 0, 0) self.horizontalLayout_2.setObjectName("horizontalLayout_2") self.groupBox = QtWidgets.QGroupBox(self.widget) self.groupBox.setObjectName("groupBox") self.horizontalLayout_2.addWidget(self.groupBox) self.verticalLayout = QtWidgets.QVBoxLayout() self.verticalLayout.setObjectName("verticalLayout") self.groupBox_2 = QtWidgets.QGroupBox(self.widget) self.groupBox_2.setStyleSheet("") self.groupBox_2.setObjectName("groupBox_2") self.verticalLayout.addWidget(self.groupBox_2) self.groupBox_3 = QtWidgets.QGroupBox(self.widget) self.groupBox_3.setObjectName("groupBox_3") self.verticalLayout.addWidget(self.groupBox_3) self.horizontalLayout_2.addLayout(self.verticalLayout) self.horizontalLayout_2.setStretch(0, 4) self.horizontalLayout_2.setStretch(1, 2) self.tabWidget.addTab(self.tab, "") self.tab_2 = QtWidgets.QWidget() self.tab_2.setObjectName("tab_2") self.tabWidget.addTab(self.tab_2, "") self.horizontalLayout.addWidget(self.tabWidget) MainWindow.setCentralWidget(self.centralwidget) self.menubar = QtWidgets.QMenuBar(MainWindow) self.menubar.setGeometry(QtCore.QRect(0, 0, 1148, 26)) self.menubar.setObjectName("menubar") MainWindow.setMenuBar(self.menubar) self.statusbar = QtWidgets.QStatusBar(MainWindow) self.statusbar.setObjectName("statusbar") MainWindow.setStatusBar(self.statusbar) self.retranslateUi(MainWindow) self.tabWidget.setCurrentIndex(0) QtCore.QMetaObject.connectSlotsByName(MainWindow) def retranslateUi(self, MainWindow): _translate = QtCore.QCoreApplication.translate MainWindow.setWindowTitle(_translate("MainWindow", "关于PyQt图像化界面人脸识别")) self.pushButton.setText(_translate("MainWindow", "打开摄像头")) self.pushButton_2.setText(_translate("MainWindow", "关闭摄像头")) self.pushButton_5.setText(_translate("MainWindow", "保存视频")) self.groupBox.setTitle(_translate("MainWindow", "视频")) self.groupBox_2.setTitle(_translate("MainWindow", "人脸")) self.groupBox_3.setTitle(_translate("MainWindow", "车辆")) self.tabWidget.setTabText(self.tabWidget.indexOf(self.tab), _translate("MainWindow", "QT视频处理")) self.tabWidget.setTabText(self.tabWidget.indexOf(self.tab_2), _translate("MainWindow", "百度云语音识别"))Qt Designer拖出来的,没什么好讲的
将二、三、四方一个文件,五放一个文件(这命名和我的不同那就得修改模块引入那句代码了),然后就可以运行了
face_cascade = cv2.CascadeClassifier( r'G:\huwei_welding\Campus_security\cascade_file\haarcascade_frontalface_default.xml') eye_cascade = cv2.CascadeClassifier(r'G:\huwei_welding\Campus_security\cascade_file\haarcascade_eye.xml')这个没有,github opencv自己下载 (级联器相关)
def set_face_label(self): hbox = QHBoxLayout(self.my_ui.groupBox) self.img_label = QLabel() hbox.addWidget(self.img_label) hbox2 = QHBoxLayout(self.my_ui.groupBox_2) self.face_label = QLabel() hbox2.addWidget(self.face_label) hbox3 = QHBoxLayout(self.my_ui.groupBox_3) self.car_label = QLabel() hbox3.addWidget(self.car_label)在groupbox那添加label,用于显示图片而已
faces = face_cascade.detectMultiScale(frame, scaleFactor=1.2, minNeighbors=5, flags=None, minSize=None, maxSize=None) for (x, y, w, h) in faces: # 人脸检测 img = cv2.rectangle(img=img, pt1=(x, y), pt2=(x + w, y + h), color=[int(np.random.randint(0, 256, size=1)[0]), int(np.random.randint(0, 256, size=1)[0]), int(np.random.randint(0, 256, size=1)[0])], thickness=2) face_area = img[y:y + h, x:x + w] img_face_name = r'.\tmp\tmp_face_img.jpg' cv2.imwrite(img_face_name, face_area) self.face_label.setPixmap(QPixmap(img_face_name))这个也就是将人脸框出来而已(级联器搞出来的人脸区域坐标),然后花里胡哨点用numpy的随机数生成好看点的框框而已
忘了再回去复习下吧,后面在不错人脸识别(人脸训练)