使用OpenCV和Dlib进行人脸特征提取 基于人工智能的课堂人脸考勤系统 人脸考勤系统 使用深度学习模型进行活体检测和专注度检测 使用Qt Designer设计界面

发布时间:2026/10/7 12:28:12

使用OpenCV和Dlib进行人脸特征提取 基于人工智能的课堂人脸考勤系统 人脸考勤系统 使用深度学习模型进行活体检测和专注度检测 使用Qt Designer设计界面 使用OpenCV和Dlib进行人脸特征提取 基于人工智能的课堂人脸考勤系统 使用深度学习模型进行活体检测和专注度检测 使用Qt Designer设计界面基于人工智能的课堂人脸考勤系统文章目录使用OpenCV和Dlib进行人脸特征提取 基于人工智能的课堂人脸考勤系统 使用深度学习模型进行活体检测和专注度检测 使用Qt Designer设计界面1. 环境搭建安装依赖2. 人脸库录入录入人脸库代码3. 人脸识别人脸识别代码4. 活体检测和专注度检测活体检测代码专注度检测代码5. UI设计与结果展示设计界面主程序代码系统主要分为三个部分第一个部分人脸库的录入通过录入人脸裤记录学生信息。第二部分人脸识别选择班级考勤时间后打开摄像头进行人脸考勤。第三部分活体检测和专注度检测判断学生是否在听课以及听课的专注度。1基于人工智能的课堂人脸考勤系统人脸库录入、人脸识别、活体检测和专注度检测。关键代码示例1. 环境搭建确保你的开发环境已经安装了必要的库和工具。安装依赖# 创建并激活虚拟环境conda create-nface_attendancepython3.8conda activate face_attendance# 安装相关库pipinstallopencv-python numpy dlib imutils PyQt5 tensorflow keras scikit-learn2. 人脸库录入使用OpenCV和Dlib进行人脸特征提取并将特征存储在数据库中。录入人脸库代码importcv2importosimportnumpyasnpimportdlibfromimutilsimportface_utilsimportsqlite3# 初始化Dlib的人脸检测器和特征提取器detectordlib.get_frontal_face_detector()predictordlib.shape_predictor(shape_predictor_68_face_landmarks.dat)face_recogdlib.face_recognition_model_v1(dlib_face_recognition_resnet_model_v1.dat)defadd_face_to_db(name,image_path):connsqlite3.connect(faces.db)cconn.cursor()# 创建表如果不存在c.execute(CREATE TABLE IF NOT EXISTS faces (name TEXT, encoding BLOB))# 加载图像并转换为灰度图imagecv2.imread(image_path)graycv2.cvtColor(image,cv2.COLOR_BGR2GRAY)# 检测人脸rectsdetector(gray,0)iflen(rects)0:print(No face detected in the image.)returnforrectinrects:shapepredictor(gray,rect)face_descriptorface_recog.compute_face_descriptor(image,shape)# 将特征向量转换为二进制格式并存储到数据库中face_descriptor_binnp.array(face_descriptor).tobytes()c.execute(INSERT INTO faces (name, encoding) VALUES (?, ?),(name,face_descriptor_bin))conn.commit()conn.close()# 示例添加一张人脸到数据库add_face_to_db(Student1,path/to/student1.jpg)3. 人脸识别使用摄像头实时捕捉图像并与数据库中的人脸特征进行比对。人脸识别代码importcv2importnumpyasnpimportdlibimportsqlite3fromimutilsimportface_utils# 初始化Dlib的人脸检测器和特征提取器detectordlib.get_frontal_face_detector()predictordlib.shape_predictor(shape_predictor_68_face_landmarks.dat)face_recogdlib.face_recognition_model_v1(dlib_face_recognition_resnet_model_v1.dat)defload_faces_from_db():connsqlite3.connect(faces.db)cconn.cursor()c.execute(SELECT name, encoding FROM faces)rowsc.fetchall()known_names[]known_encodings[]forrowinrows:namerow[0]encodingnp.frombuffer(row[1],dtypenp.float64)known_names.append(name)known_encodings.append(encoding)conn.close()returnknown_names,known_encodingsdefrecognize_faces(frame,known_names,known_encodings):graycv2.cvtColor(frame,cv2.COLOR_BGR2GRAY)rectsdetector(gray,0)forrectinrects:shapepredictor(gray,rect)face_descriptorface_recog.compute_face_descriptor(frame,shape)matchesdlib.compare_face_descriptors(known_encodings,face_descriptor,tolerance0.6)ifTrueinmatches:match_indexmatches.index(True)nameknown_names[match_index]print(fRecognized:{name})returnnamereturnNone# 实时人脸识别defreal_time_face_recognition():known_names,known_encodingsload_faces_from_db()capcv2.VideoCapture(0)whileTrue:ret,framecap.read()ifnotret:breakrecognized_namerecognize_faces(frame,known_names,known_encodings)ifrecognized_name:cv2.putText(frame,recognized_name,(10,30),cv2.FONT_HERSHEY_SIMPLEX,1,(0,255,0),2)cv2.imshow(Face Recognition,frame)ifcv2.waitKey(1)0xFFord(q):breakcap.release()cv2.destroyAllWindows()# 运行实时人脸识别real_time_face_recognition()4. 活体检测和专注度检测使用深度学习模型进行活体检测和专注度检测。活体检测代码importcv2importnumpyasnpfromkeras.modelsimportload_model# 加载预训练的活体检测模型modelload_model(liveness.model)defis_living_face(frame):face_cascadecv2.CascadeClassifier(haarcascade_frontalface_default.xml)graycv2.cvtColor(frame,cv2.COLOR_BGR2GRAY)facesface_cascade.detectMultiScale(gray,scaleFactor1.1,minNeighbors5,minSize(30,30))iflen(faces)0:(x,y,w,h)faces[0]face_roiframe[y:yh,x:xw]face_roicv2.resize(face_roi,(128,128))face_roiface_roi.astype(float)/255.0face_roinp.expand_dims(face_roi,axis0)predmodel.predict(face_roi)[0]ifpred[1]pred[0]:returnTruereturnFalse# 示例检查当前帧是否为活体人脸capcv2.VideoCapture(0)whileTrue:ret,framecap.read()ifnotret:breakifis_living_face(frame):print(Living face detected!)else:print(Not a living face.)cv2.imshow(Liveness Detection,frame)ifcv2.waitKey(1)0xFFord(q):breakcap.release()cv2.destroyAllWindows()专注度检测代码importcv2importnumpyasnpfromkeras.modelsimportload_model# 加载预训练的专注度检测模型modelload_model(attention.model)defget_attention_level(frame):face_cascadecv2.CascadeClassifier(haarcascade_frontalface_default.xml)graycv2.cvtColor(frame,cv2.COLOR_BGR2GRAY)facesface_cascade.detectMultiScale(gray,scaleFactor1.1,minNeighbors5,minSize(30,30))iflen(faces)0:(x,y,w,h)faces[0]face_roiframe[y:yh,x:xw]face_roicv2.resize(face_roi,(128,128))face_roiface_roi.astype(float)/255.0face_roinp.expand_dims(face_roi,axis0)predmodel.predict(face_roi)[0]attention_levelnp.argmax(pred)returnattention_levelreturnNone# 示例获取当前帧的专注度水平capcv2.VideoCapture(0)whileTrue:ret,framecap.read()ifnotret:breakattention_levelget_attention_level(frame)ifattention_levelisnotNone:print(fAttention Level:{attention_level})cv2.imshow(Attention Detection,frame)ifcv2.waitKey(1)0xFFord(q):breakcap.release()cv2.destroyAllWindows()5. UI设计与结果展示使用PyQt5设计用户界面并展示检测和跟踪结果。设计界面使用Qt Designer设计界面并导出为.ui文件然后使用pyuic5转换为Python代码。pyuic5-xyour_design.ui-oui_design.py主程序代码importsysfromPyQt5.QtWidgetsimportQApplication,QMainWindow,QFileDialogfromPyQt5.QtGuiimportQImage,QPixmapfromPyQt5.QtCoreimportQTimerimportcv2fromui_designimportUi_MainWindowclassFaceAttendanceApp(QMainWindow,Ui_MainWindow):def__init__(self):super().__init__()self.setupUi(self)self.timerQTimer()self.timer.timeout.connect(self.update_frame)self.capNoneself.known_names,self.known_encodingsload_faces_from_db()defstart_camera(self):self.capcv2.VideoCapture(0)self.timer.start(30)defupdate_frame(self):ret,frameself.cap.read()ifret:recognized_namerecognize_faces(frame,self.known_names,self.known_encodings)ifrecognized_name:cv2.putText(frame,recognized_name,(10,30),cv2.FONT_HERSHEY_SIMPLEX,1,(0,255,0),2)height,width,channelframe.shape bytes_per_line3*width q_imgQImage(frame.data,width,height,bytes_per_line,QImage.Format_RGB888)self.imageLabel.setPixmap(QPixmap.fromImage(q_img))defstop_camera(self):ifself.cap:self.cap.release()self.timer.stop()defcloseEvent(self,event):self.stop_camera()event.accept()if__name____main__:appQApplication(sys.argv)windowFaceAttendanceApp()window.show()sys.exit(app.exec_())以上就是构建一个基于人工智能的课堂人脸考勤系统的详细步骤和代码示例。你可以根据实际需求调整模型结构、优化超参数或改进界面设计以进一步提升系统的性能和用户体验。
延伸阅读

更多相关文章

2026/10/7 12:27:52

供电成为GPU瓶颈

链接:https://zhuanlan.zhihu.com/p/2051745045397628852?share_codeAeVInxZdfz3M&utm_psn2072835689901715563

2026/10/3 13:48:30

AI自动瞄准项目从零到跑通:用YOLOv5让准星自己锁人

AI自动瞄准项目从零到跑通:用YOLOv5让准星自己锁人 【免费下载链接】AI-Aimbot Worlds Best AI Aimbot - CS2, Valorant, Fortnite, APEX, every game 项目地址: https://gitcode.com/gh_mirrors/ai/AI-Aimbot 你有没有过这样的时刻:残局 1v2&…

2026/10/7 12:26:23

LM358运放方波三角波发生器:频率幅度独立可调电路设计与实操

1. 从一个经典需求说起:为什么偏偏选LM358做信号发生器 很多人第一次接触运放,都是从“方波发生电路”或者“三角波发生器”这类经典电路入手的。原因很简单:它们能让你直观地看到波形从无到有、从失真到规整的全过程,比单纯算放大…

2026/10/7 12:26:23

AI Agent记忆管理实战:三层架构、RAG与向量检索落地指南

1. 为什么记忆管理是AI Agent从玩具走向工具的分水岭 做Agent开发的人都有一个共同的体感:让模型跑通一次对话不难,难的是让它记住三天前你告诉它的偏好,并且在后续几十轮交互里不跑偏、不失忆、不胡编。我见过太多项目卡在这个环节——Demo阶…

2026/10/7 12:26:23

吃透FortiAnalyzer:FCP-FAZ-AD-7.4认证题库与运维避坑指南

简介:这是一份针对FortiAnalyzer 7.4认证考试的题库解析资料,面向网络安全管理与运维人员,尤其适合已掌握FortiAnalyzer基础、计划参加FAZ_7.4认证的考生。内容系统覆盖ADOM模式的特点与切换方式、日志管理与转发模式、高可用性(H…

2026/10/7 12:26:23

QQ农场自动化挂机:WebSocket协议逆向与Nodejs客户端实战

简介:QQ经典农场自动化挂机脚本项目是一套基于Node.js技术栈的完整工程源码,面向希望实现QQ/微信双平台农场游戏自动托管的中高级开发者。项目通过深度逆向分析WebSocket通信协议,模拟真实客户端与服务器交互,实现自动登录、种植、…

2026/10/7 12:21:23

Java版魔兽争霸简化版源码解析:A*寻路与多线程实战

简介:一款基于Java实现的魔兽争霸风格小游戏重制版源码,适合Java初学者和游戏开发爱好者学习,可以深入理解游戏主循环、单位控制、交互界面等核心模块的编码实现,也可作为课堂项目或课程设计参考。资源为RAR压缩包,共2…

2026/10/5 6:32:56

Jev+Agent接管浏览器:browser-use实战与jev-ultrafast性能优化

1. 从“Jev”说起:为什么我要把Agent接进浏览器“Jev”这个词最近在圈子里出现的频率越来越高,很多人第一次听到会以为是某个新模型的名字,其实它更像是一种思路——把Jev模型的能力当作底座,通过Agent的方式去接管浏览器&#xf…

2026/10/7 8:18:33

多智能体集群实战:DeepAgents编排、MCP与A2A协议及Skills体系

1. 从"单兵作战"到"集群协同":多智能体编排到底在解决什么问题如果你最近在折腾 Agent 相关的东西,大概率会有一种感觉:单个 Agent 能做的事情,其实很快就摸到天花板了。你给它一个提示词,挂几个工…

2026/10/6 17:46:51

无源低通滤波器设计实战:从RC到LC,手把手教你避开那些坑

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/7 1:05:03

ESP32免重刷固件:浏览器直接修改NVS键值实现WiFi配置更新

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/7 1:05:03

SAP HANA查询结果导出CSV:避开乱码、性能与权限的实用指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/7 1:05:03

数字后端Placement阶段Density与Congestion控制实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
☎咨询二维码 ☎ ↑