人走后息屏|离开座位后息屏|基于python-opencv人脸识别实现
本机环境:python 3.10.5/windows带摄像头
前提:pip install opencv-python
haarcascade_frontalface_default.xml和haarcascade_frontalface_default.xml这两个文件在你安装完pip install opencv-python后用文件搜索软件(如everything)搜索就能找到,找到后复制到此代码同目录下,否则会报错
# -*- coding: UTF-8 -*-
# 调用电脑摄像头进行实时人脸+眼睛识别,人脸未识别到会使电脑息屏,可直接复制粘贴运行
import cv2
from ctypes import *
def left_lock():
face_cascade = cv2.CascadeClassifier('haarcascade_frontalface_default.xml')
eye_cascade = cv2.CascadeClassifier('haarcascade_eye.xml')
# 调用摄像头摄像头
cap = cv2.VideoCapture(0)
i=0
while(True):
# 获取摄像头拍摄到的画面
ret, frame = cap.read()
frame = cv2.flip(frame, 1)
faces = face_cascade.detectMultiScale(frame, 1.3, 5)
print(type(faces))
if isinstance(faces,tuple):
i=i+1
else:
i=0
if i>=100:
user32 = windll.LoadLibrary('user32.dll')
user32.LockWorkStation()
i=0
img = frame
for (x,y,w,h) in faces:
# 画出人脸框,蓝色,画笔宽度微
img = cv2.rectangle(img,(x,y),(x+w,y+h),(255,0,0),2)
# 框选出人脸区域,在人脸区域而不是全图中进行人眼检测,节省计算资源
face_area = img[y:y+h, x:x+w]
eyes = eye_cascade.detectMultiScale(face_area)
# 用人眼级联分类器引擎在人脸区域进行人眼识别,返回的eyes为眼睛坐标列表
for (ex,ey,ew,eh) in eyes:
#画出人眼框,绿色,画笔宽度为1
cv2.rectangle(face_area,(ex,ey),(ex+ew,ey+eh),(0,255,0),1)
# 实时展示效果画面
cv2.imshow('do_not_leave',img)
k=cv2.waitKey(1)
# 点击窗口X按钮关闭窗口,窗口名字要对应
if cv2.getWindowProperty('do_not_leave',cv2.WND_PROP_VISIBLE) < 1.0:
break
if k == 27:#按esc退出
break
elif k == ord('s'):#按s截图
cv2.imwrite('D:/project1/1.jpg', img)#路径根据情况自行修改
# 最后释放摄像头,关闭所有窗口
cap.release()
cv2.destroyAllWindows()
left_lock()