基于人脸识别的课堂考勤手机APP

news2024/11/22 17:09:40

基于人脸识别的课堂考勤手机APP是一款基于虹软人脸识别技术的应用程序,旨在为学校、教育机构等提供快速、高效、准确的考勤服务。该APP需要教师和学生分别注册账号并登录,然后在考勤页面进行签到操作。教师通过APP摄像头对着学生进行采集,并进行人脸识别。对于已经签到但未到场的人员,可以进行标记。考勤完成后,教师可以手动修改异常情况,如请假、旷课等。该APP将所有考勤数据保存在数据库中,学生或教师可以随时查看历史考勤记录。需要注意的是,要确保安全性,保证数据的隐私和保密性。本系统是APP前端和java后台开发,需要使用Java作为后端语言,将虹软人脸识别SDK集成到后台中。使用手机或平板电脑等移动设备进行课堂考勤。学生可以通过在手机上启动考勤应用程序,并将其面部对准设备的摄像头,系统将自动识别学生的脸部特征,并进行身份验证。同时,教师也可以在其设备上运行同样的应用程序,并通过扫描二维码等方式进行身份验证,以确保只有教师才能进行考勤操作。该系统还支持在线逐个考勤、按班级批量考勤、请假管理和数据统计等功能,方便教师进行实时监控和数据分析;

关键词:Android应用;人脸识别;考勤系统;java服务端

Abstract

Classroom attendance mobile APP based on face recognition is an application based on ArcSoft face recognition technology, which aims to provide fast, efficient and accurate attendance services for schools and educational institutions. The APP requires teachers and students to register accounts and log in respectively, and then perform sign-in operations on the attendance page. The teacher captures the students through the APP camera and performs face recognition. For those who have checked in but not present, they can be marked. After the attendance is completed, the teacher can manually modify the abnormal situation, such as leave, absenteeism, etc. The APP saves all attendance data in the database, and students or teachers can view historical attendance records at any time. It should be noted that security must be ensured to ensure data privacy and confidentiality. This system is developed by APP front-end and Java back-end. It needs to use Java as the back-end language, and integrate ArcSoft face recognition SDK into the back-end. Use mobile devices such as phones or tablets for classroom attendance. Students can start the attendance application on their mobile phones and point their faces at the camera of the device. The system will automatically recognize the students' facial features and perform identity verification. At the same time, teachers can also run the same application on their devices and perform identity verification by scanning QR codes to ensure that only teachers can perform attendance operations. The system also supports functions such as online attendance one by one, batch attendance by class, leave management and data statistics, which is convenient for teachers to carry out real-time monitoring and data analysis;

Key words:Android application; face recognition; attendance system; java server

目 录

摘 要

Abstract

目 录

第1章 概 述

1.1 研究背景及意义

1.2 研究现状

2 相关理论及技术介绍

2.1 相关理论介绍

2.2 配置系统开发环境

2.3 安卓虹软人脸识别技术介绍

2.3.1基于虹软人脸识别原理介绍

3 总体设计

3.1课题内容与功能设计

3.2系统模块设计

3.3系统概要设计

3.3.1 系统流程图

3.1.1 系统整体框架图

3.4系统功能设计

3.4.1 首页管理模块

3.4.3采集数据

3.5.系统接口设计

3.5.1面向对象的接口设计原则

3.6数据库设计

3.6.1 数据表

3.6.2 数据创建语句

3.6.3数据库创建

4.软件设计与实现

4.1详细设计

4.1.1 类图

4.2实现效果

4.2.1 web管理平台实现效果

4.2.2 APP 实现效果

5.系统测试及使用说明

5.1 测试目的

5.2 测试计划

5.2.1测试方法

5.2.2测试流程

5.4 使用说明

6.总结与展望

6.1全文总结

6.2工作展望

7.参考文献

致  谢

第1章 概 述

    1. 研究背景及意义

在教育信息化时代,点点时光时刻关注学校需求,用创新的教育设备,助力教师教学,构建智能化课堂管理平台。在未来的日子里,点点时光将凭借先进的技术和一流的研发团队,为领导、教师、学生提供一个创新、高效的智慧校园。

教育考勤管理方面:传统的教育考勤管理方式通常采用纸质或手工记录的方式,容易出现错漏或误差,并且无法实现自动化管理。而基于人脸识别的课堂考勤手机APP可以实现自动化考勤管理,通过对学生的人脸信息进行识别和比对,可以自动识别学生是否到课,并记录考勤情况,有助于提高教育考勤管理的效率和准确性。

安全管理方面:随着移动互联网的快速发展,手机支付、人脸识别等技术也逐渐应用到日常生活中。基于人脸识别的课堂考勤手机APP可以通过人脸识别技术实现对学生的身份认证和考勤记录的自动化管理,同时也可以有效防范考勤数据被篡改或盗用的风险,提高安全管理的水平。

个性化教学方面:基于人脸识别的课堂考勤手机APP可以根据学生的考勤情况和个人信息,对学生进行个性化的教学和辅导,有助于提高教学质量和效果。

人工智能方面:随着人工智能技术的快速发展,基于人脸识别的课堂考勤手机APP可以通过人脸识别等技术实现更加智能化的教学和管理,为学生提供更加个性化和高效的服务。

综上所述,基于人脸识别的课堂考勤手机APP具有重要的研究背景和意义,可以为教育考勤管理、安全管理、个性化教学和人工智能等方面带来积极的影响。

以上就是小编为您介绍的如何实现高效课堂考勤管理,希望对您有所帮助,同时小编为您推荐一家移动考勤信息化的领导者--点点时光(武汉)科技有限公司,点点时光目前推出了一款全新产品-签到荚。签到夹是点点时光(武汉)科技有限公司旗下主要产品,点点时光(武汉)科技有限公司成立于2015年,是校园移动考勤信息化的领导者,公司所推出的下一代校园移动考勤产品—签到荚,结合人脸检测、人脸追踪、人脸识别、活体检测、GPS定位、WIFI定位、基站定位、锚点定位、云计算、移动互联等先进技术,可有效防止考勤时困扰用户的“代签到”、“不到考勤点签到”、“需排队签到”等问题;

    1. 研究现状

技术方面:目前,基于人脸识别的课堂考勤手机APP主要有两种技术实现方式:一种是基于深度学习的人脸识别技术,另一种是基于计算机视觉的人脸识别技术。其中,基于深度学习的人脸识别技术因为其具有高效、快速、准确的特点,得到了广泛的应用和研究。而基于计算机视觉的人脸识别技术则可以通过对人脸图像进行特征提取和分析,实现对人脸信息的识别和比对,也得到了广泛的应用和研究。

应用方面:目前,基于人脸识别的课堂考勤手机APP主要应用于校园管理、企业考勤等方面。在校园管理方面,基于人脸识别的课堂考勤手机APP可以实现对学生出勤情况的自动化管理,有助于提高学校的管理效率和管理水平。在企业考勤方面,基于人脸识别的课堂考勤手机APP可以实现对员工出勤情况的自动化管理,有助于提高企业的管理效率和管理水平。

安全方面:基于人脸识别的课堂考勤手机APP在应用过程中存在一定的安全风险,例如数据泄露、冒充身份等问题。因此,需要采取一系列的安全措施来保障数据安全和用户隐私。例如,可以采用数据加密、身份认证等技术来保证数据的安全性和完整性,同时也可以采用防范冒充身份等技术来提高用户的安全性。

社会价值方面:基于人脸识别的课堂考勤手机APP不仅可以提高教育考勤管理的效率和准确性,还可以提高安全管理的水平,同时也可以为学生提供更加个性化的教学和管理服务,具有重要的社会价值。

综上所述,基于人脸识别的课堂考勤手机APP的研究现状涉及到技术、应用、安全和社会价值等方面,具有广泛的研究意义和实际应用价值。基于人脸识别的课堂考勤手机APP的主要目的是督促学生出勤,而不是打卡上课。该APP可以通过人脸识别技术对学生进行考勤,避免代考勤、身份信息被复制等问题的发生,从而提高考勤效率,并且实现非接触式考勤,避免接触性病毒感染,保障学校人员的安全和身体健康。同时,该APP可以通过系统实时记录统计考勤情况,方便学校进行管理和查看,避免逃课、代考勤等现象的发生。此外,该APP还可以进行上课考勤应用,考生身份认证应用,还可以进行出入场景刷脸进出应用,使校园管理更高效化、智能化和安全化;


  1.  
    相关理论及技术介绍
    1. 相关理论介绍

面向对象方法是一种把面向对象的思想应用于软件开发过程中,指导开发活动的系统方法,是建立在“对象”概念基础上的方法学。对象是由数据和容许的操作组成的封装体,与客观实体有直接对应关系,一个对象类定义了具有相似性质的一组对象。

基本思想:尽可能模拟人类习惯的思维方式,使开发软件的方法与过程尽可能接近人类认识世界、解决问题的方法与过程, 也就是使描述问题的问题空间与实现解法的求解空间在结构上尽可能一致。

本系统是基于Android 系统开发,Android Studio 是 Android 的官方 IDE。它专为 Android 而打造,可以加快您的开发速度,帮助您为每款 Android 设备构建最高品质的应用;每个 SDK 平台版本都包含以下软件包:Android SDK 平台软件包。您必须拥有此软件包,才能针对相应版本编译您的应用。多个 System Image 软件包。您必须至少拥有其中一个软件包,才能在 Android 模拟器上运行相应版本。

SQLite 是一个轻量级数据库,它是D. Richard Hipp建立的公有领域项目,在2000年发布了第一个版本。它的设计目标是嵌入式的,而且占用资源非常低,在内存中只需要占用几百kB的存储空间,这也是Android移动设备采用SQLite数据库的重要原因之一。

SQLite 是遵守ACID的关系型数据库管理系统。这里的ACID是指数据库事务正确执行的4个基本要素,即原子性(Atomicity)、致性 ( Consistency)、 隔离性( lolation). 持久性( Durabilily )。它能够支持Windows/Linux/UNIX等主流的操作系统,能够跟很多程序语言,例如Tcl、C#、PHP、 Java等相结合。比起Mysql、PostgreSQL 这两款开源数据库管理系统来讲,SQLite的处理速度更快。

    1. 配置系统开发环境 

导入工程如下图,在Android studio中file 选择open选项,然后选择需要导入工程即可

Android studio版本:Android Studio Dolphin | 2021.3.1 Patch 1

Gradle版本:classpath "com.android.tools.build:gradle:4.1.2"

Java版本:1.8以上

开发工具:Android Studio版本:3.5以上

    1. 安卓虹软人脸识别技术介绍

    基于安卓虹软人脸识别技术是一种应用于智能手机、智能家居、智能零售等领域的计算机视觉技术,旨在通过对人脸进行图像处理和分析,实现快速、准确的身份认证和面部特征分析。

虹软(ArcSoft)是一家提供计算机视觉算法服务及解决方案的供应商[2]。基于虹软人脸识别技术,开发者可以使用虹软提供的SDK开发出自己的人脸识别应用。SDK支持多种平台,包括Android、IOS等,也支持多种语言,如Java、C++等,并且提供了丰富的API接口,让开发者可以根据自己的需要自由选择。

基于安卓虹软人脸识别技术,可以应用于多种场景,例如:

门禁系统:通过结合门禁系统,可以实现非接触式的身份认证,提高出入门禁的效率和安全性。

考勤系统:通过对学生或员工面部特征进行识别,可以实现课堂考勤或公司考勤的自动化和智能化。

支付系统:通过人脸识别技术,可以实现无需密码、卡号等方式的智能支付,提高支付的速度和安全性。

安防系统:通过对人脸进行识别和分析,可以快速发现异常人员,并及时采取相应的安全措施。

总之,基于安卓虹软人脸识别技术的应用前景非常广泛。它既可以提高工作效率,减少人力成本,又可以保障安全性和隐私性,让我们的生活更加便捷和智能化

2.3.1基于虹软人脸识别原理介绍

虹软人脸识别技术的原理是通过对人脸图像进行特征提取、匹配和识别来识别人脸。具体来说,它包括以下几个步骤:

人脸检测:首先对图像进行处理,找出其中可能存在人脸的区域,也就是人脸检测。

关键点定位:在检测到的人脸区域内,通过检测人脸上的重要特征点,如眼睛、鼻子、嘴巴等,来确定人脸的位置和姿态。

特征提取:接着基于深度学习算法,从人脸图像中提取特征信息,而这些特征信息可以用来描述一个人脸所具有的唯一性属性。

特征匹配:将当前识别的人脸特征和已经存储在人脸库中的特征进行匹配,并计算相似度得分。

人脸识别:根据相似度得分,判断当前人脸是否属于已知人脸中的一个,并输出相应的识别结果。

虹软人脸识别技术的核心是深度学习算法,它可以不断优化特征提取和分类算法,从而不断提高人脸识别的精度和鲁棒性。同时,虹软人脸识别技术还支持多种识别模式和多种特殊场景的适配,可以满足不同应用场景的需求。如下图所示:

虹软人脸识别流程图

2.3.2考勤系统介绍

人脸识别考勤机在应用时只必须提早将工作人员包含人脸图像在其中的基本信息录入到后台系统软件中,当工作人员立在摄像机鉴别地区内就可以完成人脸识别并纪录考勤信息,它具备与传统式考勤管理方法对比有鉴别速度快,不用触碰打卡十分环境卫生,鉴别全过程当然,人脸图像添删除十分便捷等好处。它可以有效地管理学生的出勤情况。该系统采用人脸识别技术,可以快速准确地识别学生的面部图像,并记录学生的出勤信息。学生可以使用自己的脸部图像进行考勤,而无需使用传统的打卡机。该系统还可以与门禁系统联合使用,以确保学生的上课出勤率,告别传统的点名模式。

基于人脸识别的课堂考勤手机APP是一款基于人脸识别技术的考勤管理APP,旨在提高课堂考勤的效率和准确性,同时保护员工的隐私。

该APP具有以下功能:

考勤打卡:用户可以使用手机APP进行考勤打卡,并且可以选择是否佩戴口罩。

人脸识别:用户可以使用APP进行人脸识别打卡,避免因为忘记打卡或者口罩佩戴不规范等原因导致的漏打卡。

记录查询:用户可以使用APP查询自己的考勤记录,包括打卡时间、地点、方式等信息。

口罩识别:该APP还支持口罩佩戴识别,用户可以选择是否佩戴口罩进行考勤打卡。

考勤统计:该APP可以自动统计每位员工的出勤情况,包括出勤时间、地点、方式等信息。

隐私保护:该APP具有隐私保护功能,用户可以选择是否公开自己的考勤记录。

该APP还支持多种考勤规则,例如可以根据部门、职位、年级等因素设置不同的考勤规则。此外,该APP还支持移动档案管理和自动抓取考勤数据等功能,方便企业进行考勤管理。

该APP的开发团队使用了Eclipse、Java、MySQL等技术进行系统开发,其中人脸识别技术是通过百度的人脸识别服务实现的。该APP在多个方面进行了安全性设计,包括使用加密算法对考勤数据进行加密存储,以及使用多种验证方式防止破解考勤系统。

总之,基于人脸识别的课堂考勤手机APP在保证考勤准确性和安全性方面具有很高的优越性,可以广泛应用于各种类型的企业和组织中。


  1. 总体设计

3.1课题内容与功能设计

通过人脸识别技术完成学生出勤统计功能,自动识别人脸比对数据库以此达到统计出勤的效果,减少教师日常考勤工作,完成身份识别数据存档与认识资料管理,数据支持导出,教师随时可以进行管理基于人脸识别的课堂考勤手机APP首先简要介绍系统使用的eclipseJava、人脸识别技术和MySQL数据库进行系统开发,具体内容如下:

客户端:身份一:管理员

1注册个人信息以及对人脸信息进行采集2查看采集的用户信息

身份二:老师

1登录客户端2查看自己对应的课程信息以及上课学生情况3打开人脸识别功能进行学生签到4查看考勤记录

后台服务端:1学生信息管理2老师信息管理3课程信息管理

3.2系统模块设计

本系统是基于Android系统开发,对Android应用设计开发需要有一定移动端app的设计思路,使用Android SDK以及轻量级数据库SQLite,本系统设计主要包含,依据设计的总体架构对各个功能模块进行划分,并分别对各个模块作详细设计。同时,设计完成数据库的逻辑结构,以配合功能模块的数据处理;

   设计完成数据库的逻辑结构,以配合功能模块的数据处理,开发设计图如下:

用户管理:为了实现对学生信息的自动化管理,需要设计一个用户管理模块,用户可以注册、登录、修改个人信息、查询考勤记录等。

考勤规则管理:为了实现对学生考勤的自动化管理,需要设计一个考勤规则管理模块,用户可以根据课程安排、教师要求等设置考勤规则,系统会根据设置的规则自动识别学生是否到课。

数据统计分析:为了实现对学生考勤情况的统计分析,需要设计一个数据统计分析模块,用户可以根据考勤记录统计学生出勤率、缺课率等数据,同时也可以查看历史数据和统计结果。

系统安全管理:为了保证系统的安全性,需要设计一个系统安全管理模块,用户可以设置登录密码、修改密码等,同时也可以设置黑白名单,防止非法用户登录系统。

综上所述,基于人脸识别的课堂考勤手机APP和后台管理的软件设计需要考虑到用户管理、考勤规则管理、数据统计分析、系统安全管理等方面。

如图3-2所示。

系统框架图

APP应用程序通过互联网http协议传输数据,客户端通过虹软SDK的人脸识别的方式,将每个唯一的个体数据记录下来,传输到后台系统中;

3.3系统概要设计

3.3.1 系统流程图

考勤系统流程图

      1.  系统整体框架图

 基于人脸识别的课堂考勤手机APP首先简要介绍系统使用的eclipseJava、人脸识别技术和MySQL数据库进行系统开发,具体内容如下:

客户端:身份一:管理员

1注册个人信息以及对人脸信息进行采集2查看采集的用户信息

身份二:老师

1登录客户端2查看自己对应的课程信息以及上课学生情况3打开人脸识别功能进行学生签到4查看考勤记录

后台服务端:1学生信息管理2老师信息管理3课程信息管理

3.4系统功能设计 

3.4.1 首页管理模块

   首页管理模块主要包含主要展示课程列表以及课程里面包含的学生信息,学生可以通过考勤的方式实现课堂签到;

 

3.4.2个人中心

对应的用户可以展示信息以及修改个人信息,退出程序切换账号

3.4.3采集数据

   管理员用户可以将学生信息进行采集,采集主要是学生的基本信息,还包括人脸识别信息的人图片,需要考虑显示和考勤的课程关联起来

3.5.系统接口设计

3.5.1面向对象的接口设计原则

六大设计原则主要是指:

单一职责原则(Single Responsibility Principle);

开闭原则(Open Closed Principle);

里氏替换原则(Liskov Substitution Principle);

迪米特法则(Law of Demeter),又叫“最少知道法则”;

接口隔离原则(Interface Segregation Principle);

依赖倒置原则(Dependence Inversion Principle)

把这 6 个原则的首字母(里氏替换原则和迪米特法则的首字母重复,只取一个)联合起来就是:SOLID(稳定的),其代表的含义也就是把这 6 个原则结合使用的好处:建立稳定、灵活、健壮的设计。

3.5.2 实体类图

   用户包含教师和学生,学生信息是通过管理员采集到系统中,用户信息考勤需要比对是在哪个课程

3.6数据库设计

3.6.1 数据表

本系统是使用Android 轻量级的数据库 sqlite数据库和mysqpl,根据数据库的特征,将使用的数据实体类创建数据表

User 表

表名称:User表

字段名称

字段类型(长度)

字段说明

uid

Int

主键(id)

uname

String

名称

nNo

String

学号

uPhone

String

电话

upswd

String

密码

uTime

String

时间

utype

String

类型

UClassMsg

String

班级信息

签到表

签到表表名称:signTabg表

字段名称

字段类型(长度)

字段说明

Id

Int

主键

signUserId

String

签到用户id

signUserName

String

签到名称

signCourseId

String

课程

signTime

string

签到时间

Dec

String

描述

Select

String

已选

Time

时间

课程表

课程表名称:course表

字段名称

字段类型(长度)

字段说明

courseId

Int

主键

courseName

String

课程名称

courseTeaId

String

课程教师id

courseTeaName

String

授课老师

courseDate

string

授课时间

Address

String

地址

Time

String

时间

Total

总额

3.6.2 数据创建语句

SET FOREIGN_KEY_CHECKS=0;

-- ----------------------------

-- Table structure for coursetb

-- ----------------------------

DROP TABLE IF EXISTS `coursetb`;

CREATE TABLE `coursetb` (

  `courseId` int(11) NOT NULL AUTO_INCREMENT,

  `courseName` varchar(255) DEFAULT NULL,

  `courseTeaId` varchar(11) DEFAULT NULL,

  `courseTeaName` varchar(255) DEFAULT NULL,

  `courseDate` varchar(100) DEFAULT NULL,

  `courseAddress` varchar(255) DEFAULT NULL,

  PRIMARY KEY (`courseId`)

) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8;

-- ----------------------------

-- Records of coursetb

-- ----------------------------

INSERT INTO `coursetb` VALUES ('1', '计算机基础', '240', '李老师', '2023-03-25 23:11', '一号楼1001教室');

INSERT INTO `coursetb` VALUES ('2', 'mysql', '240', '李老师', '2023-03-25 23:11', '一号楼1002教室');

INSERT INTO `coursetb` VALUES ('3', '英语', '240', '李老师', '2023-03-25 23:11', '一号楼1003教室');

INSERT INTO `coursetb` VALUES ('4', '计算机2022基础', '259', '郝老师', '2023-03-25 23:11', '一号楼1002教室');

INSERT INTO `coursetb` VALUES ('5', 'java', '240', '李老师', '2023-03-26T21:26', '一号楼1001');

-- ----------------------------

-- Table structure for signtb

-- ----------------------------

DROP TABLE IF EXISTS `signtb`;

CREATE TABLE `signtb` (

  `signId` int(50) NOT NULL AUTO_INCREMENT,

  `signUserId` varchar(100) DEFAULT NULL,

  `signUserName` varchar(255) DEFAULT NULL,

  `signCourseId` varchar(100) DEFAULT NULL,

  `signCreatime` varchar(100) DEFAULT NULL,

  PRIMARY KEY (`signId`)

) ENGINE=InnoDB AUTO_INCREMENT=162 DEFAULT CHARSET=utf8;

-- ----------------------------

-- Records of signtb

-- ----------------------------

INSERT INTO `signtb` VALUES ('159', '261', '卖女孩的小火柴', '1', '2023-03-25 23:11');

INSERT INTO `signtb` VALUES ('160', '261', '卖女孩的小火柴', '1', '2023-03-25 23:11');

INSERT INTO `signtb` VALUES ('161', '261', '卖女孩的小火柴', '3', '2023-03-25 23:11');

-- ----------------------------

-- Table structure for user

-- ----------------------------

DROP TABLE IF EXISTS `user`;

CREATE TABLE `user` (

  `uid` int(255) NOT NULL AUTO_INCREMENT,

  `uname` varchar(200) CHARACTER SET utf8 NOT NULL,

  `uNo` varchar(100) DEFAULT NULL,

  `uphone` varchar(100) NOT NULL,

  `upswd` varchar(200) NOT NULL,

  `utime` varchar(300) NOT NULL,

  `utype` varchar(255) CHARACTER SET utf8 DEFAULT NULL,

  `uClassMsg` varchar(255) CHARACTER SET utf8 DEFAULT NULL,

  `uImage` varchar(255) CHARACTER SET utf8 DEFAULT NULL,

  PRIMARY KEY (`uid`)

) ENGINE=InnoDB AUTO_INCREMENT=262 DEFAULT CHARSET=latin1;

3.6.3数据库创建

public class DatabaseOpenHelper {

    private final String TAG = DatabaseOpenHelper.class.getSimpleName();

    private DbManager.DaoConfig daoConfig;

    private static DbManager dbManager;

    private final String DB_NAME = "home.db";

    private final int DB_VERSION = 1;

    private DatabaseOpenHelper() {

        daoConfig = new DbManager.DaoConfig()

                .setDbName(DB_NAME)

                .setDbVersion(DB_VERSION)

                .setDbOpenListener(db -> db.getDatabase().enableWriteAheadLogging())

                .setDbUpgradeListener((db, oldVersion, newVersion) -> {

                }).setTableCreateListener((db, table) -> {

                });

        dbManager = x.getDb(daoConfig);

    }

    public static DbManager getInstance() {

        if (dbManager == null) {

            DatabaseOpenHelper databaseOpenHelper = new DatabaseOpenHelper();

        }

        return dbManager;

    }

创建数据库trans.db 文件,db操作辅助类的,需要打开数据以及更新数据库的数据,需要修改字段将升级字段即可

4.软件设计与实现

虹软是一家计算机视觉算法服务提供商及解决方案供应商,其人脸识别技术已经在智能手机、智能汽车、智能家居、智能零售、互联网视频等领域广泛应用。虹软人脸识别技术已经成熟,识别速度快,识别效果好;

1. 按照要求完成基于人脸识别的课堂考勤手机APP的设计和编码工作,实现和运行基于人脸识别的课堂考勤手机APP的全部功能;

2. 要求该系统界面美观,友好,易于操作,功能设计合理、实用;

3. 能够运用数据库的基本理论设计和实现系统后台数据库;掌握面向对象程序设计和分析的基本思想和基本方法;

客户端开发

客户端开发主要包括以下几个方面:

用户注册和登录:用户需要注册个人信息并上传人脸信息,然后登录客户端。

人脸信息采集:用户在注册时需要上传人脸信息,采集过程中需要对用户的人脸信息进行处理,以确保采集的信息准确无误。

课程信息查看:用户登录后可以查看自己对应的课程信息以及上课学生情况。

人脸识别签到:用户在上课时需要使用人脸识别功能进行签到,签到成功后可以查看考勤记录。

后台服务端开发

后台服务端开发主要包括以下几个方面:

学生信息管理:管理员需要对学生信息进行管理,包括学生的基本信息、人脸信息等。

老师信息管理:管理员需要对老师信息进行管理,包括老师的基本信息、人脸信息等。

课程信息管理:管理员需要对课程信息进行管理,包括课程的基本信息、人脸信息等。

人脸识别签到:管理员需要开发人脸识别签到功能,用户在上课时需要使用人脸识别功能进行签到,签到成功后可以查看考勤记录。

数据库设计

数据库设计主要包括以下几个方面:

用户信息表:用于存储用户的个人信息和人脸信息。

课程信息表:用于存储课程的基本信息和人脸信息。

老师信息表:用于存储老师的基本信息和人脸信息。

学生信息表:用于存储学生的基本信息和人脸信息。

人脸信息表:用于存储用户的人脸信息。

系统测试

系统测试主要包括以下几个方面:

功能测试:测试客户端和后台服务端的各项功能是否正常。

性能测试:测试系统的性能是否符合要求。

安全测试:测试系统的安全性能是否符合要求。

兼容性测试:测试系统在不同设备上的兼容性能是否符合要求。

发布和部署

发布和部署主要包括以下几个方面:

将系统打包成可执行文件,并将其发布到指定的服务器上。

将系统部署到指定的服务器上,并启动服务。

维护和更新

维护和更新主要包括以下几个方面:

对系统进行日常维护,包括数据库备份、系统更新等。

对系统进行安全更新,以防止安全漏洞。

对系统进行功能更新,以提高用户体验。

4.1详细设计

4.1.1 类图

   

4.2实现效果

4.2.1 web管理平台实现效果

通过浏览器打开web管理平台,如下图所示:

输入账号信息进入管理平台;

首页展示效果

教师登录进去需要修改自己信息并保存,首页包含用户信息管理,教师信息管理,添加课程、课程信息管理等;

教师信息页面

可以将教师信息增删改查操作,编辑教师信息等

添加课程页面

4.2.2 APP 实现效果

首页面展示效果

主要是课程信息和学生信息,选择课程将展示在这趟课程学习的所以学生,点击签到即可人脸识别;

部分代码:public class StudentActivity extends BaseActivity {

// 标题

private TextView mTvTitle;

// 返回

private ImageView mIvBack;

private TextView mIvStu;

private ListView mListMessage;

private List<SignModel> list_result = new ArrayList<SignModel>();

private String state;

private LinearLayout mllNomessage;

private GroupModel groupModel;

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_im);

}

@Override

protected void onResume() {

super.onResume();

initWidget();

initData();

}

@Override

public void onClick(View v) {

switch (v.getId()) {

case R.id.mIvBack:

finish();

break;

case R.id.mivCreateMessage:

break;

}

}

@Override

public void initWidget() {

mIvStu = (TextView) findViewById(R.id.mIvStu);

mIvStu.setText("添加");

mIvStu.setVisibility(View.GONE);

mllNomessage = (LinearLayout) findViewById(R.id.mllNomessage);

mListMessage = (ListView) findViewById(R.id.mListMessage);

mIvBack = (ImageView) findViewById(R.id.mIvBack);

mTvTitle = (TextView) findViewById(R.id.mTvTitle);

state = this.getIntent().getStringExtra("state");

mIvBack.setVisibility(View.VISIBLE);

mIvBack.setOnClickListener(this);

mIvStu.setOnClickListener(this);

}

@Override

public void initData() {

groupModel = (GroupModel) this.getIntent().getSerializableExtra("msg");

mTvTitle.setText("活动人员");

SignGroupListAdapter noticeAdapter = new SignGroupListAdapter(this, groupModel.getStudentMessage());

mListMessage.setAdapter(noticeAdapter);

mListMessage.setOnItemClickListener(new OnItemClickListener() {

@Override

public void onItemClick(AdapterView<?> arg0, View arg1, int pos, long arg3) {

// Intent intent = new Intent(StudentActivity.this, StudentSignGroupMessageActivity.class);

// intent.putExtra("msg", groupModel.getStudentMessage().get(pos));

// StudentActivity.this.startActivity(intent);

// StudentActivity.this.finish();

}

});

}

}

已签到课程列表

展示已签到课程课本

部分代码:public class FaceArcSoftActivity extends BaseActivity {

    private TextView mTvTitle;

    private ImageView mIvBack;

    private Button mSubmit;

    private Button shibie;

    boolean libraryExists = true;

    private static final String TAG = "FaceArcSoftActivity";

    private static final String[] LIBRARIES = new String[]{

            // 人脸相关

            "libarcsoft_face_engine.so",

            "libarcsoft_face.so",

            // 图像库相关

            "libarcsoft_image_util.so",

    };

    private static final int ACTION_REQUEST_PERMISSIONS = 0x001;

    // 在线激活所需的权限

    private static final String[] NEEDED_PERMISSIONS = new String[]{

            Manifest.permission.READ_PHONE_STATE

    };

    private EditText metName;

    private EditText metPhone;

    private EditText metPswd;

    private EditText uNo;

    @Override

    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        setContentView(R.layout.activity_face_arc);

        initWidget();

        initData();

    }

    @Override

    public void onClick(View v) {

        switch (v.getId()) {

            case R.id.mIvBack:

                finish();

                break;

            case R.id.mSubmit:

                createTopicPost(true);

                break;

            case R.id.shibie:

                break;

        }

    }

    @Override

    public void initWidget() {

        metName = (EditText) findViewById(R.id.metName);

        metPhone = (EditText) findViewById(R.id.metPhone);

        metPswd = (EditText) findViewById(R.id.metPswd);

        uNo = (EditText) findViewById(R.id.uNo);

        shibie = (Button) findViewById(R.id.shibie);

        shibie.setOnClickListener(this);

        mSubmit = (Button) findViewById(R.id.mSubmit);

        mIvBack = (ImageView) findViewById(R.id.mIvBack);

        mTvTitle = (TextView) findViewById(R.id.mTvTitle);

        mTvTitle.setText("采集学生信息");

        mIvBack.setVisibility(View.VISIBLE);

        mIvBack.setOnClickListener(this);

        mSubmit.setOnClickListener(this);

    }

    @Override

    public void initData() {

        libraryExists = checkSoFile(LIBRARIES);

        activeEngine(null);

        metName.setText("卖女孩的小火柴");

        metPhone.setText("15349243001");

        metPswd.setText("123456");

        uNo.setText("20211001");

    }

    private void createTopicPost(boolean isShow) {

        AjaxParams params = new AjaxParams();

        params.put("uname", metName.getText().toString());

        params.put("uNo", "-1");

        params.put("upswd", metPswd.getText().toString());

        params.put("uphone", metPhone.getText().toString());

        params.put("utype", "学生" + "");

        httpPost(Consts.URL + Consts.APP.RegAction, params, Consts.actionId.resultCode, isShow, "正在注册...");

    }

    @Override

    protected void callBackSuccess(final ResponseEntry entry, int actionId) {

        super.callBackSuccess(entry, actionId);

        CustomToast.showToast(this, "注册成功");

        new Handler().postDelayed(new Runnable() {

            @Override

            public void run() {

                Intent mEnterpriseQuery = new Intent(FaceArcSoftActivity.this, RegisterAndRecognizeActivity.class);

                mEnterpriseQuery.putExtra("msgUserId", entry.getRepMsg());

                startActivity(mEnterpriseQuery);

            }

        }, 2000);

    }

    @Override

    protected void callBackAllFailure(String strMsg, int actionId) {

        super.callBackAllFailure(strMsg, actionId);

        ToastUtil.show(FaceArcSoftActivity.this, strMsg);

    }

    /**

     * 激活引擎

     *

     * @param view

     */

    public void activeEngine(final View view) {

        if (!libraryExists) {

            showToast(getString(R.string.library_not_found));

            return;

        }

        if (!checkPermissions(NEEDED_PERMISSIONS)) {

            ActivityCompat.requestPermissions(this, NEEDED_PERMISSIONS, ACTION_REQUEST_PERMISSIONS);

            return;

        }

        if (view != null) {

            view.setClickable(false);

        }

        Observable.create(new ObservableOnSubscribe<Integer>() {

            @Override

            public void subscribe(ObservableEmitter<Integer> emitter) {

                RuntimeABI runtimeABI = FaceEngine.getRuntimeABI();

                Log.i(TAG, "subscribe: getRuntimeABI() " + runtimeABI);

                long start = System.currentTimeMillis();

                int activeCode = FaceEngine.activeOnline(FaceArcSoftActivity.this, Constants.APP_ID, Constants.SDK_KEY);

                Log.i(TAG, "subscribe cost: " + (System.currentTimeMillis() - start));

                emitter.onNext(activeCode);

            }

        })

                .subscribeOn(Schedulers.io())

                .observeOn(AndroidSchedulers.mainThread())

                .subscribe(new Observer<Integer>() {

                    @Override

                    public void onSubscribe(Disposable d) {

                    }

                    @Override

                    public void onNext(Integer activeCode) {

                        if (activeCode == ErrorInfo.MOK) {

                            showToast(getString(R.string.active_success));

                        } else if (activeCode == ErrorInfo.MERR_ASF_ALREADY_ACTIVATED) {

                            showToast(getString(R.string.already_activated));

                        } else {

                            showToast(getString(R.string.active_failed, activeCode));

                        }

                        if (view != null) {

                            view.setClickable(true);

                        }

                        ActiveFileInfo activeFileInfo = new ActiveFileInfo();

                        int res = FaceEngine.getActiveFileInfo(FaceArcSoftActivity.this, activeFileInfo);

                        if (res == ErrorInfo.MOK) {

                            Log.i(TAG, activeFileInfo.toString());

                        }

                    }

                    @Override

                    public void onError(Throwable e) {

                        showToast(e.getMessage());

                        if (view != null) {

                            view.setClickable(true);

                        }

                    }

                    @Override

                    public void onComplete() {

                    }

                });

    }

    /**

     * 检查能否找到动态链接库,如果找不到,请修改工程配置

     *

     * @param libraries 需要的动态链接库

     * @return 动态库是否存在

     */

    private boolean checkSoFile(String[] libraries) {

        File dir = new File(getApplicationInfo().nativeLibraryDir);

        File[] files = dir.listFiles();

        if (files == null || files.length == 0) {

            return false;

        }

        List<String> libraryNameList = new ArrayList<>();

        for (File file : files) {

            libraryNameList.add(file.getName());

        }

        boolean exists = true;

        for (String library : libraries) {

            exists &= libraryNameList.contains(library);

        }

        return exists;

    }

    public void afterRequestPermission(int requestCode, boolean isAllGranted) {

        if (requestCode == ACTION_REQUEST_PERMISSIONS) {

            if (isAllGranted) {

                activeEngine(null);

            } else {

                showToast(getString(R.string.permission_denied));

            }

        }

    }

    void checkLibraryAndJump(Class activityClass) {

        if (!libraryExists) {

            showToast(getString(R.string.library_not_found));

            return;

        }

        startActivity(new Intent(this, activityClass));

    }

    /**

     * 权限检查

     *

     * @param neededPermissions 需要的权限

     * @return 是否全部被允许

     */

    protected boolean checkPermissions(String[] neededPermissions) {

        if (neededPermissions == null || neededPermissions.length == 0) {

            return true;

        }

        boolean allGranted = true;

        for (String neededPermission : neededPermissions) {

            allGranted &= ContextCompat.checkSelfPermission(this, neededPermission) == PackageManager.PERMISSION_GRANTED;

        }

        return allGranted;

    }

    @Override

    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {

        super.onRequestPermissionsResult(requestCode, permissions, grantResults);

        boolean isAllGranted = true;

        for (int grantResult : grantResults) {

            isAllGranted &= (grantResult == PackageManager.PERMISSION_GRANTED);

        }

        afterRequestPermission(requestCode, isAllGranted);

    }

}

修改密码页面

教师端登录APP效果图

采集数据,将学生信息先采集到平台,人脸识别需要基础信息比对

我的页面,修改密码以及退出系统,切换账号


5.系统测试及使用说明

5.1 测试目的

1、提高软件的质量

软件测试的首要目的就是提高软件的质量,也就是让用户对产品有更好的体验,保证软件的高质量。

2、保证软件的安全

软件测试的第二大目的就是保证软件的安全,有一些软件是经过数据加密的,比如各大银行系统的APP。涉及到资金的支出和存入,对软件的安全性要求是特别高的。所以要通过反复测试来提高产品的安全性,保证产品在上线之后不会出现bug,尤其对于金融方面的APP来说,任何漏洞都是致命的。

3、降低软件开发成本

软件测试的另外一个目的就是降低软件的开发成本,在开发过程中发现bug及时调整,这样的损失是很小的,一旦产品上线或是即将完成开发而发现bug,那么可能会造成产品大改动,这样就意味着以往的精力全部白费。因此测试的存在就是为了降低开发成本。比如迪士尼的一款狮子王的软件,借着狮子王的名声,预期本应是好评如潮,也能通过这款软件获益不匪。但因为在很多系统上都无法使用,所以造成了大量的用户投诉和下线、卸载等。对成本造成了非常大的损失。那如果当时这款软件能够在不同的系统上进行测试,在上线前将所有的问题全部解决掉,肯定会大大降低成本。

4、降低企业风险

除了降低开发成本,还可以降低企业风险,试想,如果软件存在的问题过多,毫无疑问会影响企业的信誉,最终直接导致企业的合作企业变少,直接损害公司的收益。但如果有测试人员在中间严格把关,就完全不会出现这样的问题。

5、提升用户体验感

开发人员在开发过程中都是以顺向思维来写程序代码的,所以很少有开发人员能够站在用户角度去思考,但测试人员不一样,测试要以逆向思维来思考程序会在哪一步有问题,站在用户的角度进行测试,这样上线的产品将很符合用户的需求,用户使用时也比较顺手,增加用户体验感

5.2 测试计划

根据设计的需求编写测试计划

测试计划如下表2-1所示。

表2-1  测试计划

测试模式

测试功能

测试步骤

期望效果

功能测试

注册登录

启动项目 注册用户  然后登录

实现验证成功

页面能否跳转

单击页面

页面实现跳转

采集数据

采集人员数据,作为人脸识别

显示正常

查看个人信息

不进入我的页面

个人信息展示正常

5.2.1测试方法

单元测试是对软件组成单元进行测试的一种方法。在该系统中,可以对各个功能模块进行单元测试,例如人脸特征提取、人脸检测、人脸识别等模块。通过单元测试,可以验证各个模块的正确性,确保系统能够按照预期进行工作;

集成测试是将各个模块整合在一起进行测试的过程。在该系统中,可以将前端安卓应用、后端服务器和数据库进行集成测试,以验证系统的整体功能是否正常运行。集成测试需要模拟实际使用环境,包括多用户同时登陆、网络传输延迟等情况;

系统测试是测试整个软件系统的功能、性能、安全性、易用性等各个方面,以验证系统是否符合用户需求和规格要求。在该系统中,可以进行系统测试,以验证系统的稳定性、易用性和安全性等方面。

测试是十分必要,基于安卓虹软人脸识别的课堂考勤系统可以采用单元测试、集成测试和系统测试等多种测试方法。通过不同的测试方式,可以验证系统的各个方面,确保系统的稳定性和可靠性。

5.2.2测试流程

测试过程中需要进行的具体步骤包括:需求分析、测试计划、测试用例设计、测试执行、测试记录、测试报告等环节。每一个环节都对测试结果具有重要的影响。

基于以上资料,可以设计基于安卓虹软人脸识别的课堂考勤系统的测试流程,大致包括以下步骤:

需求分析阶段:明确系统需求和功能,确定测试资源和测试范围。

测试计划阶段:制定测试计划,明确测试目标、测试方法、测试环境、测试数据等。

测试用例设计阶段:编写测试用例,包括人脸识别测试、网络连接测试、数据库操作测试等。

测试执行阶段:按照测试用例执行测试,对系统的各个方面进行验证,并记录测试结果和问题。

测试记录阶段:记录测试过程中的发现问题、解决方案等信息,便于后续分析和改进。

测试报告阶段:整理测试结果和问题信息,撰写测试报告,包括测试总结、问题分类和评估、测试建议等内容。

问题追踪和修复阶段:针对测试中发现的问题,跟踪和修复问题,并重新执行测试,直至问题解决。

5.3 测试总结

测试的目的是评估一款基于安卓虹软人脸识别的课堂考勤系统的性能和可靠性。我们使用了一款名为“Face++”的人脸识别应用程序,该应用程序可以通过人脸识别技术来识别学生的面部特征,并将其与学生的考勤记录相关联。

在测试过程中,我们发现该系统具有以下优点:

高效率:该系统可以快速准确地识别学生的面部特征,并将其与考勤记录相关联。

易用性:该系统的界面简洁明了,易于使用,学生只需要按照提示进行操作即可完成考勤记录的录入。

安全性:该系统使用了人脸识别技术,可以有效地防止考勤作弊行为,保证了考勤记录的真实性和准确性。

然而,在测试过程中,我们也发现了一些问题:

数据安全性:由于该系统使用了人脸识别技术,学生的面部特征数据可能会被泄露。因此,我们需要采取措施来确保数据的安全性。

适用范围:该系统只适用于教室内的考勤,对于户外或其他场景下的考勤,需要采用其他方式进行考勤记录的录入。

成本:由于该系统需要使用人脸识别技术,因此其成本相对较高,可能会对一些学校或教育机构造成经济压力。

综上所述,基于安卓虹软人脸识别的课堂考勤系统具有一定的优点,但也存在一些问题。为了更好地应用人脸识别技术,我们需要采取措施来确保数据的安全性,并探索其他适用的考勤方式。

5.4 使用说明

1,部署java后台环境

Java后台开发:Spirng+SpringMVC+Maven+Mybatis+MySQL项目搭建

执行完这步(添加包的依赖,编辑pom.xml文件添加如下依赖)的时候,下载依赖文件会比较慢,可以直接停止下载,关掉eclipse,进入到项目根目录,先执行命令mvn clean,再执行mvn install。

Eclipse中web项目部署至Tomcat步骤

项目部署到tomcat上执行到第五步应该就可以了,部署成功后,启动项目,再浏览器中输入:

http://localhost:8080xxx项目/

打开之后运行界面如上图所示;

根据首页的菜单,用户管理,教师管理,添加课程,课程管理等

  1. Android项目运行配置

打开我的电脑--属性--高级:

点击打开环境变量:

JDK环境变量配置

在系统变量下点击新建

新建系统变量JAVA_HOME

变量名:JAVA_HOME

变量值:C:\Program Files\Java\jdk1.8.0_102

其中变量值:为自己安装jdk的路径。

确定之后,再次新建

变量名:CLASSPATH

变量值:.;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar;

找到系统变量中为Path的环境变量,点击编辑

点击图中新建(Windows 10下),输入%JAVA_HOME%\bin,再新建,输入%JAVA_HOME%\jre\bin

打开系统控制台,输入JAVAC,出现如图,配置成功

Android环境变量配置

Android环境变量配置和JDK配置类似,新建系统变量ANDROID_HOME

变量名:ANDROID_HOME

变量值:C:\Android\sdk

其中变量值:为自己安装sdk的路径。

同样找到Path的环境变量,点击编辑

点击新建(Windows 10下),输入%ANDROID_HOME%\tools,再新建,输入%ANDROID_HOME%\platform-tools

打开控制台,输入adb,出现下图

输入Android,出现下图

配置成功,如果在Android Studio中的Terminal中使用时,提示不是内部命令,重启Android Studio试试。

导入项目,在Android studio中导入Android项目

首先是打开安装的Android studio  open选项 选择文件路径

如下图:

检查gradle版本是否正常匹配,是正常就下载依赖文件库,等待下载完成即可;

下好依赖文件  提示成功就可以编译代码拉;

点击云行可以运行在模拟器或者真机上,如图:

项目运行输入账号密码就可以正常使用了,说明部署成功;

6.总结与展望

6.1全文总结

本系统使用Android 系统 gradle 4.1.2版本编译,SQLite数据库缓存在Android本地数据库,并达到了良好实际效果。

此项目离使用还存在很多的不足,希望能在积累知识点的同时继续完善功能,尽量满足每一个功能,能够达到投入使用的状态,解决用户学习英语的需求,主要问题是云交互阶段和跨端的调式,也是我需要继续挖掘和学习的地方;

此项目虽然不是很完美,但是从中学习到了一个项目的整体设计和实现过程,把理论知识应用到实践中,提升实践能力。本文工作有:

前校园二手商品繁杂、有利用价值的物品随意被废弃,面对这个问题,本文设计一个基于Android的前后端结合的校园闲置物品交易平台系统,主要完成以下工作:

1. 进行校园市场以及学生需求的分析,将系统分为二手商品管理员,分拣员,配送员、普通用户注册登录,商品信息,用户需求以及地址的录入、删除、修改以及线上客服和线下一对一配送模块。

2. 使用sqlite数据库实现对交易平台用户信息的存储。

3. 实现人性化管理,在遇到特殊问题时可以线上申诉,平台进行人工客服反馈。并设有管理员,有权限能够对商品数量、商品信息进行增删改查。

4.校园二手市场主要分为客户端〈Android)和后台管理系统两大部分,客户端为用户提供给一个处理闲置物品、找到物美价廉的商品的平台,管理员可以管理用户信息和交互数据,还可以更新客户端的版本。本系统非常巧妙地迎合了学生对互联网+生活的需求,实现了信息的快捷共享和交互,充分发挥了校园跳蚤市场的作用,使闲置资源得到优化配置。

基于人脸识别的课堂考勤手机APP首先简要介绍系统使用的eclipse、Java、人脸识别技术和MySQL数据库等进行系统开发,具体内容如下:

客户端:身份一:管理员

1、注册个人信息以及对人脸信息进行采集;2、查看采集的用户信息

身份二:老师

1、登录客户端;2、查看自己对应的课程信息以及上课学生情况;3、打开人脸识别功能进行学生签到;4、查看考勤记录

后台服务端:1、学生信息管理;2、老师信息管理;3、课程信息管理

6.2工作展望

随着科技的不断发展,人脸识别技术已经逐渐成为了一项重要的应用技术。在教育领域,人脸识别技术也开始得到广泛应用。开发安卓虹软人脸识别考勤系统,可以有效地解决传统考勤方式存在的问题,提高考勤效率和准确性,同时也可以保护学生的个人信息安全。我们将继续深入研究人脸识别技术,并将其应用于更多的教育场景中。我们计划将本APP升级到2.0版本,增加更多的功能,例如在线课程、作业管理、课堂讨论等。同时,我们也将探索将人脸识别技术与其他教育技术结合,以实现更加智能化和个性化的课堂考勤体验。

未来,随着人脸识别技术的不断发展和应用,安卓虹软人脸识别考勤系统也将不断完善和优化。可以预见的是,未来的考勤系统将更加智能化和高效化,可以更好地满足教育领域的需求。同时,随着技术的进一步发展,人脸识别技术也将不断优化和改进,例如增加更多的应用场景,提高识别准确性和速度,以及更好地保护个人信息安全等。我们计划进一步扩展本APP的功能,并探索将人脸识别技术与其他教育技术结合,以实现更加智能化和个性化的教学体验。具体来说,我们将深入研究人脸识别技术在教育领域中的应用,例如人脸识别技术在作业管理、课堂讨论等方面的应用。同时,我们也将探索将人脸识别技术与其他教育技术结合,例如与虚拟现实技术结合,以实现更加沉浸式的学习体验。

总之,开发安卓虹软人脸识别考勤系统是一项具有重要意义的工作,可以为教育领域的管理和教学提供更加高效和智能化的支持,同时也需要不断探索和创新,以适应不断变化的教育环境和需求。  

7.参考文献

[1]李刚彪.数据库加密技术的研讨与完成[D].太原理工大学,2010:18-78.

[2]杨云君.Android的设计与完成[M].北京:机械工业出版社,2013:5-65.

[3]秦明甫.基于混沌实际的数字图像加密研讨[D].重庆大学,2009:34-48.

[4]柯除夕.Android内核分析[M].北京:电子工业出版社,2011:67-98.

[5]李刚.疯狂Android讲义[M].北京:电子工业出版社,2013:12-87.

[6]吴明航.DES和RSA混合加密算法的研讨[D].哈尔滨工业大学,2013:13-56.

[7]顶峰.Linux内存管理的设计与完成[D].沈阳工业大学,2007:45-89

[8]陈最.基于Android平台挪动终端通明加密零碎的研讨与完成[D].重庆理工大学,2012:108-150.

[9]佟晓筠,王翥,杜宇,岳银亮.基于软件平安混合加密技术的研讨[J].计算机工程,2004,23(33):98-100.

[10]程庭,张明慧,石公营.一种基于DES和RSA算法的数据加密方案及完成[J].河南教育学院学报(自然迷信版),2003,22(3):69-71.

[11]XinChen,SongweiMa,BingliGuo,YanWang,JuhaoLi,ZhangyuanChen,YongqiHe.Anovelfragmentation-awarespectrumallocationalgorithminflexiblebandwidthopticalnetworks[J].OpticalSwitchingandNetworking,2014(12):6-22.

[12]廉士国,李忠新,王执铨.两种基于局部加密的图像和视频加密方案[J].计算机工程,2004,4(11):11-34.

[13]Zhu,ZhiwuLiu,XuLi,Xiangyu.RatchetingBehaviorsoftheCarbonFiberReinforcedPEEKComposites:ExperimentalStudyandNumericalSimulation[J].Polymers&PolymerComposite,2014,(221)

[14]朱彦颖,赖芝岑,李凡等.基于人脸识别的实验室考勤系统[J].物联网技术,2023,13(01):14-16.

[15]邓释天.VR人脸识别技术[J].数字技术与应用,2018,36(07):122-123.

[16]党永成.人脸识别技术综述及分析[J].电子技术与软件工程.2018,(03):158.

[17]刘厚华.人脸识别技术应用探究[J].信息记录材料.2018,19(08):142-143.

致  谢

 首页感谢老师的培养和教导,此项目得与开发还是离不开老师的教导,在开发过程遇到不少问题也是在老师的帮助下完成,主要体现在sqlite数据库的应用,解决疑难问题,调式过程中经常卡克,另外需要感谢同学的鼓励和帮助,是他们一起学习生活中渡过一段时光,在枯燥乏味的日子,同学们的欢声笑语滋润了心田,是他们的一起前行中学习到了每个知识点,课外经常讨论不明白的问题,梳理了不少疑惑。

    此项目离使用还存在很多的不足,希望能在积累知识点的同时继续完善功能,尽量满足每一个功能,能够达到投入使用的状态,解决校园的需求,主要问题是云交互阶段和跨端的调式,也是我需要继续挖掘和学习的地方;

生就像一面镜子,你用什么样的态度去面对她,她就会用同样的结果反馈给你。面对论文,如果你用认真的态度面对它,你所获得的将会是满意的成绩和丰收。论文能够顺利完成,首先需要感谢的就是我的论文指导老师对我的细心指导,同时他也用行动告诉我该怎样去面对社会、面对人生。同时感谢其他给予我帮助的老师和同学;

特别要感谢提供技术支持的团队或个人,他们为本APP的开发提供了有力的支持和帮助。同时,我也要感谢参与课程设计并为其提供帮助的同学或老师,他们的宝贵意见和建议对于本APP的优化和改进起到了至关重要的作用。

本APP是一款基于人脸识别技术的课堂考勤手机APP,主要功能包括学生签到和考勤记录查询。通过本APP,老师可以方便地对学生进行考勤,并且可以查看考勤记录,方便老师对学生的出勤情况进行统计和管理。

在本APP的开发过程中,我们使用了Eclipse、Java、MySQL等技术进行系统开发。其中,人脸识别技术是通过百度的人脸识别服务实现的。

最后,我再次向使用本APP的老师和同学们表达感激之情,并希望通过这篇文章,能够让更多的教育工作者认识到人脸识别技术在教育领域中的潜在价值和应用前景

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1069597.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

PCL 空间两条直线交点计算

空间两条直线交点计算 效果代码效果 图中绿色点为四条直线交点 代码 pcl::PointXYZget2linePoint(pcl::ModelCoefficients p1, pcl::ModelCoefficients p2) {pcl::PointXYZ result;double x1 =</

D1S板子烧录问题排查过程

1、问题描述 1、按照《03_搭建开发环境与体验第1个程序.md》文档烧录doc_and_source_for_mcu_mpu\D1S\source\02_uart\里的程序&#xff0c;复位后串口打印符号&#xff0c;没有按预期打印&#xff1b; 2、同样的程序&#xff0c;使用gdb进行调试&#xff0c;串口输出打印正常&…

ElasticSearch 学习7 集成ik分词器

网上找了一大堆&#xff0c;很多都介绍的不详细&#xff0c;开始安装完一直报错找不到plugin-descriptor.properties&#xff0c;有些懵这个东西不应该带在里面吗&#xff0c;参考了一篇博客说新建一个这个&#xff0c;新建完可以启动&#xff0c;但是插入索引数据会报错找不到…

【Navicat】win 10 / win 11:Navicat 15 安装完整教程(navicat 连接 mysql 出现 2059 报错问题解决)

目录 一、Navicat 连接 mysql 出现 2059 报错问题解决 二、Navicat 15 的下载 三、Navicat 15 的安装 四、Navicat 15 的使用 一、Navicat 连接 mysql 出现 2059 报错问题解决 之前使用的是完整版本 navicat 12&#xff0c;但是随着 MySQL 的升级&#xff0c;再连接 MySQL…

极智AI | Colossal-AI高效异构内存管理系统

欢迎关注我的公众号 [极智视界],获取我的更多经验分享 大家好,我是极智视界,本文来介绍一下 Colossal-AI高效异构内存管理系统。 邀您加入我的知识星球「极智视界」,星球内有超多好玩的项目实战源码下载,链接:https://t.zsxq.com/0aiNxERDq 首先需要了解一下异构内存中的…

新风机注意事项有哪些?

选择和使用新风机时&#xff0c;有几个关键注意事项需要牢记&#xff1a; 安装位置&#xff1a;新风机的安装位置很重要。通常情况下&#xff0c;应将其安装在室外以避免室内产生噪音和减少室内的体积占据。确保选择合适的安装位置&#xff0c;以便新风机能够顺利引入新鲜空气。…

Java——StringBuffer类常用操作示例

Java——StringBuffer类常用操作 package com.yushifu.javaAPI;import java.sql.SQLOutput;//StringBuffer类&#xff08;字符串缓冲区&#xff09; //StringBuffer类与String的区别————StringBuffer的内容和长度都是可以改的 //StringBuffer类似于一个字符容器&#xff0…

【版本控制工具二】Git 和 Gitee 建立联系

文章目录 前言一、Git 和 Gitee 建立联系1.1 任意目录下&#xff0c;打开 git bash 命令行&#xff0c;输入以下命令生成公钥1.2 配置SSH公钥1.3 进行全局配置 二、其它相关Git指令2.1 常用指令2.2 指令操作可能出现的问题 三、补充3.1 **为什么要先commit&#xff0c;然后pull…

【ORACLE】ORA-00972:标识符过长

问题 执行创建表结构sql&#xff0c;提示 ORA-00972&#xff1a;标识符过长&#xff1b; 如图所示&#xff0c;约束名称超过30个字符了 原因 一、11G and before 在使用11G数据库时&#xff0c;经常会遇到报错ORA-00972&#xff0c;原因是因为对象名称定义太长&#xff0c…

为啥Linux内核对驱动调用要绕这么多弯?

为啥Linux内核对驱动调用要绕这么多弯&#xff1f; 需要去写驱动的&#xff0c;基本是芯片原厂的人。其他的linux驱动从业者&#xff0c;只是调试、改设备树、封装库差不多了。需要“不满足照搬框架去写驱动”的人&#xff0c;应该都是通过芯片原厂面试的人&#xff0c;不会来问…

Harmony跨进程通信—IPC与RPC通信开发指导

一、IPC与RPC通信概述 基本概念 IPC&#xff08;Inter-Process Communication&#xff09;与RPC&#xff08;Remote Procedure Call&#xff09;用于实现跨进程通信&#xff0c;不同的是前者使用Binder驱动&#xff0c;用于设备内的跨进程通信&#xff0c;后者使用软总线驱动&a…

【大虾送书第十二期】MLOps快速成为机器学习生产落地中不可或缺的关键能力

目录 &#x1f31f;写在前面 &#x1f31f;内容简介 &#x1f31f;读者对象 &#x1f31f;专家推荐 &#x1f31f;图书目录 &#x1f31f;直播预告 &#x1f31f;文末福利 &#x1f990;博客主页&#xff1a;大虾好吃吗的博客 &#x1f990;专栏地址&#xff1a;免费送书活动专…

【排序算法】冒泡排序

文章目录 一&#xff1a;排序算法1.1 介绍1.2 分类 二&#xff1a;冒泡排序2.1 基本介绍2.2 图解冒泡排序算法2.3 代码实现 三&#xff1a;算法性能分析3.1 时间复杂度3.2 空间复杂度 一&#xff1a;排序算法 1.1 介绍 排序也称排序算法(Sort Algorithm)&#xff0c;排序是将…

Spring源码分析(五) 事务全流程分析

Spring事务的基础知识 1、注解相关属性 Transactional 注解的属性信息 name 当在配置文件中有多个 TransactionManager , 可以用该属性指定选择哪个事务管理器 propagation 事务的传播行为&#xff0c;默认值为 REQUIRED。 isolation 事务的隔离度&#xff0c;默认值采用 DEF…

AI:11-基于深度学习的鱼类识别

当今,人工智能和深度学习已经成为许多领域的关键技术。在生态学和环境保护领域,鱼类识别是一项重要的任务,因为准确识别和监测鱼类种群对于保护水生生物多样性和可持续渔业管理至关重要。基于深度学习的鱼类识别系统能够自动识别和分类不同种类的鱼类,为生态学研究和渔业管…

ChatGPT Vision初体验

本周&#xff0c;OpenAI为其广受欢迎的 ChatGPT 平台发布了一项突破性的补充。除了处理文本之外&#xff0c;ChatGPT 现在还可以处理图像并聊天。 很难夸大这件事的重要性。目前多达70% 的内容是视觉内容而不是书面内容。人们每年会生成数千张照片&#xff0c;而当今许多最大的…

设计模式 - 结构型模式考点篇:代理模式(静态代理、JDK 动态代理、CGLIB 动态代理)

目录 一、代理模式 一句话概括 1.1、代理模式概述 1.2、静态代理 1.3、JDK 动态代理 1.4、CGLIB 动态代理 1.5、对比三种代理 1.5.1、jdk 代理 VS CGLIB 代理 1.5.2、动态代理 VS 静态代理 1.6、优缺点 1.7、使用场景 一、代理模式 一句话概括 教你将类和对象结合再…

Mac mov转mp4,详细转换步骤

Mac mov转mp4怎么转&#xff1f;视频文件格式为.mov是由Apple公司所开发的特殊格式。因其只能在苹果设备上播放&#xff0c;与他人分享时就会变得困难。为此&#xff0c;我们通常会选择使用MP4这种最受欢迎的视频格式。在日常使用中&#xff0c;MP4成为了大家首选的视频格式。而…

【Docker】 docker中apt-get update过慢,这样配置瞬间提速!

docker中apt-get update过慢&#xff0c;这样配置瞬间提速&#xff01; 源官网全球镜像站 源 今天办公地点的网络出奇的差&#xff0c;看电影看小说打游戏完全没影响&#xff0c;只要更新就蜗速前进&#xff0c;只能从网上翻下&#xff0c;看看有没有网速快的下载源。 碰巧看到…

模范思路,单基因泛癌+实验轻松拿捏sci8+。

今天给同学们分享一篇单基因泛癌单细胞实验的生信文章“Pan-cancer analysis of Krppel-like factor 3 and its carcinogenesis in pancreatic cancer”&#xff0c;这篇文章于2023年8月3日发表在Front Immunol期刊上&#xff0c;影响因子为8.786。 Krppel-like factor 3&#…