face++获取人脸属性(python单机版)
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了face++获取人脸属性(python单机版)相关的知识,希望对你有一定的参考价值。
关于称之为单机版,主要是相对于调用摄像头实时识别而言。本篇主要py2下利用face++获取人脸属性,并按照一定数据格式保存下来。face++是刚注册的,只能用一个使用的key,并且有QPS限制(这个嘛,免费的哪个没有),还有就是一帧画面只能识别最大的5张脸。能获取较为丰富的表情数据这点开阔以。。。
# -*- coding: utf-8 -*-
import urllib2
import json
import time
##################################################
#协议url
http_url=‘https://api-cn.faceplusplus.com/facepp/v3/detect‘
#公钥
key = "你自己的key"
#密钥
secret = "你自己的secret"
#返回值,你所需要的属性
return_attributes = ‘gender,age,emotion,glass,headpose,beauty‘
#图片地址
filepath = r"D:\workspaces\timg8.jpg"
参数协议分隔标示
boundary = ‘----------%s‘ % hex(int(time.time() * 1000))
###################################################
#制作协议包
data = []
data.append(‘--%s‘ % boundary)
data.append(‘Content-Disposition: form-data; name="%s"\r\n‘ % ‘api_key‘)
data.append(key)
data.append(‘--%s‘ % boundary)
data.append(‘Content-Disposition: form-data; name="%s"\r\n‘ % ‘api_secret‘)
data.append(secret)
data.append(‘--%s‘ % boundary)
data.append(‘Content-Disposition: form-data; name="%s"\r\n‘ % ‘return_attributes‘)
data.append(return_attributes)
data.append(‘--%s‘ % boundary)
fr=open(filepath,‘rb‘)
data.append(‘Content-Disposition: form-data; name="%s"; filename=" "‘ % ‘image_file‘)
data.append(‘Content-Type: %s\r\n‘ % ‘application/octet-stream‘)
data.append(fr.read())
fr.close()
data.append(‘--%s--\r\n‘ % boundary)
###########################################################
#发送POST请求
http_body=‘\r\n‘.join(data)
req=urllib2.Request(http_url)
req.add_header(‘Content-Type‘, ‘multipart/form-data; boundary=%s‘ % boundary)
req.add_data(http_body)
##########################################################
try:
#req.add_header(‘Referer‘,‘http://remotserver.com/‘)
#post data to server
#获得结果
resp = urllib2.urlopen(req, timeout=5)
#打印结果
qrcont=resp.read()
print qrcont
#下面2句返回调用时出现的异常
except urllib2.HTTPError as e:
print e.read()
json_resp = json.loads(qrcont)
num = len(json_resp[‘faces‘]) #人脸个数
face_s = json_resp[‘faces‘]
face_datas = [[]]*num
for i in range(0,num):
tempface = face_s[i]
data2=tempface[‘attributes‘]
gender = data2[‘gender‘].values()[0]
age = data2[‘age‘].values()[0]
glass = data2[‘glass‘].values()[0]
headpose = 1 if data2[‘headpose‘][‘pitch_angle‘] > 0 else 0
emotion = data2[‘emotion‘]
emotion =max(emotion, key=emotion.get)
face_datas[i] = [gender,age,glass,headpose,emotion]
print face_datas
#face = {‘gender‘:gender,‘age‘:age,‘glass‘:glass,‘headpose‘:headpose,‘emotion‘:emotion}
参考文献:
以上是关于face++获取人脸属性(python单机版)的主要内容,如果未能解决你的问题,请参考以下文章
[深度学习] Python人脸识别库face_recognition使用教程