基于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] 

使用本文章或代码还请声明。

猜你喜欢

转载自blog.csdn.net/Nirvana_6174/article/details/83116808