圖片識別之人臉識別API
阿新 • • 發佈:2019-01-27
一、微信圖片獲取
首先要獲得使用者發過來的圖片,微信公眾平臺支援接收圖片,一條圖片訊息的格式如下:
<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就是封裝微信文字訊息的函式,與官方樣例中雷同
五、效果演示
這是要傳送的圖片
這是識別後的結果