OpenCV 4.12.0
开源计算机视觉
加载中...
搜索中...
无匹配项
cv::face::FacemarkTrain 类参考抽象

可训练面部特征点模型的抽象基类。 更多...

#include <opencv2/face/facemark_train.hpp>

cv::face::FacemarkTrain 协作图

公共成员函数

virtual bool addTrainingSample (InputArray image, InputArray landmarks)=0
 向训练器添加一个训练样本。
 
virtual bool getData (void *items=0)=0
 从算法获取数据。
 
virtual bool getFaces (InputArray image, OutputArray faces)=0
 使用默认或用户定义的人脸检测器从给定图像中检测人脸。某些算法可能未提供默认的人脸检测器。
 
virtual bool setFaceDetector (FN_FaceDetector detector, void *userData=0)=0
 Facemark算法设置用户定义的人脸检测器。
 
virtual void training (void *parameters=0)=0
 使用给定数据集训练Facemark算法。在训练过程之前,应使用 face::addTrainingSample 函数将训练样本添加到训练器中。
 
- 继承自 cv::face::Facemark 的公共成员函数
virtual bool fit (InputArray image, InputArray faces, OutputArrayOfArrays landmarks)=0
 从图像中检测面部标志。
 
virtual void loadModel (String model)=0
 在拟合过程之前加载训练模型的函数。
 
- 继承自 cv::Algorithm 的公共成员函数
 Algorithm ()
 
virtual ~Algorithm ()
 
virtual void clear ()
 清除算法状态。
 
virtual bool empty () const
 如果Algorithm为空(例如,在开始时或读取不成功后),则返回 true。
 
virtual String getDefaultName () const
 
virtual void read (const FileNode &fn)
 从文件存储中读取算法参数。
 
virtual void save (const String &filename) const
 
void write (const Ptr< FileStorage > &fs, const String &name=String()) const
 
virtual void write (FileStorage &fs) const
 将算法参数存储到文件存储中。
 
void write (FileStorage &fs, const String &name) const
 

其他继承成员

- 继承自 cv::Algorithm 的静态公共成员函数
template<typename _Tp >
static Ptr< _Tpload (const String &filename, const String &objname=String())
 从文件中加载算法。
 
template<typename _Tp >
static Ptr< _TploadFromString (const String &strModel, const String &objname=String())
 从字符串加载算法。
 
template<typename _Tp >
static Ptr< _Tpread (const FileNode &fn)
 从文件节点读取算法。
 
- 继承自 cv::Algorithm 的保护成员函数
void writeFormat (FileStorage &fs) const
 

详细描述

可训练面部特征点模型的抽象基类。

要在您的程序中利用此 API,请参阅面部特征点检测器 API 教程

描述

OpenCV 中的 AAM 和 LBF 面部特征点模型派生自抽象基类 FacemarkTrain,它提供了对 OpenCV 中这些面部特征点算法的统一访问。

以下是如何声明面部特征点算法的示例

// 在您的代码中使用 Facemark
static Ptr< FacemarkLBF > create(const FacemarkLBF::Params &parameters=FacemarkLBF::Params())
std::shared_ptr< _Tp > Ptr
Definition cvstd_wrapper.hpp:23

面部特征点检测的典型流程如下

  • (非强制) 使用FacemarkTrain::setFaceDetector 设置用户定义的人脸检测器。面部特征点算法旨在将面部点拟合到人脸中。因此,应向面部特征点算法提供人脸信息。某些算法可能提供默认的人脸识别功能。但是,用户可能更喜欢使用自己的人脸检测器以获得最佳检测结果。
  • (非强制) 使用FacemarkTrain::training 为特定算法训练模型。在这种情况下,模型应由算法自动保存。如果用户已有训练好的模型,则可以省略此部分。
  • 使用Facemark::loadModel 加载训练好的模型。
  • 通过Facemark::fit 执行拟合。

成员函数文档

◆ addTrainingSample()

virtual bool cv::face::FacemarkTrain::addTrainingSample ( InputArray image,
InputArray landmarks )
纯虚函数

向训练器添加一个训练样本。

参数
image输入图像。
landmarks面部特征点ground-truth对应于图像。

使用示例

String imageFiles = "../data/images_train.txt";
String ptsFiles = "../data/points_train.txt";
std::vector<String> images_train;
std::vector<String> landmarks_train;
// 加载数据集列表:图像路径和特征点文件路径
loadDatasetList(imageFiles,ptsFiles,images_train,landmarks_train);
Mat image;
std::vector<Point2f> facial_points;
for(size_t i=0;i<images_train.size();i++){
image = imread(images_train[i].c_str());
loadFacePoints(landmarks_train[i],facial_points);
facemark->addTrainingSample(image, facial_points);
}
n 维密集数组类
定义 mat.hpp:830
std::string String
定义 cvstd.hpp:151
bool loadDatasetList(String imageList, String annotationList, std::vector< String > &images, std::vector< String > &annotations)
加载训练图像和标注文件路径列表的工具。
bool loadFacePoints(String filename, OutputArray points, float offset=0.0f)
用于从给定文件加载面部特征点信息的实用工具。
CV_EXPORTS_W Mat imread(const String &filename, int flags=IMREAD_COLOR_BGR)
从文件加载图像。

训练文件中的内容应遵循标准格式。以下是这些文件中内容的示例。images_train.txt 文件内容示例

/home/user/ibug/image_003_1.jpg
/home/user/ibug/image_004_1.jpg
/home/user/ibug/image_005_1.jpg
/home/user/ibug/image_006.jpg

points_train.txt 文件内容示例

/home/user/ibug/image_003_1.pts
/home/user/ibug/image_004_1.pts
/home/user/ibug/image_005_1.pts
/home/user/ibug/image_006.pts

◆ getData()

virtual bool cv::face::FacemarkTrain::getData ( void * items = 0)
纯虚函数

从算法获取数据。

参数
items获取到的数据,取决于算法。

使用示例

facemark->loadModel("AAM.yml");
facemark->getData(&data);
std::vector<Point2f> s0 = data.s0;
cout<<s0<<endl;
static Ptr< FacemarkAAM > create(const FacemarkAAM::Params &parameters=FacemarkAAM::Params())
初始化程序
facemark::getData 函数的数据容器。
定义 facemarkAAM.hpp:99
std::vector< Point2f > s0
定义 facemarkAAM.hpp:100

◆ getFaces()

virtual bool cv::face::FacemarkTrain::getFaces ( InputArray image,
OutputArray faces )
纯虚函数

使用默认或用户定义的人脸检测器从给定图像中检测人脸。某些算法可能未提供默认的人脸检测器。

参数
image输入图像。
faces函数输出,表示检测到的人脸的感兴趣区域。每张人脸都存储在 cv::Rect 容器中。

使用示例

std::vector<cv::Rect> faces;
facemark->getFaces(img, faces);
for(int j=0;j<faces.size();j++){
cv::rectangle(img, faces[j], cv::Scalar(255,0,255));
}
void rectangle(InputOutputArray img, Point pt1, Point pt2, const Scalar &color, int thickness=1, int lineType=LINE_8, int shift=0)
绘制一个简单、粗或填充的矩形。

◆ setFaceDetector()

virtual bool cv::face::FacemarkTrain::setFaceDetector ( FN_FaceDetector detector,
void * userData = 0 )
纯虚函数

Facemark算法设置用户定义的人脸检测器。

参数
detector用户定义的人脸检测函数
userData检测器参数

使用示例

MyDetectorParameters detectorParameters(...);
facemark->setFaceDetector(myDetector, &detectorParameters);

用户定义人脸检测器的示例

bool myDetector( InputArray image, OutputArray faces, void* userData)
{
MyDetectorParameters* params = (MyDetectorParameters*)userData;
// -------- 执行某些操作 --------
}
这是一个用于将只读输入数组传递给 OpenCV 函数的代理类。
定义 mat.hpp:161
此类型与 InputArray 非常相似,但它用于输入/输出和输出函数 p...
定义 mat.hpp:297

TODO 检测器参数的生命周期不受控制。重新设计接口为 "Ptr<FaceDetector>"。

◆ training()

virtual void cv::face::FacemarkTrain::training ( void * parameters = 0)
纯虚函数

使用给定数据集训练Facemark算法。在训练过程之前,应使用 face::addTrainingSample 函数将训练样本添加到训练器中。

参数
parameters可选的额外参数(取决于算法)。

使用示例

params.model_filename = "ibug68.model"; // 用于保存训练模型的文件名
// 添加训练样本(参见 Facemark::addTrainingSample)
facemark->training();
定义 facemarkLBF.hpp:52

此类的文档生成自以下文件