原帖:向日葵智能
<https://www.xrkzn.cn/python-projects/python-project-human-face-score/>
人脸检测
前言
前面我们介绍了利用深度学习实现 语音合成
<https://www.xrkzn.cn/python-projects/python-project-speech-synthesis/> , 菜品识别
<https://www.xrkzn.cn/python-projects/python-project-let-computer-recognize-dishes-2/>
,以及 人脸识别
<https://www.xrkzn.cn/python-projects/python-project-face-recognization/>
。这几个应用都属于比较成熟的人工智能应用了,再发展这些应用的过程中,其实很多功能都能剥离出来,比如在实现 人脸识别
时,我们首先要对人脸进行检测,在检测时,发现可以延伸出很多有趣的东西,本节就介绍 人脸检测,可以让电脑对你的颜值打分哦。我们同样是调用百度的 API 实现。
首先看看 API 介绍
能力介绍
* 人脸检测:检测图片中的人脸并标记出位置信息;
* 人脸关键点:展示人脸的核心关键点信息,及72个关键点信息。
* 人脸属性值:展示人脸属性信息,如年龄、性别等。
* 人脸质量信息:返回人脸各部分的遮挡、光照、模糊、完整度、置信度等信息。
质量检测
如果需要判断一张图片中的人脸,是否符合后续识别或者对比的条件,可以使用此接口,在请求时在face_fields参数中请求qualities。基于返回结果qualities中,以下字段及对应阈值,进行质量检测的判断,以保证人脸质量符合后续业务操作要求。
调用方式
向API服务地址使用POST发送请求,必须在URL中带上参数access_token,access_token的获取方法与前面几节类似。
注意事项:
* 请求体格式化:Content-Type为application/x-www-form-urlencoded,通过urlencode格式化请求体。
*
Base64编码:请求的图片需经过Base64编码,图片的base64编码指将图片数据编码成一串字符串,使用该字符串代替图像地址。您可以首先得到图片的二进制,然后用Base64格式编码即可。需要注意的是,图片的base64编码是不包含图片头的,如data:image/jpg;base64,
* 图片格式:现支持PNG、JPG、JPEG、BMP,不支持GIF图片
请求URL:
https://aip.baidubce.com/rest/2.0/face/v2/detect
URL参数:
* access_token
* Header:
Content-Type application/x-www-form-urlencoded
Body中放置请求参数,参数详情如下:
请求参数:
python 实战代码
分两步走
1. 获取 token
token 的获取都是类似的,就是带上 AK 和 SK 请求服务器 API URL。
# encoding:utf-8 import urllib, urllib2, sys import ssl, json AK =
"fGTxxxxxxxxxxxxxxxxx68c" SK = "vKxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxq2u" host =
'https://aip.baidubce.com/oauth/2.0/token?grant_type=client_credentials'\
'&client_id=%s'\ '&client_secret=%s' % (AK, SK) def GetToken(): request =
urllib2.Request(host) request.add_header('Content-Type', 'application/json;
charset=UTF-8') response = urllib2.urlopen(request) content = response.read() if
(content): js = json.loads(content) # return js['refresh_token'] return js[
'access_token'] return None PythonCopy <>
2. 人脸检测
直接上代码:
# encoding:utf-8 import base64 import urllib import urllib2, json from token
import GetToken ''' 人脸探测 ''' url =
"https://aip.baidubce.com/rest/2.0/face/v1/detect" def FaceDetect(pic, token):
# 二进制方式打开图片文件 f = open(pic, 'rb') img = base64.b64encode(f.read()) params = {
"face_fields":
"age,beauty,expression,faceshape,gender,glasses,landmark,race,qualities","image"
:img,"max_face_num":5} params = urllib.urlencode(params) request_url = url +
"?access_token=" + token request = urllib2.Request(url=request_url, data=params)
request.add_header('Content-Type', 'application/x-www-form-urlencoded')
response= urllib2.urlopen(request) content = response.read() if content: js =
json.loads(content) for item in js['result']: if 0 == cmp('female', item[
'gender']): sx = u'小姐姐' else: sx = u'小哥哥' print u'%d岁的%s, 颜值 %2.2f 分' % (item[
'age'], sx, item['beauty']) # print js['result'][0] if __name__ == "__main__":
FaceDetect("pic/1.jpg", GetToken()) # 图片名:pic 文件夹里的 1.jpg PythonCopy <>
3. 测试效果
我们首先在代码所在目录新建文件夹 pic,在里面放入几张图片,检测之,结果如下:
电脑认为凤姐 27 岁,颜值给了 43.16 分,再来看看范冰冰:
电脑认为范冰冰 25岁,颜值打了 92.41 分,挺高的,最后,来看看一张照片多人的情况:
可以看出效果还是不错的,一张图里有多个人也可以识别出来。
转载自:https://www.xrkzn.cn/python-projects/python-project-human-face-score/
<https://www.xrkzn.cn/python-projects/python-project-human-face-score/>
热门工具 换一换