非刚性人脸跟踪是对视频流的每帧中人脸特征进行准密(quasi-dense)集估计。非刚性 是指面部特征间的相对距离会随着面部表情和人群的不同而变化。
书本涉及的内容:
实用工具:简要介绍本章中所使用的常用结构和约定,包括面对对象设计、数据存储与表示,以及数据收集和标注的工具。
几何约束:介绍如何从训练数据学习面部几何及其变化情况,也将介绍在跟踪过程中如何利用它们来约束输出,包括对面部进行线性的形状模型建模,以及如何在模型的表示中引入将全局变换。
面部特征检测器: 介绍如何学习面部特征的外观,以便在跟踪的人脸图像中检测它们。
人脸检测与初始化: 如何使用人脸检测来初始化跟踪程序。
人脸跟踪: 通过图像对其处理将前面介绍的所有内容联系起来,用于跟踪系统。
各部分联系如下:
一、面向对象设计
类的读取和写入序列化实现:引入XML/YAML文件存储类。展示例程:
#include <iostream>
#include <cv.h>
#include <highgui.h>
using namespace std;
using namespace cv;
class Test
{
public:
int a, b;
void write(FileStorage &fs) const
{
assert(fs.isOpened());
fs << "{ " << "a" <<a << "b" << b << "}";
}
void read(const FileNode &node)
{
assert(node.type() == FileNode::MAP);
node["a"] >> a;
node["b"] >> b;
}
};
template <class T>
T load_ft(const char * fname)
{
Test x;
FileStorage f(fname, FileStorage::READ);
f["ft_object"]>>x;
f.release();
return x;
}
template <class T>