我正在开展一个与从脸上识别情绪(悲伤,快乐,愤怒等)相关的项目。我正在使用dlib库中的面部标志检测器来检测68个兴趣点。对于相同的情绪,这些兴趣点可以根据脸部的方向,眼睛的大小,嘴唇等在不同的脸上而变化。
我想将这些兴趣点归一化,使它们对脸部的方向,眼睛的大小,嘴唇等不变。我可以使用哪些技巧来做到这一点。然后我想用SVM训练数据。
答案 0 :(得分:1)
Dlib已经通过调用http://dlib.net/face_landmark_detection_ex.cpp.html函数在http://dlib.net/imaging.html#extract_image_chips示例中使用了规范化代码。
你需要使用它的部分代码来获得标准化的地标 - 它们仍然有足够的信息来检测情绪,但是面部会被旋转和缩放:
...
// 1. detect faces
std::vector<rectangle> dets = detector(image);
for (rectangle d : dets)
{
// 2. get landmarks
full_object_detection shape = sp(image, d);
// 3. chip details (normalization params) for normalized image with normalized size of 100 pixels
chip_details chip = get_face_chip_details(shape, 100);
// 4. get normalized landmarks
full_object_detection normalized = map_det_to_chip(shape, chip);
// now you can used normalized shape in your classifier
}
获得标准化形状后 - 如何训练分类器。可能是“按原样”使用地标就足够了,可能需要获得最重要的点并计算它们之间的距离并训练距离数据