Class cv::face::FacemarkTrain#

Abstract base class for trainable facemark models. View details

Collaboration diagram for cv::face::FacemarkTrain:

Public Member Functions#

Public Member Functions inherited from cv::face::Facemark

Return

Name

Description

bool

fit(
    InputArray image,
    InputArray faces,
    OutputArrayOfArrays landmarks )

Detect facial landmarks from an image.

void

loadModel(String model)

A function to load the trained model before the fitting process.

Public Member Functions inherited from cv::Algorithm

Return

Name

Description

Algorithm()

~Algorithm()

void

clear()

Clears the algorithm state.

bool

empty()

Returns true if the Algorithm is empty (e.g. in the very beginning or after unsuccessful read.

String

getDefaultName()

void

read(const FileNode & fn)

Reads algorithm parameters from a file storage.

void

save(const String & filename)

void

write(
    const Ptr< FileStorage > & fs,
    const String & name = String() )

void

write(FileStorage & fs)

Stores algorithm parameters in a file storage.

void

write(
    FileStorage & fs,
    const String & name )

Static Public Member Functions#

Static Public Member Functions inherited from cv::Algorithm

Return

Name

Description

static Ptr< _Tp >

load(
    const String & filename,
    const String & objname = String() )

Loads algorithm from the file.

static Ptr< _Tp >

loadFromString(
    const String & strModel,
    const String & objname = String() )

Loads algorithm from a String.

static Ptr< _Tp >

read(const FileNode & fn)

Reads algorithm from the file node.

Additional Inherited Members#

Protected Member Functions inherited from cv::Algorithm

Return

Name

Description

void

writeFormat(FileStorage & fs)

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 function

  • userData — 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: