当前位置:网站首页>基于人脸识别实现课堂抬头率检测
基于人脸识别实现课堂抬头率检测
2022-07-07 22:53:00 【biyezuopinvip】
资源下载地址:https://download.csdn.net/download/sheziqiong/85948238
资源下载地址:https://download.csdn.net/download/sheziqiong/85948238
抬头率检测系统
本仓库设计并实现了一个简易的抬头率检测系统,通过调用摄像头来获取教室的实时图像,对图像进行人脸识别,并结合数据库中的选课人数计算该堂课的实时抬头率。此外,我们还设计了一个 UI 操作界面,以便管理人员浏览和管理。
本仓库包含以下内容:
- 系统运行所需要的全部源码(共有 ipython 和 py 两种文件格式,均可独立完整运行)
- 人脸识别所需要的训练好的
- 运行测试所需要的图片和数据
内容简介
代码功能介绍
本文档中仅介绍.ipython 文件,对应的.py 文件不再赘述,内容都是一样的。
camera.ipynb
此代码实现了调用摄像头以截取某一时刻的图像,并将其储存在本地的功能。
code0_initial.ipynb
这个代码就是最原始的主体代码,人脸识别部分主要参考了 dlib 的一个样例程序,代码里还保留着一些原始的英文注释,讲解了一下环境配置中可能出现的问题,有兴趣的可以看一看。
code1_window_and_face_recognition.py.ipynb
此代码是第一个较为完整地代码,已经可以完整地运行出来,并带了 UI 界面。
code2_password_final.ipynb
正如这个代码的文件名,它就是在上一个版本的代码中加入了登录界面,并完善了代码的各项功能,是本系统最终使用的代码。嫌麻烦的完全可以不看前两个版本的代码,直接看这个最终版就行。
代码主要由三大部分组成:界面代码、人脸检测代码以及数据调用代码。
界面代码是用的 tkinter 库,人脸检测代码也是直接调用的 opencv 的一个人脸检测的接口,调用训练好的模型之后直接对图片 infer 就行了。数据调用代码主要调用两种数据,分别是课堂信息和教室的实时图片。前者被用来进行抬头率检测,后者用来将教室的实时图像显示在 UI 界面上,以便观察和对照。
关键代码讲解
其实整个代码也比较简单,没啥好讲的,基本是界面的代码,我就讲一下最核心的功能,人脸检测函数吧。
def inspect(): ## 声明一个函数
nonlocal face ## 将face变量定义为全局,这样就不用再把face给return了,函数里跑出的face值,函数外也能获得,可以保证face值得实时性
str1 = "教室"
str2 = "课上的抬头率为:"
path = r'.\faces' ## 图片保存的路径
pic_path = str(class_room_chosen.get()) + str(course_time_chosen.get()) + '.jpg' ## 根据选择的教室和时间获取相应图片的名称 (图片的名称是需要按一定的规则来命名的,否则会报错)
p = path + '/' + pic_path ## 将图片的总路径和单个图片的名称拼接起来,得到单个图片的路径
img = cv2.imread(p) ## 读取图片
color = (0, 255, 0)
grey = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) ## 只选取单个通道的图片数据进行处理,就是把彩图变成灰度图
classfier = cv2.CascadeClassifier(
r".\haarcascade_frontalface_alt2.xml") ## 创建一个分类器,这个分类器是已经训练好的,调用了一个已经训练好的模型文件
faceRects = classfier.detectMultiScale(grey, scaleFactor=1.2, minNeighbors=3, minSize=(32, 32)) ## 通过分类器对图像进行人脸识别
a = len(faceRects) ## faceRects有几条数据,就说明有几个人脸,从而判断出有几个人抬头了
face = a
str3 = str(a) ## 改变数据格式,以便后面将其输出在UI界面上
运行说明和结果展示
运行说明
编码语言:python3.7
编程环境: Jupyter notebook
主要依赖库: Opencv
结果展示
首先是登录界面:
因为时间原因,本系统并未真正实现密码验证功能,有兴趣的小伙伴可以结合 MySQL 数据库等等来实现这一功能。
其次是系统的初始化界面,也就是登录之后会跳转到的界面:
最后就是抬头率的结果展示画面,在选取了相应的教室和时间后,依次点击界面上的两个按钮,就可以显示出抬头率,并在侧面显示出教室的实时图像:
资源下载地址:https://download.csdn.net/download/sheziqiong/85948238
资源下载地址:https://download.csdn.net/download/sheziqiong/85948238
边栏推荐
- 接口测试要测试什么?
- Deep dive kotlin synergy (XXII): flow treatment
- Reptile practice (VIII): reptile expression pack
- What is load balancing? How does DNS achieve load balancing?
- Single machine high concurrency model design
- 取消select的默认样式的向下箭头和设置select默认字样
- 从服务器到云托管,到底经历了什么?
- 爬虫实战(八):爬表情包
- 攻防演练中沙盘推演的4个阶段
- paddle一个由三个卷积层组成的网络完成cifar10数据集的图像分类任务
猜你喜欢
接口测试进阶接口脚本使用—apipost(预/后执行脚本)
[basis of recommendation system] sampling and construction of positive and negative samples
Installation and configuration of sublime Text3
Service Mesh介绍,Istio概述
Stm32f1 and stm32cubeide programming example - rotary encoder drive
3年经验,面试测试岗20K都拿不到了吗?这么坑?
赞!idea 如何单窗口打开多个项目?
NVIDIA Jetson测试安装yolox过程记录
Reptile practice (VIII): reptile expression pack
智慧监管入场,美团等互联网服务平台何去何从
随机推荐
玩轉Sonar
Summary of weidongshan phase II course content
Zhou Hongqi, 52 ans, est - il encore jeune?
The difference between get and post
攻防世界Web进阶区unserialize3题解
Relevant methods of sorting arrays in JS (if you want to understand arrays, it's enough to read this article)
Two small problems in creating user registration interface
Deep dive kotlin collaboration (the end of 23): sharedflow and stateflow
How to learn a new technology (programming language)
Experience of autumn recruitment in 22 years
从Starfish OS持续对SFO的通缩消耗,长远看SFO的价值
韦东山第二期课程内容概要
fabulous! How does idea open multiple projects in a single window?
【GO记录】从零开始GO语言——用GO语言做一个示波器(一)GO语言基础
How to add automatic sorting titles in typora software?
玩转Sonar
Lecture 1: the entry node of the link in the linked list
SDNU_ACM_ICPC_2022_Summer_Practice(1~2)
Operating system principle --- summary of interview knowledge points
tourist的NTT模板