调用face++平台api进行人脸识别
轉載請注明出處:http://blog.csdn.net/hongbin_xu 或 http://hongbin96.com/
文章鏈接:http://blog.csdn.net/hongbin_xu/article/details/74981819 或 http://hongbin96.com/125
Face++介紹:
Face++平臺提供一整套世界領先的人臉檢測,人臉識別,面部分析的視覺技術服務。通過提供云端API、離線SDK等供用戶進行開發,像支付寶人臉支付使用的技術就是Face++。(face++的介紹)
每個人在Face++的官網注冊賬號后可以申請新建API,填寫相關信息后,隨后會分配API key和 API Secrect。我們可以選擇試用的服務,由于是免費的有的功能不支持。
分配的API key和 API Secrect,有了這兩個東西才能調用api。
官網提供了API文檔和演示。
打開api文檔可以查看詳細說明,很詳細不多說了。
實驗平臺:
我的測試程序是在Ubuntu下自帶的Python環境下編寫,用到了Python-OpenCV,所以要裝一下Python-OpenCV。
console下輸入:
sudo apt-get install python-opencv很快就會安裝完成,并且會自動配置好環境變量。
import cv包和cv2包看看,發現沒有報錯,安裝成功。
代碼:
# -*- coding:utf-8 -*- import cv2 import urllib2 import urllib import time#讀取原圖,并顯示 img = cv2.imread("football_players.jpeg") cv2.namedWindow("原圖") cv2.imshow("原圖", img)#URL http_url='https://api-cn.faceplusplus.com/facepp/v3/detect' #用戶信息 key = "RU8VkInUd4zpcCo2GbKxPz90rPoaY5O0" secret = "01YadiHNX_Fpqw6saBYa2POD6ozL6gWu" #圖片存儲路徑 filepath = r"/home/xhb/Study/FaceRecognition/python-opencv-face++/football_players.jpeg"#這后面的都是給的示例代碼,調用API接口 boundary = '----------%s' % hex(int(time.time() * 1000)) data = [] data.append('--%s' % boundary) data.append('Content-Disposition: form-data; name="%s"\r\n' % 'api_key') data.append(key) data.append('--%s' % boundary) data.append('Content-Disposition: form-data; name="%s"\r\n' % 'api_secret') data.append(secret) data.append('--%s' % boundary) fr=open(filepath,'rb') data.append('Content-Disposition: form-data; name="%s"; filename=" "' % 'image_file') data.append('Content-Type: %s\r\n' % 'application/octet-stream') data.append(fr.read()) fr.close() data.append('--%s--\r\n' % boundary)http_body='\r\n'.join(data) #buld http request req=urllib2.Request(http_url) #header req.add_header('Content-Type', 'multipart/form-data; boundary=%s' % boundary) req.add_data(http_body) try:#req.add_header('Referer','http://remotserver.com/')#post data to serverresp = urllib2.urlopen(req, timeout=5)#get responseqrcont=resp.read()print qrcont #打印出得到的結果except urllib2.HTTPError as e:print e.read()#進過測試前面的程序會返回一個字典,其中指出了人臉所在的矩形的位置和大小等,所以直接進行標注 mydict = eval(qrcont) faces = mydict["faces"] faceNum = len(faces) print("識別到了%d個人臉"%(faceNum))for i in range(faceNum):face_rectangle = faces[i]['face_rectangle']width = face_rectangle['width']top = face_rectangle['top']left = face_rectangle['left']height = face_rectangle['height']start = (left, top)end = (left+width, top+height)color = (55,255,155)thickness = 3cv2.rectangle(img, start, end, color, thickness)cv2.namedWindow("識別后") cv2.imshow("識別后", img)cv2.waitKey(0) cv2.destroyAllWindows()# print type(resp)程序不復雜,按照程序思路簡單解釋下:
1、指定圖片的名稱,讀取圖片,并顯示。
把圖片直接放在當前目錄下即可(圖片是巴薩的<( ̄︶ ̄)>)。
2、填一些調用api相關的信息,根據需要自己改就行。
#URL http_url='https://api-cn.faceplusplus.com/facepp/v3/detect' #用戶信息 key = "RU8VkInUd4zpcCo2GbKxPz90rPoaY5O0" secret = "01YadiHNX_Fpqw6saBYa2POD6ozL6gWu" #圖片存儲路徑 filepath = r"/home/xhb/Study/FaceRecognition/python-opencv-face++/football_players.jpeg"從api文檔可以查到,detect的URL:
https://api-cn.faceplusplus.com/facepp/v3/detect
用戶信息要填上自己在前面申請的API Key和API Secret。
要傳送圖片到face++的服務器去進行識別,填上圖片所在的目錄的路徑:
當前目錄路徑+圖片名。
#圖片存儲路徑 filepath = r"/home/xhb/Study/FaceRecognition/python-opencv-face++/football_players.jpeg"3、中間的程序其實就是把信息封裝一下,建立網絡鏈接,然后跟服務器通信。調用urlopen()訪問服務器,返回resp,打印結果。
try:#req.add_header('Referer','http://remotserver.com/')#post data to serverresp = urllib2.urlopen(req, timeout=5)#get responseqrcont=resp.read()print qrcont #打印出得到的結果except urllib2.HTTPError as e:print e.read()4、resp是返回的數據。調用read()方法,轉換成qrcont,這是個字符串,然后在終端打印出來。
終端的全部打印信息:
很明顯,返回的resp是一個字典,其中記錄了一些圖片的信息,還有識別出的人臉的位置。
qrcont是一組字符串,調用eval()函數將其轉換回字典類型,取出來再處理一下,在圖片上標識出人臉的位置。
運行結果:
總結
以上是生活随笔為你收集整理的调用face++平台api进行人脸识别的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Zedboard学习(四):PS+PL搭
- 下一篇: Zedboard学习(五):MIO与EM