前言 最近突然有个奇妙的想法,就是当我对着电脑屏幕的时候,电脑会先识别屏幕上的人脸是否是本人,如果识别是本人的话需要回答电脑说的暗语,答对了才会解锁并且有三次机会。如果都没答对就会发送邮件给我,通知有人在动我的电脑并上传该人头像。 过程 环境是win10代码我使用的是python3所以在开始之前需要安装一些依赖包,请按顺序安装否者会报错 pip install cmake -i https://pypi.tuna.tsinghua.edu.cn/simple pip install dlib -i https://pypi.tuna.tsinghua.edu.cn/simple pip ins 本文将介绍如何使用Python编程语言来创建一个独特的人脸识别屏幕解锁系统,该系统结合了人脸识别和口令验证,增加了电脑安全的双重保障。在开始之前,确保你的操作系统是Windows 10,并且已经安装了Python 3。为了运行这个项目,你需要安装以下依赖库: 1. `cmake`:C++构建工具,用于编译dlib库。 2. `dlib`:一个强大的C++库,包含面部检测和识别功能。 3. `face_recognition`:基于dlib的Python库,用于人脸检测和编码。 4. `opencv-python`:OpenCV的Python版本,用于视频处理和图像分析。 安装这些库的命令如下: ```bash pip install cmake -i https://pypi.tuna.tsinghua.edu.cn/simple pip install dlib -i https://pypi.tuna.tsinghua.edu.cn/simple pip install face_recognition -i https://pypi.tuna.tsinghua.edu.cn/simple pip install opencv-python -i https://pypi.tuna.tsinghua.edu.cn/simple ``` 接下来,我们将深入到代码实现中。导入所需的库: ```python import face_recognition import cv2 import numpy as np ``` 初始化一个视频捕获对象,通常是从摄像头获取视频流: ```python video_capture = cv2.VideoCapture(0) ``` 加载你自己的脸部图像作为已知的“主人”脸编码: ```python my_image = face_recognition.load_image_file("my.jpg") my_face_encoding = face_recognition.face_encodings(my_image)[0] ``` 创建一个列表存储已知的脸部编码和对应的名字,这里只有一个“Admin”: ```python known_face_encodings = [my_face_encoding] known_face_names = ["Admin"] ``` 进入主循环,不断捕获和处理视频帧。在循环中,我们首先对帧进行缩放以减小处理开销,然后将BGR图像转换为RGB格式,因为`face_recognition`库使用RGB图像: ```python while True: ret, frame = video_capture.read() small_frame = cv2.resize(frame, (0, 0), fx=0.25, fy=0.25) rgb_small_frame = small_frame[:, :, ::-1] ``` 接着,如果当前帧需要处理,进行人脸检测和编码: ```python if process_this_frame: face_locations = face_recognition.face_locations(rgb_small_frame) face_encodings = face_recognition.face_encodings(rgb_small_frame, face_locations) ``` 遍历检测到的每一张脸,与已知的脸部编码进行匹配和距离计算: ```python face_names = [] for face_encoding in face_encodings: matches = face_recognition.compare_faces(known_face_encodings, face_encoding) name = "Unknown" face_distances = face_recognition.face_distance(known_face_encodings, face_encoding) best_match_index = np.argmin(face_distances) if matches[best_match_index]: name = known_face_names[best_match_index] face_names.append(name) ``` 更新`process_this_frame`标志,以便在下一次迭代时不会再次处理帧: ```python process_this_frame = not process_this_frame ``` 在视频窗口中显示结果,包括人脸框和识别出的名字: ```python for (top, right, bottom, left), name in zip(face_locations, face_names): # ... 绘制人脸框和名字 ... ``` 监听键盘事件,当用户按下'q'键时退出程序: ```python if cv2.waitKey(1) & 0xFF == ord('q'): break # 释放资源并关闭窗口 video_capture.release() cv2.destroyAllWindows() ``` 这个系统不仅检测到屏幕前的人脸,还会将其与预定义的“主人”脸部进行比对。如果匹配成功,系统会要求输入特定的暗语。如果输入正确,电脑解锁;如果连续三次输入错误,系统将发送一封邮件通知你,并附上尝试解锁者的照片。 为了添加暗语验证功能,你可以扩展这个代码,在识别到正确人脸后,弹出一个对话框要求输入暗语,然后检查输入是否与预设的暗语一致。如果验证失败,可以使用SMTP库(如`smtplib`)发送邮件通知,并保存尝试者的面部图像。 这个项目展示了Python在计算机视觉和安全应用中的潜力,通过结合人脸识别和口令验证,创建了一个创新的屏幕解锁机制。
- 粉丝: 3
- 资源: 956
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 纯css3发光霓虹灯文字闪烁特效代码.zip
- 用VBS制作自己的进度条
- 电脑说话VBS什么电脑都能用
- 利用HTML+CSS+JS的国漫分享网站(响应式)
- 练习springboot1 项目 模拟高并发秒杀,实现基本的登录、查看商品列表、秒杀、下单等功能,简单实现了系统缓存、降级和限流
- 一个社区论坛项目,技术栈:spring boot + thymeleaf+Redis 实现的功能:发帖,关注,点赞,私信,系统通知,日活统计.zip
- 会员管理系统.zip-会员管理系统.zip
- 解压软件 ZArchiver.apk
- 《系统分析和设计》课程作业-面向中国各大城市的医院预约挂号系统.zip
- SM4学习备份,有用的