有人来了,跳转桌面

在群里看到一篇文章,里面讲述了一个硬件,类似于公共厕所里的自动冲水器,可以用来检测是否有人靠近。那个设备检测到人后,会跳转到桌面。用途估计是屏幕上播放着小视频不想被人看到吧。联想起强大的python,借用其他库,和摄像头,可以快速实现一个这样的功能。

1.本机环境

macos10.12.5    python3.5    mac自带前置相机

python 需要安装一些库cv2,pyautogui,pyobjc-core,pyobjc 。

其他系统,机型灵活改变代码,可以实现同样效果

2.展示相机数据

import cv2

cap = cv2.VideoCapture(0)#获取相机
while True:
    ret,frame=cap.read()#从相机读取当前时刻的图像,ret是否获取成功,frame 当前图像 h*w*c bgr
    if ret:
        cv2.imshow("title",frame)#展示相机中的数据
    if cv2.waitKey(100) & 0xff == ord('q'):
        break#在窗口激活状态下按‘q’退出

cap.release() #释放相机
cv2.destroyAllWindows()#消耗所有窗口

3.检测人脸

得到某时刻的图片后,检测图片上人脸的个数,如果大于1就说明有人来了,跳转到桌面。人脸检测使用cv2中的CascadeClassifier和haarcascade_frontalface_default.xml,haarcascade_frontalface_default.xml可以在python已安装包中的cv2/data/路径下找到。

import cv2
import time
import pyautogui as ptg

cap = cv2.VideoCapture(0)#获取相机
detector=cv2.CascadeClassifier("haarcascade_frontalface_default.xml")#加载人脸分类模型
buf=[0,0,0,0,0,0]#记录近若干帧人脸数量
lb=len(buf)#buf长度
i=0#buf当前位置
while 1:
    ret,frame=cap.read()#获取当前帧
    gray=cv2.cvtColor(frame,cv2.COLOR_BGR2GRAY)#转换成灰度图
    buf[i]=len(detector.detectMultiScale(gray,1.13,3))#计算人脸个数,并记录到buf. detectMultiScale(灰度图,窗口间隔,同一位置被窗口覆盖3次认为是人脸)
    i=(i+1)%lb#调整buf访问位置
    #如果buf中有3个及以上帧被检测出大于1个人脸,那么认为有人来了。这个分类器有时不准确,可能识别出假人脸噪点,通过buf方式弥补
    ct=0#buf大于1个人脸计数器
    for x in buf:
        if x>1 : ct+=1
    if ct>=3:
        print("有人来了")
        ptg.press(["f11"])#mac跳转桌面的快捷键,其他系统视情况而定
        break
    time.sleep(0.05)#休眠0.05s
cap.release()#释放相机
发布了112 篇原创文章 · 获赞 22 · 访问量 7万+

猜你喜欢

转载自blog.csdn.net/Moluth/article/details/100923823
今日推荐