【OpenCV人脸检测】写了个智能锁屏小工具!人离开电脑自动锁屏

news2024/9/20 22:28:24

文章目录

  • 1. 写在前面
  • 2. 设计思路
  • 3. 人脸检测
  • 4. 程序实现

【作者主页】:吴秋霖
【作者介绍】:Python领域优质创作者、阿里云博客专家、华为云享专家。长期致力于Python与爬虫领域研究与开发工作!
【作者推荐】:对JS逆向感兴趣的朋友可以关注《爬虫JS逆向实战》,对分布式爬虫平台感兴趣的朋友可以关注《分布式爬虫平台搭建与开发实战》
还有未来会持续更新的验证码突防、APP逆向、Python领域等一系列文章

1. 写在前面

  在职场中,我们经常会遇到这样的情况:由于各种原因离开电脑时忘记了锁屏!这时你可能正在浏览一些私密的内容,或者在打开聊天软件与亲朋好友交流。在公司这种人来人往的环境中,甚至可能有人在你的工位周围活动。如何防止他人无意中看到你的隐私对于我们程序员来说就变得很简单了

这不仅仅是关于信息安全的问题,更是关于保护个人隐私的重要一环

2. 设计思路

  为了解决这个问题,我们将实现一个小工具,通过调用摄像头不定时抓拍图片,再借助OpenCV做人脸识别检测,我们能够实时监测电脑前是否有人。检测到无人在电脑屏幕前则触发自动锁屏操作。而当有人回来入座时,系统又将自动检测并唤醒屏幕

当然,这个地方有更多的细节可以在后续功能中进行优化与升级,例如,我们可以添加人脸识别库,进行人脸特征提取与对比,提高识别精度!根据个人需求训练人脸模型,采集一些自己的图像来进行训练。最后在唤醒之前对人脸进行对比,是本人则唤醒,不是的话也可以抓拍一张…

另外也可以对用户在设备上的活动进行监测,如键盘的输入、鼠标的移动,以此来判断用户是否离开

在开始之前我们需要安装如下模块:

pip3 install opencv-python

OpenCV是迄今为止解决基于计算机视觉问题最流行的开源库之一,其下载量已超过1800万次,活跃的用户社区拥有47000名成员。OpenCV具备2500种优化算法,涵盖了一整套经典和最先进的计算机视觉以及机器学习算法,使其成为机器学习领域中最为重要的库之一

3. 人脸检测

人脸检测的一般步骤如下:为了实现精准的人脸检测,首先需构建人脸模型,获取可靠的人脸分类器。通常我们会使用网上公开的扩展包或已训练好的分类器。为此,将haarcascades与lbpcascades中相关的XML文件下载至本地,以备后续调用,为人脸检测提供必要的支持

下面我们做一个示例,使用Python+OpenCV实现单人脸检测,代码如下:

import cv2
import os

def face_detection(image):
    # 创建一个级联分类器,加载Haar特征的.xml分类器文件
    face_cascade_path = os.path.join(cv2.data.haarcascades, 'haarcascade_frontalface_default.xml')
    
    if not os.path.isfile(face_cascade_path):
        print("Error: Haarcascade file not found.")
        return

    face_detector = cv2.CascadeClassifier(face_cascade_path)

    # 多个尺度空间进行人脸检测,返回检测到的人脸区域坐标信息
    faces = face_detector.detectMultiScale(image=image, scaleFactor=1.1, minNeighbors=5)
    print('检测到的人脸信息如下:\n', faces)

    for x, y, w, h in faces:
        # 在原图像上绘制矩形标识
        cv2.rectangle(img=image, pt1=(x, y), pt2=(x+w, y+h), color=(0, 0, 255), thickness=2)

    cv2.imshow('result', image)

# 读取图像
src_path = os.path.join('Desktop', 'kunkun.png')
src = cv2.imread(src_path)

if src is None:
    print(f"Error: Could not read image from {src_path}")
else:
    cv2.imshow('input image', src)
    face_detection(src)

cv2.waitKey(0)
cv2.destroyAllWindows()

在这里插入图片描述

4. 程序实现

首先,我们需要初始化摄像头并检测判断摄像头是否打开:

cap = cv2.VideoCapture(0)
if not cap.isOpened():
    print("Error: Could not open camera.")
    exit()

接下来,为了进行人脸检测,我们需要载入OpenCV的人脸检测模型:

face_cascade_path = cv2.data.haarcascades + 'haarcascade_frontalface_default.xml'
if not os.path.isfile(face_cascade_path):
    print("Error: Haarcascade file not found.")
    exit()

face_cascade = cv2.CascadeClassifier(face_cascade_path)
if face_cascade.empty():
    print("Error: Could not load haarcascade.")
    exit()

为了方便,我们创建了一个函数来检测人脸:

def detect_faces(frame):
    gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
    faces = face_cascade.detectMultiScale(gray, 1.1, 4)
    return faces

接着,我们需要根据不同系统执行不同命令,实现锁屏和唤醒屏幕的操作:

# 执行锁屏命令
def lock_screen(os_type):
    if os_type == 'windows':
        os.system('rundll32.exe user32.dll, LockWorkStation')
    elif os_type == 'mac':
        subprocess.run(['pmset', 'displaysleepnow'])

# 执行唤醒屏幕命令
def wake_screen():
    subprocess.run(['caffeinate', '-u', '-t', '1'])

最后,我们将以上所有的组件整合到一起,形成一个完整的程序,如下所示:

import cv2
import time
import os
import platform
import subprocess

# 常量定义
NO_PERSON_THRESHOLD = 3
SAVE_IMAGE_DELAY = 5
IMG_NAME = "face_photo.jpg"

# 检测操作系统
def detect_os():
    os_name = platform.system()
    if os_name == 'Windows':
        return 'windows'
    elif os_name == 'Darwin':
        return 'mac'
    else:
        return 'other'

# 执行锁屏命令
def lock_screen(os_type):
    if os_type == 'windows':
        os.system('rundll32.exe user32.dll, LockWorkStation')
    elif os_type == 'mac':
        subprocess.run(['pmset', 'displaysleepnow'])

# 执行唤醒屏幕命令
def wake_screen():
    subprocess.run(['caffeinate', '-u', '-t', '1'])

# 初始化摄像头
cap = cv2.VideoCapture(0)

# 载入OpenCV的人脸检测模型
face_cascade = cv2.CascadeClassifier(cv2.data.haarcascades + 'haarcascade_frontalface_default.xml')

# 无人状态计时器
no_person_timer = 0
# 是否保存图像的标志
save_image = False

# 检测操作系统类型
os_type = detect_os()

while True:
    ret, frame = cap.read()

    if not ret:
        break

    # 转换为灰度图像
    gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
    faces = face_cascade.detectMultiScale(gray, 1.1, 4)

    if len(faces) == 0:
        no_person_timer += 1
        if no_person_timer > NO_PERSON_THRESHOLD:
            lock_screen(os_type)
    else:
        no_person_timer = 0
        # 当检测到人脸时唤醒屏幕
        wake_screen()

        # 检测到人脸时保存当前帧
        if not save_image:
            cv2.imwrite(IMG_NAME, frame)
            print(f"Saved image: {IMG_NAME}")
            save_image = True

            # 延迟一定时间再继续保存,避免频繁保存
            cv2.waitKey(SAVE_IMAGE_DELAY * 1000)

    # 检测键盘输入,以退出程序
    key = cv2.waitKey(1) & 0xFF
    if key == 27:  # ESC键
        break

cap.release()
cv2.destroyAllWindows()

通过这个小工具,我们不仅可以提高电脑的安全性,还能够保护个人隐私,使我们的工作环境更加舒适。当然,用户可以根据个人需求对该工具进行进一步定制,使其更符合个性化的使用体验。在实际使用中,我们可以根据自己的需求进行调整和改进,以满足不同场景下的锁屏需求

赶紧试一试吧~~

好了,到这里又到了跟大家说再见的时候了。创作不易,帮忙点个赞再走吧。你的支持是我创作的动力,希望能带给大家更多优质的文章

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1431652.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

MacOS Mojavev10.14.6

MacOS Mojave v10.14.6系统安装包是一款专为Mac用户设计的操作系统软件包。Mojave是苹果公司为Mac设备开发的一个操作系统版本,它提供了许多新功能和改进,旨在提高Mac用户的使用体验和工作效率。 安装MacOS Mojave v10.14.6系统后,用户可以享…

从0到1入门C++编程——07 基于多态的职工管理系统

文章目录 一、创建管理类及菜单功能实现二、创建职工抽象类三、退出管理程序四、增加职工信息五、读写文件操作六、显示职工信息七、删除职工信息八、修改职工信息九、查找职工信息十、对职工信息排序十一、清空文件内容十二、工程文件构成 本案例中利用C实现一个基于多态的职工…

flask_django_python五金电商网络营销的可视化分析研究

前面部分完成了系统需求分析,了解到新闻数据业务方面的需求,系统主要分为用户管理、五金信息管理、在线留言、系统管理等功能。销的可视化研究,并对这些数据进行处理, 然后对这些数据进行可视化分析和统计。 Python 爬虫技术目前来…

职言圈:华为4年员工,小金库存到100万,但却在事业上升期决定回老家县城考公务员。

“华为4年员工,小金库存到100万,但却在事业上升期决定回老家县城考公务员。只因不想现在赚的钱将来都花在了医院!” 互联网大厂员工的薪资高,这是人尽皆知的事了,特别是像华为、百度、绿厂、阿里、鹅厂等这些知名公司…

Leetcode的AC指南 —— 栈与队列 :1047.删除字符串中的所有相邻重复项

摘要: **Leetcode的AC指南 —— 栈与队列 :1047.删除字符串中的所有相邻重复项 **。题目介绍:给出由小写字母组成的字符串 S,重复项删除操作会选择两个相邻且相同的字母,并删除它们。 在 S 上反复执行重复项删除操作&a…

CG-FS 风速传感器 485型三杯式风速计 气象环境监测仪器

产品概述 本产品主要采用优质聚合物碳纤维为原材料,具有良好的防腐、防侵蚀等特点,能够保证仪器长期使用不起锈,同时配合内部顺滑的轴承系统,确保了信息采集的准确性。外型小巧轻便,便于携带和组装,三杯设…

计划赶不上变化!项目团队如何高效管理变更请求?

现实中,即使是计划得再好的项目,有时也需要变更。作为项目经理,管理变更请求是重要的工作之一,以便团队能继续无缝工作,实现项目目标。 变更请求的重要性 变更请求是指修改系统、产品或项目计划的建议,通常…

计算机网络_1.6.1 常见的三种计算机网络体系结构

1.6.1 常见的三种计算机网络体系结构 1、OSI(七层协议)标准失败的原因2、TCP/IP参考模型3、三种网络体系结构对比 笔记来源: B站 《深入浅出计算机网络》课程 1、OSI(七层协议)标准失败的原因 (1&#xf…

利用ReentrantLock解决死锁----以哲学家问题为例

问题描述 哲学家问题:其中多个哲学家在共享有限资源(筷子)的情况下进行工作(思考和吃饭),这可能导致死锁。 每位哲学家需要两根筷子才能吃饭,而每根筷子只能被一位哲学家使用,这就…

Web项目利用OSS进行图像存储服务

一、OSS介绍 在Web项目中,一些常见的功能,比如展示图片,修改头像等,都需要进行图片的上传操作,但是如果是存储在Web服务器中,在读取图片的时候会占用比较多的资源,影响服务器的性能。 常…

学习c语言,动态内存管理

malloc和calloc区别在于初始化

迅为RK3588开发板windows与开发板互传使用U盘进行拷贝

1 将 U 盘(U 盘的格式必须为 FAT32 格式,大小在 32G 以下)插到开发板的 usb 接口,串口打印信息如下所示,U 盘的设备节点是/dev/sdb4。U 盘的设备节点不是固定的,根据实际情况来查看设备节点。 2 输入以下命令挂载 U 盘&#xff0c…

2024年教资认定全流程详细图解✅

教资认定3月开始,大家别只顾着快乐过年,可以做好准备了! ▶️材料准备: 有效期内的身份证原件学历证学位证普通话等级证书电子版个人照片(个人近期白底免冠无头饰正面1寸证照。)打印版填写完毕的个人承诺书…

感激沃尔玛跨境智星:轻松注册大量沃尔玛买家号的利器

最近,我急需大量沃尔玛买家号,但又担心账号之间可能存在关联问题。幸运的是,在我尝试使用沃尔玛跨境智星后,这一问题得到了解决。 首先,我要感谢这款软件提供的详细操作指南。通过访问沃尔玛官网并按照您的指引&#x…

【蓝桥杯冲冲冲】[NOIP2001 普及组] 装箱问题

蓝桥杯备赛 | 洛谷做题打卡day26 文章目录 蓝桥杯备赛 | 洛谷做题打卡day26题目描述输入格式输出格式样例 #1样例输入 #1样例输出 #1 提示思路 题解代码我的一些话 [NOIP2001 普及组] 装箱问题 题目描述 有一个箱子容量为 V V V,同时有 n n n 个物品,每…

c++虚函数、静态绑定与动态绑定

首先说明&#xff0c;所谓绑定&#xff0c;就是指函数的调用 接下来&#xff0c;我们直接看一段代码来说明问题 class Base { public:Base(int data10):m_a(data){}void show(){cout<<"Base::show()"<<endl;}void show(int){cout<<"Base::sh…

引流技术-通过文件中增加联系方式并传播

文章目录 前言文档增加联系方式扩散网盘扩散自建网站借力 注意 前言 很多人在找资料的时候可能都遇到过下图情况&#xff1a; 1、文档最后面留一个自己的联系方式&#xff1b; 2、找的一堆文件中都有相同的情况&#xff1b; 3、一段时间全网搜到的很多相同文件也有这个联系方式…

springboot156基于SpringBoot+Vue的常规应急物资管理系统

基于SpringBootVue的常规应急物资管理系统的设计与实现 摘 要 1 ABSTRACT 2 第一章 绪论 3 1.1研究背景 3 1.2研究意义 3 1.3国内外研究现状 4 1.3.1国外研究现状 4 1.3.2国内研究现状 4 1.4研究内容与方法 5 1.4.1研究内容 5 1.4.2研究方法 5 1.5论文的组织结构 5…

3D力导向树插件-3d-force-graph学习002

一、实现效果&#xff1a;节点文字同时展示 节点显示不同颜色节点盒label文字并存节点上添加点击事件 二、利用插件&#xff1a;CSS2DRenderer 提示&#xff1a;以下引入文件均可在安装完3d-force-graph的安装包里找到 三、关键代码 提示&#xff1a;模拟数据可按如下格式填…

年终奖,还得是腾讯。。。

腾讯年终奖 什么是真正的好公司&#xff1f; 一年到头&#xff0c;出不了几次裁员等劳务纠纷的吃瓜新闻。 只有到年底了&#xff0c;才因为年终奖远高于行业水平&#xff0c;实在没法低调了&#xff0c;"被迫"上热搜。 最近网友爆料了腾讯头牌部门的年终奖&#xff1…