利用百度人脸识别API和pyqt5实现基于人脸识别的可视化课堂签到管理系统
利用百度人脸识别API和pyqt5实现基于人脸识别的可视化课堂签到管理系统
一、项目介绍
基于人脸识别的课堂签到管理系统
二、概要设计
工程项目:基于人脸识别的课堂签到管理系统
分为:三个阶段
1.定义阶段
可行性分析
技术可行性
成本可行性:自底向上估价
开发评估成本
开发的时间周期,开发的人力
10天 3-4人
收益评估成本
需求分析:
a、摄像头进行人脸检测
b、人脸比对判断
c、人脸库
d、人脸库添加、删除
e、数据库保存
f、导出签到数据
2.开发阶段
概要设计:规定接口,模块功能的组成
详细设计:对每一个功能的实现流程进行设计
实现:对详细设计的功能进行代码实现
测试 :测试功能的正确性,稳定性
3.运行维护阶段
交付客户,上线运营
维护软件正常工作运行状态,进行版本更新
采用pyqt5作为界面开发
1、设计界面程序
pyqt5designer.exe打开ui界面设计工具,进行界面设计
a、创建项目,选择对应的虚拟解释环境
b、使用qt的工具,创建一个界面
在下方找到terminal—》pyqt5deisgner.exe
qt的界面设计
c、把界面UI文件添加到项目中,作为项目文件
d、把ui界面转换成python文件的界面程序
python只会解释.py文件,在项目中就不认识.ui
需要把.ui转换成.py
pyuic5 源UI文件.ui -o 目标文件.py
e、创建一个新的类,继承ui类与基础界面类
在新的类中既有设计的ui类中的界面内容,也有基础界面类(窗口类)显示等操作
三、实现效果
能够实现管理学生人脸签到的系统
分析:
1、摄像头进行人脸检测
关键代码:
def detect_face(self, base64_image):# 发送请求的地址request_url = "https://aip.baidubce.com/rest/2.0/face/v3/detect"# 请求参数是一个字典,在字典中存储了,百度AI要识别的图片信息,要识别的属性内容params = {"image": base64_image, # 图片信息字符串"image_type": "BASE64", # 图片信息的格式"face_field": "gender,age,beauty,expression,face_shape,glasses,emotion,mask", # 请求识别人脸的属性,各个属性在字符串中用','逗号隔开"max_face_num": 10,}# 访问令牌access_token = self.access_token# 把请求地址和访问令牌组成可用的网络请求地址request_url = request_url + "?access_token=" + access_token# 参数,设置请求的格式体headers = {'content-type': 'application/json'}# 发送网络post请求,请求百度AI进行人脸检测,返回检测结果# 发送网络请求,就会等待一段时间,程序就在这里阻塞执行response = requests.post(request_url, data=params, headers=headers)if response:data = response.json()if data['error_code'] != 0:self.transmit_data.emit(data)self.search_data.emit(data['error_msg'])returnif data['result']['face_num'] > 0:self.transmit_data.emit(dict(data))self.face_search()
实现效果:
通过百度API返回人脸的一些信息
2、人脸识别判断
关键代码:
def face_search(self):
list = self.getlist()
grouplist = list[‘result’][‘group_id_list’]
request_url = “https://aip.baidubce.com/rest/2.0/face/v3/search”
params = {
“image”: self.base64_image,
“image_type”: “BASE64”,
“group_id_list”: “class3” # 从哪些组中进行人脸识别
}
access_token = self.access_token
request_url = request_url + “?access_token=” + access_token
headers = {‘content-type’: ‘application/json’}
response = requests.post(request_url, data=params, headers=headers)
if response:
data = response.json()
if data[‘error_code’] == 0:
if data[‘result’][‘user_list’][0][‘score’] > 90:
# -------显示到窗口------- ## 存储要保存的签到数据,方便进行显示del(data['result']['user_list'][0]['score'])datetime = QDateTime.currentDateTime()datetime = datetime.toString()data['result']['user_list'][0]['datetime'] = datetimekey = data['result']['user_list'][0]['group_id'] + data['result']['user_list'][0]['user_id']if key not in self.sign_list.keys():self.sign_list[key] = data['result']['user_list'][0]print(self.sign_list[key])group1 = self.sign_list[key]['group_id']user_id = self.sign_list[key]['user_id']name = self.sign_list[key]['user_info'][5:9]time = self.sign_list[key]['datetime']self.insert_stu(user_id, name, group1, time)# ---------------------- #self.search_data.emit("签到成功\n学生信息:\n"+data['result']['user_list'][0]['user_info'])else:self.search_data.emit("未注册人脸信息")
实现效果:
通过调用百度人脸识别的API搜索比对人脸库里已经录入的人脸信息,根据匹配程度返回识别结果,成功返回为签到成功并输出人脸信息
3、人脸库管理
关键代码:
def add_group(self):# 打开对话框,进行输出用户组group, ret = QInputDialog.getText(self, "添加用户组", "输入用户组(由数字、字母、下划线组成)")request_url = "https://aip.baidubce.com/rest/2.0/face/v3/faceset/group/add"params = {"group_id": group}access_token = self.access_tokenrequest_url = request_url + "?access_token=" + access_tokenheaders = {'content-type': 'application/json'}response = requests.post(request_url, data=params, headers=headers)if response:message = response.json()if message['error_code'] == 0:QMessageBox.about(self, "用户组创建结果", "用户组创建成功")else:QMessageBox.about(self, "用户组创建结果", "用户组创建失败" + message['error_msg'])# 删除用户组def del_group(self):request_url = "https://aip.baidubce.com/rest/2.0/face/v3/faceset/group/delete"# 删除,需要知道存在哪些组list = self.getlist()group, ret = QInputDialog.getText(self, "存在的用户组", "用户组信息\n"+str(list['result']['group_id_list']))params = {"group_id": group # 要删除的用户组的ID}access_token = self.access_tokenrequest_url = request_url + "?access_token=" + access_tokenheaders = {'content-type': 'application/json'}response = requests.post(request_url, data=params, headers=headers)if response:data = response.json()if data['error_code'] == 0:QMessageBox.about(self, "用户组删除结果", "用户组删除成功")else:QMessageBox.about(self, "用户组删除结果", "用户组删除失败" + data['error_msg'])# 获取用户组信息def getlist(self):request_url = "https://aip.baidubce.com/rest/2.0/face/v3/faceset/group/getlist"params = {"start": 0,"length": 100}access_token = self.access_tokenrequest_url = request_url + "?access_token=" + access_tokenheaders = {'content-type': 'application/json'}response = requests.post(request_url, data=params, headers=headers)if response:return response.json()# 获取用户组列表并显示def getgrouplist(self):list = self.getlist()str = ''for i in list['result']['group_id_list']:str = str + '\n' + iQMessageBox.about(self, "用户组列表", str)
实现效果:
4、人脸库添加、删除
关键代码:
def show_grouplist(self, list):for i in list:self.listWidget.addItem(i)def get_user(self):self.listWidget_2.clear()self.listWidget_3.clear()group = self.listWidget.currentItem().text()list = self.getuserlist(group)# print(list['result']['user_id_list'])for i in list['result']['user_id_list']:self.listWidget_2.addItem(i)def get_facetoken(self):self.listWidget_3.clear()group = self.listWidget.currentItem().text()user = self.listWidget_2.currentItem().text()face_list = self.user_face_list(group, user)for i in face_list['result']['face_list']:self.listWidget_3.addItem(i['face_token'])# 获取用户列表def getuserlist(self, group):request_url = "https://aip.baidubce.com/rest/2.0/face/v3/faceset/group/getusers"params = {"group_id": group}access_token = self.access_tokenrequest_url = request_url + "?access_token=" + access_tokenheaders = {'content-type': 'application/json'}response = requests.post(request_url, data=params, headers=headers)if response:return response.json()# 删除用户中的一张人脸信息(face_token)def del_face_token(self, group, user, face_token):request_url = "https://aip.baidubce.com/rest/2.0/face/v3/faceset/face/delete"params = {"user_id": user,"group_id": group,"face_token": face_token}access_token = self.access_tokenrequest_url = request_url + "?access_token=" + access_tokenheaders = {'content-type': 'application/json'}response = requests.post(request_url, data=params, headers=headers)if response:data = response.json()if data['error_code'] == 0:QMessageBox.about(self, "人脸删除结果", "人脸删除成功")else:QMessageBox.about(self, "人脸删除结果", "人脸删除失败" + data['error_msg'])
#获取用户人脸列表
def user_face_list(self, group, user):request_url = "https://aip.baidubce.com/rest/2.0/face/v3/faceset/face/getlist"params = {"user_id": user,"group_id": group}access_token = self.access_tokenrequest_url = request_url + "?access_token=" + access_tokenheaders = {'content-type': 'application/json'}response = requests.post(request_url, data=params, headers=headers)if response:return response.json()def get_ok(self):group = self.listWidget.currentItem().text()user = self.listWidget_2.currentItem().text()face_token = self.listWidget_3.currentItem().text()self.del_face_token(group, user, face_token)
实现效果:
5、数据库签到信息
关键代码:
def insert_stu(self, user_id, name, group1, time):conn = sqlite3.connect('student.db')c = conn.cursor()data = (user_id, name, group1, time) # or ['love2', 2221]sql = "INSERT INTO Student(id, name, class, datatime) VALUES(?, ?, ?, ?)"c.execute(sql, data)conn.commit()conn.close()
实现效果:
6、导出签到数据
关键代码:
def get_ok(self):# 传入数据库路径conn = sqlite3.connect('student.db')c = conn.cursor()mysel = c.execute("select * from student")filepath, ret = QFileDialog.getSaveFileName(self, "导出数据", ".", "Excel文件(*.xls)\n文本文件(*.txt)")path = filepath[-3:]if path == 'xls':workbook = xlwt.Workbook()worksheet = workbook.add_sheet("签到数据")for i, row in enumerate(mysel):for j, value in enumerate(row):worksheet.write(i, j, value)workbook.save(filepath)elif path == 'txt':f = open(filepath, mode='w') # 打开文件,若文件不存在系统自动创建f.writelines(['学号\t\t', '姓名\t', '班级\t\t', '签到时间\n'])for i, row in enumerate(mysel):for j, value in enumerate(row):data = value.split('\n')f.write(str(data[0]) + '\t')f.write('\n')f.close() # 关闭文件if QMessageBox.question(self, "完成", "文件已经导出,是否现在打开?", QMessageBox.Ok | QMessageBox.Cancel) == QMessageBox.Ok:QDesktopServices.openUrl(QUrl("file:///" + QDir.toNativeSeparators(filepath)))
实现效果:
参考链接:
百度人脸识别结束文档
利用python将数据转存入sqlite3
附上我的pycharm的环境配置图
利用百度人脸识别API和pyqt5实现基于人脸识别的可视化课堂签到管理系统相关推荐
- 基于人脸识别的课堂签到管理系统(四)---摄像头上传实时数据,百度AI读取并返回信息以及多线程操作
基于人脸识别的课堂签到管理系统(四)---摄像头上传实时数据,百度AI读取并返回以及多线程操作 一. 前言概述 二.摄像头上传数据,读取百度AI返回信息 三.多线程操作 四.程序展示 五.相关下载 一 ...
- 【项目实训】基于人脸识别的课堂签到管理系统(python+qt5+sqlite3+百度智能云)
[项目实训]基于人脸识别的课堂签到管理系统(python+qt5+sqlite3+百度智能云) 一.环境介绍 二.签到功能 2.1 启动签到 2.2 结束签到 三.用户组操作 3.1 添加用户组 3. ...
- 基于人脸识别的课堂签到管理系统(三)---实时时间显示以及百度AI人脸识别
基于人脸识别的课堂签到管理系统(三)---实时时间显示以及百度AI人脸识别 一.前言概述 二.实时时间显示 三.百度AI人脸识别 3.1 获取access_token 3.2 发送请求,通过网络请求方 ...
- 基于人脸识别的课堂签到管理系统(五)---启动/结束签到,以及在百度智能云创建用户组
基于人脸识别的课堂签到管理系统(五)---启动/结束签到,以及在百度智能云创建用户组 一.前言概述 二.签到功能 2.1 启动签到 2.2 结束签到 三.创建用户 四.程序展示 五.相关下载 一.前言 ...
- 基于人脸识别的课堂签到管理系统(一)---环境设置以及简单的QT界面设计
基于人脸识别的课堂签到管理系统(一)---环境设置以及简单的QT界面设计 一.前言 二.Pycharm安装与环境配置 2.1 Pycharm安装配置 2.2 Pycharm环境配置 三.QT界面设计 ...
- 基于人脸识别的课堂签到管理系统【学习三】
实习第三天,上午练习实现ui界面的日期和时间与系统时间保持一致,人脸识别能够把摄像头采集的画面进行人脸识别,能识别人脸,且判断到是谁.之后进行人脸分析识别判断,实现方式有很多种,但是考虑到诸多原因我们 ...
- 基于人脸识别的课堂签到管理系统【学习一】
写在前面:需要搭建的环境 (我使用的环境情况如下) pycharm python opencv-python pysqlit3 pyqt5-tools 具体情况如图所示 基于人脸识别的课堂签到管理系统 ...
- 基于人脸识别的课堂签到管理系统(六)---删除,查询用户组以及人脸的添加,删除,更新
基于人脸识别的课堂签到管理系统(六)---删除,查询用户组以及人脸的添加,删除 一.用户组操作 1.1 查询用户组 1.2 删除用户组 二.人脸操作 2.1 人脸添加 2.2 人脸更新 2.3 人脸删 ...
- 人脸课堂签到管理系统
文章目录 一.界面设计 二.技术选型 三.效果展示 四.总结归档 五.源码 一.界面设计 1. 主界面 2. 添加用户界面 3. 删除用户界面 4. 签到情况界面 二.技术选型 开发语言:python ...
最新文章
- (简要介绍)Winograd schema challenge(Winograd question)
- JAVA常用知识总结(七)——Spring
- 工作方法及总结(给自己的忠告)
- cloudtalk 无法连接到消息服务器,solr - Solr Cloud down无法与Zookeeper对话客户端会话超时 - 堆栈内存溢出...
- Windows 技术篇-网卡物理(MAC)地址查看方法
- idea没有git选项
- javafx窗体程序_JavaFX真实世界应用程序:EIZO CuratOR Caliop
- 服务器图文消息发送规则,群发图文规则 - CurtainRight的个人空间 - OSCHINA - 中文开源技术交流社区...
- 源码分析 | 深度解密Go语言之context
- JavaScript实现的List(集合)类
- 知易游戏开发教程cocos2d-x移植版001
- unix 获取程序占用内存_如何减少Docker和Kubernetes中的JVM应用程序内存占用
- 【转】LPCTSTR,LPWSTR, PTSTR, LPTSTR区别
- Loadrunner12实现手机APP压力测试
- 详解开关电源RCD钳位电路工作过程
- 如何搭建一个自己图床网站
- VSCode(Visual Studio Code)整合Git
- Thinkpad linux 读卡器驱动
- python爬取指定分辨率模特壁纸
- Android 状态栏工具类(实现沉浸式状态栏/变色状态栏)