我正在开展一个与从面部识别情绪(悲伤、快乐、愤怒等)相关的项目。我正在使用 dlib 库中的面部标志检测器,它检测 68 个兴趣点。对于相同的情绪,这些兴趣点会根据不同面部的面部朝向、眼睛大小、嘴唇等而有所不同。
我想标准化这些兴趣点,使它们不受面部方向、眼睛大小、嘴唇等的影响。我可以使用哪些技术来做到这一点。然后我想用 SVM 训练数据。
最佳答案
Dlib 已经具有在 http://dlib.net/face_landmark_detection_ex.cpp.html 中使用的规范化代码调用 http://dlib.net/imaging.html#extract_image_chips 索取 sample 功能。
您将需要使用其部分代码来获取标准化地标 - 它们仍然有足够的信息来检测情绪,但面部将被旋转和缩放:
...
// 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
}
获得标准化形状后 - 就看你如何训练分类器了。可能“按原样”使用地标就足够了,可能您需要获取最重要的点并计算它们之间的距离并根据距离数据进行训练
关于image-processing - 图像处理中面部标志点的归一化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39537536/