应用场景
单人:支付、解锁……
小范围:智能门锁……
中范围:考勤打卡……
大范围:小区门禁……
小区门禁的精度可以很高。(训练集和测试集的重叠度高)
一开始精度很低,摄像头采集数据作为样本,进行训练(加入特征库),随着样本越来越多,精度也越来越高。
人脸识别很难通用,因为样本很难采集,需要各个角度、质量较高的人脸照片。
识别过程
检测:经过 MTCNN 找出人脸。
提取特征:把人脸剪切下来放到 MobileNet-V2 中提取特征。
对比:将得到的特征和特征库中的特征进行比较,根据相似度进行识别。
衡量相似度
欧氏距离:x·w
余弦相似度:cosθ = 二范数归一化后的欧氏距离 = (x / ||x||)(w / ||w||)
样本
用照片作为特征库,每个文件夹代表一个人,每人有 5 张照片。
from torch.utils.data import Dataset
from torchvision import transforms
import os
from PIL import Image
class MyDataset(Dataset):
def __init__(self, path):
self.transform = transforms.Compose([transforms.Resize(112), transforms.ToTensor(), transforms.Normalize([0.5, 0.5, 0.5], [0.5, 0.5, 0.5])])
self.data = []
for face_path in os.listdir(path):
for file in os.listdir(os.path.join(path, face_path)):
self.data.append([os.path.join(path, face_path, file), int(face_path)])
def __len__(self):
return len(self.data)