基于视频监控的教室人数统计系统的应用研究
2022-10-26郑策ZHENGCe王建成WANGJiancheng郑恒哲ZHENGHengzhe陈雪冬CHENXuedong袁翾YUANXuan刘俊强LIUJunqiang
郑策 ZHENG Ce;王建成 WANG Jian-cheng;郑恒哲 ZHENG Heng-zhe;陈雪冬 CHEN Xue-dong;袁翾 YUAN Xuan;刘俊强 LIU Jun-qiang
(河南科技大学软件学院,洛阳 471003)
0 引言
近年来,随着科技和互联网的不断发展,很多行业对人流信息的统计有极大的需求,如火车站、公交站、地铁站、商场出入口等人流量大的场所。通过人数统计系统可以方便、可靠、实时地对各种场所的人流进行统计,而不对公众造成任何影响。结合图像分析技术,可以清楚快捷地掌握客流动态,提供数据支持,使决策者及时做出对策。利用图像处理来完成人数统计系统的主要优点就是图像信号非常直观,便于人为地理解。本项目源于大学生的日常学习生活,教室作为其中一个十分特殊的公共场合,它的人数有着很重要的现实意义。
对大学生来说:脱离了高中紧张的学习环境,迈入高校的殿堂,缺少了老师和父母的严格要求,许多在校大学生作息时间紊乱,课堂到课情况不理想,出现缺课、旷课情况,严重影响到学业成绩。让学生养成一个好的作息习惯,规范学生的学习习惯,是很多高校最想做到的事情之一。
对同学来说:现在,在校大学生可以随时随地通过设备进行网络操作,而目前各大高校图书馆和自习室资源普遍紧张,空闲教室往往成为许多学生自习的主要场所,但是由于不了解教室的资源使用情况,同学们寻找没有课程且有空位的教室通常需要花费大量时间。因此,建立基于视频监控的教室人数统计系统对大学生的学习以及学习环境至关重要。
对老师来说:统计出勤情况是记录学生课程学习过程、提供平时成绩评定依据的有效方法。而传统考察出勤人数的方式大多耗时费力,并且存在替代签到的情况使得数据不可靠,在浪费宝贵课堂时间的同时,也为老师增添了负担。
因此,设计一种可方便统计教室内人数并进行显示的系统,有助于帮助学生快速寻找空闲教室,提高教室的资源利用率,规范学生的按时到课率以及帮助老师统计出勤情况。系统结合所学知识,通过运用目标检测网络技术对教室监控视频画面处理分析,建立可视化界面,提供教室数据的相关信息。
1 基于视频监控的教室人数统计系统的定位与优势
1.1 项目宗旨
基于视频监控的教室人数统计系统其宗旨是面向高校学生和老师,通过技术改变生活,以教室信息可视化为中心,为学生提供准确的教室信息,实现空闲教室资源的合理利用,节省人力物力,让同学们能够享受更加方便、快捷、优质的学习生活,同时可以帮助老师统计出勤情况。
1.2 项目的优势
①目前大多数高校只有图书馆有预约占位功能,而空闲教室资源普遍没有被合理利用,且目前来看,在高校中教室人数统计系统的市场为空白,无同类项目。②随着科学技术的发展,视频监控设备的成本也越来越低,并且许多高校教室原本就有视频监控设备,系统实施成本较低且可控。③本项目来源于切身的生活体验,开发人员也为该项目的使用者,对项目功能的需求分析十分到位,所有功能的实现能够完全贴近系统的需求。④项目内容完全基于校园的学习生活,操作安全可控、内容健康向上、使用方便快捷。⑤在学习之余做开发设计,既促进了学习,又提高了自己的应用开发能力,且极大地降低了系统开发成本。⑥使用目前流行的技术进行项目的设计与开发,使得我们接触并且掌握热门流行技术,拓宽了我们的视野。⑦开发团队稳定,成员全部为大三学生,每年毕业生离校但新成员同步补充到位,因此项目的运行维护没有断点。
1.3 项目的具体功能
①视频图像的检测处理。②教室数据分析和可视化。③用户能够对相应数据进行查看。
2 项目的功能模块设计
在团队探讨交流的基础上形成了需求说明书,将系统的功能分为了以下几个模块:①数据获取模块:此模块主要通过连接视频监控接口,获取监控画面,并进行画面的实时保存。②数据处理模块:此模块主要使用yolov5对获取的视频画面进行处理,并保存处理后的结果将其上传至云端服务器。③服务器管理模块:此模块主要将上传来的数据进行处理后保存到云端数据库,以及为前端提供相应的数据访问接口。④前端显示模块:前端显示模块主要包含对获取到的数据进行可视化处理以及项目介绍。数据可视化主要包含检测处理后的图像结果展示,人数统计展示,以及每个教室密度对应的颜色指示灯。
3 系统的实现
系统数据均由后台上传、云端服务器获取、云端数据库存储,不同的数据访问接口具有相似的数据返回格式,降低了前后端分离带来的成本,提高了开发速度。各模块之间的耦合性较低,便于多人共时协同开发。项目总体实现流程如图1所示。
图1 项目总体实现流程
项目的后台使用Python实现,主要负责视频流的获取,目标检测处理,处理结果上传,主要包括以下几个方面:①capFrame()方法实现对视频流的截图并保存本地。②run()方法实现对图片的处理并保存结果。③upload()方法把处理后的结果上传至服务器。④使用多线程,使得capFrame()方法在运行时,run()方法和upload()方法也同时运行,互不影响。⑤使用方法循环,保证数据的实时性。
项目的服务器端使用JavaSSM框架和maven实现,主要负责后台上传数据的存储,主要包括以下几个方面:①实体类:ClassRoom.java,包含属性:id:数据ID,photo:图片,num:教室人数,class_name:教室名,time:时间,seat:教室座位数量。②控制器类:ClassRoomController.java,包含方法:getClasses():获取班级列表;uploadFile():上传数据(图片、人数、班级名、座位数)。③实体类属性名与数据库表中属性名对应相同。
项目的数据库用MySQL实现并完成数据库的设计,实现数据的存储,主要包括以下几个方面:①确认数据库名称、字符集、排列顺序等。②确定数据库内数据表的名称,一般情况下数据表的名称和实体类的名称一致,确定表内所含字段的名称、类型、长度、主键是否为空。③表class:如表1所示。④存储过程函数updateClass():根据服务器端传入的教室号数据进行判断是否执行插入或更新操作。
表1 数据库class表
项目的前端用Vue框架和jQuery框架实现,实现数据的显示,主要包括以下几个方面:①browserRedirect()方法根据设备类型跳转至不同的页面(如手机端、电脑端)。②getClass()方法调用服务器接口获取教室信息。③times()方法定时任务,每隔5秒获取一次班级信息,实现数据的刷新。④使用Vue进行页面渲染,v-for、v-if等方法来根据获取到数据显示不同内容。
系统功能不做一一详述,仅以目标检测处理、检测结果上传、主界面为例做简要描述。
3.1 目标检测处理
此模块运用目前流行的强悍的目标检测技术yolov5,由于教室内大多同学都是坐在座位,所以检测人物模型时会有遮挡,我们改变思路,将头部识别作为人数统计依据。通过训练数据集得到的权重文件来进行图片的头部检测处理,检测后图片处理结果如图2所示。
图2 目标检测后图像
3.2 检测结果上传
此模块将目标检测处理后生成的图像和文本文件上传至云端服务器,之后由服务器进行相应的数据操作,关键代码如下:
def upload():
#图片所在目录
img_dir="./runs/detect/exp_room/"
#txt文档所在目录
txt_dir="./runs/detect/exp_room/labels/"
#遍历图片目录,将目录中的内容放入files
files=os.listdir(img_dir)
#遍历files
for fi in files:
#如果该项为文件(非目录)
if os.path.isfile(img_dir+fi):
print("上传文件:"+fi)
#打开与图片名对应的txt文件
num_file=open(txt_dir+fi.split(".")[0]+".txt",encoding='utf-8')
#读取txt文件中的第一行(人数)
num=num_file.readline().split()[0]
class_name=fi.split(".")[0]
seat=class_name.split("$")[1]
class_name=class_name.split("$")[0]
#请求接口地址
url='http://srtp.achengovo.com/uploadFile'
#读取图片文件
file={'photo':open(img_dir+fi,'rb')}
#其余参数
data={'num':num,'class_name':class_name,"seat":seat}
print(data)
#向服务器发送post请求
response=requests.post(url,files=file,data=data)
#输出请求结果
res=response.text
print(res)
3.3 主界面的实现
用户登录网址(http://srtp.achengovo.com/)后,会根据用户设备的不同进行适配显示,分为PC端和手机端,主页主要包括首页和关于项目,用户可以根据页面上部的导航直接进行页面跳转,首页通过对云端服务器发送请求直接展示各教室的检测数据,包括教室号、目标检测处理后的图片、教室人数、检测时间和拥挤程度判断,用户可以直接查看信息并选择是否要去往该教室。
首页向服务器端发送请求获得数据的关键代码如下:
def getClasses():
#请求接口
url="http://srtp.achengovo.com/getClasses"
#发送请求
result=requests.get(url)
#将请求结果转为json
result=result.json()
#遍历输出
for res in result:
print(res)
PC端主页面展示如图3所示。
图3 PC端主页面
手机端主页面展示如图4所示。
图4 手机端主页面
4 项目实施总结
基于视频监控的教室人数统计系统已经完成并定义为V1.0版。后期的开发还会继续完善,拟在已经设计的功能模块上加入教室的课表以及教室占用的时间安排信息,并且融入可视化数据分析,实现更多方便快捷的功能。未来还会与学校教务处、网络中心、图书馆以及后勤集团联系,在获得批准后调用教室监控的视频图像接口,达到数据的精准、完整。
项目已经在河南科技大学软件学院学生会、青协进行推广,团队成员及时了解到用户使用过程中的反馈意见,并一一记录,通过团队的讨论给出解决方案,同时在系统的运行过程中不断添加功能并解决相关异常,目前程序运行稳定,反馈良好,项目开发过程形成的1.0版本取得了满意的效果。后期还要在功能模块上细化功能的实现,同时优化相关代码。