1. 程式人生 > >微信公眾平臺訊息介面開發(24)圖片識別之人臉識別API

微信公眾平臺訊息介面開發(24)圖片識別之人臉識別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 訊息型別;圖片訊息為image
PicUrl 圖片連結地址
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://www.doucube.com.img.800cdn.com/Public/Images/wangluodan.jpg

你可以直接提交微信圖片URL

http://api2.sinaapp.com/recognize/picture/?appkey=0020120430&appsecert=fa6095e123cd28fd&reqtype=text&keyword=http://mmsns.qpic.cn/mmsns/wFxOIHALicXicQnmicpXRRkp8URWC1QewPwgH2WdeHf8AYkaOUpdMUzYg/0

如果你喜歡整潔一點,可以使用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);

?> 

三、獲得識別結果

上面的程式執行後獲得的識別結果如下:預設為Unicode編碼

這是識別成功時的結果

{
    "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=0020120430&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就是封裝微信文字訊息的函式,與官方樣例中雷同


五、效果演示

這是要傳送的圖片

=============================================================

歡迎關注方倍工作室微信,瞭解我們及行業的最新動態