前序
这篇文章主要介绍利用 pyqt5 和 百度人脸识别 api 搭建一个具有人脸识别、头像裁剪等多个功能集一体的小工具,我们先看一下程序的最终效果
程序的基本使用步骤:
1,加载本地图片并在界面上实现预览;
2,点击 convert 后台调用百度 api 实现人脸识别并进行区域分割,同时返回关于人物颜值、性别、脸型等信息;
3,如果需要保存裁剪之后的图像,点击 Save as 保存到本地对应位置;
整个程序的实现分为三个部分:
1,获取百度 api 实现人脸识别接口并进行调用;
2,利用Qt designer 进行界面设计,编写代码实现一些功能函数;
3,把1功能和2的界面进行信号槽链接;
2,程序开发详细过程
2.1,获取百度人脸识别 API 接口并进行调用
对于人脸识别 API 接口 ,这里只是以百度为例,百度人脸识别 API 的地址 :https://ai.baidu.com/tech/face;利用这个接口,可以很方便地返回我们需要的信息
百度 API 构造基本流程:创建应用 -> 获取 API Keys 和 Secret Keys -> 得到 token -> 利用 token 拼API ;
首先需要完成登录(账号百度云即可),登录之后会进入下面这个界面,左侧栏列出了 人脸识别 专区提供的一些服务,有技术文档(关于怎么获取接口,以及怎样使用接口)、监控报表(调用接口的基本情况)…
如果第一次使用需创建一个应用,用于获取 API key 和 Secret key
根据官网文档,拿到 API key 和 Secret Key 之后,拼接成一个链接,利用 requests 进行访问得到 token ,(注: token 的有效时间为30天,30天之后如果继续使用的话,需要更换)
import requests # client_id 为官网获取的AK, client_secret 为官网获取的SK host = 'https://aip.baidubce.com/oauth/2.0/token?grant_type=client_credentials&client_id=【官网获取的AK】&client_secret=【官网获取的SK】' response = requests.get(host) if response: print(response.json()['access_token'])
token 拿到之后,与下面链接拼接在一起就得到了API 接口:
https://aip.baidubce.com/rest/2.0/face/v1/merge?access_token=[获取得到的Token]
API 的使用方法如下:
import requests ''' 人脸检测与属性分析 ''' request_url = "https://aip.baidubce.com/rest/2.0/face/v3/detect" params = "{\"image\":\"027d8308a2ec665acb1bdf63e513bcb9\",\"image_type\":\"FACE_TOKEN\",\"face_field\":\"faceshape,facetype\"}" access_token = '[调用鉴权接口获取的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: print (response.json())
其中 headers 不用改变,access_token 就是前面获取得到的 token ;重点是 params 参数,里面需要写入三个参数: image,image_type,image_filed:
image 的 BASE64 编码值指的时本地文件读取, 可以利用 base64.b64enconde 函数进行获取,params 也可以写成键值对字典形式:
params = { 'image': str(base64.b64encode(open(file_name, 'rb').read()), 'utf-8'),#file_name指的时图片的本地路径; 'image_type': 'BASE64', 'face_field': 'age,beauty,expression,face_shape,location,gender' }