人脸识别小demo
#导入OpenCv人脸识别库
import cv2
import numpy as np
import sys
from PyQt5 import QtWidgets, QtGui
from PyQt5.QtGui import *
from PyQt5.QtWidgets import *
from PyQt5.QtCore import *
#使用前 将人脸模型库的路径改为自己电脑中的路径。
class picture(QWidget):
def __init__(self):
super(picture, self).__init__()
self.resize(800,550)
self.center() #使窗口居中
self.setWindowTitle("人脸识别系统")
self.setWindowIcon(QIcon('1.jpg'))
self.label = QLabel(self)
self.label.setText(" 识别预览区")
self.label.setFixedSize(640, 480)
self.label.move(120,30)
self.label.setStyleSheet("QLabel{background:white;}"
"QLabel{color:rgb(300,300,300,120);font-size:20px;font-weight:bold;font-family:宋体;}"
)
bin_save = QPushButton(self)
bin_save.setText("打开相机")
bin_save.move(20, 30)
bin_save.clicked.connect(self.opencap)
btn_3 = QPushButton(self)
btn_3.setText("清除图像")
btn_3.move(20, 80)
btn_3.clicked.connect(self.clear)
btn_8 = QPushButton(self)
btn_8.setText("退出")
btn_8.move(20, 130)
btn_8.clicked.connect(QCoreApplication.quit)
print("成功退出")
def clear(self):
global cam
cam=0
self.label.setPixmap(QPixmap(""))
def opencap(self):
global cam
#读取人脸模型库
face_cascade = cv2.CascadeClassifier('RecognitionModel.xml')
#获取摄像头
cap = cv2.VideoCapture(0)
cam=1
while cam:
#读取摄像头当前这一帧的画面 ret:True fase image:当前这一帧画面
ret, img = cap.read()
#图片进行灰度处理
gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
# 人脸检测
faces = face_cascade.detectMultiScale(gray,scaleFactor=1.5,minNeighbors=5)
#绘制人脸框
for(x,y,w,h) in faces:
width = x+w
height = y+h
strok=2
color=(255,0,0)
cv2.rectangle(img,(x,y),(width,height),color,strok)
size = (int(self.label.width()), int(self.label.height()))
shrink = cv2.resize(img, size, interpolation=cv2.INTER_AREA)
shrink = cv2.cvtColor(shrink, cv2.COLOR_RGB2BGR)
self.QtImg = QtGui.QImage(shrink.data,
shrink.shape[1],
shrink.shape[0],
QtGui.QImage.Format_RGB888)
self.label.setPixmap(QtGui.QPixmap.fromImage(self.QtImg))
if cv2.waitKey(20) & 0XFF == ord('q'):
break
def center(self): # 控制窗口显示在屏幕中心的方法
# 获得窗口
qr = self.frameGeometry()
# 获得屏幕中心点
cp = QDesktopWidget().availableGeometry().center()
# 显示到屏幕中心
qr.moveCenter(cp)
self.move(qr.topLeft())
if __name__ == "__main__":
app = QtWidgets.QApplication(sys.argv)
my = picture()
my.show()
sys.exit(app.exec_())