当前位置:网站首页>基于人脸识别实现课堂抬头率检测
基于人脸识别实现课堂抬头率检测
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
边栏推荐
- 深潜Kotlin协程(二十三 完结篇):SharedFlow 和 StateFlow
- Cascade-LSTM: A Tree-Structured Neural Classifier for Detecting Misinformation Cascades(KDD20)
- Solution to the problem of unserialize3 in the advanced web area of the attack and defense world
- 取消select的默认样式的向下箭头和设置select默认字样
- How can CSDN indent the first line of a paragraph by 2 characters?
- Cause analysis and solution of too laggy page of [test interview questions]
- 丸子官网小程序配置教程来了(附详细步骤)
- 52岁的周鸿祎,还年轻吗?
- Binder核心API
- Common selectors are
猜你喜欢

How to learn a new technology (programming language)
![[OBS] the official configuration is use_ GPU_ Priority effect is true](/img/df/772028e44776bd667e814989e8b09c.png)
[OBS] the official configuration is use_ GPU_ Priority effect is true

【obs】官方是配置USE_GPU_PRIORITY 效果为TRUE的

单机高并发模型设计

They gathered at the 2022 ecug con just for "China's technological power"

【GO记录】从零开始GO语言——用GO语言做一个示波器(一)GO语言基础

Qt不同类之间建立信号槽,并传递参数

深潜Kotlin协程(二十二):Flow的处理

Lecture 1: the entry node of the link in the linked list

"An excellent programmer is worth five ordinary programmers", and the gap lies in these seven key points
随机推荐
接口测试要测试什么?
How to insert highlighted code blocks in WPS and word
Notice on organizing the second round of the Southwest Division (Sichuan) of the 2021-2022 National Youth electronic information intelligent innovation competition
ABAP ALV LVC模板
攻防演练中沙盘推演的4个阶段
深潜Kotlin协程(二十三 完结篇):SharedFlow 和 StateFlow
1293_FreeRTOS中xTaskResumeAll()接口的实现分析
DNS series (I): why does the updated DNS record not take effect?
3 years of experience, can't you get 20K for the interview and test post? Such a hole?
[programming questions] [scratch Level 2] March 2019 garbage classification
Common selectors are
【obs】官方是配置USE_GPU_PRIORITY 效果为TRUE的
QT adds resource files, adds icons for qaction, establishes signal slot functions, and implements
v-for遍历元素样式失效
C language 001: download, install, create the first C project and execute the first C language program of CodeBlocks
52岁的周鸿祎,还年轻吗?
爬虫实战(八):爬表情包
测试流程不完善,又遇到不积极的开发怎么办?
The difference between get and post
Deep dive kotlin synergy (XXII): flow treatment