OpenCV 4.11.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
 使用默认或用户定义的人脸检测器从给定图像中检测人脸。一些 Algorithm 算法可能不提供默认的人脸检测器。
 
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 继承的公共成员函数
 算法 ()
 
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 算法的统一访问。

这是一个关于如何声明 facemark 算法的示例

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

facemark 检测的典型流程如下所示

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

成员函数文档

◆ addTrainingSample()

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

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

参数
image输入图像。
landmarks与图像对应的面部特征点真值。

使用方法示例

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:829
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 )
纯虚函数

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

参数
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

待办事项 检测器参数的生命周期不受控制。修改接口设计为“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

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