pytorch快速上手-几行代码完成人脸识别验证

安装

本文注重快速落地,有不懂的另行百度
首先安装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版权协议,转载请附上原文出处链接和本声明。