1. はじめに
最初のいくつかの小さなアプリケーションは弱く、反応も鈍く、誰もが興味を持っていないようです。今日は、WeChat パブリック プラットフォームでの顔認識です。
私は少し前に、四川大学の准教授でコンピューターサイエンス学部の責任者である魏暁勇氏が、「顔をスワイプ」するために画像ベースの授業出席システムを開発したというレポートを見ました。授業中の点呼中。下の写真をご覧ください
点呼をとるときは、教室内の生徒の写真を複数の角度から撮影し、その写真をサーバーにアップロードするだけで、自動的に全体に合成されます。すると、システムは写真内の生徒のアバターに自動的に番号を付けて識別し、最後にその隣に生徒の個人情報が表示されます:「It'sme」と「notme」。このようにして、誰が授業に参加していて、誰が授業をサボっているのかをすぐに知ることができます
さらに驚くべきことは、この機能の統計的有意性です。たとえば、生徒の対人関係や性格上の興味さえも分析できます。授業中の生徒の好みに基づいて、どこに座るのか、誰の隣に座りたいのか、一定期間後にそれを分析すると、誰が誰に恋をしているのかがわかります。そして別れた後は誰と誰ですか。いつも隅っこに一人で座るのが好きな人(自閉症)、ある少年とある少年は半年も毎回一緒に座っていて(ゲイの友達???)、このことが人々に無限の想像力の余地を与えてくれているとすぐに感じます。大きい。 。 。 。 。 。
本題に戻りましょう:
まず、顔認識とは何かを見て、百度百科事典の定義を見てみましょう: 顔認識とは、特に顔の視覚的特徴の分析と比較を使用するコンピューター テクノロジーを指します。本人確認のための情報。顔認識はコンピュータ技術研究の人気分野であり、顔の明暗を検出し、動的露出補正を自動的に調整し、顔を追跡して検出し、画像の倍率を自動的に調整することができ、生体認証技術に属します。個々の生物を区別するための生物学的識別ツール。一般に人の生物学的特徴を指します。
顔認識の技術プロセス (Baidu Encyclopedia より)
は、一般的に 3 つのステップに分かれています:
(1) まず、顔画像ファイルを作成します。すなわち、カメラを使用して部隊隊員の顔の顔画像ファイルを収集するか、写真を撮って顔画像ファイルを形成し、これらの顔画像ファイルを顔紋章(Faceprint)コードに生成して保存する。
(2) 現在の人間の顔画像を取得します。すなわち、カメラを使用して、現在出入りする人物の顔画像をキャプチャするか、写真を撮って入力し、現在の顔画像ファイルから顔パターンコードを生成する。
(3) 現在の顔パターン コードをアーカイブ インベントリと比較します。つまり、現在の顔画像の顔パターン コードが取得され、アーカイブ インベントリ内の顔パターン コードと比較されます。上述の「顔パターン符号化」手法は、人間の顔の本質的な特徴と始まりに基づいて機能します。この顔パターンのエンコードは、光、肌の色、ひげ、髪型、眼鏡、表情、姿勢の変化に対して堅牢であり、何百万人もの個人の中から個人を正確に識別できます。顔認識プロセスは、通常の画像処理装置を使用して、自動的かつ継続的にリアルタイムで完了できます。
まず、ユーザーが送信した写真を取得する必要があります。ユーザーは次のとおりです:
画像メッセージの形式は次のとおりです:
<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 メッセージ受信者の WeChat ID、通常はパブリック プラットフォーム アカウントの WeChat ID
FromUserName メッセージ受信者の WeChat IDメッセージ送信者CreateTime メッセージ作成時刻
MsgType メッセージタイプ; 画像メッセージ
PicUrl 画像リンクアドレス
MsgId メッセージ ID 番号
2. インターフェース
位置と対応する顔を検出します指定された写真 (画像) 内のすべての顔の顔属性インターフェイスのアドレスは次のとおりです:
http://apicn.faceplusplus.com/v2/detection/detectです | 必須?意味 | |
必須 | アプリのFace++ APIキー | |
必須 | APPのFace++ APIシークレット | |
必須 | 検出する画像の URL、または POST メソッドでアップロードされたバイナリ データは、元の画像サイズが 3M 未満である必要があります | 。 |
オプション | 检测模式可以是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%
和图片比较一下,还是比较一致的
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); } }
在微信中再将结果整理成文本消息就可以了。
下面是实际使用结果:
漂亮/帅气指数鉴定技术
近亲及亲子鉴定技术
男人味/女人味鉴定技术
更多WeChatパブリックプラットフォームメッセージングインターフェースは画像認識と顔認識を開発相关文章请关注PHP中文网!