基于人脸识别的课堂签到管理系统(三)---实时时间显示以及百度AI人脸识别
一.前言概述
时间功能
1、获取系统时间
2、把获取的系统时间日期添加到对应的时间/日期编辑器中
3、多次重复获取系统时间,添加
定时器,设置定时时间,产生信号,关联槽函数
在槽函数中去完成获取系统时间/日期功能
定时器当到达定时时间后才会产生信号
在创建窗口时就应该有这个定时器,启动定时器产生信号,关联设置时间日期的槽函数
人脸识别
能够把摄像头采集的画面进行人脸识别(识别人脸,且能判断到是谁)
进行人脸分析识别判断,实现方式有很多种:采用成熟的现成的技术方式或者我们自己从0开始设计一个识别模型进行识别判断
厂商现成的技术方案–使用百度的人脸识别
需要使用百度的相关技术方案(实现)–不会提供实现方式,只会提供使用的方式
在对应网站http://ai.baidu.com/找到人脸识别使用方法,使用提供的技术文档进行完成
离线方式-----离线sdk
在线方式-----在线api
在线识别方式:
人脸检测:对人脸进行分析检测
人脸对比:比对两个人脸画面是否为同一个人,多个人脸信息进行比对判断(确定是否为同一个人)
人脸搜索:在人脸库中搜索是否存在相识人脸(确认人脸库中是否存在同一个人)
人脸库管理:管理人脸信息(存储多人人脸信息)
使用在线识别的功能完成人脸识别:
1、摄像头采集画面
2、实现人脸检测:在线检测-----让百度AI进行检测
实现方式:
发送请求(向百度AI发送人脸检测请求,让百度AI去完成人脸检测,返回检测结果)
发送请求不是任意的网络请求能够接受,必须有百度提供的访问令牌(access_token)
a、在发送请求前必须先有access_token,获取access_token:需要注册人脸识别API
client_id
client_secret决定是否有访问权限
需要注册API获取id与secret,用百度账号进行注册
注册后建立人脸识别应用(才能进行使用),才会创建id与secret
id:应用的API Key ------- kSD6zWfxpki2AKWtysCUe0nS
secret:应用的Secret Key -------uNXjdRa7SbYwt0EgBdRwsmQYX6VADGx8
在使用requests.get(host)发送请求后,最终得到字典数据
从字典中取出键为access_token的值,得到accesstoken值
b、发送请求,通过网络请求方式完成让百度AI进行人脸检测
让百度AI检测一张画面(图片)是否存在人脸,以及人脸的一些属性
通过requests.post()函数完成请求,返回检测到的结果
结果数据是一个字典,存在多项数据内容,通过键值对进行表示
返回结果如下
3、完成人脸搜索,搜索库中是否存在对应人脸,进行签到
二.实时时间显示
添加一个定时器,定时时间为500ms,每500ms产生一个信号。
#启动获取系统时间/日期定时器,定时时间为500ms,500ms产生一次信号
self.datetime.start(500)
#关联时间/日期的定时器信号与槽函数
self.datetime.timeout.connect(self.data_time )
设置函数data_time获取时间与日期,添加到对应的定时器。
这样每隔500ms就获取时间与日期
#data_time函数获取日期与时间,添加到对应的定时器
def data_time(self):
# 获取日期
date = QDate.currentDate()
#print(date)
self.dateEdit.setDate(date)
self.label_3.setText(date.toString())
# 获取时间
time = QTime.currentTime()
#print(time)
self.timeEdit.setTime(time)
self.label_2.setText(time.toString())
# 获取日期时间
datetime = QDateTime.currentDateTime()
#print(datetime)
显示运行结果:
时间能够实时显示,不再是之前的设置了就不变了。
三.百度AI人脸识别
3.1 获取access_token
实现人脸检测:在线检测-----让百度AI进行检测
实现方式:
发送请求(向百度AI发送人脸检测请求,让百度AI去完成人脸检测,返回检测结果)
发送请求不是任意的网络请求能够接受,必须有百度提供的访问令牌(access_token)
在发送请求前必须先有access_token,获取access_token:
点击链接进入网页https://ai.baidu.com/?track=cp:aipinzhuan|pf:pc|pp:AIpingtai|pu:title|ci:|kw:10005792,点击进入人脸识别。
点击立即使用,输入百度账号,进入百度智能云。
当然你也可以点击技术文档,查看其人脸检测的具体技术实现。
点击人脸识别,在选择创建应用。
这里在应用简称和应用描述上都是人脸检测,其他都是默认,点击创建。
这样我们就有了API Key,Secret Key放便获取access_token
3.2 发送请求,通过网络请求方式完成让百度AI进行人脸检测
首先是获取access_token,具体的函数这里不做过多解释,感兴趣的朋友可以点击链接技术文档,深入了解。
def get_accesstoken(self):
print("get_accesstoken")
#host对象是字符串对象存储是授权的服务地址-----获取accesstoken的地址
host = 'https://aip.baidubce.com/oauth/2.0/token?grant_type=client_credentials&client_id=1cFzLl7ZshdilAAMZnnyX4Ak&client_secret=2OgXkKUAPSEQzQmnkj88LGGoj71Kk3Tj'
#发送网络请求 requests网络库
#使用get函数发送网络请求,参数为网络请求的地址,执行时会产生返回结果,结果就是请求的结果
response = requests.get(host)
if response:
# print(response.json())
data = response.json()
self.access_token = data.get('access_token')
print(self.access_token)
获取了令牌后,我们就可以上传图片,让百度AI进行人脸检测,并对相关属性进行分析并返回。
这里我是请求识别了人脸的性别,年龄,以及美丽程度。
def get_face(self):
#获取一张图片(一帧画面)
#getOpenFileName通过对话框的形式获取一个图片(.JPG)路径
path,ret = QFileDialog.getOpenFileName(self,"open picture",".","图片格式(*.jpg)")
#把图片转换成base64编码格式
fp = open(path,'rb')
base64_imag = base64.b64encode(fp.read())
print(base64_imag)
#发送请求的地址
request_url = "https://aip.baidubce.com/rest/2.0/face/v3/detect"
#请求参数是一个字典,在字典中存储,百度AI要识别的图片信息,属性内容
params = {
"image":base64_imag,#图片信息字符串
"image_type":"BASE64",#图片信息格式
"face_field":"gender,age,beauty"#请求识别人脸的属性, 各个属性在字符串中用,逗号隔开
}
#访问令牌
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_msg'] == 'SUCCESS' :
age = data['result']['face_list'][0]['age']
beauty = data['result']['face_list'][0]['beauty']
print(age)
print(beauty)
代码运行
第一步,获取access_token令牌
第二步,上传照片,百度AI分析并返回其分析的结果