Python 基于人脸识别的实验室智能门禁系统的设计与实现,附源码

1 简介

本基于人脸识别的实验室智能门禁系统通过大数据和信息化的技术实现了门禁管理流程的信息化的管理操作。平台的前台页面通过简洁的平台页面设计和功能结构的分区更好的提高用户的使用体验,没有过多的多余的功能,把所有的功能操作都整合在功能操作的导航栏之中。更加突出业务的展示和详细的功能操作,使用户在使用本平台时功能一目了然。在后台的数据的处理和数据的访问方面有着自己特定的逻辑处理和数据访问的模块,在前台接收到相关的请求时,第一时间响应到数据处理和数据访问模块之中,通过数据的调用和数据的处理,把最终的结果成功的反馈到前台页面之中,展示给用户。

在这里插入图片描述

2 技术栈

说明技术栈备注
后台Python
前端HTML
数据库MYSql
架构B/S 结构

3 系统架构

平台架构图

通过对基于人脸识别的实验室智能门禁系统的功能描述和需求分析,可以推出平台的架构图,如图3

img

图3.1 平台架构图

img

平台用例图

基于人脸识别的实验室智能门禁系统管理员的职责是负责日常的系统的日常功能的维护工作,其中包括用户信息管理、实验室管理、实验室预约管理、考勤管理和人脸识别门禁管理。系统的管理员也可以第一时间对用户的预约信息进行实时的管理操作,并且第一时间反馈给用户。如下图3.4所示:

img

图3.4系统管理员用例图

注册用户可以在基于人脸识别的实验室智能门禁系统第一时间了解到实验室的信息也可以在第一时间对实验室进行预约操作。也可以在本系统上实时的查看到自己的预约信息和预约结果。如下图3.5注册用户用例图所示

img

第4章 概要设计

4.1数据库的概念结构设计

通过对本基于人脸识别的实验室智能门禁系统的流程的进一步的沟通与了解,更加深入的了解到了其工作流程和数据处理的方法,并通过进行了其平台的数据建模,完成了对本平台的数据库的设计。

表1 注册用户信息表

数据库字段名称类型长度说明
IDInt60自动增长字段,不允许空,主键
Usernamezdvarchar60用户名字段
Pwdzdvarchar60密码字段
Dianhuazdvarchar60电话字段
Addtimezdtimestam60添加日期字段

表2 实验室信息表

数据库字段名称类型长度说明
IDInt60自动增长字段,不允许空,主键
mingchengvarchar60实验室名称字段
chuangjianshiijanvarchar60实验室创建时间字段
Huoyuezhuangtaivarchar60活跃状态字段
xueshengtupianvarchar60学生图片字段

表3预约信息表

数据库字段名称类型长度说明
Idvarchar60id
Xueshengxmvarchar60学生姓名字段
shiyanshimcvarchar60实验室名称字段
shijianvarchar60时间字段
chuangjianshijianvarchar60创建时间字段
huoyuezhuangtaivarchar60活跃状态字段
xueshentupianvarchar60学生图片字段

表4 考勤信息

数据库字段名称类型长度说明
idInt60自动增长字段,不允许空,主键
Guanlianxueshengvarchar60关联学生字段
kaoqingshijianvarchar60考勤时间字段

表5 提示信息表

数据库字段名称类型长度说明
idInt60自动增长字段,不允许空,主键
Guanlianxueshengvarchar60关联学生字段
chuangjianshijiantimestam60创建时间字段
caozuozhuangtaivarchar60操作状态字段

第5章 系统的实现与应用

5.1平台开发环境介绍

1.平台的硬件环境:

操作系统:Windows8

存储:256GB

内存:8GB

数据库: mysql

开发的语言: paython、Django、mySQL

\2. 软件环境:

电脑操作系统: Windows8

网络协议: HTTP协议

5.2系统的实现

5.2.1用户注册界面实现

本基于人脸识别实验室智能门禁系统的首页以白蓝黑为主,简洁的画面可以让用户有更好的用户体验。在用户注册功能模块之中用户可以通过用户注册页面实现本平台的用户注册功能。用户可以通过输入正确的用户信息实现平台的用户注册。如下图所示:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-JLKPLylC-1686569735961)(null)]

5.2.2实验室预定界面

在实验室预定界面之中,会把所有的实验室信息全部显示到界面之中。其中包括实验室的名称和具体的详细地址和实验室现在的状态信息。用户可以更具自己的需求实时的进行实验室的预约操作。如下图所示:

img

5.2.3实验室预定界面

用户通过对实验室信息的浏览之后,选定好实验室后可以在线的进行对实验室的预约操作。还可以通过实验室的名名称和日期就实验室进行实时的检索操作。其界面效果如下图所示:

img

5.2.4预约记录信息界面

用户通过对实验室预约成功后,预约信息会实时的显示到预约记录界面之中。其中包括实验室的名称、日期和预定的学生的姓名等信息。其界面如下图:

img

5.2.5考勤签到信息界面

用户可以通过在考勤签到界面实现自己的每天的考勤操作。界面之中通过以日历的形式进行对考勤信息的实时的显示操作。用户的每天的考勤信息也会实时的显示到这个日历的信息界面之中。签到成功的日期会通过不同的颜色进行区分。其界面如下图:

img

5.2.6录入人脸信息界面

用户通过摄像头实现对人脸信息的录入操作,系统也会把也会的人脸信息实时的保存在系统之中。其界面如下图:

img

5.2.6实验室信息管理界面

管理员也会可以通过系统的后台的操作页面实现对实验室信息的管理功能操作。其中包括实验室的名称、创建时间和活跃状态等信息,通过对这些信息的实时的管理操作,可以让学生在前台页面之中实时的了解到全部的实验室的详细信息,提高学生也会的实验室的预约操作。其界面如下图:

img

源码下载地址

  • 0
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
系统功能1、管理员管理:根据不同角色设置不同的管理权限;2、小区管理,管理多个小区资料,新增、修改、删除、摄像头管理等功能;3、小区摄像头管理:摄像头的新增、修改及删除功能;4、居民管理:居民资料新增,修改,删除,Excel批量导入,导出,居民人脸采集;5、访客登记:访客的新增,修改,删除,进入登记,离开登记,查询等功能;6、人脸识别:居民出入小区人脸识别功能的实现,使用腾讯AI人脸识别技术实现;7、出入记录:居民出入小区的人脸识别记录查询;8、小区地图:所有小区在地图的分布情况,使用百度地图实现;9、使用Echarts技术实现小区人员分类统计(柱状)图表;10、菜单管理:新增、修改、删除菜单功能(包括目录,菜单,按钮)11、角色管理:新增、修改、删除角色(系统角色、普通角色)12、系统日志:记录了系统中所有操作的日志,方便发现问题,查找原因;运行环境:  1、JDK1.8及以上版本  2、Tomcat 8.5及以上版本  3、MySql 5.7及以上版本  4、Redis开发工具:  1、前端开发工具:Visual Studio Code  2、后端开发工具:Intellij IDEA使用技术:  1、Vue2.x+ElementUI(前端)  2、Springboot+MyBatisPlus+Redis+Shiro+Swagger(后端)  3、人脸识别技术(腾讯AI)  4、MySql数据库技术  5、Redis缓存技术  6、百度地图  7、Echarts图表技术  8、POI Excel导入导出技术  9、Shiro权限控制:菜单管理,角色管理,权限管理(按钮及用户级别权限)  10、 Swagger接口配置管理,接口文档管理技术  11、Token单点技术(一个用户不能同时在多个设备登录使用)  12、前后端分离跨域设置等技术
人脸识别门禁系统主要分为以下几个步骤: 1. 采集人脸数据:使用摄像头采集人脸数据,包括正面、侧面、斜视等角度的照片,并将这些数据存储在数据库中。 2. 人脸识别:使用OpenCV库中的人脸识别算法对人脸进行识别,判断是否为已经存储在数据库中的人脸数据。 3. 控制门禁:如果人脸识别结果是已经授权的用户,则开启门禁通过;否则,门禁保持关闭状态。 以下是一个基于Python和OpenCV的人脸识别门禁系统设计实现: 1. 安装OpenCV库:使用pip命令安装OpenCV库,命令为:pip install opencv-python。 2. 收集人脸数据:使用摄像头采集人脸数据。可以使用OpenCV库中的cv2.VideoCapture函数来获取摄像头捕获的视频流,使用cv2.imshow函数显示视频流。可以使用cv2.CascadeClassifier函数来检测人脸,并使用cv2.rectangle函数在图像上标记出人脸位置,然后使用cv2.imwrite函数保存人脸图像。 3. 创建人脸数据库:使用Python中的sqlite3库创建一个sqlite3数据库,用于存储已经采集到的人脸数据。可以使用sqlite3库中的execute函数执行SQL语句来创建数据库表格。 4. 人脸识别:使用OpenCV库中的人脸识别算法进行人脸识别。可以使用cv2.face.LBPHFaceRecognizer_create函数创建一个LBPH人脸识别器,并使用train函数训练识别器。在识别过程中,可以使用detectMultiScale函数检测人脸,并使用predict函数对人脸进行识别。 5. 控制门禁:如果人脸识别结果是已经授权的用户,则开启门禁通过;否则,门禁保持关闭状态。 代码示例: ```python import cv2 import sqlite3 # 定义摄像头编号 camera_port = 0 # 定义人脸检测器 face_cascade = cv2.CascadeClassifier('haarcascade_frontalface_default.xml') # 定义LBPH人脸识别器 recognizer = cv2.face.LBPHFaceRecognizer_create() # 创建人脸数据库 def create_database(): conn = sqlite3.connect('face.db') c = conn.cursor() c.execute('''CREATE TABLE IF NOT EXISTS faces (id INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT NOT NULL, image BLOB NOT NULL)''') conn.commit() conn.close() # 添加人脸数据到数据库 def add_face(name, image): conn = sqlite3.connect('face.db') c = conn.cursor() c.execute("INSERT INTO faces (name, image) VALUES (?, ?)", (name, image)) conn.commit() conn.close() # 从数据库中获取人脸数据 def get_faces(): conn = sqlite3.connect('face.db') c = conn.cursor() c.execute("SELECT * FROM faces") rows = c.fetchall() conn.close() return rows # 训练人脸识别器 def train_recognizer(faces): images = [] labels = [] for id, name, image in faces: # 转换为灰度图像 gray_image = cv2.cvtColor(cv2.imdecode(image, cv2.IMREAD_GRAYSCALE), cv2.COLOR_GRAY2BGR) # 检测人脸 faces = face_cascade.detectMultiScale(gray_image, 1.3, 5) for (x, y, w, h) in faces: # 裁剪人脸图像 face = gray_image[y:y+h, x:x+w] # 添加到训练集中 images.append(face) labels.append(id) # 训练识别器 recognizer.train(images, np.array(labels)) # 人脸识别 def recognize_face(): # 打开摄像头 cap = cv2.VideoCapture(camera_port) while True: # 读取视频帧 ret, frame = cap.read() # 转换为灰度图像 gray_image = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY) # 检测人脸 faces = face_cascade.detectMultiScale(gray_image, 1.3, 5) for (x, y, w, h) in faces: # 裁剪人脸图像 face = gray_image[y:y+h, x:x+w] # 进行识别 id, confidence = recognizer.predict(face) # 如果置信度小于50,则认为识别成功 if confidence < 50: # 获取数据库中对应的人脸数据 conn = sqlite3.connect('face.db') c = conn.cursor() c.execute("SELECT * FROM faces WHERE id=?", (id,)) row = c.fetchone() conn.close() # 显示识别结果 cv2.putText(frame, row[1], (x, y-20), cv2.FONT_HERSHEY_SIMPLEX, 1, (0, 255, 0), 2) cv2.rectangle(frame, (x, y), (x+w, y+h), (0, 255, 0), 2) # 控制门禁 open_door() else: # 显示识别失败的结果 cv2.putText(frame, 'Unknown', (x, y-20), cv2.FONT_HERSHEY_SIMPLEX, 1, (0, 0, 255), 2) cv2.rectangle(frame, (x, y), (x+w, y+h), (0, 0, 255), 2) # 显示视频帧 cv2.imshow('Face Recognition', frame) # 等待按键操作 if cv2.waitKey(1) & 0xFF == ord('q'): break # 释放摄像头 cap.release() cv2.destroyAllWindows() # 控制门禁 def open_door(): pass # 主函数 if __name__ == '__main__': create_database() # 添加人脸数据到数据库 add_face('Tom', cv2.imencode('.jpg', cv2.imread('tom.jpg'))[1].tostring()) add_face('Jerry', cv2.imencode('.jpg', cv2.imread('jerry.jpg'))[1].tostring()) # 获取人脸数据 faces = get_faces() # 训练识别器 train_recognizer(faces) # 开始人脸识别 recognize_face() ``` 在上面的代码示例中,我们首先创建了一个sqlite3数据库,用于存储人脸数据。然后,我们使用摄像头采集人脸数据,并将人脸数据添加到数据库中。接着,我们获取人脸数据,并使用训练数据训练了一个LBPH人脸识别器。最后,我们使用摄像头进行人脸识别,如果识别成功则开启门禁通过。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

IT徐师兄

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值