二、看main函数借用一下马先生的图()
三、我写的类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 sysimport cv2import numpy as npfrom PyQt5.QtGui import Qpixmapfrom PyQt5.QtWidgets import QHBoxLayout, QLabel, QVBoxLayout, QApplication, QMainWindow, qformlayout, QlineEdit, QWidgetimport threadingfrom Campus_security import boke_uiface_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, QtWidgetsclass 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的随机数生成好看点的框框而已
忘了再回去复习下吧,后面在不错人脸识别(人脸训练)
总结
以上是内存溢出为你收集整理的python关于PyQt5结合opencv的简单使用全部内容,希望文章能够帮你解决python关于PyQt5结合opencv的简单使用所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)