2020系统综合实践 期末大作业 21组
一、选题简介
智能打卡系统是以人脸识别技术为背景,部署在树莓派docker容器上的一个应用,主要实现了两大功能:一是通过人脸识别打卡签到,自动生成打卡时间,二是生成考勤情况表,统计已签到和未签到的人员信息。人脸识别是通过树莓派摄像头采集人脸信息,与后端图像进行人脸匹配,并能够准确匹配结果;web前端界面设计了签到页面、已签到和未签到人员信息统计页面,其中签到页面设置了时钟,能够实时看到当前时间。
二、设计
系统部署用到的容器有python+opencv+flask+mysql(树莓派下)
容器环境的搭建是在上一次实验python+opencv容器的基础上安装flask包和连接数据库
1.Docker安装数据库
由于树莓派的架构为arm,在树莓派上官方mysql镜像无法使用,这里使用的镜像是https://hub.docker.com/r/hypriot/rpi-mysql/%5D
docker pull hypriot/rpi-mysql # 拉取镜像
docker run --name mysql01 -e MYSQL_ROOT_PASSWORD=my-secret-pw -d -p 12345:3306 hypriot/rpi-mysql #启动容器
设置远程用户登录
mysql -u root -p #登陆mysql
my-secret-pw #输入密码
use mysql; #切换数据库
grant all privileges on *.* to 'docker'@'%' identified by '123' WITH GRANT OPTION; #设置远程用户登陆
2.进入myopencv容器安装必要的包
安装pymysql包
pip install pymysql -i http://mirrors.aliyun.com/pypi/simple/ --trusted-host mirrors.aliyun.com
安装flask包
requirements.txt
flask
flask_restful
Dockerfile
FROM cv-sql
MAINTAINER GROUP02
RUN mkdir /myapp
COPY . /myapp
WORKDIR /myapp
RUN pip install -r requirements.txt
ENTRYPOINT ["python3"]
docker build -t cv-sql/v2 . #构建镜像
3.docker运行项目
项目结构
docker run -d -p 5000:5000 -v ${PWD}/BigWork:/myapp --device=/dev/vchiq --device=/dev/video0 cv-sql/v2 flask_test.py
三、运行结果
docker ps 查看运行的容器
四、分工
组员 | 分工 | 贡献比 |
---|---|---|
吴俊杰 | 后端代码编写,部署项目 | 23 |
石晓楠 | 后端代码编写,部署项目 | 15 |
钟璐英 | 前端代码编写,部署项目 | 15 |
黄皓 | 前端代码编写,部署项目 | 15 |
陈观鸿 | ppt制作,答辩,部署项目 | 15 |
林睿 | 树莓派环境搭载和调试,部署项目 | 17 |
五、总结
- 吴俊杰:本次我在大作业中担任的是后端代码实现,以及人脸识别代码的编写。一开始我也是对后端没有太多的了解,也只是在软工实践的时候看队友用java的Spring Boot框架写过类似代码。后来在同组大佬晓楠的启发引导下,我也开始尝试用python的flask框架编写后端代码,最后完成了后端代码的工作。很幸运能与这样的伙伴组队,大家各司其职,而且都能及时甚至超前完成分内的工作。这也使得我们组可以在非常融洽欢快的气氛中完成本次大作业的工作。
- 石晓楠:我在这次大作业中主要负责的是flask框架以及数据库部分,在学flask框架的时候,虽然大家都说这是个很简单的东西随便套一下就好了,但是我还是在各种各样七七八八的地方不懂犯错,感谢俊杰同学几个晚上和我一起连麦学(游)习(戏),从而顺利的展开了前期在win10上调试代码的工作,这样为中后期部署在树莓派上摆下基础。
既然是总结,那我也真的很庆幸一下和都熟悉的朋友一起做实验,朋友在一起,就算遇到大家都不会,一头雾水的地方,也会充满信心的做下去。好几天6个人一起连麦和林睿一起在树莓派上调试的日子也过得很愉快。
我们团队的工作进展的十分顺利,前期工作大家都再分小组一对一工作,黄皓和璐英两个优秀的前端!林睿和观鸿提前在树莓派上安装好需要的镜像容器,测试,然后中期的时候6个人一起围观林睿工作,后期进行博客的编写,截图,代码的整理,答辩ppt,讲稿的准备…,每个人都为这个团队贡献了很多,当然还是俊杰和林睿最辛苦一点,不过只要大家都快乐就好!! - 钟璐英:本次作业中我主要负责前端以及和大家一起把项目部署在树莓派中的;在做前端的时候没有遇到什么大问题,主要是想把他做的好看点;这次小组合作我体会到了小组团结的重要性;我们小组每一个成员都很积极,因此在完成项目之后仍有些余时间修正,期间遇到了困难也是大家一起解决,虽然过程很艰难但因为大家都在一起,所以也有充足的动力和热情去解决它!
- 黄皓:这次系统综合实践的学习感觉过程是循序渐进的,安排的让人觉得不会少学东西也不会让人感觉太累,但是还是有种小软工的感觉。学习了很多关于容器还有树莓派的知识,感觉能把平时学过的东西部署在树莓派上觉得很神奇,引起了学习的兴趣。在最后的大作业中,虽然内容不算多,但是有些东西是没有学习过的,所以细节上出现了很多问题,很多时间都用在解决问题上,工作量因而变多。小组作业非常融洽,体验非常好,感动哭,互相帮忙解决问题,让这次大作业愉快又充实。
- 陈观鸿:我在这次大作业中主要负责和大家一起部署树莓派,在部署的过程遇到了问题,百度很关键,虽然我感觉我没有发挥啥作用,不过在部署的过程中,也更了解docker的运行原理和指令(看林睿打了1w遍),然后也认识了原来前后端连接可以用flask模板,是个可以学习的技术。在部署的成功之后是真的开心,开心到有人直接断线了哈哈哈。这次实验能做完,得感谢我们组其他五个人,她们真的太积极了,基本从第一天就开始督促的前后端一起同步进行,让我们的项目可以进展的很快。谢谢谢谢各位兄弟姐妹哈哈哈。大家都nb(非舔)。
- 林睿:我在这次大作业中主要负责的是树莓派上环境的部署和操作树莓派,前期搭载环境的时候遇到一些困难,比如树莓派的环境和之前linux的环境还是有一些区别,连接数据库时地址和端口没有弄清楚一直连不上,也有因为搞错容器内部外部导致一些包安装不成功卡了很久(多亏俊杰同学提醒),后面把项目部署到容器中是大家一起帮忙的,遇到问题的时候大家帮忙一起百度感觉就好多了,删容器又运行容器几十遍之后...成功看到界面的时候真的太激动了!总之,小组的氛围很好所以做树莓派的时间很愉快~
树莓派中遇到的一些问题:
1.树莓派拒绝
解决:mysql设置远程用户登陆的语句要加上密码
grant all privileges on *.* to 'docker'@'%' identified by '123' WITH GRANT OPTION;
2.树莓派连接不上
解决:连接数据库时,python代码里面host写树莓派ip地址或容器的虚拟地址
3.访问网页500
解决:项目的代码中连接的数据库改成树莓派中的数据库
4.数据库插入语句错误
解决:数据库语句中删去多余的空格
5.树莓派中的时间和标准时间有偏差
解决:进入容器内按照下图修改时间
6.树莓派中ascii编码错误
解决:树莓派中不能输出中文