基于python实现的人脸识别考勤系统

基于python实现的人脸识别考勤系统 一,设计内容 1,原型设计 版本A: 考勤系统分为员工端和管理者端, 管理者端可以增删改要签到的员工信息(录入新员工

本文包含相关资料包-----> 点击直达获取<-------

基于python实现的人脸识别考勤系统

一、设计内容

1、原型设计

版本A:
  • 考勤系统分为员工端和管理者端。
  • 管理者端可以增删改要签到的员工信息(录入新员工、删除员工等),查询签到历史,规定签到时间(如9:00前早签,17:00后晚签)等。
  • 员工端负责拍照,人脸识别成功后签到。
  • 自己的服务器接受管理者端的请求,存储员工信息,并提供增删改查员工信息的服务。同时转发员工端发送来的签到请求到Face++,得到人脸对比结果,反馈给员工端是否签到成功。
  • 人脸识别提供商(Face++)的服务器存储人脸信息以及对应的员工的id。接受自己服务器的注册新人脸、对比人脸的请求,并返回结果。
版本B:
  • 只有一个客户端,不仅负责增删改新员工(学生)的信息,还负责拍照、人脸识别签到。
  • 服务器的情况与版本A类似,自己的服务器接受所有请求,并存储学生信息。

由于版本A存在重大漏洞:当员工没在公司时也能签到,而且工程量较大,课设时间有限。所以本项目采用版本B。

2、业务逻辑设计

主要功能有注册新用户和签到识别

最左边为客户端,中间的服务器是自己的服务器,右边是face++的服务器。

3、界面设计

  • 界面整体采用谷歌推荐的 Meterial Design 设计原则,包含了视觉、运动、互动效果等特性,就是好看!
  • 颜色上采用了 配色网 的" 花季少女的心 "配色方案,简单而融洽。
  • 首先是主界面,采用一个带抽屉的布局,布局最上方为状态栏,剩下的部分为一个随抽屉中选项而切换的碎片,并在界面右下角嵌入一浮动按钮。

界面截图如下:

  • 抽屉中的布局:上部分为用户头像,下半部分为功能选项按钮,每个按钮对应一个碎片。
  • 在签到历史Fragment中,以每行2项的卡片式布局展示签到历史,每个记录项四周用阴影包围,显得更有层次感。
  • 点击浮动按钮跳转到拍照页面,若拍照成功,进入上传页面;若失败则返回之前的页面。

截图如下:

  • 学生列表Fragment主要用与注册新的用户,将新的人脸信息录入
  • 点击学生列表浮动按钮跳转到拍照页面,若拍照成功,进入上传页面;若失败则返回之前的页面。

截图如下:

二、设计方法

1、数据库设计

主要有 学生信息表 签到记录表

学生信息表(stu_message):
类型 主键 非空 备注
stu_id int(10)
stu_name varchar(255)

此表还可扩展学生性别,学院,班级等项目,这里省略了。

签到记录表(check_on_records):
类型 主键 非空 备注
co_id int(10) 自动递增
stu_id varchar(255) 执行签到的学生id
co_time datatime 自动生成CURRENT_TIMESTAMP

2、接口设计

(1)注册接口

接收客户端发来的注册学生的图片和姓名,转发给Face++,返回注册成功的信息。

方法:POST

uri:服务器地址/register

请求参数:

字段 说明 类型 备注 是否必填
user_img 注册用图片 multipart/form-data .jpg
user_id 注册学生的姓名 multipart/form-data

返回参数:

字段 说明 类型 备注
user_id 注册学生的姓名 string

错误情况:

字段 说明 类型 备注
error_message 已知错误 string 有错误码
other_error 未知错误 string 网络不通等情况

(2)识别接口

接受用户发送来的要识别的人脸图片,转发给Face++,返回签到用户的id。

方法:POST

uri:服务器地址/transmit

请求参数:

字段 说明 类型 备注 是否必填
user_img 识别用图片 multipart/form-data .jpg

返回参数:

字段 说明 类型 备注
user_id 验证得到的学生的姓名 string

错误情况:

字段 说明 类型 备注
no_face 未识别到人脸 string face++的返回值中没有faces字段
failed 验证所得分数未达到阈值 string 分数低于80未验证失败
other_error 未知错误 string 网络不通等情况

(3)查询历史接口

方法:GET

uri:服务器地址/history

请求参数:无

返回参数:

字段 说明 类型 备注
history_data 历史纪录 json 整体为一个json数组,每条记录为一个数据项。

三、实现方法

1.客户端的实现:

程序采用Android Studio开发,调试、运行环境为小米手机3(Android 6.0)。

(1)界面实现:

主界面抽屉布局采用 DrawerLayout 实现,浮动按钮为 FloatingActionButton ,状态栏为 ToolBar

历史界面采用 RecyclerView 配合 CardView 实现。

a.为实现在状态栏打开时按返回关闭而不是退出程序,重写 onBackPressed() 方法:

```java public void onBackPressed() {

if (drawerLayout.isDrawerOpen(GravityCompat.START)) {

    drawerLayout.closeDrawer(GravityCompat.START);

} else {

    super.onBackPressed();

}

} ```

b.传统的单 Activity 对应多 Fragment 实现方法是:在一个 FrameLayout 中,每切换一个 Fragment ,就把要切换的 Fragment 放在最顶层,这种方法相当于新建了一个 Fragment ,被切换掉的 Fragment 在切换瞬间的数据并未被保存,所以这里需要改进:

为节省篇幅,不粘代码了,我参考的 这篇博客

c.在显示相机拍出来的照片时,有时文件过大(像素数过多)不能使用 BitMap 加载,这里用 SubsamplingScaleImageView 加载。

(2)业务逻辑实现:

  1. 与后台交互的逻辑:通过 OKHttp 开启新的线程向后台发送请求,用 Hanlder 模块接受返回的数据,同时将相应逻辑返回给主线程,主线程更新界面UI。
  2. 历史 Fragment 界面在接受 json 数据时使用 Gson 模块解析,相当方便。

2.后台服务器的实现:

后台采用python语言编写,主要运用模块有 pymysql (连接 mysql 数据库)、 flask (Web应用框架)以及Face++官方的SDK。

一些基本概念:

  • face_token :当对一张图片进行人脸检测时,会将检测到的人脸记录下来,包括人脸在图片中的位置,用一个系统标识face_token来表示。注意:对同一张图片进行多次人脸检测,对同一个人脸会得到不同的face_token。
  • FaceSet :人脸集合( FaceSet )是用来存储检测到人脸的存储对象。一个 FaceSet face_token 是不重复的。

后台服务器与Face++服务器的交互时主要用到的API:

名称 功能
Detect API 可以检测图片内的所有人脸,对于每个检测出的人脸,会给出其唯一标识 face_token,可用于后续的人脸分析、人脸比对等操作。
Search API 在一个已有的 FaceSet 中找出与目标人脸最相似的一张或多张人脸,返回置信度和不同误识率下的阈值,识别到的 user_id
Face SetUserID API 为检测出的某一个人脸添加标识信息,该信息会在Search接口结果中返回,用来确定用户身份。
FaceSet AddFace API 为一个已经创建的 FaceSet 添加人脸标识 face_token

参考资料: face++官方API

服务器主要操作逻辑:
  1. 使用Detect API获取 facetoken
  2. 根据步骤1得到的 face_token ,使用 Face SetUserID API设置 user_id
  3. 利用 FaceSet AddFace API 将步骤2中的图片上传到已创建好的 FaceSet
  4. 用户拍照对比时,利用 Search API 方法比对,成功后获得 user_id ,利用此 user_id 判断哪一个员工签到了。
服务器后台的启动:

本地MySQL、本地web服务程序启动后,使用 natapp 内网穿透使App能正常上传数据。

四、心得体会

  1. 了解了在网络通信中数据的传输方法( mutipart-formdata ),学习了http协议中不同的请求方法和请求头的功能和作用。
  2. 界面设计不易,美工和细节的打磨需要耗费时间。
  3. 第一次写简单的后台处理程序,基础功能实现很简单,但完善需要花费功夫。
  4. 不同版本的安卓、不同的手机在运行同一个app时会存在差异。相比ios,Android开发在适配上的成本要高些。
  5. 本以为看了《第一行代码》就能搞定安卓,实际做的时候才发现自己懂得只是皮毛。
  6. 时光荏苒,大学时光早已过半,且行且珍惜。

参考文献

  • 火电厂检修管理系统的设计与实现(西安电子科技大学·段鑫)
  • 人脸识别课堂考勤系统的研究与实现(浙江工业大学·李远)
  • 基于云的统一身份智能信息管理系统设计实现(华南理工大学·水凯凯)
  • 提供人脸识别服务的计费管理系统设计与实现(大连理工大学·宋一凡)
  • 基于SpringBoot和人脸识别的企业考勤管理系统设计与实现(阜阳师范大学·汪涛)
  • 中创软件企业协同管理平台考勤管理子系统的设计与实现(山东大学·孙晓莹)
  • 基于人脸识别的人员通行信息管理系统的设计与实现(电子科技大学·袁寿柠)
  • 提供人脸识别服务的计费管理系统设计与实现(大连理工大学·宋一凡)
  • 人脸识别课堂考勤系统的研究与实现(浙江工业大学·李远)
  • 交通民警自动诚信考勤系统设计与实现(西华大学·宋剑)
  • 基于人脸验证的协同管理平台的设计与实现(北京邮电大学·郭映泽)
  • 基于ARM的动态人脸识别考勤系统的研究与设计(福州大学·罗昊南)
  • 基于人脸识别的人员通行信息管理系统的设计与实现(电子科技大学·袁寿柠)
  • 基于微小人脸识别的智能考勤管理系统(电子科技大学·蔡李生)
  • 企业考勤系统的设计与实现(吉林大学·梁赫)

本文内容包括但不限于文字、数据、图表及超链接等)均来源于该信息及资料的相关主题。发布者:毕设工厂 ,原文地址:https://m.bishedaima.com/yuanma/35595.html

相关推荐

发表回复

登录后才能评论