学习了开源人脸识别程序Openface的代码。Openface的思路是先将人脸从图像中提取出来,再通过FaceNet,即使用了triplet loss的神经网络将图像分类或者识别。
本篇文章的代码的作用是,使用dlib库将人脸探测、提取的方法集合成类,方便调用。
本篇文章的代码的思路是,在通用模板中的68个人脸标记点的基础上,使用dlib库以及预训练出的参数,确定输入图像的人脸标记点,再使用opencv的内置函数进行仿射变换,得到输出对齐的图像,以便下一步训练时使用。
# 使用dlib进行人脸切割,变换
import cv2
import dlib
import numpy as np
# 这是人脸的特征点,一共68个
TEMPLATE = np.float32([( , )... # 这里填数据 ])
# 下面将人脸的关键点标准化,即寻找人脸在最左侧的点和最上侧的点,作为图像的边缘,
# 其他点以这两个边缘为基准平移;最后除以(最右侧-最左侧)和(最下侧-最上侧)
# 使人脸的标准点均匀地分布在图形里,恰好不丢失特征,也无多余像素。
(TEM_MIN, TEM_MAX) = (np.min(TEMPLATE, axis = 0), np.max(TEMPLATE, axis = 0))
STANDARD_TEMPLATE = (TEMPLATE - TEM_MIN) / (TEM_MAX - TEM_MIN)
class AlignDlib():
INNER_EYES_AND_BOTTOM_LIP = [39, 42, 57] # 用于仿射变换的