# 人脸识别考勤
## 一、设计内容
### 1、原型设计
###### 版本A:
- 考勤系统分为员工端和管理者端。
- 管理者端可以增删改要签到的员工信息(录入新员工、删除员工等),查询签到历史,规定签到时间(如9:00前早签,17:00后晚签)等。
- 员工端负责拍照,人脸识别成功后签到。
- 自己的服务器接受管理者端的请求,存储员工信息,并提供增删改查员工信息的服务。同时转发员工端发送来的签到请求到Face++,得到人脸对比结果,反馈给员工端是否签到成功。
- 人脸识别提供商(Face++)的服务器存储人脸信息以及对应的员工的id。接受自己服务器的注册新人脸、对比人脸的请求,并返回结果。
###### 版本B:
- 只有一个客户端,不仅负责增删改新员工(学生)的信息,还负责拍照、人脸识别签到。
- 服务器的情况与版本A类似,自己的服务器接受所有请求,并存储学生信息。
由于版本A存在重大漏洞:当员工没在公司时也能签到,而且工程量较大,课设时间有限。所以本项目采用版本B。
### 2、业务逻辑设计
主要功能有注册新用户和签到识别
最左边为客户端,中间的服务器是自己的服务器,右边是face++的服务器。
![](https://github.com/Paulpaulzmx/FRAmanager/blob/master/images/1.png)
### 3、界面设计
- 界面整体采用谷歌推荐的**Meterial Design**设计原则,包含了视觉、运动、互动效果等特性,就是好看!
- 颜色上采用了[配色网](http://www.peise.net)的"[花季少女的心](http://www.peise.net/2015/0629/5018.html)"配色方案,简单而融洽。
- 首先是主界面,采用一个带抽屉的布局,布局最上方为状态栏,剩下的部分为一个随抽屉中选项而切换的碎片,并在界面右下角嵌入一浮动按钮。
界面截图如下:
![抽屉打开时](https://github.com/Paulpaulzmx/FRAmanager/blob/master/images/2.png)
![抽屉关闭时(默认为签到历史)](https://github.com/Paulpaulzmx/FRAmanager/blob/master/images/3.png)
- 抽屉中的布局:上部分为用户头像,下半部分为功能选项按钮,每个按钮对应一个碎片。
- 在签到历史Fragment中,以每行2项的卡片式布局展示签到历史,每个记录项四周用阴影包围,显得更有层次感。
- 点击浮动按钮跳转到拍照页面,若拍照成功,进入上传页面;若失败则返回之前的页面。
截图如下:
![拍照成功后加载图片](https://github.com/Paulpaulzmx/FRAmanager/blob/master/images/4.png)
![点击上传后弹出等待Dialog](https://github.com/Paulpaulzmx/FRAmanager/blob/master/images/5.png)
![Dialog消失后返回上个界面,并 提示xxx签到成功](https://github.com/Paulpaulzmx/FRAmanager/blob/master/images/6.png)
- 学生列表Fragment主要用与注册新的用户,将新的人脸信息录入
- 点击学生列表浮动按钮跳转到拍照页面,若拍照成功,进入上传页面;若失败则返回之前的页面。
截图如下:
![按钮的icon更换为加号](https://github.com/Paulpaulzmx/FRAmanager/blob/master/images/7.png)
![按钮的icon更换为加号](https://github.com/Paulpaulzmx/FRAmanager/blob/master/images/8.png)
## 二、设计方法
### 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`在切换瞬间的数据并未被保存,所以这里需要改进:
为节省篇幅,不粘代码了,我参考的[这篇博客](https://blog.csdn.net/fan7983377/article/details/51889269)。
c.在显示相机拍出来的照片时,有时文件过大(像素数过多)不能使用`BitMap`加载,这里用`Subsampling
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
安卓课程设计python实现人脸识别考勤源码(95分以上).zip个人经导师指导并认可通过的98分大作业设计项目,主要针对计算机相关专业的正在做课程设计、期末大作业的学生和需要项目实战练习的学习者。 安卓课程设计python实现人脸识别考勤源码(95分以上).zip个人经导师指导并认可通过的98分大作业设计项目,主要针对计算机相关专业的正在做课程设计、期末大作业的学生和需要项目实战练习的学习者。 安卓课程设计python实现人脸识别考勤源码(95分以上).zip个人经导师指导并认可通过的98分大作业设计项目,主要针对计算机相关专业的正在做课程设计、期末大作业的学生和需要项目实战练习的学习者。 安卓课程设计python实现人脸识别考勤源码(95分以上).zip个人经导师指导并认可通过的98分大作业设计项目,主要针对计算机相关专业的正在做课程设计、期末大作业的学生和需要项目实战练习的学习者。 安卓课程设计python实现人脸识别考勤源码(95分以上).zip个人经导师指导并认可通过的98分大作业设计项目,主要针对计算机相关专业的正在做课程设计、期末大作业的学生和需要项目实战练习的学
资源推荐
资源详情
资源评论
收起资源包目录
安卓课程设计:python实现人脸识别考勤源码(95分以上).zip (76个子文件)
FRAmanaer-master
gradle.properties 728B
gradle
wrapper
gradle-wrapper.jar 53KB
gradle-wrapper.properties 200B
app
src
androidTest
java
com
example
zmx
facerecognitionattendancemanager
ExampleInstrumentedTest.java 780B
test
java
com
example
zmx
facerecognitionattendancemanager
ExampleUnitTest.java 409B
main
java
com
example
zmx
facerecognitionattendancemanager
HistoryFragment.java 627B
StuListFragment.java 627B
MainActivity.java 5KB
res
mipmap-xxhdpi
ic_launcher_round.png 10KB
toolbar_menu.png 1KB
fab_signature.png 6KB
nav_icon.png 7KB
ic_launcher.png 6KB
mipmap-hdpi
ic_launcher_round.png 5KB
ic_launcher.png 3KB
drawable-v24
ic_launcher_foreground.xml 2KB
mipmap-anydpi-v26
ic_launcher.xml 272B
ic_launcher_round.xml 272B
menu
toolbar.xml 351B
nav_menu.xml 696B
mipmap-mdpi
ic_launcher_round.png 3KB
ic_launcher.png 2KB
mipmap-xxxhdpi
ic_launcher_round.png 15KB
ic_launcher.png 9KB
mipmap-xhdpi
ic_launcher_round.png 7KB
ic_launcher.png 4KB
values
colors.xml 259B
strings.xml 420B
styles.xml 381B
layout
fragment_history.xml 414B
activity_main.xml 2KB
nav_header.xml 692B
fragment_stu_list.xml 245B
drawable
ic_launcher_background.xml 5KB
nav_user_list.png 6KB
toolbar_settings.png 2KB
nav_history.png 2KB
nav_time_setting.png 6KB
AndroidManifest.xml 742B
proguard-rules.pro 751B
build.gradle 1KB
.gitignore 7B
gradlew.bat 2KB
build.gradle 546B
.idea
dictionaries
zmx.xml 167B
codeStyles
Project.xml 2KB
runConfigurations.xml 564B
misc.xml 2KB
gradle.xml 626B
settings.gradle 15B
gradlew 5KB
facepp-python-sdk-master
call.py 3KB
server.py 6KB
imgResource
segment.jpg 55KB
search.png 493KB
demo.jpeg 120KB
merge.jpg 48KB
mysql.py 147B
PythonSDK
facepp.py 9KB
structures.py 466B
ImagePro.py 4KB
compat.py 1KB
__pycache__
facepp.cpython-36.pyc 9KB
compat.cpython-36.pyc 1KB
ImagePro.cpython-36.pyc 4KB
structures.cpython-36.pyc 901B
.gitignore 176B
images
3.png 113KB
1.png 57KB
6.png 169KB
5.png 112KB
4.png 225KB
8.png 46KB
7.png 37KB
2.png 43KB
README.md 11KB
共 76 条
- 1
资源评论
程序员张小妍
- 粉丝: 1w+
- 资源: 3087
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 2023-04-06-项目笔记 - 第一百五十四阶段 - 4.4.2.152全局变量的作用域-152 -2024.06.04
- 松哥解协议松哥解协议松哥解协议松哥解协议松哥解协议
- 618节日618节日618节日
- tensorflow-gpu-2.9.1-cp37-cp37m-win-amd64.whl
- tensorflow-gpu-2.9.0-cp37-cp37m-win-amd64.whl
- tensorflow-gpu-2.9.0-cp39-cp39-win-amd64.whl
- lcd daimalcd daima
- 电影领域-推荐算法-个性化内容-观影决策-电影推荐小程序.zip
- 电气控制PLC考试题库
- 如何使用MATLAB简介
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功