• 好好学习,天天向上~
  • 欢迎欢迎~

python实战项目,人脸检测,让电脑对你的颜值打分,调用百度人工智能API实现

python lcc 539℃ 0评论

人脸检测


前言


前面我们介绍了利用深度学习实现 语音合成菜品识别,以及 人脸识别。这几个应用都属于比较成熟的人工智能应用了,再发展这些应用的过程中,其实很多功能都能剥离出来,比如在实现 人脸识别时,我们首先要对人脸进行检测,在检测时,发现可以延伸出很多有趣的东西,本节就介绍 人脸检测,可以让电脑对你的颜值打分哦。我们同样是调用百度的 API 实现。

首先看看 API 介绍


能力介绍

  • 人脸检测:检测图片中的人脸并标记出位置信息;
  • 人脸关键点:展示人脸的核心关键点信息,及72个关键点信息。
  • 人脸属性值:展示人脸属性信息,如年龄、性别等。
  • 人脸质量信息:返回人脸各部分的遮挡、光照、模糊、完整度、置信度等信息。

质量检测

如果需要判断一张图片中的人脸,是否符合后续识别或者对比的条件,可以使用此接口,在请求时在face_fields参数中请求qualities。基于返回结果qualities中,以下字段及对应阈值,进行质量检测的判断,以保证人脸质量符合后续业务操作要求。

调用方式

向API服务地址使用POST发送请求,必须在URL中带上参数access_tokenaccess_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

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

3. 测试效果

我们首先在代码所在目录新建文件夹 pic,在里面放入几张图片,检测之,结果如下:

电脑认为凤姐 27 岁,颜值给了 43.16 分,再来看看范冰冰:

电脑认为范冰冰 25岁,颜值打了 92.41 分,挺高的,最后,来看看一张照片多人的情况:

可以看出效果还是不错的,一张图里有多个人也可以识别出来。
点赞 (0)分享 (0)
(9)个小伙伴在吐槽
  1. 这个有意思
    小虎哥2018-06-07 06:49 回复
  2. 您好,我想请教下,我用的是PyCharm平台。代码也是跟您这个一样的,但是一直提示模块导入错误,您能帮忙看下嘛?谢谢,错误如下。 D:\Python\python.exe D:/facedetect/face.py Traceback (most recent call last): File "D:/facedetect/face.py", line 7, in from token import GetToken ImportError: cannot import name GetToken
    小羊笨鱼2018-07-04 10:37 回复
    • token 是自己写的文件,你新建一个 token.py 文件,里面放入 "1. 获取 token" 部分的代码,跟你的 face.py 放到一起,就可以了。
      向日葵智能2018-07-04 13:36 回复
  3. 好厉害
    sunny2018-07-17 16:58 回复
  4. File "C:/Users/Administrator.SKY-20170118BAZ/Desktop/人脸识别2/face_dete/recg.py", line 12, in from token import GetToken ImportError: cannot import name 'GetToken' runfile('C:/Users/Administrator.SKY-20170118BAZ/Desktop/人脸识别2/face_dete/token.py', wdir='C:/Users/Administrator.SKY-20170118BAZ/Desktop/人脸识别2/face_dete') 这个要怎么解 也是导入错误
    漪懿2018-08-01 10:30 回复
    • token 是自己写的文件,你新建一个 token.py 文件,里面放入 “1. 获取 token” 部分的代码,跟你的 face.py 放到一起,就可以了。
      向日葵智能2018-08-01 11:06 回复
  5. File "C:/Users/Administrator.SKY-20170118BAZ/Desktop/人脸识别2/face_dete/recg.py", line 12, in from token import GetToken ImportError: cannot import name 'GetToken' runfile('C:/Users/Administrator.SKY-20170118BAZ/Desktop/人脸识别2/face_dete/token.py', wdir='C:/Users/Administrator.SKY-20170118BAZ/Desktop/人脸识别2/face_dete') 这个要怎么解 也是导入错误
    漪懿2018-08-01 10:30 回复
    • token 是自己写的文件,你新建一个 token.py 文件,里面放入 “1. 获取 token” 部分的代码,跟你的 face.py 放到一起,就可以了。
      向日葵智能2018-08-01 11:06 回复
发表我的评论
取消评论
表情     3 + 5 = ? (必填)