基于微信小程序的课堂考勤系统的设计与实现

代码仓库地址:https://github.com/LicheeGit/Classroom-Attendance-System

Design and Implementation of Classroom Attendance System Based on WeChat Mini Program

 

 

在目前国内的高校课堂考勤中,传统的到场点名方式耗费了教师大量的时间和精力,随着课堂人数的增加,学生群体呈现多样性,这种点名考勤方式将不再适合日常使用,而且传统的点名考勤无法避免代人答到现象,极大的降低了考勤效率。

在日趋信息化的互联网时代,使用互联网技术和思维,信息化的方法进行设计并实现一套考勤系统变得格外重要。系统基于微信小程序平台,前端使用wxml语言编写,后端使用Javascript,借助微信平台提供的微信开发者工具进行开发调试,通过蓝牙信号强度测距和人脸识别比对实现了一套课堂考勤系统。

本系统以较高准确率实现了快捷的课堂考勤,操作简单,可适用性强,成本低廉,系统可靠性高,满足系统的设计需求。

 

关键词:小程序;课堂考勤;蓝牙技术;人脸识别;微信

 

 

ABSTRACT

In the current domestic colleges and universities, the traditional paper-based recording of the name of the teacher has spent a lot of time and energy. As the number of students increases and the student group presents diversity at the same time, this type of attendance will no longer be suitable for daily use. And the phenomenon of the other-people-help-answering, which is hard to be avoided by the traditional name attendance, will greatly reducing the efficiency of attendance.

In the increasingly information-based Internet era, it has become particularly essential to use Internet technology and its way of thinking, and to design and implement an attendance system. The system is based on WeChat applet platform, the front end is written in wxml language, the back end using Javascript, and the WeChat developer tool provided by WeChat platform is used for development and debugging, and a set of classroom attendance system based on WeChat mini program using the technology of Bluetooth signal strength ranging and face recognition is realized.

The system achieves efficient and fast classroom attendance with high accuracy, simple operation, strong applicability, low cost and high system reliability, all of these above mentioned achieve the expected development goals.

 

Keywords: Mini program; Class attendance; Bluetooth technology; Facial recognition; WeChat

 

目  录

摘  要... I

ABSTRACT.. II

第1章  绪  论... 1

1.1  课题来源... 1

1.2  课题背景... 1

1.3  国内外的研究现状及分析... 2

1.3.1  高校考勤系统研究现状... 2

1.3.2  微信小程序蓝牙技术及人脸识别应用现状... 3

1.4  论文主要研究内容及组织结构... 3

1.4.1  本文主要研究内容... 3

1.4.2  论文整体框架... 4

第2章  相关技术及平台介绍... 5

2.1  微信小程序... 5

2.1.1  微信小程序开发平台... 5

2.1.2  蓝牙技术在微信小程序开发中的应用... 6

2.2  人脸识别技术... 7

第3章  系统分析与设计... 8

3.1  系统可行性分析... 8

3.1.1  技术可行性... 8

3.1.2  经济可行性... 8

3.1.3  操作可行性... 8

3.2  系统需求分析... 9

3.2.1  功能需求分析... 9

3.2.2  非功能需求分析... 9

3.3  系统数据库设计... 10

3.3.1  概念设计... 10

3.3.2  逻辑设计... 12

3.4  系统设计... 13

3.4.1  系统流程... 13

3.4.2  系统功能模块设计... 14

第4章  系统实现... 19

4.1  系统开发环境... 19

4.2  系统功能的实现... 19

4.2.1  用户注册与登录... 19

4.2.2  蓝牙测距... 20

4.2.3  人脸识别... 22

4.2.4  考勤管理... 23

4.3  系统测试... 25

4.3.1  系统功能测试... 25

4.3.2  系统界面及窗体测试... 27

结  论... 28

参考文献... 30

 

 

 

1   

1.1  课题来源

根据导师指导意见,通过分析高校日常考勤需求,查阅该方向相关资料,最终确定本课题。

1.2  课题背景

课堂考勤作为监督学生出勤率以及提高课堂质量的关键环节,在日常高校教学生活中起着非常重要的作用。目前大部分高校采用的基于纸质、依赖于学生答到的传统考勤方式多数情况下并不能有效避免学生代答到的情况,而且在完整的点完所有同学名单的过程中浪费了大量宝贵的课堂时间。对于学生并不能起到预期的督促效果,对于学校和教师则是一种需要耗费极大精力和时间但是准确率得不到保证、低效的考勤。随着课堂的人数与日俱增,传统的上课点名答到的考勤方式的效率变得越来越低。因此,将信息技术与互联网思维技术相结合,设计并实现一套基于微信小程序的课堂考勤系统,使之能够方便地应用于高校课堂,变得越来越有意义。一个易用高效的课堂考勤系统不仅能够有效地督促学生按时到教室上课,提高学生的学习质量,而且有利于学校了解教师的任课情况进行教学改革。

微信作为一个日常手机应用拥有着很高的使用频率和装机率,其推出的微信小程序凭借出色的体验倍受开发者青睐。微信小程序平台为开发者提供了包括调用手机蓝牙模块进行搜索和通信的功能接口在内丰富的应用程序接口,使我们可以使用微信小程序平台开发工具设计并实现一些原本只能够以手机应用形式使用的功能。

随着人工智能在各个领域的广泛应用和飞速发展,人脸识别变得越来越触手可及,越来越多的企业和工厂开始启用人脸打卡考勤,但是在高校环境中现有设备并不能很好的发挥作用,如果能够将人脸考勤与移动设备进行结合将极大程度的解决高校传统考勤方式低效的问题,并且极大地提高课堂考勤的准确度。

1.3  国内外的研究现状及分析

1.3.1  高校考勤系统研究现状

目前在中国,有许多的大中小企业事业单位进行考勤已经不再使用基于纸质的签名考勤或者单纯的指纹打卡,有日趋成熟的基于智能办公硬件员工考勤解决方案被广泛应用。然而,目前还没有满足国内高校需求的低成本考勤系统可以在大多数高校中使用。在研究领域,目前高校课堂考勤系统的设计方法主要有以下几类[1]。

一是以手机服务为主的智能考勤:如使用微信公众号服务、位置服务、Wi-Fi、实时二维码等。有研究人员基于微信企业号开发出了微信考勤系统并在学院进行应用[2],从该系统的反馈分析,存在难以杜绝代替考勤的现象以及对上课地点有要求等问题。有的研究人员开发出基于Wi-Fi的高校课堂考勤系统[3],这种考勤系统需要提前架设Wi-Fi热点服务器才能开始考勤。

二是以智能卡为主的考勤:有研究人员设计了基于校园一卡通的考试签到系统[4]。这类考勤适用于纸质考试等不能携带手机的场景,同时需要专门的读卡设备进行验证。

三是以蓝牙设备为主的考勤:如物联网、射频识别技术、蓝牙、iBeacon等。有研究人员开发了基于iBeacon定位技术的高校考勤系统[5],基于蓝牙的考勤方式可以通过微信或移动设备进行签到,但是需要提前布置iBeacon设备,有一定维护成本,通信中也存在安全隐患。有研究人员在安卓平台设计并实现了蓝牙考勤系统[9],但是该系统只支持安卓平台,如果学生使用IOS系统则无法使用,不具有适用性。前面提到的三种考勤方式均是以移动终端或便携设备作为识别主体,并没有对学生进行准确识别,和传统的点名答到方式一样无法有效避免考勤代签的问题。

四是以生物特征识别为主的考勤:这类考勤主要使用人体的生物特征,如指纹和人脸等能够唯一识别一个个体的特征。有研究人员提出了使用指纹识别技术进行课堂考勤的方法[6],但该方法的实现基于特定设计的指纹识别设备。基于虹膜识别技术的课堂考勤虽然保证了较高的准确率,但是不仅会带来较高的设备成本,还会耗费一定的准备时间[7]。人脸识别考勤相对来说比较易用,学生只需打开智能手机的摄像头并且联网即可完成签到,降低了系统的使用成本。

综合考量上述四类考勤系统的设计优缺点,如果想要在低成本的条件下实现对学生进行准确的课堂考勤,就需要结合硬件设备和生物识别的优点,而目前指纹识别和虹膜识别的实现中存在一些困难,因此,本文选择基于蓝牙定位和人脸识别的方法设计并实现高校课堂考勤系统。

1.3.2  微信小程序蓝牙技术及人脸识别应用现状

微信小程序因其便捷性和轻量化的体验而广受开发者青睐,其应用前景极其广泛,现在还有很多领域是微信小程序没有触及的,高校课堂考勤便是其中一处。有研究人员开发出了基于BLE(Bluetooth Low Energy,蓝牙低能耗)技术的智能公寓门锁控制微信小程序[8],具有简单易用,易获取,扩展性强,安全性高的特点,填补了基于小程序的智能门锁市场的空缺[8]。Github上也不乏开发者从事微信小程序蓝牙模块的应用开发,有的开发者将微信小程序平台提供的蓝牙应用程序编程接口进行包装,打包成模块开源,极大的方便了后来者的小程序蓝牙开发。有的开发者使用蓝牙设备发射信号的接收信号强度指示结合计算公式开发出了蓝牙测距的方法。在人脸识别的应用开发方面,有许多人工智能服务提供商开放了人脸识别的应用程序编程接口,极大的降低了基于人脸识别应用开发的门槛。

1.4  论文主要研究内容及组织结构

1.4.1  本文主要研究内容

以高校课堂智能考勤的需求为切入点,本文将微信小程序可以被便捷地获取和传播等优势与基于深度学习的人脸识别方法,基于手机蓝牙模块的定位方法三者相结合,解决了高校传统考勤无法避免的代答到、纸质考勤效率不高的问题,实现了基于微信小程序的课堂考勤系统。

本文的主要研究内容如下。

1、针对基于手机应用的考勤系统需要开发至少两套基于不同手机系统平台的应用程序,本文设计的系统基于微信小程序平台,通过微信的高度普及避免了不同手机系统的适配问题。

2、针对考勤签到定位服务使用GPS对考勤环境有一定限制,比如在室内会影响定位的精度,使用Wi-Fi考勤需要提前架设服务器等定位难题,本文提出使用基于蓝牙设备信号强度的距离测量公式,借此可以方便地计算出学生所持蓝牙设备与教师设备之间的距离。而使用该功能只需双方打开手机的蓝牙开关即可,使用便利。

3、针对单纯的设备定位无法有效避免学生代替签到的问题,本文提出了结合蓝牙技术与生物识别的解决方案。将蓝牙定位获取的距离作为进入签到的判断条件,如果经蓝牙测试不在教室则无法进行考勤,有效避免了学生在非教室环境进行人脸识别签到成功的问题,同时提高了课堂考勤的效率。

4、针对蓝牙测距只能通过将蓝牙设备接收到的信号强度输入公式计算距离,存在不稳定的偏差,提出了结合微信小程序开发平台提供的获取用户位置信息的应用程序开发接口,获取到教师所处位置的经纬度上传服务器端,学生在签到前获取到服务器中教师的位置,与自己所处位置的经纬度进行测距,得出基于位置信息的距离作为参考。从而使得出学生所持设备与教师设备的距离值更加准确,为后续的程序流程以及是否满足签到条件的判断工作奠定了基础。

5、针对网络通信过程中可能存在的密码等关键信息明文传输被拦截读取的不安全因素,本文在客户端和云端信息交互过程中使用HTTPS和SSL加密传输,有效防止了信息泄露以及被篡改。

1.4.2  论文整体框架

论文将分四章分别展开,下面是具体章节内容。

第一章为绪论。本章主要阐述了课题的来源,通过对课题背景的分析得出课堂考勤目前存在的痛点,同时分析了在该方向上国内相关技术的研究现状,探讨了本课题的研究意义,随后是对本文的主要研究内容以及论文的整体框架的介绍。

第二章为相关技术及平台介绍。本系统基于微信小程序平台开发,使用了蓝牙技术和人脸识别技术,并且使用了丰富的应用编程接口进行开发,为了便于更好地理解和掌握全文,本章简要介绍了本文涉及的相关技术。

第三章为系统分析与设计。本章使用软件工程的方法,分析了本文设计的系统需求,给出了系统用例图,进行了系统可行性分析,确定了系统结构,制作了系统流程图,并详细介绍了功能模块和数据库设计。

第四章为系统实现。本章按照系统设计对系统的各个模块的实现步骤作了简要叙述,并展示了系统各项功能的测试方法和测试结果。

 

 

2  相关技术及平台介绍

本系统是在微信小程序平台的基础上,使用微信提供的微信开发者工具进行开发的。前端使用wxml和wxss语言编写,后端用Javascript语言编写。调用了微信小程序的蓝牙模块应用开发接口和百度云人工智能接口。本章主要介绍微信小程序开发平台以及蓝牙通信、人脸识别等相关技术。

2.1  微信小程序

时至今日,使用微信已经变成了很多人的生活日常。在2018年每月有超过十亿人使用微信[10],其中微信小程序为更加智能的生活提供了技术和平台。

2.1.1  微信小程序开发平台

42B1、小程序技术发展史

小程序最开始是微信的JS API(JavaScript Application Programming Interface,JavaScript 应用程序编程接口),当时微信中的网络视图正逐渐成为移动Web的一个重要入口。2015年初,微信发布了一套名为JS-JDK的网页开发套件,允许开发者使用微信的原生能力,赋予了微信应用开发者更强的便捷性和更多可能性。随后为了使得所有开发者在微信中都能获得更好的体验,推出了现在版本的小程序系统。

43B2、小程序的特点

微信小程序有如下特点。

(1)小程序可以被便捷地获取,用户可以通过扫描小程序二维码或搜索来打开小程序。第二次使用时只需要打开手机端的微信应用,在主界面下拉,点击小程序的图标即可进入小程序开始使用。无需安装,在小程序的体验中,没有安装包,也没有动辄耗时几分钟的安装过程,只需扫描小程序码,几秒便可以进入应用。用完即走,不用担心退出应用后残留的内存占用。无需卸载,不想使用时从小程序列表删除小程序即可。

(2)高效和简单的开发。小程序可以实现一次开发、多平台通用。因为微信小程序存在于微信的使用环境中,所以不存在不同的平台需要做额外开发进行兼容的问题,与以往开发手机应用至少需要针对安卓和iOS(iPhone OS,苹果公司的移动操作系统)平台分别开发两款应用相比,大大降低了开发成本。而且微信小程序推广更加容易,无需下载安装包,在小程序页面右上角点击即可分享给好友使用。每次版本的更新只需要提交小程序平台审核即可完成版本更迭,无需像传统手机应用需要把安装包提交各个不同的应用市场进行审核再上架,也无需给用户推送更新消息。

(3)微信小程序有着卓越的使用体验。相较于传统网页的信息呈现方式,小程序使用了WebSocket双向通信、本地缓存技术,使得小程序的使用体验更加接近原生应用。开发者在编写代码过程中可以随意调用小程序平台提供的API而无需担心浏览器的兼容,从而更加专注于内容的呈现。

(4)微信小程序也拥有实现更多的任务和满足更多的应用场景的可能。与HTML5网络应用相比,微信小程序可以调用更多系统接口,如蓝牙模块、全球定位系统、传感器等。

(5)微信小程序安全性更高,小程序需要审核后才能发布,通信采用的是超文本传输安全协议访问,安全套接层加密通信。

2.1.2  蓝牙技术在微信小程序开发中的应用

蓝牙是一种在工业、科学和医疗无线电频段内使用无线电波在固定和移动设备的短距离之间交换数据以及构建个人局域网无线技术标准。现在市面上的多数移动操作系统均已原生支持低功耗蓝牙。下面就本文中主要用到的部分微信小程序平台提供的蓝牙模块API按使用顺序进行简要介绍。

1、openBluetoothAdapter(Object object),该接口用于蓝牙模块初始化,其他蓝牙相关API必须在此接口调用之后使用,否则会返回错误。该接口参数中可以设置接口调用成功的回调函数、调用失败的回调函数或是接口调用结束的回调函数。

2、onBluetoothAdapterStateChange(function callback),该接口主要监听手机蓝牙状态的改变。它可以调用蓝牙模块的所有应用编程接口。该接口的返回结果将判断蓝牙适配器是否可用,以及是否处于搜索状态。为后续的蓝牙模块功能接口的调用奠定基础。

3、startBluetoothDevicesDiscovery(Object object),成功调用该接口即可开始搜索周围设备发出的蓝牙信号。通过设置参数中的services数值可以搜索广播包有对应服务的蓝牙设备。参数interval可以调整上报设备的间隔。

4、onBluetoothDeviceFound(function callback),调用该接口将获得新搜索到的设备列表。返回的列表中每台设备的信息包括蓝牙设备的名称、设备的id、当前蓝牙设备的信号强度、当前蓝牙设备广播数据段中的ServiceUUIDs、LocalName、ServiceData数据段等。

5、createBLEConnection(Object object),调用该接口与低功耗蓝牙设备建立连接。从搜索到的蓝牙设备中选择一个,传入该设备的deviceId建立连接。

2.2  人脸识别技术

目前国内许多主流科技公司都面向开发者推出了人工智能开放平台,将基于深度学习的计算机视觉技术以API或SDK的形式开放给开发者。本文主要使用的是百度AI开放平台提供的API进行开发,实现了人脸注册和人脸比对考勤。在本节对部分在本文系统的设计和实现过程中使用到的接口进行简要说明。

1、人脸检测接口,调用该接口可以检测出图片中人脸的位置并标记出位置信息。

2、人脸搜索接口,调用该接口可以进行人脸搜索和识别。返回结果为匹配的用户信息列表,其中每项包含了如下用户信息:用户的组,用户的id,注册用户时携带的附加信息以及用户的匹配得分。本系统使用了这个接口返回的匹配得分以八十分为阈值进行判断是否是本人来进行签到。

3、人脸库人脸注册接口,调用该接口可以向人脸库中添加新用户信息。请求参数包括图片信息、图片类型、用户组id、用户id和可选的用户信息。本系统使用该接口提供学生注册和教师注册功能,对学生和教师划分了不同的用户组进行权限区分。

4、人脸库用户信息查询接口,调用该接口可以获取指定用户的注册信息内容。请求参数中需要指明用户id和用户组id。返回参数包括一个请求标识码,以及查询到的用户列表,其中包括被查询的用户资料和被查询用户所在的组。

5、人脸库获取用户列表接口,调用该接口输入用户组id即可返回组内用户id列表。本系统使用该接口进行查询当前使用用户是否已注册,如果未注册将跳转注册页面,已注册将弹出登录窗口进行密码验证。

6、人脸库创建和删除用户组接口,这两个接口在本系统内被成对使用,前者用于创建一个空的用户组,后者删除用户组下所有用户及人脸。输入参数均为用户组id,如果该用户组存在,则返回创建失败。在本系统中,这两个接口用于为教师开启考勤和关闭考勤功能实现提供支持。

 

 

3  系统分析与设计

3.1  系统可行性分析

本系统的设计是面向高校日常课堂考勤需求,基于微信小程序结合蓝牙技术和人工智能技术,提出一种高效的考勤方式。就本系统的设计能否行得通并且有效解决高校课堂考勤问题,下面从三个方面进行详细分析。

3.1.1  技术可行性

软件部分,本系统是基于微信小程序平台、使用Javascript语言和wxml语言进行开发的。使用微信小程序开发工具可以方便的进行代码编辑和编译调试。同时微信小程序还开放了功能齐全的应用程序开发接口供开发者调用,其中包括了通过小程序对蓝牙模块的调用,可以实现搜索蓝牙设备和进行蓝牙连接等本系统需要的功能。百度AI人工智能平台开放了人脸识别API,可用于人脸考勤。硬件方面,本系统基于微信,使用了手机的蓝牙模块和摄像头模块,使用过程中需要网络连接。蓝牙模块的近距离通信信号可以在教室范围内覆盖,保证了本系统的技术可行性。

3.1.2  经济可行性

开发过程中无需使用收费开发软件,百度AI平台提供的免费服务基本可以满足一百名左右学生的班级考勤。本系统的使用环境只需要是普通的智能手机即可,无特定系统和手机型号要求,无需其他辅助设备。在使用过程中除少量流量消耗外不会有另外的成本产生。

3.1.3  操作可行性

使用本系统进行考勤只需教师和学生打开微信扫描小程序二维码,授予小程序所需的权限即可。使用过程中依照系统提示打开蓝牙模块以及进行人脸拍照即可完成考勤,教师端可以方便的查看签到和缺勤人数和名单。

3.2  系统需求分析

需求分析是衔接可行性分析与系统设计的重要活动。需求分析环节将阐述本系统所实现的功能需求和非功能需求。

3.2.1  功能需求分析

本系统的功能设计主要是面向高校师生的、为了解决传统高校课堂考勤效率低和无法避免代答到的难题。使用本系统,高校教师可以通过手机微信开启签到,随时可以停止签到,并且可以方便地查看签到统计结果。学生签到只需在教室范围内刷脸。

进入小程序需要用户选择自己的身份,选择身份之后如果是未注册用户需要先进行注册,注册过程需要录入人脸以及输入自己的密码。已注册用户则直接在弹窗内输入密码登录即可。教师身份用户的注册需要有权限限制。教师登录之后进入管理界面,可以进行开启考勤和关闭考勤以及分别查看已签到和未签到的学生人数和名单,还可以进一步对未签到学生进行勾选其中的请假学生,确定最终的缺勤名单。学生登录之后进入蓝牙操作界面,开启蓝牙搜索并匹配教师设备的蓝牙信号,选定教师设备后通过判断学生与教师的距离决定学生是否可以进行签到,如果在教室范围内,则学生将通过刷脸验证身份进行签到。

图3.1所示用例图对本系统的功能进行了描述,同时阐述了用户使用本系统的场景。

3.2.2  非功能需求分析

功能性需求介绍的内容是系统做什么,非功能性需求则侧重于阐述系统怎么样,如表3.1所示。

3.1 系统性能需求

需求名称

详细要求

可靠性

运行流畅,处理时间在可接受范围内

可维护性

易于修改调试

可扩充性

可根据现实需求增删功能模块

易用性

系统界面友好,有相应提示引导,人性化


图3.1 系统用例图

3.3  系统数据库设计

从本系统的数据需求出发,本节将对本系统数据存储设计方法进行介绍。

32B3.3.1  概念设计

本系统涉及的数据可分为以下三个实体。

1、学生信息

学生信息如图3.2所示,包括学生的用户名、用户组、账户密码、人脸信息和位置信息。用户名用于唯一识别学生,账户密码用于验证用户身份,用户组用于区分师生权限,人脸信息用于考勤,位置信息用于辅助定位。

2、教师信息

教师信息如图3.3所示,包括教师的用户名和账户密码、用于区别教师权限的用户组、用于登录验证的人脸信息、用于学生签到测距的蓝牙设备信息和位置信息。

3、考勤统计信息

考勤统计信息如图3.4所示,包括应到人数、实到人数、签到名单、请假名单和缺勤名单。

图3.2 学生的属性信息

图3.3 教师的属性信息

图3.4 考勤统计的属性信息

各实体之间的E-R图如图3.5所示。

图3.5 系统数据库E-R图

一个学生对应一条出勤统计信息,将多名学生的考勤信息统计之后反馈给老师,一名老师可以查看多条考勤统计信息。

3.3.2  逻辑设计

本系统涉及数据库的逻辑设计分为学生信息表、教师信息表、考勤统计表,具体设计分别如下所示。

1、学生信息表,表名Students,结构设计如表3.2所示。

3.2 学生信息表

字段名

字段说明

数据类型

约束

是否可空

备注

uid

用户名

varchar(128)

PK

不可为空

主键

group_id

用户组

varchar(128)

不可为空

user_info

密码

varchar(256)

不可为空

image

人脸信息

varchar(512)

不可为空

base64编码的图片数据

2、教师信息表,表名Teachers,结构设计如表3.3所示。

表3.3 教师信息表

字段名

字段说明

数据类型

约束

是否可空

备注

uid

用户名

varchar(128)

PK

不可为空

主键

group_id

用户组

varchar(128)

不可为空

user_info

账户密码

varchar(256)

不可为空

image

人脸信息

varchar(512)

不可为空

user_location

位置信息

varchar(256)

不可为空

uuid

蓝牙设备信息

varchar(256)

不可为空

3、考勤统计表,表名PresentList,结构设计如表3.4所示。

 

 

 

 

表3.4 考勤统计表

字段名

字段说明

数据类型

约束

是否可空

备注

studentsNum

签到人数

integer

不可为空

kaoqinStudents

签到名单

varchar(512)

可空

notPresentNum

未签到人数

integer

不可为空

notPresentList

未签到名单

varchar(512)

可空

lessonToken

考勤口令

varchar(512)

PK

不可为空

主键

3.4  系统设计

3.4.1  系统流程

系统流程如图3.6所示,用户通过扫描二维码或者点击课程群的分享链接进入本系统,首先在欢迎界面选择自己的身份。选择完成后系统会将用户微信id发回相应数据库进行查询,查询失败则该用户为未注册用户,需要先进行注册,注册过程需要输入密码和进行拍照,密码和人脸信息将与用户id绑定存入云端数据库,用作后续登录和签到的操作的二重验证。系统的正式版本中未开放教师的注册权限。注册成功的用户将返回起始界面,选择身份后在弹出的系统提示框内输入自己账户的密码,用户输入的密码将和数据库中存储的同id下的密码进行比对,如果相同则登录成功,教师身份的用户将跳转到人脸识别界面做第二步的身份验证,在该环节教师将通过摄像头拍照传回云端的人脸库进行人脸比对,如果判定为同一人则登陆成功,教师进入考勤管理环节。教师在开启考勤需要输入一个考勤口令,用于唯一识别本节课以及学生签到验证,如果考勤口令未被使用则可以开启考勤,如果输入已存在的口令则可以查看相应课堂的考勤历史信息。教师开启考勤之后自己的蓝牙设备信息和位置信息将被上传至数据库,同时新建一个用于本次考勤的数据库存放已经签到的学生名单。学生经密码验证成功后将开启蓝牙搜索功能,此时将获取学生与教师设备的距离,如果经蓝牙测距判定学生在教室范围内,学生将被允许使用人脸识别功能完成签到,否则该生将无权进入人脸识别环节。学生进入人脸签到环节需要输入正确的考勤口令和通过人脸验证才可以签到成功,完成签到的学生可随时退出系统。教师在开启考勤后可随时进行刷新查看已考勤学生名单和未考勤学生名单,同时本系统也提供考勤人数统计显示。教师可以点击按钮关闭考勤,在此之后学生在进行考勤尝试将被提示考勤未开启。教师可以进一步对未到学生名单勾选其中的请假学生,以生成最终的缺勤名单。教师可将考勤情况截图保存后退出系统,或者直接退出系统。

3.4.2  系统功能模块设计

按照功能需求分析和流程设计,本系统的功能模块设计分为四个模块:注册与登录模块、蓝牙测距模块、考勤管理模块、人脸识别模块。如图3.7所示,注册与登录模块是通过验证用户密码和人脸信息保证系统的安全性。蓝牙测距模块是主要功能模块,通过蓝牙信号结合位置信息判断学生是否在教室,从而决定是否有权签到。人脸识别模块,在本系统中是学生考勤验证的最后一步,通过将签到时的照片与注册时存入人脸库的图片进行比对判断是否签到成功,同时人脸识别也被用于教师登录过程的二次验证,保证的教师权限的安全性。本系统的关键模块是考勤管理模块,教师通过此模块拥有开启考勤和关闭考勤的权限,对考勤情况也可以有全面的掌握。

1、注册与登录模块

如表3.5所示,本模块功能包括用户身份选择,注册和登录。首先需要区分学生或教师身份,选择完相应的身份后,首次使用的用户应该进行注册,已经注册的用户应该输入密码进行验证。注册过程中除了设置密码,还需要保存用户的人脸信息。登录时,学生输入密码验证即可,教师除了输入正确密码,还应该进行人脸验证,以增强系统的安全性。

3.5 注册与登录模块的具体设计表

模块名称

注册与登录模块

功能说明

身份选择,用户注册,用户登录

输入

身份信息,用户密码,人脸信息

输出

关键逻辑

  1. 用户信息包括id,密码,人脸信息
  2. 登录输入框的密码与数据库中对应用户的密码进行验证,如果不一致提示重试
  3. 学生和教师不同的身份对应于不同的注册登录流程

函数方法

bindGetUserInfo()

获取用户信息

confirm()

登录密码验证

takePhoto()

拍照并上传对应人脸库


图3.6 系统流程图

图3.7 系统功能结构图

2、蓝牙测距模块

如表3.6所示,蓝牙测距模块主要设计手机蓝牙模块的开启和关闭功能,蓝牙连接,显示师生距离,跳转签到界面等功能。学生进入蓝牙搜索界面首先点击开始搜索按钮,搜索栏显示教师设备后学生点击该设备,如果学生在教室则成功进入签到页面,否则继续搜索。

3.6 蓝牙测距模块设计表

模块名称

蓝牙测距模块

功能说明

蓝牙搜索,蓝牙连接,距离计算

输入

教师设备信息

输出

距离

关键逻辑

  1. 开启蓝牙搜索时检查蓝牙适配器状态,扫描周围设备蓝牙信号
  2. 计算距离时从云端数据库中获取教师蓝牙设备和位置信息
  3. 距离满足条件时跳转签到界面

函数方法

Search()

搜索蓝牙设备并显示

Connect()

蓝牙设备连接并显示距离

getGps()

获取学生和教师的位置信息计算基于GPS的距离

3、考勤管理模块

如表3.7所示,考勤管理模块主要设计开启考勤、关闭考勤和查询考勤情况功能。教师点击开启考勤后学生的签到才有效,教师关闭考勤后学生签到失败。教师点击刷新按钮会显示已签到学生人数和名单,点击获取未登录列表按钮会显示未签到学生人数和名单。点击清空log日志按钮可以清空列表。

3.7 考勤管理模块设计表

模块名称

考勤管理模块

功能说明

开启考勤,关闭考勤,考勤统计,清空日志

输入

-

输出

考勤信息

关键逻辑

  1. 开启考勤前需设置考勤口令,口令存在则查询考勤历史,口令不为空且可用才允许开启考勤
  2. 开启考勤时新建考勤数据库,关闭考勤时删除该数据库
  3. 查询考勤情况时对数据库进行遍历,找出已考勤和未考勤学生名单显示在对应位置
  4. 对未考勤学生名单进行勾选其中的请假学生,不显示在缺勤名单中
  5. 点击清空日志将名单清空,人数归零

函数方法

startKq()

开启考勤

getUnpresent()

刷新显示缺勤名单

checkboxChange()

获取请假学生

checkToken()

检查考勤口令是否可用

getToken()

获取相应权限

endKq()

结束考勤

refreshList()

刷新已签到学生人数和名单

getUnpresentList()

获取未签到学生人数和名单

getDeviceId()

获取教师设备uuid

4、人脸识别模块

如表3.8所示,本模块的主要功能为拍照上传人脸库,与用户的人脸信息进行对比判断是否为同一人,如果一致则执行后续操作,对学生身份的用户为签到成功,将签到信息存入云端数据库,对教师身份的用户为跳转考勤管理界面。

3.8 人脸识别模块

模块名称

人脸识别模块

功能说明

拍照,人脸信息编码并上传,签到或登录

输入

人脸信息

输出

-

关键逻辑

  1. 页面加载时获取token,加载摄像头模块,获取用户信息
  2. 点击拍照按钮时拍摄人脸照片,进行编码并上传人脸库进行比对,获取返回的分值进行判断
  3. 教师通过人脸验证则进入考勤管理界面
  4. 学生通过人脸验证将签到信息传入考勤数据库转入签到成功界面

函数方法

takePhoto()

拍照

wx.switchTab()

执行页面跳转

wx.getFileSystemManager()

对人脸信息进行base64编码

 

4  系统实现

本章将在系统设计的基础上对系统主要功能的实现方法进行叙述。

4.1  系统开发环境

对于基于微信小程序平台开发的应用,可选择的集成开发环境有很多种,本系统使用了微信小程序平台为开发者提供的小程序开发者工具进行全部的开发工作和部分调试。

4.2  系统功能的实现

4.2.1  用户注册与登录

如图4.1所示,用户进入系统之后首先需要在欢迎界面选择自己的身份。选择自己的身份时会触发一个按钮点击事件,会根据用户选择的身份到相应的数据库中查询用户的id是否已经注册,如果未注册的学生将跳转注册界面,教师未注册则跳转提示界面,正式版本的系统中只有管理员拥有注册教师的权限,对于已注册用户将会弹窗请用户输入自己的密码进行验证登录,密码验证界面如图4.2所示。查询及登录的关键代码为:

for (var i = 0; i < that.data.userNum; i++) { // 遍历获取到的用户列表

if (that.data.userID == that.data.nickName) { // 查询到用户id

that.setData({userInList: true})}} // 标记该用户已注册

if (that.data.userInList) { // 用户已注册则进入登录流程

that.setData({hiddenPass: false}) // 显示输入密码弹窗

wx.request({ // 发起请求,从数据库获取该用户的密码

data: { user_id: that.data.nickName, // 数据库中的用户id

group_id: that.data.userGroup },// 用户组id

success(res2) {// 获取到用户密码进行后续验证

if ((that.data.password) == that.data.user_info) { //密码输入正确

if (that.data.userGroup == "Students") { // 检查身份信息是否是学生

wx.navigateTo({url: '../search/search', })}//跳转进入蓝牙界面

图4.1 欢迎界面                          图4.2 密码验证界面

4.2.2  蓝牙测距

登录成功的学生将进入蓝牙搜索界面,该界面如图4.3所示。学生通过点击开始搜索蓝牙启动手机蓝牙模块,开启蓝牙适配器扫描周边蓝牙设备,同时从数据库中读取教师蓝牙设备的uuid,如果发现教师蓝牙设备的信号可以点击该设备,系统将获取教师蓝牙设备信号的强度并基于此计算学生与老师设备的距离,系统将基于该距离进行判断学生是否在教室范围内,如果蓝牙距离过远或获取失败,出于系统可靠性考虑,本系统会获取学生的位置信息,并同时从云端数据库读取教师在开启考勤时存入的位置信息,如果基于GPS距离的判断为在教室内,学生同样可以进入考勤界面。

  1. 开启蓝牙模块并进行扫描的主要代码如下。

wx.openBluetoothAdapter({ // 打开蓝牙适配器

success: function(res) { // 开启蓝牙适配器成功的回调函数

wx.getBluetoothAdapterState({ // 检查当前蓝牙适配器状况

success: function(res) { console.log(res) }})

wx.startBluetoothDevicesDiscovery({ // 开始扫描蓝牙设备

allowDuplicatesKey: false, // 扫描蓝牙设备的参数:不允许重复扫描设备

success: function(res) {

that.setData({devicesList: []})}})}}), // 更新设备列表

  1. 根据蓝牙信号强度RSSI计算距离的代码如下。

iRSSI = Math.abs(that.data.devicesList[i].RSSI)

        power = (iRSSI - 70) / (10 * 2.0)

        initDis = Math.pow(10, power)

        that.setData({

          dis_ble: initDis

        })

这段代码用到的公式如公式(4.1)所示,其中dis为所求距离,RSSI为扫描到蓝牙设备信号的强度,p为实测两台设备距离一米时的RSSI,c为环境衰减因子。

dis=10(RSSi-p÷10×c)  (4.1)

4.2.3  人脸识别

本系统提供的功能模块中教师登录第二步验证和学生的签到验证都用到了人脸识别,人脸识别界面如图4.4所示。本系统人脸考勤功能是基于调用百度AI人工智能平台的开放接口实现的。用户在注册账户时需要拍照作为人脸信息与用户名绑定传回云端人脸库,登录时调用摄像头进行拍照,将拍摄的人脸照片编码后通过微信网络请求接口传输回云端人脸库,与相应用户id下的人脸进行对比,将获得一个相似度的评分,本系统以八十分作为标准,如果成绩超过八十分则判定用户为同一人,验证通过,该方法对应误判率为万分之一。

人脸识别的实现代码如下所示。

takePhoto() {//拍照并编码

const ctx = wx.createCameraContext()

ctx.takePhoto({ //拍照

quality: 'high',})

wx.request({//上传人脸进行 比对

data: {

image: this.data.base64,

image_type: 'BASE64',

group_id_list: 'Teachers},'//自己建的用户组id

success(res) {

if (that.data.msg > 80) {

wx.showToast({

title: '验证通过', icon: 'success', duration: 1000})

wx.switchTab({

url: '../start/start', })}}});//验证通过,跳转至开启考勤页面

4.2.4  考勤管理

教师在通过了密码验证和人脸识别双重验证之后,方可进入考勤管理界面,该界面如图4.5所示。教师可以在此界面开启考勤、关闭考勤以及查看签到统计。教师需要先输入考勤口令,如果口令可用则可以开启新的考勤,如果口令已存在则可以查看相应课程的考勤历史。开启考勤后系统打开教师的蓝牙适配器,发送蓝牙信号,并检查适配器状态,将在数据库中新建一个表,已考勤的学生被复制到新表中,教师需要输入自己的蓝牙设备uuid,系统将该uuid传回后端数据库,学生在搜索蓝牙设备时将以此作为参考,同时系统也会获取教师的位置信息,包含基于wgs84坐标系经度和纬度,并将这两个参数传回云端数据库供学生考勤使用。教师点击刷新学生名单按钮后,将会触发一个查询事件,系统将新建的表与全部学生表进行比较,分别返回已签到学生人数和名单。教师点击显示缺勤学生列表按钮之后,界面日志框将显示未签到学生的人数和名单,可以选中其中的已请假学生,以生成最终的缺勤名单,如图4.6所示。教师在管理界面关闭考勤后,新建的考勤数据库将被删除,关闭考勤后学生将无法再进行考勤。

  1. 开启考勤的关键代码如下。

wx.request({ // 发起请求,将教师设备的uuid传回远端数据库

data: {group_id: 'Database', //自己建的用户组id

user_id: 'serviceId',

user_info: that.data.bDeviceId},

success(res) {

that.setData({error_msg: res.data.error_msg, }) // 这里输出错误信息

if (res.data.error_msg == "SUCCESS") { // 判断数据存入操作成功

wx.showToast({ // 输出提示信息

title: 'uuid input', })}}})

图4.5 考勤管理界面                             图4.6 查询历史考勤信息

  1. 考勤情况查询关键代码如下。

that.setData({

allStudents: res.data.result.user_id_list, // 获取到的全体学生名单

totalNum: res.data.result.user_id_list.length})} // 获取到的学生总人数

var notPresentNum = 0; // 声明未考勤学生数量变量

that.setData({

realNotPresentNum: that.data.totalNum - that.data.studentsNum}) // 计算未考勤人数

for (var i = 0; i < that.data.totalNum; i++) { // 遍历全体学生名单

var studentPresent = false;

for (var j = 0; j < that.data.studentsNum; j++) { // 遍历已考勤学生名单

if (that.data.allStudents[i] == that.data.kaoqinStudents[j]) { // 如果有匹配项

studentPresent = true; }} // 学生已考勤

if (!studentPresent) {

that.setData({notPresentList: log})} // 更新缺勤学生名单

4.3  系统测试

本节将通过人工或自动手段对本系统的功能和界面在运行过程中及运行结果的表现来检验系统是否符合设计需求。根据本系统应用场景和特点,本节系统测试主要使用动态黑盒测试方法进行。

4.3.1  系统功能测试

1、注册登录模块测试

4.1 注册登录模块测试表

序号

测试内容

用例数量

测试结果

1

选择学生或教师身份,能否正确进入对应身份流程

30

通过

2

如果用户未注册,能否跳转注册界面

15

通过

3

用户已注册,能否弹出登录窗口

15

通过

4

非管理员教师未注册,能否跳转提示界面

5

通过

5

管理员教师未注册,能否跳转教师注册界面

10

通过

6

登录窗口能否获取密码输入进行验证,密码正确是否跳转后续界面

15

通过

7

注册界面能否获取用户信息和密码并存入后端数据库与用户名进行绑定

15

通过

8

注册界面能否通过摄像头模块拍摄照片

15

通过

9

人脸信息编码是否正确存入人脸库可用

15

通过

2、云端交互请求测试

表4.2 云端交互模块测试表

序号

测试内容

用例数量

测试结果

1

系统页面加载时能否获取交互token并在控制窗口输出

50

通过

2

从交互窗口获取输入数据能否存储入云端数据库

50

通过

3

能否能从云端数据库正确获取数据

50

通过

3、蓝牙搜索模块测试

4.3 蓝牙搜索模块测试表

序号

测试内容

用例数量

测试结果

1

用户点击蓝牙搜索按钮后,是否会检测蓝牙模块开启状态并提示

40

通过

2

蓝牙适配器能否正常开启并时刻检测状态

20

通过

3

学生端能否获取到教师的蓝牙设备uuid

20

通过

4

学生端系统能否准确测量、计算并显示距离信息

20

通过

5

能否从云端获取教师的位置信息

20

通过

6

小程序是否能获取到学生的位置信息并进行距离计算

20

通过

7

蓝牙设备能否成功成功建立连接

20

通过

8

  学生在教室范围内时能否跳转考勤界面

20

通过

9

  停止搜索或者跳转之后蓝牙模块是否关闭

40

通过

4、人脸验证模块测试

4.4 人脸验证模块测试表

序号

测试内容

用例数量

测试结果

1

进入人脸测试界面,摄像头能否正常开启

40

通过

2

能否拍摄人脸照片并进行编码输出

20

通过

3

考勤失败是否提示重试

10

通过

4

教师登录成功后能否跳转考勤管理界面

20

通过

5

能否检测在输入已关闭考勤口令时给出提示

20

通过

6

在输入正确口令时能否跳转签到成功界面

20

通过

5、考勤管理模块测试

4.5 考勤管理模块测试表

序号

测试内容

用例数量

测试结果

1

未授权是否拒绝开启考勤及关闭考勤

20

通过

2

未开启考勤是否拒绝关闭考勤操作

20

通过

3

点击开启考勤按钮能否获取数据库建立信息

20

通过

4

点击刷新按钮能否在已签到窗口显示签到学生人数和名单

20

通过

5

点击未签到学生按钮能否显示缺勤学生人数和名单

20

通过

6

点击清空log按钮能否清除窗口内容并将人数清零

20

通过

7

口令可用时能否开启考勤

20

通过

8

口令已存在时能否提示查看历史考勤信息

20

通过

本系统的各项功能测试结果表明,本系统各个功能模块的实现均满足设计需求。

4.3.2  系统界面及窗体测试

4.6 系统界面及功能测试表

测试用例

用例说明

测试方法

用例数量

测试结果

界面内容

界面中是否存在错别字

手动测试

30

通过

界面控件

界面中是否有多余控件

手动测试

30

通过

界面字体

界面字体、大小、颜色是否一致

手动测试

30

通过

提示

各种提示是否正确、明了

手动测试

30

通过

 

 

本文设计并实现了基于微信小程序的课堂考勤系统,该系统主要使用了蓝牙技术和人工智能技术,相较于传统课堂考勤方式,使用本系统可以实现准确且高效的课堂考勤。未来可以在本系统设计的基础上进行优化和拓展,以解决高校日常考勤过程中的其他问题。

本文主要涉及的工作主要包括以下几个方面。

1、系统注册与登录模块

本系统根据学生和教师的身份不同分别设置了不同的权限,必须选择身份并且完成对应身份所需的验证才可以进行后续使用。对于教师身份除了密码验证还需要人脸验证才可以使用教师功能,从而保证了系统的安全性。

2、蓝牙搜索模块

该模块通过控制手机蓝牙适配器,对周围设备进行扫描,从而判断学生是否可以进行签到。是本系统的主要功能之一。

3、人脸识别签到模块

该模块主要是对学生进行签到前的身份认证,确认学生是本人,结合学生在教室的前提,从而杜绝了代签到的行为。

4、考勤管理模块

本模块是面向教师进行考勤管理的各项功能的实现。教师可以控制学生考勤的时间,以及方便地查询学生的签到和缺勤情况。

本系统的主要特点是将蓝牙测距与人脸识别结合,充分利用智能手机硬件和人体生物信息,保证学生在教室且是本人签到,既节省了考勤的时间,又提高了课堂考勤的准确性。并且基于微信小程序平台,使用用户微信id作为识别更加高效,无需考虑不同手机系统的适配,可以方便地被获取使用,并且用完即走,节省系统空间,网络信息使用HTTPS和SSL加密传输,系统拥有更高的安全性。

本文设计的系统已经基本实现高校课堂考勤所需的功能,但是由于开发时间有限,加之本人能力有限,无法将本系统做到足以完全取代传统考勤方式的程度,为进一步提升系统的可靠性,综合考量本系统,还存在以下不足需要后续进行完善。

1、系统可以为教师提供更加丰富的考勤管理功能,比如将考勤情况统计后保存到本地或者发送到邮件,目前只能通过截图实现。

2、本系统用于定位的蓝牙设备可以替换成低成本的iBeacon设备放置在教室,这种设备可以在微信小程序开发时获得更好的平台支持,从而实现更准确的定位。

3、系统的界面还过于简单,目前只是足够正常使用的状态,后续可以对界面进一步美化,提升师生考勤体验。

4、可以对系统流程和发起数据请求的频率进行优化,本系统使用的百度AI平台的人工智能API只是免费版本的,只能支持不超过一百人的同时签到。

参考文献

[1]李钟石,蔡珉官.“互联网+”环境下高校课堂的快速签到应用研究[J].延边大学学报(社会科学版),2019(02):83-90+142.

[2]李湘勤,黄晨华,门戈阳.微信考勤管理系统在高校课堂中的应用——以韶关学院为例[J].教育教学论坛,2018(17):8-11.

[3]杨永平,曾艺,刘世兴.基于WIFI的高校课堂考勤系统设计实现[J].信息技术与信息化,2017(Z1):102-103+106.

[4]郑莹,孟安宁,孙久舒.基于校园一卡通的考试签到系统的设计与实现[J].计算机时代,2017(12):96-99.

[5]彭毅弘.基于iBeacon定位技术的高校考勤系统设计[J].福建电脑,2018,34(11):36-37+22.

[6]吴海龙,柏正尧,武文强.基于STM32和C#的学生考勤系统设计[J].国外电子测量技术,2017,36(12):113-116.

[7]方冠男.基于视频流人脸识别的课堂考勤系统的设计与实现[D].华中师范大学,2018.

[8]葛偲涵,刘毅,陈健.BLE技术在智能公寓门锁微信小程序中的开发与实现[J].工业控制计算机,2018,31(06):112-113+116.

[9]葛会会.基于Android 蓝牙考勤系统的设计与实现[D].东华理工大学,2016.

[10]腾讯公司.2018微信数据报告[EB/OL],2019,[2019-01-10]. https://support.weixin.qq.com/cgi-bin/mmsupport-bin/getopendays.

评论 43
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值