调用face++平台api进行人脸识别
轉(zhuǎn)載請(qǐng)注明出處:http://blog.csdn.net/hongbin_xu 或 http://hongbin96.com/
文章鏈接:http://blog.csdn.net/hongbin_xu/article/details/74981819 或 http://hongbin96.com/125
Face++介紹:
Face++平臺(tái)提供一整套世界領(lǐng)先的人臉檢測,人臉識(shí)別,面部分析的視覺技術(shù)服務(wù)。通過提供云端API、離線SDK等供用戶進(jìn)行開發(fā),像支付寶人臉支付使用的技術(shù)就是Face++。(face++的介紹)
每個(gè)人在Face++的官網(wǎng)注冊賬號(hào)后可以申請(qǐng)新建API,填寫相關(guān)信息后,隨后會(huì)分配API key和 API Secrect。我們可以選擇試用的服務(wù),由于是免費(fèi)的有的功能不支持。
分配的API key和 API Secrect,有了這兩個(gè)東西才能調(diào)用api。
官網(wǎng)提供了API文檔和演示。
打開api文檔可以查看詳細(xì)說明,很詳細(xì)不多說了。
實(shí)驗(yàn)平臺(tái):
我的測試程序是在Ubuntu下自帶的Python環(huán)境下編寫,用到了Python-OpenCV,所以要裝一下Python-OpenCV。
console下輸入:
sudo apt-get install python-opencv很快就會(huì)安裝完成,并且會(huì)自動(dòng)配置好環(huán)境變量。
import cv包和cv2包看看,發(fā)現(xiàn)沒有報(bào)錯(cuò),安裝成功。
代碼:
# -*- 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" #圖片存儲(chǔ)路徑 filepath = r"/home/xhb/Study/FaceRecognition/python-opencv-face++/football_players.jpeg"#這后面的都是給的示例代碼,調(diào)用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 #打印出得到的結(jié)果except urllib2.HTTPError as e:print e.read()#進(jìn)過測試前面的程序會(huì)返回一個(gè)字典,其中指出了人臉?biāo)诘木匦蔚奈恢煤痛笮〉?#xff0c;所以直接進(jìn)行標(biāo)注 mydict = eval(qrcont) faces = mydict["faces"] faceNum = len(faces) print("識(shí)別到了%d個(gè)人臉"%(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("識(shí)別后") cv2.imshow("識(shí)別后", img)cv2.waitKey(0) cv2.destroyAllWindows()# print type(resp)程序不復(fù)雜,按照程序思路簡單解釋下:
1、指定圖片的名稱,讀取圖片,并顯示。
把圖片直接放在當(dāng)前目錄下即可(圖片是巴薩的<( ̄︶ ̄)>)。
2、填一些調(diào)用api相關(guān)的信息,根據(jù)需要自己改就行。
#URL http_url='https://api-cn.faceplusplus.com/facepp/v3/detect' #用戶信息 key = "RU8VkInUd4zpcCo2GbKxPz90rPoaY5O0" secret = "01YadiHNX_Fpqw6saBYa2POD6ozL6gWu" #圖片存儲(chǔ)路徑 filepath = r"/home/xhb/Study/FaceRecognition/python-opencv-face++/football_players.jpeg"從api文檔可以查到,detect的URL:
https://api-cn.faceplusplus.com/facepp/v3/detect
用戶信息要填上自己在前面申請(qǐng)的API Key和API Secret。
要傳送圖片到face++的服務(wù)器去進(jìn)行識(shí)別,填上圖片所在的目錄的路徑:
當(dāng)前目錄路徑+圖片名。
#圖片存儲(chǔ)路徑 filepath = r"/home/xhb/Study/FaceRecognition/python-opencv-face++/football_players.jpeg"3、中間的程序其實(shí)就是把信息封裝一下,建立網(wǎng)絡(luò)鏈接,然后跟服務(wù)器通信。調(diào)用urlopen()訪問服務(wù)器,返回resp,打印結(jié)果。
try:#req.add_header('Referer','http://remotserver.com/')#post data to serverresp = urllib2.urlopen(req, timeout=5)#get responseqrcont=resp.read()print qrcont #打印出得到的結(jié)果except urllib2.HTTPError as e:print e.read()4、resp是返回的數(shù)據(jù)。調(diào)用read()方法,轉(zhuǎn)換成qrcont,這是個(gè)字符串,然后在終端打印出來。
終端的全部打印信息:
很明顯,返回的resp是一個(gè)字典,其中記錄了一些圖片的信息,還有識(shí)別出的人臉的位置。
qrcont是一組字符串,調(diào)用eval()函數(shù)將其轉(zhuǎn)換回字典類型,取出來再處理一下,在圖片上標(biāo)識(shí)出人臉的位置。
運(yùn)行結(jié)果:
總結(jié)
以上是生活随笔為你收集整理的调用face++平台api进行人脸识别的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Zedboard学习(四):PS+PL搭
- 下一篇: Zedboard学习(五):MIO与EM