OpenCV  4.10.0
开源计算机视觉库
正在加载...
正在搜索...
没有匹配项
公共成员函数 | 所有成员列表
cv::face::FacemarkTrain 类参考abstract

可训练人脸标记模型的抽象基类。 更多...

#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 继承的公共成员函数
 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
定义 cvstd_wrapper.hpp:23

人脸标记检测的典型流程如下所示:

成员函数文档

◆ 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:812
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)
从文件加载图像。

训练文件中的内容应遵循标准格式。 以下是这些文件中内容的示例。 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:160
此类型与 InputArray 非常相似,只是它用于输入/输出和输出函数 p...
定义 mat.hpp:296

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

此类的文档是从以下文件生成的