今天跟大家分享利用树莓派(古德微平台)通过调用百度AI的人脸识别来测试颜值的案例。
应用场景:拍下一张照片,识别其颜值,通过Ws2812的灯珠数来表示颜值的高低。
颜值识别效果演示
一、实验器材:
树莓派,CSI摄像头(USB亦可),按键1个,Ws2812B(用于显示颜值的数值,案例中使用60位的灯环,采用12,24,60位均可),百度AI人脸识别应用
二、编程软件:古德微平台
三、过程实现
颜值识别的导图与流程图STEP1.百度账号注册(略)
STEP2.百度AI应用的创建
百度AI的网址为:https://ai.baidu.com,打开网页之后,点击右上角的“控制台”进行登录百度AI的应用。
百度AI首页百度智能云登录页面,输入您的百度账号进行登录(百度网盘,百度贴吧账号可登录),若无百度账号,可以注册一个。
登录百度AI登录后,打开“人脸识别”的服务,位置如下:“产品服务”→“人工智能”→“人脸识别”。
人脸检测 创建人脸检测打开页面之后,我们先来创建一个应用,填写好“应用名称”(必填)、“应用类型”(必选)、“接口选择”(默认)、“应用描述”(必填)。具体填写可以参照下图。完成后点击“立即创建”,完成人脸识别应用的创建。
创建应用的填写 创建完毕创建完成之后,点击“返回应用创建列表”,可以查看我们刚刚创建好的人脸识别的应用。
应用列表等下我们要用到的APIKey和SecretKey(默认是隐藏的,点击“显示”即可查看),现在我们点击“人脸识别应用”,并查看应用详情。
查看应用详情 展开应用详情点击“展开”,查看API列表中人脸识别的请求地址,查看对应的版本号,我这里显示的是v3版本。(有部分可能是v2的,v2和v3的调用地址和请求的方法有所不同)
image.pngSTEP3.数据准备
在这里,我们先不急着用摄像头来获取数据,只需要在网上搜索一张美女或者帅哥的大头照来作为要检测的图片即可。
初始化几个变量将我们刚刚申请的百度人脸检测应用中的APIKey和SecretKey的数值,存到变量中;
Request_URL为请求的网址:https://aip.baidubce.com/rest/2.0/face/v3/detect
把备用的大头照(test.jpeg)存放在树莓派的/home/pi/imageTemp/,
STEP4.程序编写
1. 百度AI的获取过程
我们通过百度Ai人脸检测的帮助文档,查看Python的范例,大概可以了解,人脸检测应用调用方法和过程。
# encoding:utf-8
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())
参考流程图
(1)accessToken的获取
参照技术文档,(https://ai.baidu.com/ai-doc/REFERENCE/Ck3dwjhhu)
Python的示例代码:
# encoding:utf-8
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())
返回的数据为Json文本,从中提取出access_Token,百度的数据返回样例如下:
{
"refresh_token": "25.b55fe1d287227ca97aab219bb249b8ab.315360000.1798284651.282335-8574074",
"expires_in": 2592000,
"scope": "public wise_adapt",
"session_key": "9mzdDZXu3dENdFZQurfg0Vz8slgSgvvOAUebNFzyzcpQ5EnbxbF+hfG9DQkpUVQdh4p6HbQcAiz5RmuBAja1JJGgIdJI",
"access_token": "24.6c5e1ff107f0e8bcef8c46d3424a0e78.2592000.1485516651.282335-8574074",
"session_secret": "dfac94a3489fe9fca7c3221cbf7525ff"
}
根据百度AI提供样例完成古德微获取AccessToken的代码块。
AccessToken获取的代码块后来发现在古德微平台上的“大数据”→“爬虫”当中直接有获取AccessToken的代码块。O_O
平台中已有的AccessToken代码块拖进来,直接复制即可获取AccessToken……
使用平台的代码块,并换成自己的AK和SK(2)带参请求数据
①请求网址:https://aip.baidubce.com/rest/2.0/face/v3/detect #此处是v3版本的地址
②请求参数:必选image,image_type(此处为BASE64),face_field(需要获取beauty颜值数据)。如下图所示:
请求参数参考百度样例代码,STEP4.1已给出,不再累述。
③解析Json文本,获取所需的“颜值”数值。同样参照百度AI给出的Json返回示例
{
"face_num": 1,
"face_list": [
{
"face_token": "35235asfas21421fakghktyfdgh68bio",
"location": {
"left": 117,
"top": 131,
"width": 172,
"height": 170,
"rotation": 4
},
"face_probability": 1,
"angle" :{
"yaw" : -0.34859421849251
"pitch" 1.9135693311691
"roll" :2.3033397197723
}
"landmark": [
{
"x": 161.74819946289,
"y": 163.30244445801
},
...
],
"landmark72": [
{
"x": 115.86531066895,
"y": 170.0546875
},
...
],
"age": 29.298097610474,
"beauty": 55.128883361816,
"expression": {
"type": "smile",
"probability" : 0.5543018579483
},
"gender": {
"type": "male",
"probability": 0.99979132413864
},
"glasses": {
"type": "sun",
"probability": 0.99999964237213
},
"race": {
"type": "yellow",
"probability": 0.99999976158142
},
"face_shape": {
"type": "triangle",
"probability": 0.5543018579483
}
"quality": {
"occlusion": {
"left_eye": 0,
"right_eye": 0,
"nose": 0,
"mouth": 0,
"left_cheek": 0.0064102564938366,
"right_cheek": 0.0057411273010075,
"chin": 0
},
"blur": 1.1886881756684e-10,
"illumination": 141,
"completeness": 1
}
}
]
}
根据参考案例,可以在古德微平台上写出对应的程序如下:
请求并返回颜值代码块STEP5.项目应用
在STEP4的基础上,我们基本上已经知道了如何利用百度AI来获取颜值的过程,接下来事情就变得简单了。
1.图像的获取
拍摄图片,上传并返回颜值PS:这里要注意的,摄像头在拍摄完成之后,一定关闭,以免下次再用的时候,会出现摄像头端口被占用的情况。
2.输出方式
如何显示我们的所得到的颜值?呈现的方式有很多种,在本案例中,采用了通过WS2812灯珠数目来表示颜值。此处采用了60位的灯环,注意处理好颜值与亮灯数的一个转换:颜值*灯珠数/100。
颜值以ws2812灯珠数呈现四、项目的扩展与改变
除此之外,还可以有一下的颜值呈现方式,供大家参考如下:
①制作颜值转盘,利用舵机转动指针来实现;
②通过语音的方式来播报颜值;
③若您有热敏打印机,则可以将测试者的颜值数据打印来;
④若有树莓派的3.5寸屏,可以直接在屏幕上显示颜值;
⑤为了不伤自尊,可以把颜值结果发到测试者的邮箱。
或许您有更好玩的颜值呈现方式,可以自行去实现哦!
网友评论