作者:大狗nonodq_284 | 来源:互联网 | 2017-05-11 01:14
一、前言
前几个小应用似乎不给力,反应不冷不热,似乎大家不感兴趣,今天给大家推出一个亮眼一点的:微信公众平台上的人脸识别。
前段时间看到网上有个报道 四川大学计算机科学系主任、副教授 魏骁勇 开发了 基于图像的课堂考勤系统, 上课点名用人脸识别来‘刷脸’,看下图
1357543196
5830603629728080261
ToUserName 消息接收方微信号,一般为公众平台账号微信号
FromUserName 消息发送方微信号
CreateTime 消息创建时间
MsgType 消息类型;图片消息为image
PicUrl 图片链接地址
MsgId 消息ID号
2. 接口
Face++提供人脸识别接口,
检测给定图片(Image)中的所有人脸(Face)的位置和相应的面部属性接口地址如下:
http://apicn.faceplusplus.com/v2/detection/detect
参数 | 是否必须 | 含义 |
api_key | 必须 | App的Face++ API Key |
api_secret | 必须 | APP的Face++ API Secret |
url 或 img[POST] | 必须 | 待检测图片的URL 或者 通过POST方法上传的二进制数据,原始图片大小需要小于3M |
mode | 可选 | 检测模式可以是normal(默认) 或者 oneface 。在oneface模式中,检测器仅找出图片中最大的一张脸。 |
attribute | 可选 | 可以是none或者由逗号分割的属性列表。默认为gender, age, race, smiling。目前支持的属性包括:gender, age, race, smiling, glass, pose |
tag | 可选 | 可以为图片中检测出的每一张Face指定一个不包含^@,&=*'"等非法字符且不超过255字节的字符串作为tag,tag信息可以通过 /info/get_face 查询 |
async | 可选 | 如果置为true,该API将会以异步方式被调用;也就是立即返回一个session id,稍后可通过/info/get_session查询结果。默认值为false。 |
返回如下
{
"face": [
{
"attribute": {
"age": {
"range": 5,
"value": 17
},
"gender": {
"confidence": 99.9781,
"value": "Female"
},
"glass": {
"confidence": 99.9815,
"value": "None"
},
"pose": {
"pitch_angle": {
"value": 0.000019753399999999996
},
"roll_angle": {
"value": 1.75177
},
"yaw_angle": {
"value": 4
}
},
"race": {
"confidence": 99.471,
"value": "Asian"
},
"smiling": {
"value": 87.1365
}
},
"face_id": "c772b4b66c00d46b15344eff74b56e48"
}
],
"img_height": 293,
"img_id": "3005132383841edd08c9b500fb1fe2c4",
"img_width": 440,
"session_id": "4e64c73fec19442cbefde3cf9bd6b53d",
"url": ""
}
参数:
gender | object | 包含性别分析结果,value的值为Male/Female, confidence表示置信度 |
age | object | 包含年龄分析结果,value的值为一个非负整数表示估计的年龄, range表示估计年龄的正负区间 |
race | object | 包含人种分析结果,value的值为Asian/White/Black, confidence表示置信度 |
smiling | object | 包含微笑程度分析结果,value的值为0-100的实数,越大表示微笑程度越高 |
实现方法
取结果参数中的gender,age,race,smiling等参数 ,如
"attribute": {
"age": {
"range": 5,
"value": 17
},
"gender": {
"confidence": 99.9781,
"value": "Female"
},
"glass": {
"confidence": 99.9815,
"value": "None"
},
"pose": {
"pitch_angle": {
"value": 0.000019753399999999996
},
"roll_angle": {
"value": 1.75177
},
"yaw_angle": {
"value": 4
}
},
"race": {
"confidence": 99.471,
"value": "Asian"
},
"smiling": {
"value": 87.1365
}
上述结果中,
年龄age为17,误差在5岁
性别为female,表示女,置信度为99%
种族为亚洲Asian,
微笑度 87%
和图片比较一下,还是比较一致的
3. 程序实现
SDK如下:
"attribute": {
"age": {
"range": 5,
"value": 17
},
"gender": {
"confidence": 99.9781,
"value": "Female"
},
"glass": {
"confidence": 99.9815,
"value": "None"
},
"pose": {
"pitch_angle": {
"value": 0.000019753399999999996
},
"roll_angle": {
"value": 1.75177
},
"yaw_angle": {
"value": 4
}
},
"race": {
"confidence": 99.471,
"value": "Asian"
},
"smiling": {
"value": 87.1365
}
调用方式如下:
http://apius.faceplusplus.com/v2 ###
### or ###
### https://apius.faceplusplus.com/v2 ###
######################################################
var $server = 'http://apicn.faceplusplus.com/v2';
#var $server = 'https://apicn.faceplusplus.com/v2';
#var $server = 'http://apius.faceplusplus.com/v2';
#var $server = 'https://apius.faceplusplus.com/v2';
#############################################
### set your api key and api secret here. ###
#############################################
var $api_key = '{your API KEY}';
var $api_secret = '{your API SECRET}';
public function __construct($api_key=NULL, $api_secret=NULL, $server=NULL){
if($api_key){
$this->api_key = $api_key;
}
if($api_secret){
$this->api_secret = $api_secret;
}
if($server){
$this->server = $server;
}
}
/**
* @param $method : The Face++ API
* @param $params : Request Parameters
* @return : Array {'http_code':'Http Status Code', 'request_url':'Http Request URL','body':' JSON Response'}
**/
public function execute($method,$params){
if(empty($params)){
$params=array();
}
$params['api_key'] = $this->api_key;
$params['api_secret'] = $this->api_secret;
return $this->request("{$this->server}{$method}",$params);
}
private function request($request_url , $request_body){
$useragent = 'Faceplusplus PHP SDK/1.0';
$curl_handle = curl_init();
curl_setopt($curl_handle, CURLOPT_URL, $request_url);
curl_setopt($curl_handle, CURLOPT_FILETIME, TRUE);
curl_setopt($curl_handle, CURLOPT_FRESH_CONNECT, FALSE);
curl_setopt($curl_handle, CURLOPT_CLOSEPOLICY, CURLCLOSEPOLICY_LEAST_RECENTLY_USED);
curl_setopt($curl_handle, CURLOPT_MAXREDIRS, 5);
curl_setopt($curl_handle, CURLOPT_HEADER, FALSE);
curl_setopt($curl_handle, CURLOPT_RETURNTRANSFER, TRUE);
curl_setopt($curl_handle, CURLOPT_TIMEOUT, 5184000);
curl_setopt($curl_handle, CURLOPT_CONNECTTIMEOUT, 120);
curl_setopt($curl_handle, CURLOPT_NOSIGNAL, TRUE);
curl_setopt($curl_handle, CURLOPT_REFERER, $request_url);
curl_setopt($curl_handle, CURLOPT_USERAGENT, $useragent);
if (extension_loaded('zlib')){
curl_setopt($curl_handle, CURLOPT_ENCODING, '');
}
curl_setopt($curl_handle, CURLOPT_POST, TRUE);
if(array_key_exists('img',$request_body)){
$request_body['img'] = '@'.$request_body['img'];
}else{
$request_body=http_build_query($request_body);
}
curl_setopt($curl_handle, CURLOPT_POSTFIELDS, $request_body);
$response_text = curl_exec($curl_handle);
$reponse_header = curl_getinfo($curl_handle);
curl_close($curl_handle);
return array('http_code'=>$reponse_header['http_code'],'request_url'=>$request_url,'body'=>$response_text);
}
}
在微信中再将结果整理成文本消息就可以了。
4. 效果展示
下面是实际使用结果:
漂亮/帅气指数鉴定技术
更多微信公众平台消息接口开发图片识别之人脸识别相关文章请关注PHP中文网!