需求分析
第一步我对该实验做了一个完整性的需求分析:
我们需要做到以下几点:
(1)学生信息的管理,对学生的信息的添加,删除,编译修改;
(2)基于每个学生的人脸上传,并识别该图片是否是一个人脸图片;
(3)基于上传后的学生人脸,进行同一个人的不同角度,不同角度进行不同程度的人脸识别控制;
(4)开启二维码扫描功能,解析二维码的含义;
(5)开启物品识别功能;
4.2 数据考察和数据收集

系统分为以下三部分:

4.4 系统实际操作流程

4.5 实际操作实现
4.5.1 主页面的设计:

布局采取LinearLayout线性布局,因为手机屏幕的大小有限,所以采取使用ScrollView控件,使得该activity布局页面可以添加入更多的控件,在ScrollView中添加控件到屏幕以外后,它会自动的向下滑动并把该控件包含在屏幕中,不会使控件无法显示在屏幕中。在ScrollView中继续使用线性布局,在线性布局的第一行中嵌套一个LinearLayout线性布局,使用一个relativeLayout布局添加app的header,在线性布局的第二,第三,第四,第五行对应的是学生信息管理、查询学生信息、学生人脸上传、点名系统模块。
额外添加: 因为系统自带顶部tittle不美观,所以设计了一个tittle.xml插入到每一个页面,在后面的报告中不再馁述。
添加代码:

TitleLayout代码如下:
显示:

Xml代码

主页面如下:

因为该主题是图像处理,所以该报告主要解释上传头像和点名系统的人脸图像处理模块
4.5.2 学生信息模块:
(1)布局解释
主布局设计为线性布局,设计list列表的每一列的列名,采用listview显示学生的基本信息,因为手机的屏幕宽度有限,所以我设计在listview 中只显示学生图片,学生的id号,学生的姓名,学生的联系方式(电话号码),在每一行的节点item的尾部设计删除按键,可以选择删除指定学生,并实现listview节点item点击事件,点击节点item显示该学生的详细信息,在显示详细信息后可选择编译按钮对学生信息的修改,注意:学生的id号无法修改,因为用id特征分辨不同学生,不能存在两个相同id的学生。在信息添加的过程中使用了以下几种控件,以简便输入学生的信息:在性别选择上使用单选框控件RadioButton,分别只能选择男或者女;在年龄上使用下拉式菜单,选择1岁50岁;在班级上使用下拉式菜单,只能选择13班中的一个选项。点击按钮添加后,会验证每一个选项是否填入正确,若非法则提示相应提醒。
(2)布局显示

添加信息后会使所有填入信息置为空,并相应提醒填入的值。
(3)逻辑代码实现
①Listview显示逻辑代码:
获取lv实例:

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

执行lv.setAdapter(new Adapter); listview适配器代码显示listview中的item值
②自定义适配器代码:

private class MyAdapter extends BaseAdapter {@Overridepublic int getCount() {return dao.getTotalCount();}@Overridepublic View getView(final int position, View convertView, ViewGroup parent) {View view = View.inflate(addstudent.this,R.layout.item,null);TextView tv_item_id = (TextView) view.findViewById(R.id.tv_item_id);TextView tv_item_name = (TextView) view.findViewById(R.id.tv_item_name);TextView tv_item_phone = (TextView) view.findViewById(R.id.tv_item_phone);ImageView touxiang_image=(ImageView) view.findViewById(R.id.student_image);ImageView iv_delete = (ImageView) view.findViewById(R.id.iv_delete);final Map<String, String> map = dao.getStudentInfo(position);iv_delete.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {boolean result = dao.delete(map.get("studentid"));if (result) {Toast.makeText(addstudent.this,"删除成功", Toast.LENGTH_SHORT).show();lv.setAdapter(new MyAdapter());}}});//界面只显示三列即可tv_item_id.setText(String.valueOf(map.get("studentid")));tv_item_name.setText(map.get("name"));tv_item_phone.setText(map.get("phone"));//此处image 初始使用同一个默认图片if(map.get("touxiang_id")==null||map.get("touxiang_id").equals("1")){touxiang_image.setImageDrawable(ContextCompat.getDrawable(getApplicationContext(),R.drawable.jjy1));}else {touxiang_image.setImageBitmap(getimage(map.get("touxiang_id")));}return view;}@Overridepublic StudentInfo getItem(int position) {//            return list.get(position);return null;}@Overridepublic long getItemId(int position) {return 0;}}

把自定义适配器传入lv适配器拷贝构造函数中,使lv初始化本地SQLit数据库中的学生信息数据。
③点击事件的实现:用AlertDialog+View 定义显示框,显示出学生的详细信息,并且添加确定和编译按钮,实现编译和确定的事件:
显示框的初始化:

final LayoutInflater inflater=addstudent.this.getLayoutInflater();
final View view1=inflater.inflate(R.layout.authorize_dialog,null,false);Context mContext=addstudent.this;AlertDialog.Builder builder=new AlertDialog.Builder(mContext);
builder.setView(view1);
builder.setCancelable(false);
final AlertDialog alert=builder.create();
Listview的item点击事件:
lv.setOnItemClickListener(new AdapterView.OnItemClickListener() {@Overridepublic void onItemClick(AdapterView<?> adapterView, View view, int position, long id) {final Map<String, String> de = dao.getStudentInfo(position);EditText stu_id = (EditText) view1.findViewById(R.id.student_id);EditText stu_name = (EditText) view1.findViewById(R.id.student_name);EditText stu_sex = (EditText) view1.findViewById(R.id.student_sex);EditText major_na = (EditText) view1.findViewById(R.id.student_major_name);EditText college_na = (EditText) view1.findViewById(R.id.student_college_name);EditText tel_number = (EditText) view1.findViewById(R.id.student_tel);EditText banji = (EditText) view1.findViewById(R.id.student_banji);EditText age=(EditText) view1.findViewById(R.id.student_age);edts=new ArrayList<EditText>();edts.add(stu_id);edts.add(stu_name);edts.add(stu_sex);edts.add(major_na);edts.add(college_na);edts.add(tel_number);edts.add(banji);edts.add(age);setEdictale(false);// 无法编译ImageView image_title=(ImageView)view1.findViewById(R.id.student_image);if(de.get("touxiang_id")!=null&&!de.get("touxiang_id").equals("1")){image_title.setImageBitmap(getimage(de.get("touxiang_id")));}stu_id.setText(de.get("studentid"));stu_name.setText(de.get("name"));stu_sex.setText(de.get("sex"));System.out.println(de.get("age"));age.setText(de.get("age"));banji.setText(de.get("banji"));major_na.setText(de.get("major_na"));college_na.setText(de.get("college_na"));tel_number.setText(de.get("phone"));banji.setText(de.get("banji"));alert.show();}
});

点击后的程序显示执行效果如下:
注意:在没有上传学生的人脸图像前使用系统初始化图片:此处使用的我自己的偶像—鞠婧祎的照片啦!


点击显示资料 编译显示 编译完成

4.5.3 学生头像上传系统模块:
学生通过学生自己的学号id和密码(初始密码为该学生学号id)进入上传,通过调用本机系统照相机进行拍照人脸或者上传本地相册,然后开启新线程对上传的图片进行比对是否人脸,然后返回一个提醒,如果是人脸那么返回上传成功,如果不是人脸或者其他光线过差等情况则返回一个提示。注意:无论是否上传成功,都会把拍照后的图片保存到本地文件夹下,该文件夹在上传时添加,若不添加则保存到系统根目录下,照片的名字为该学生id.jpg。
学生上传头像主页面: 上传学生人脸选择框:

上传中:

上传过程图:


4.5.4 头像验证系统模块:
在头像上传后,我们希望可以通过人脸识别+人脸比对来对同一个学生的不同人脸图片进行人脸识别。通过与上传对图片处理的同样操作,对传入的图片进行放缩+质量压缩转化为Base64Util代码,上传到百度api进行人脸比对,如果在该人脸库就返回签到成功。如果不存在等情况,即返回一个提示信息。如果签到成功,即使该学生的item上的checkbox置为true。

运行状况图:

上传签到人脸,进行人脸识别与该学生的真实人脸进行比对,签到成功效果图

github项目资源:
Android人脸识别系统
开发文件

Android开发简单人脸签到系统开发相关推荐

  1. 学生上课签到系统开发总结

    由于期末作业要交个作品,正好这学期学了ssh企业及应用开发,所以就用ssh做了个最简单的签到系统,从最基本的整合开始,经历了各种坑,直到项目完成,花了一周的时间.基本上每天都在敲代码,一个人一周完成一 ...

  2. 电脑编程用户注册界面java_用JSP/Servlet开发简单的用户注册系统

    用JSP/Servlet开发简单的用户注册系统 2.4界面编程实现 通过JavaBeans封装了大部分的逻辑或数据操作功能.这样,JSP页面中就可以减少很多Java代码,从而使得JSP的建立和修改变得 ...

  3. 校园人脸识别系统开发需求有哪些

    随着人工智能的发展,人脸识别技术在各个领域的场景应用中日益丰富,在多个场景可以看到人脸识别系统的应用落地,在社区.企业.工地.安防等方面.而现在随着各地智慧校园的建设,有些学校逐步引入人脸识别技术,通 ...

  4. 强!一个Java开发的人脸识别系统,获取人脸68个关键点(附源码)

    点击上方蓝色字体,选择"标星公众号" 优质文章,第一时间送达 关注公众号后台回复pay或mall获取实战项目资料视频 点击此链接:多套SpringCloud/SpringBoot实 ...

  5. Python毕设-【人脸签到系统】附源码/Python练手项目/Python毕业设计

    本人承诺只做技术分享,永不收费. V----------------->:专栏详情 文章目录 本人承诺只做技术分享,永不收费. V----------------->:专栏详情 一.背景 ...

  6. Python毕设-【课堂人脸签到系统】附源码课件/Python练手项目/Python毕业设计

    Python毕设-[课堂人脸签到系统]附源码课件/允许白嫖 文章目录 Python毕设-[课堂人脸签到系统]附源码课件/允许白嫖 系统简介 一.本课题拟解决的问题 二.系统技术栈 三.开发工具 四.数 ...

  7. 基于Flask/Opencv/Dlib课堂人脸签到系统

    简介 本项目主要采用了Python语言基于Flask框架开发,利用Dlib库中68特征点检测器和深度残差网络模型,欧氏距离,目标跟踪方法实现了人脸识别,采用MySQL数据库记录系统相关数据,并用Boo ...

  8. WEB应用项目开发-网店购物系统开发

    ** WEB应用项目开发-网店购物系统开发 ** 文章目录 WEB应用项目开发-网店购物系统开发 **1.要求**: **2.功能模块:** **3.功能模块说明** **4.流程图说明:** **5 ...

  9. Python自动化开发基础 分布式监控系统开发实战 day8-李杰-专题视频课程

    Python自动化开发基础 分布式监控系统开发实战 day8-10994人已学习 课程介绍         从0基础开始讲解Python语法.流程控制.函数式编程.面向对象开发等重要的Python开发 ...

最新文章

  1. 【c语言】蓝桥杯算法提高 企业奖金发放
  2. 神经网络:卷积神经网络CNN
  3. [BZOJ4894]天赋
  4. CDH集群调优:内存、Vcores和DRF
  5. mysql表损坏监控_监控mysql启动情况并检测表错误修复
  6. oracle link binaries,Oracle环境中使用NFS的mount选项
  7. apache2配置优化以及性能测试小结
  8. php wordpress乱码,PHP問題:基于WordPress的CMS网站在文章摘要末尾出现乱码
  9. java安装教程详细
  10. mysql codesmith_CodeSmith连接不上MySQL的解决方法
  11. 液晶VGH、 VGL电路解析
  12. UI设计之【android 仿微信、QQ聊天,带表情,可翻页,带翻页拖动缓冲】
  13. VMware Bitfusion GPU共享技术的应用场景
  14. IDEA如何设置热启动
  15. 构造器是什么?构造器有什么用?
  16. mkfs fat32 卷标 linux,fdisk_mkfs分区格式化课件.pdf
  17. 切换cuda版本之后/usr/local/cuda/lib64找不到的问题
  18. eslint跳过检测
  19. oracle学习笔记 Oracle体系结构概述
  20. Foxmail十大安全隐患解决方法

热门文章

  1. 北美 ATT 3G退网
  2. .看阿里云如何为直播用户营造临场沉浸感?
  3. Flutter 中 pdf 文件阅读器
  4. lol自动刷人机辅助_LOL真是运气游戏?玩家打排位遇脚本怒送20头,结果还赢了...
  5. 计算机学院院庆主题,关于举办“庆祝建院十周年,我为院庆献礼”主题系列活动的通知...
  6. 免688申请苹果开发者证书,开发自己得苹果应用
  7. JUC锁框架_AbstractQueuedSynchronizer详细分析
  8. win10自带温度监控小工具_有了它们战斗力爆表!17款神奇的Win10小工具
  9. 二、电脑C盘空间的优化
  10. c语言逻辑与的作用,C++ 、||、!逻辑运算符用法详解