思路:
1、预先导入所需要的人脸识别模型;
2、遍历循环识别文件夹里面的图片,让模型“记住”人物的样子;
3、输入一张新的图像,与前一步文件夹里面的图片比对,返回最接近的结果
shape_predictor.dat:检测人脸的关键点,比如眼睛,嘴巴等等;
dlib_face_recognition.dat:在检测关键点的基础上,生成人脸的特征值。
使用dlib模块相当于调用某个神经网络,再把预先训练好的参数传给调用的神经网络。
OpenCV获取视频属性
import cv2
#path 视频的地址,加引号
cap=cv2.VideoCapture(path)
#get函数:参数按顺序对应下表(cap.get从0开始编号,比如为了获取视频的总帧数,在下表排第八)
frames_num=cap.get(7)
print(frames_num)
os.path.splitext() 将文件名和扩展名分开
os.path.split() 返回文件的路径和文件名
os.path.join() 路径拼接,避免使用字符串,避免斜杠写错;
numpy.moveaxis(a,source,destination)将数组的轴移动到新的位置,a:数组;source:要移动的轴的原始位置;destination:要移动的轴的目标位置
transforms用于图形变换,torchvision.transforms.Compose([ ts,ts,ts... ])ts为transforms操作,将一系列transforms操作链接起来
标准化: transforms.Normalize
torchvision.transforms.Normalize(mean, std),用平均值和标准偏差归一化张量图像。
给定mean:(M1,…,Mn)和std:(S1,…,Sn)对于n通道,此变换将标准化输入的每个通道,torch.*Tensor即 input[channel] = (input[channel] - mean[channel]) / std[channel]
mean(sequence) - 每个通道的均值序列。
std(sequence) - 每个通道的标准偏差序列。
例如:
具体地说,对每个通道而言,Normalize执行以下操作:
image = (image - mean) / std,其中mean和std分别通过(0.5,0.5,0.5)和(0.5,0.5,0.5)进行指定。原来的0-1最小值0则变成(0-0.5)/0.5=-1,而最大值1则变成(1-0.5)/0.5=1。