Class cv::face::FacemarkTrain#
Abstract base class for trainable facemark models. View details
#include <opencv2/face/facemark_train.hpp>Collaboration diagram for cv::face::FacemarkTrain:
Public Member Functions#
Public Member Functions inherited from cv::face::Facemark
Return |
Name |
Description |
|---|---|---|
|
|
Detect facial landmarks from an image. |
|
A function to load the trained model before the fitting process. |
Public Member Functions inherited from cv::Algorithm
Return |
Name |
Description |
|---|---|---|
|
Clears the algorithm state. |
|
|
Returns true if the Algorithm is empty (e.g. in the very beginning or after unsuccessful read. |
|
|
Reads algorithm parameters from a file storage. |
|
|
||
|
|
|
|
Stores algorithm parameters in a file storage. |
|
|
Static Public Member Functions#
Static Public Member Functions inherited from cv::Algorithm
Return |
Name |
Description |
|---|---|---|
|
|
Loads algorithm from the file. |
|
|
Loads algorithm from a String. |
|
Reads algorithm from the file node. |
Additional Inherited Members#
Protected Member Functions inherited from cv::Algorithm
Return |
Name |
Description |
|---|---|---|
|
Detailed Description#
-
class FacemarkTrain : public cv::face::Facemark#
Abstract base class for trainable facemark models.
To utilize this API in your program, please take a look at the tutorial_table_of_content_facemark
Description#
The AAM and LBF facemark models in OpenCV are derived from the abstract base class FacemarkTrain, which provides a unified access to those facemark algorithms in OpenCV.
Here is an example on how to declare facemark algorithm:
// Using Facemark in your code: Ptr<Facemark> facemark = FacemarkLBF::create();
The typical pipeline for facemark detection is listed as follows:
(Non-mandatory) Set a user defined face detection using FacemarkTrain::setFaceDetector. The facemark algorithms are designed to fit the facial points into a face. Therefore, the face information should be provided to the facemark algorithm. Some algorithms might provides a default face recognition function. However, the users might prefer to use their own face detector to obtains the best possible detection result.
(Non-mandatory) Training the model for a specific algorithm using FacemarkTrain::training. In this case, the model should be automatically saved by the algorithm. If the user already have a trained model, then this part can be omitted.
Load the trained model using Facemark::loadModel.
Perform the fitting via the Facemark::fit.
Subclassed by cv::face::FacemarkAAM, cv::face::FacemarkLBF
Member Function Documentation#
addTrainingSample()#
bool cv::face::FacemarkTrain::addTrainingSample(
InputArray image,
InputArray landmarks )
Add one training sample to the trainer.
Example of usage
String imageFiles = "../data/images_train.txt";
String ptsFiles = "../data/points_train.txt";
std::vector<String> images_train;
std::vector<String> landmarks_train;
// load the list of dataset: image paths and landmark file paths
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);
}
The contents in the training files should follows the standard format. Here are examples for the contents in these files. example of content in the 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
example of content in the 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
Parameters
image— Input image.landmarks— The ground-truth of facial landmarks points corresponds to the image.
getData()#
bool cv::face::FacemarkTrain::getData(void * items = 0)
Get data from an algorithm.
Example of usage
Ptr<FacemarkAAM> facemark = FacemarkAAM::create();
facemark->loadModel("[259].yml");
FacemarkAAM::Data data;
facemark->getData(&data);
std::vector<Point2f> s0 = data.s0;
cout<<s0<<endl;
Parameters
items— The obtained data, algorithm dependent.
getFaces()#
bool cv::face::FacemarkTrain::getFaces(
InputArray image,
OutputArray faces )
Detect faces from a given image using default or user defined face detector. Some Algorithm might not provide a default face detector.
Example of usage
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));
}
Parameters
image— Input image.faces— Output of the function which represent region of interest of the detected faces. Each face is stored in cv::Rect container.
setFaceDetector()#
bool cv::face::FacemarkTrain::setFaceDetector(
FN_FaceDetector detector,
void * userData = 0 )
Set a user defined face detector for the Facemark algorithm.
Example of usage
MyDetectorParameters detectorParameters(...);
facemark->setFaceDetector(myDetector, &detectorParameters);
Example of a user defined face detector
bool myDetector( InputArray image, OutputArray faces, void* userData)
{
MyDetectorParameters* params = (MyDetectorParameters*)userData;
// -------- do something --------
}
TODO Lifetime of detector parameters is uncontrolled. Rework interface design to “Ptr
Parameters
detector— The user defined face detector functionuserData— Detector parameters
training()#
void cv::face::FacemarkTrain::training(void * parameters = 0)
Trains a Facemark algorithm using the given dataset. Before the training process, training samples should be added to the trainer using face::addTrainingSample function.
Example of usage
FacemarkLBF::Params params;
params.model_filename = "ibug68.model"; // filename to save the trained model
Ptr<Facemark> facemark = FacemarkLBF::create(params);
// add training samples (see Facemark::addTrainingSample)
facemark->training();
Parameters
parameters— Optional extra parameters (algorithm dependent).
Source file#
The documentation for this class was generated from the following file:
opencv2/face/facemark_train.hpp