基於python、face++實現人臉檢測、人臉識別
阿新 • • 發佈:2018-12-03
face++做的人臉識別應該是我目前接觸到的效果最好的了。這家公司也是個獨角獸,專門做人臉識別這塊的,返回的照片的資訊很全,也好呼叫。不過只提供線上的,不提供離線sdk沒法做一些實時性的東西。
import requests from json import JSONDecoder import cv2 import time t1=time.time() http_url = "https://api-cn.faceplusplus.com/facepp/v3/detect" key ="your key" secret ="your secret" filepath = "yiqi.jpg" #list=['qiyi.jpg','chenduling.jpg','fan.jpg'] frame=cv2.imread('yiqi.jpg')#使用opencv開啟照片為了下面標框 data = {"api_key": key, "api_secret": secret, "return_landmark": "1","return_attributes":"gender"} #主體這裡面的內容可以看官方api進行新增 files = {"image_file": open(filepath, "rb")} response = requests.post(http_url, data=data, files=files) req_con = response.content.decode('utf-8') #返回資料進行轉換 req_dict = JSONDecoder().decode(req_con) #print(req_dict) face_rectangles=[] #print(req_dict['faces'][0]['face_rectangle']) print(req_dict) #呼叫返回的 print(req_dict['faces']) #進行解析 沒用的可以不要 for face in req_dict['faces']: #使用迴圈遍歷 reqdict裡面的faces部分 把裡面提取到的臉的定位給獲取出來 if 'face_rectangle' in face.keys(): face_rectangles.append(face['face_rectangle']) print(face_rectangles) for i in face_rectangles: w=i['width'] t=i['top'] l=i['left'] h=i['height'] cv2.rectangle(frame, (l, t), (w+l, h+t), (0, 0, 255), 2) #opencv的標框函式 print('執行時間是{}'.format(time.time()-t1)) cv2.imshow('tuxiang',frame) cv2.waitKey(1) #重新整理介面 time.sleep(5)#暫停五秒 顯示畫面
效果圖 執行時間是3.006000280380249(線上呼叫受網速影響,一般是兩秒)
這個可以看官網給的api文件,face++的文件還是比較詳細的
一般的線上呼叫api都是這樣的,傳送一個連結,連結裡面的內容主體需要你去修改一下,改成你想要傳的資料,然後上傳要轉換成json格式返回的也是json格式,再進行解析,就可以看到一長串的資料,再對這些資料進行分析得要你想要的就可以了。
人臉識別的話 使用url是compare 上傳兩張照片,會返回一個比較相似度的一個值,根據那個值可以自己嘗試設閾值。
跟這個程式碼相差不大。
opencv主要是為了顯示照片和標框跟直觀 time是為了計算執行時間和暫停程式
人臉檢測和人臉識別的程式碼在github上 https://github.com/niehen6174/face_detection_and_recognition
如有問題,或有什麼建議可加群:894243022或發郵箱[email protected]
使用本文章或程式碼還請宣告。