当前位置:网站首页>基于人脸识别实现课堂抬头率检测
基于人脸识别实现课堂抬头率检测
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
边栏推荐
- 手写一个模拟的ReentrantLock
- Leetcode brush questions
- ABAP ALV LVC模板
- Langchao Yunxi distributed database tracing (II) -- source code analysis
- Qt添加资源文件,为QAction添加图标,建立信号槽函数并实现
- 51 communicates with the Bluetooth module, and 51 drives the Bluetooth app to light up
- new和delete的底层原理以及模板
- Solution to prompt configure: error: curses library not found when configuring and installing crosstool ng tool
- Experience of autumn recruitment in 22 years
- How does the markdown editor of CSDN input mathematical formulas--- Latex syntax summary
猜你喜欢
测试流程不完善,又遇到不积极的开发怎么办?
单机高并发模型设计
Kubernetes Static Pod (静态Pod)
他们齐聚 2022 ECUG Con,只为「中国技术力量」
STM32F1與STM32CubeIDE編程實例-旋轉編碼器驅動
【测试面试题】页面很卡的原因分析及解决方案
Tencent security released the white paper on BOT Management | interpreting BOT attacks and exploring ways to protect
[研发人员必备]paddle 如何制作自己的数据集,并显示。
Binder核心API
Deep dive kotlin synergy (XXII): flow treatment
随机推荐
去了字节跳动,才知道年薪 40w 的测试工程师有这么多?
大数据开源项目,一站式全自动化全生命周期运维管家ChengYing(承影)走向何方?
5G NR 系统消息
攻防演练中沙盘推演的4个阶段
玩转Sonar
从服务器到云托管,到底经历了什么?
52岁的周鸿祎,还年轻吗?
[研发人员必备]paddle 如何制作自己的数据集,并显示。
单机高并发模型设计
深潜Kotlin协程(二十三 完结篇):SharedFlow 和 StateFlow
接口测试进阶接口脚本使用—apipost(预/后执行脚本)
Summary of weidongshan phase II course content
[Yugong series] go teaching course 006 in July 2022 - automatic derivation of types and input and output
3年经验,面试测试岗20K都拿不到了吗?这么坑?
Linkedblockingqueue source code analysis - add and delete
QT adds resource files, adds icons for qaction, establishes signal slot functions, and implements
2022-07-07:原本数组中都是大于0、小于等于k的数字,是一个单调不减的数组, 其中可能有相等的数字,总体趋势是递增的。 但是其中有些位置的数被替换成了0,我们需要求出所有的把0替换的方案数量:
Where is the big data open source project, one-stop fully automated full life cycle operation and maintenance steward Chengying (background)?
Qt不同类之间建立信号槽,并传递参数
ReentrantLock 公平锁源码 第0篇