1. 程式人生 > >圖片識別之人臉識別API

圖片識別之人臉識別API

一、微信圖片獲取

首先要獲得使用者發過來的圖片,微信公眾平臺支援接收圖片,一條圖片訊息的格式如下:

<xml>    <ToUserName><![CDATA[gh_13d1a3a7x46a]]></ToUserName>    <FromUserName><![CDATA[oKaHDjt60aAyPvQmUX3ddyix_zG8]]></FromUserName>    <CreateTime>1357543196</CreateTime>    <MsgType><![CDATA[
image]]></MsgType> <PicUrl><![CDATA[http://mmsns.qpic.cn/mmsns/L4qjYtOibummV7J7pbpWKZTiaRoeicicD151CGsQ5AW761Kmn5Hk83x5lQ/0]]></PicUrl> <MsgId>5830603629728080261</MsgId></xml>

XML格式講解

ToUserName 訊息接收方微訊號,一般為公眾平臺賬號微訊號FromUserName 訊息傳送方微訊號CreateTime 訊息建立時間MsgType 訊息型別;圖片訊息為imagePicUrl 圖片連結地址MsgId 訊息ID號

這裡PicUrl就是圖片URL

二、傳送圖片到介面

在微信介面中程式碼中獲取圖片方法如下:接收訊息型別中分離出圖片型別

    public function responseMsg()    {        //get post data, May be due to the different environments        $postStr = $GLOBALS["HTTP_RAW_POST_DATA"];        logger("R ".$postStr);        //extract post data        if (!empty($postStr)){            
$postObj = simplexml_load_string($postStr, 'SimpleXMLElement', LIBXML_NOCDATA); $RX_TYPE = trim($postObj->MsgType); switch ($RX_TYPE) { case "image": $resultStr = $this->receiveImage($postObj); break; } logger("T ".$resultStr); echo $resultStr; }else { echo ""; exit; } }

 而識別介面的呼叫方法如下

http://api2.sinaapp.com/recognize/picture/?appkey=0020120430&appsecert=fa6095e123cd28fd&reqtype=text&keyword=http://imgsrc.baidu.com/baike/pic/item/32fa828ba61ea8d3a7191949970a304e251f5847.jpg

 如果你喜歡整潔一點,可以使用http_build_query生成請求url,以下供參考

<?php$doucube_params = array('apihost'=>"http://api2.sinaapp.com/",'callmethod'=>"recognize/picture/?",'appkey'=>$appkey,'appsecert'=>$appsecert,'reqtype'=>$reqtype,'keyword'=>$picurl;echo http_build_query($doucube_params);?> 

三、獲得識別結果

上面的程式執行後獲得的識別結果如下:

這是識別成功時的結果

{    "errcode": 0,    "msgtype": "text",    "text": {        "content": "察顏~觀色~面相~摸骨~ 嘿!有了:/n年齡:約17歲(碧玉年華)/n漂亮指數:68(天生麗質/:circle)"    }}

這是失敗時的結果,傳送非照片格式檔案

{    "errcode": 1,    "msgtype": "text",    "text": {        "content": "八戒你也真調皮呀!我叫你不要亂扔東西,亂扔東西是不對的。"    }}

四、程式中實現

傳送圖片並且獲得返回結果的函式如下:

    private function receiveImage($object)    {        $apicallurl = urlencode("http://api2.sinaapp.com/recognize/picture/?appkey=0251812239&appsecert=fa6095e123cd28fd&reqtype=text&keyword=".$object->PicUrl);        $pictureJsonInfo = file_get_contents($apicallurl);        $pictureInfo = json_decode($pictureJsonInfo, true);        $contentStr = $pictureInfo['text']['content'];        $resultStr = $this->transmitText($object, $contentStr);        return $resultStr;    }

而transmitText就是封裝微信文字訊息的函式,與官方樣例中雷同


五、效果演示

這是要傳送的圖片

這是識別後的結果