安装
本文注重快速落地,有不懂的另行百度
首先安装facenet
pip install facenet_pytorch
验证数据库构造
先用mtcnn提取脸部图片
import cv2
from facenet_pytorch import MTCNN,InceptionResnetV1
resnet=InceptionResnetV1(pretrained='vggface2').eval()
mtcnn = MTCNN(keep_all='true') #如果只图片只有一个人 这个true要去掉 然后要用unsqueeze加一层
##验证图片:
img_path1 = r'images\hongqing1.JPG'
img1 = cv2.imread(img_path1)
#中间省略
imgdi = {'hongqing':img1} #数据库映射字典
for img in imgdi:
imgdi[img]=mtcnn(img1) ##用mtcnn提取脸部图像
再跑一次向前传播 保存全连接输出作为验证数据 用pickle保存
res = {}
with torch.no_grad():
for inpu in imgdi:
out = resnet(imgdi[inpu])
res[inpu] = out
import pickle
with open('database','wb') as file:
pickle.dump(res,file)
人脸识别部分
提取你的脸
#这里简化了 实际就是拍一张照片 按q截取
import cv2
cap = cv2.VideoCapture(0)
while(1):
ret, img1= cap.read()
if cv2.waitKey(1) & 0xFF == ord('q'):
break
cap.release()
cv2.destroyAllWindows()
跑一次facenet
inpu1 = mtcnn(img1)
with torch.no_grad():
out1 = resnet(inpu1)
然后和数据库的作比对,小于阈值就是你
threshold=0.5
with open('database','rb') as file:
database = pickle.load(file)
for (name, db_enc) in database.items():
# 进行对比
dist = np.linalg.norm(out1-db_enc)
# 保存差异最小的那个
if dist < min_dist:
min_dist = dist
identity = name
if(min_dist>threshold):
print('数据库不存在!')
else:
print('这个人是:{},置信度为:{}'.format(str(identity),str(min_dist)))
上面是个简单的模型 可以对同一个人设定十几个图片 然后做集体比较
版权声明:本文为weixin_48174100原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。