基于学生课堂管理签到的AI人脸识别系统(三)


上一篇文章中,调用了摄像头显示了人脸,并且简单的获取了时间;这一次,将实现时间和日期的动态显示以及调用百度API进行人脸的检测

一、时间、日期的动态显示

在上一篇文章中,我们只是在mywindow.py的__init__函数中通过qt的函数简单直接的调用了静态的时间和日期显示到相应的控件中
这一次,我们在函数中加入定时器,一遍每隔一段时间获取一次时间和日期然后显示到窗口中,实现动态的效果
首先,我们在类中新建一个date_time函数,此函数主要是通过qt的函数获取系统的时间和日期,然后将获取的内容显示到窗口的相应控件中。
date_time函数代码如下:

 def date_time(self):
        # 获取日期
        date = QDate.currentDate()
        self.dateEdit.setDate(date)
        # 获取时间
        time = QTime.currentTime()
        self.timeEdit.setTime(time)

然后,需要在__init__函数中调用date_time函数,将时间和日期进行显示。所以,为了实现动态显示的效果,我们需要在显示之前创建一个定时器,通过定时器达到每隔一段时间更新一次获取的数据,从而达到动态效果
代码如下:

		# 创建一个定时器对象
        self.datetime = QTimer(self)
        # 启动获取系统/日期时间的定时器,定时时间为500毫秒,500毫秒产生一次信号
        self.datetime.start(500)
        # 关联时间/日期的定时器信号与槽函数
        self .datetime.timeout.connect(self.date_time)

最后的实现效果如下:
当然,这里只是一张图片,也看不出来具体的动态效果啦…
在这里插入图片描述
此时,动态的效果已经达到。可是,由于我们的时间和日期的显示是一个可以编辑的控件,所以居然还可以修改时间,虽然也不会被修改成功,毕竟它会动态的更新嘛,但是这是不可以容忍的,而且也不会有人用一个编辑框来显示时间和日期吧。
所以,我们就可以再重新打开我们设计的界面,在界面中自己理想的位置添加两个label,用来显示时间和日期
就像这样:
在这里插入图片描述
然后将修改保存,回到pycharm中。这时候,我们的界面已经修改了,但是我们转换的Python文件并没有被修改,所以我们又要重新在pycharm的终端中运行 pyuic5 源UI文件.ui -o 目标文件.py 命令将Python文件中的界面修改为保存的新界面
这里只需要在 date_time 函数中加入以下代码,其中label_2和label_3就是我们添加的时间和日期的label的名字了

self.label_2.setText("时间:"+time.toString())

self.label_3.setText("日期:"+date.toString())

如下,就是新的控件的动态显示
在这里插入图片描述
到这里,我们时间和日期的动态显示就完成了…

二、人脸检测

人脸检测这里使用百度的API进行,向百度AI发送人脸检测请求,让百度AI去完成人脸检测,并返回检测结果,当然,发送请求不是任意的网络请求都能够接受,必须有百度提供的访问令牌(access_token)

1、获取百度AI的“钥匙”

关于百度的访问令牌,我们需要去注册或登录百度的百度智能云。
1)、首先,在网页搜索百度AI,进入百度AI的官网,在其中选择开放能力->人脸与人体识别->人脸识别
在这里插入图片描述

2)、进入新的页面,在页面中,有一个立即使用,点击立即使用,进行百度智能云的登录操作
3)、登录之后,会看到一个概览,如果没有看到就在最左边找到人脸识别,点击它,然后就会看到概览
在这里插入图片描述
4)、在开始的时候,可以看到在应用中是0个应用,所以我们需要创建一个应用,这样我们才能够得到调用百度AI的权利
在其中输入你自己的应用名称,应用类型,应用描述,然后选择创建
在这里插入图片描述
在这里插入图片描述5)、创建完成之后,回到概览中,会发现此时的应用中就会为1了
在这里插入图片描述
6)、然后,选择管理应用,进去之后,会在应用中发现API Key 和 Secret Key ,这便是我们能够调用百度AI的“钥匙”
在这里插入图片描述
对于如何调用的细节问题,可以在百度AI中查看它的文档,能够了解到更多的关于调用百度AI进行人脸检测的内容

2、获得访问令牌

获取到了“钥匙”,接下来便可以进行百度AI的调用了
1)、首先,我们需要向百度AI发送请求,得到访问令牌(accesstoken)之后,才能进行人脸检测的调用和进行
2)、当然,我们在发送请求之后并不会只得到accesstoken,在使用 requests.get(host) 发送请求后,最终会得到字典数据,所以需要从字典中取出键为 access_token 的值,最终才能得到 accesstoken 值
3)、因此,我们在 mywindow.py 中再新建一个 get_accesstoken 函数,用来获取我们需要的访问令牌(accesstoken)
4)、为了实现获得访问令牌的过程,我们又需要在窗口中添加按钮,从而简单的调用到此功能,之后会再进行优化
在窗口中添加两个按钮,一个是获得访问令牌,一个就是接下来的人脸检测了。
在这里插入图片描述
5)、在函数中写入以下内容
我们通过在字典中截取到 access_token ,写入我们的访问令牌中,最后在终端中展示出来

def get_accesstoken(self):
    # host对象是字符串对象存储是授权的服务地址---获取accesstoken的地址
    host = 'https://aip.baidubce.com/oauth/2.0/token?grant_type=client_credentials&client_id=【官网获取的AK】&client_secret=【官网获取的SK】'
    # 发送网络请求  requests网络库
    # 使用get函数发送网络请求,参数为网络请求的地址,执行时会产生返回结果,结果就是请求的结果
    response = requests.get(host)
    if response:
        data = response.json()
        self.access_token = data.get('access_token')
        print(self.access_token)

同样,这里的函数需要在__init__函数中关联

self.pushButton.clicked.connect(self.get_accesstoken)

6)、最后运行代码,点击token按钮,这时在终端中就会输出一串字符,这就是我们的访问令牌了
在这里插入图片描述

3、百度AI的人脸检测

在我们得到了我们想要的访问令牌之后,我们就需要向百度AI发出人脸检测的请求了,但是百度AI却不能直接检测我们的图片,而是首先得到图片的二进制,然后用Base64格式编码才行
所以,我们在代码中加入了选择图片路径的代码,可以实现自由的选择图片。得到图片后,得到它的二进制,然后将它转换为base64编码,然后通过百度的API接口进行检测,同时我们也在这里输出了一些检测结果的属性
同样在类中新建一个函数,代码如下:

 def get_face(self):
        # 获取一张图片(一帧画面)
        # getOpenFileName通过对话框的形式获取一张图片(.jpg)的路径
        path, ret = QFileDialog.getOpenFileName(self, "open picture", ".", "图片格式(*.jpg)")
        print(path)
        # 把图片转换成base64编码
        fp = open(path, 'rb')
        base64_image = base64.b64encode(fp.read())
        #print(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"  # 请求识别人脸的属性,各个属性在字符串中用','逗号隔开
                  }
        # 访问令牌
        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:
            print(response.json())
            data = response.json()
            if data['error_msg']=="SUCCESS":
                # 在data字典中,键为‘result’对应的值才是返回的检测结果
                face_num = data['result']['face_num']
                age = data['result']['face_list'][0]['age']
                beauty = data['result']['face_list'][0]['beauty']
                print(face_num)
                print(age)
                print(beauty)

之后,同样在__init__函数中进行关联

self.pushButton_2.clicked.connect(self.get_face)

最后运行程序
在运行之后,我们首先需要获取到访问令牌,也就是要先执行上一步的操作,否则会没有访问令牌从而无法调用百度AI
获取令牌之后,再点击 face_post ,会出现如下界面,这是选择图片的界面,通过选择一张图片进行人脸的检测
在这里插入图片描述
当我们选择好图片之后,点击打开确定,之后,就会调用百度AI对我们选择的图片进行人脸的检测了
最后的检测结果如下,红色下划线的第一行为获取的令牌,第二行为图片的地址,第三行为图片检测的结果,后面的为检测结果中的一些属性输出
在这里插入图片描述

OK,这一次的动态时间显示以及基于百度AI的图片人脸检测就到这里了…

  • 0
    点赞
  • 1
    评论
  • 4
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

©️2021 CSDN 皮肤主题: 深蓝海洋 设计师:CSDN官方博客 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值