微信公众平台消息接口开发图片识别之人脸识别
一、前言 前几个小应用似乎不给力,反应不冷不热,似乎大家不感兴趣,今天给大家推出一个亮眼一点的:微信公众平台上的人脸识别。 前段时间看到网上有个报道 四川大学计算机科学系主任、副教授 魏骁勇 开发了 基于图像的课堂考勤系统, 上课点名用人脸识别来‘刷脸’,看下图 在点名时,只需多角度对教室内的学生分区域拍照,然后将照片上传到服务器,自动拼接成一张整图,系统再对照片里的学生头像自动编号和识别,最后出现学生的个人信息,旁边则有“It’sme(是我)”和“notme(不是我)”两个选项。这样马上就能知道谁在上课、谁在逃课了 更神的是,这东西在统计学上的意义:它甚至可以分析出学生的人际关系甚至性格兴趣,比如它根据学生在课堂上喜欢坐在哪些位置,喜欢坐在谁的旁边,得出原始数据,经过一段时间之后,再来分析,就可以谁和谁在谈恋爱,谁和谁分手后又和谁在一起了。谁老是喜欢自己一个人独自坐在角落(自闭症),某个男生和某个男生半年下来每次都坐在一起(基友???),瞬间感觉这玩意给人的想象空间无限大。。。。。。
下面开始言归正传了: 首先看一下什么是人脸识别,看一下百度百科的定义:人脸识别特指利用分析比较人脸视觉特征信息进行身份鉴别的计算机技术。人脸识别是一项热门的计算机技术研究领域,可以将人脸明暗侦测,自动调整动态曝光补偿,人脸追踪侦测,自动调整影像放大;它属于生物特征识别技术,是对生物体(一般特指人)本身的生物特征来区分生物体个体。 人脸识别的技术过程(来自百度百科) 一般分三步:
二、在微信公众平台上做人脸识别1. 图片获取首先要获得用户发过来的图片,微信公众平台支持接收图片, 用户发送的一个图片如下: 其图片消息的格式如下: <xml> <ToUserName><![CDATA[gh_13d1a3a7x46a]]></ToUserName> <FromUserName><![CDATA[oKaHDjt60aAyPvQmUX3ddyix_zG8]]></FromUserName> <CreateTime>1357543196</CreateTime> <MsgType><![CDATA[image]]></MsgType> <PicUrl><![CDATA[http://www.php.cn/]]></PicUrl> <MsgId>5830603629728080261</MsgId></xml> ToUserName 消息接收方微信号,一般为公众平台账号微信号
2. 接口Face++提供人脸识别接口, 检测给定图片(Image)中的所有人脸(Face)的位置和相应的面部属性接口地址如下:
{ "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,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 } 调用方式如下: <?PHP/*** Face++ PHP SDK* author: Tianye* since: 2013-12-11**/class Facepp{ ###################################################### ### If you choose Amazon(US) server,please use the ### ### 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中文网! |
- 上一篇:微信JS
- 下一篇:微信支付开发H5支付