当前位置:网站首页>基于人脸识别实现课堂抬头率检测
基于人脸识别实现课堂抬头率检测
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
边栏推荐
- fabulous! How does idea open multiple projects in a single window?
- Installation and configuration of sublime Text3
- 8道经典C语言指针笔试题解析
- Is 35 really a career crisis? No, my skills are accumulating, and the more I eat, the better
- 2022-07-07:原本数组中都是大于0、小于等于k的数字,是一个单调不减的数组, 其中可能有相等的数字,总体趋势是递增的。 但是其中有些位置的数被替换成了0,我们需要求出所有的把0替换的方案数量:
- 某马旅游网站开发(对servlet的优化)
- [OBS] the official configuration is use_ GPU_ Priority effect is true
- ABAP ALV LVC template
- SDNU_ACM_ICPC_2022_Summer_Practice(1~2)
- Solution to the problem of unserialize3 in the advanced web area of the attack and defense world
猜你喜欢
Smart regulation enters the market, where will meituan and other Internet service platforms go
【obs】官方是配置USE_GPU_PRIORITY 效果为TRUE的
Development of a horse tourism website (realization of login, registration and exit function)
深潜Kotlin协程(二十二):Flow的处理
STM32F1與STM32CubeIDE編程實例-旋轉編碼器驅動
An error is reported during the process of setting up ADG. Rman-03009 ora-03113
51 communicates with the Bluetooth module, and 51 drives the Bluetooth app to light up
搭建ADG过程中复制报错 RMAN-03009 ORA-03113
52岁的周鸿祎,还年轻吗?
new和delete的底层原理以及模板
随机推荐
Solution to the problem of unserialize3 in the advanced web area of the attack and defense world
[basis of recommendation system] sampling and construction of positive and negative samples
Single machine high concurrency model design
Deep dive kotlin synergy (XXII): flow treatment
LeetCode刷题
[C language] objective questions - knowledge points
Zhou Hongqi, 52 ans, est - il encore jeune?
Flask learning record 000: error summary
5G NR 系统消息
接口测试进阶接口脚本使用—apipost(预/后执行脚本)
Qt添加资源文件,为QAction添加图标,建立信号槽函数并实现
从服务器到云托管,到底经历了什么?
【GO记录】从零开始GO语言——用GO语言做一个示波器(一)GO语言基础
某马旅游网站开发(对servlet的优化)
深潜Kotlin协程(二十三 完结篇):SharedFlow 和 StateFlow
Solution to prompt configure: error: curses library not found when configuring and installing crosstool ng tool
去了字节跳动,才知道年薪 40w 的测试工程师有这么多?
Reptile practice (VIII): reptile expression pack
When creating body middleware, express Is there any difference between setting extended to true and false in urlencoded?
华为交换机S5735S-L24T4S-QA2无法telnet远程访问