1. 程式人生 > >基於python、face++實現人臉檢測、人臉識別

基於python、face++實現人臉檢測、人臉識別

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] 

使用本文章或程式碼還請宣告。