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
其他人脸识别模块介绍 https://blog.csdn.net/Nirvana_6174/article/details/89599441
如有问题,或有什么建议可加群:894243022或发邮箱1639206518@qq.com
使用本文章或代码还请声明。