添加项目文件。
This commit is contained in:
83
3rdparty/opencv/inc/opencv2/face/bif.hpp
vendored
Normal file
83
3rdparty/opencv/inc/opencv2/face/bif.hpp
vendored
Normal file
@@ -0,0 +1,83 @@
|
||||
/*
|
||||
By downloading, copying, installing or using the software you agree to this license.
|
||||
If you do not agree to this license, do not download, install,
|
||||
copy or use the software.
|
||||
|
||||
|
||||
License Agreement
|
||||
For Open Source Computer Vision Library
|
||||
(3-clause BSD License)
|
||||
|
||||
Copyright (C) 2000-2015, Intel Corporation, all rights reserved.
|
||||
Copyright (C) 2009-2011, Willow Garage Inc., all rights reserved.
|
||||
Copyright (C) 2009-2015, NVIDIA Corporation, all rights reserved.
|
||||
Copyright (C) 2010-2013, Advanced Micro Devices, Inc., all rights reserved.
|
||||
Copyright (C) 2015, OpenCV Foundation, all rights reserved.
|
||||
Copyright (C) 2015, Itseez Inc., all rights reserved.
|
||||
Third party copyrights are property of their respective owners.
|
||||
|
||||
Redistribution and use in source and binary forms, with or without modification,
|
||||
are permitted provided that the following conditions are met:
|
||||
|
||||
* Redistributions of source code must retain the above copyright notice,
|
||||
this list of conditions and the following disclaimer.
|
||||
|
||||
* Redistributions in binary form must reproduce the above copyright notice,
|
||||
this list of conditions and the following disclaimer in the documentation
|
||||
and/or other materials provided with the distribution.
|
||||
|
||||
* Neither the names of the copyright holders nor the names of the contributors
|
||||
may be used to endorse or promote products derived from this software
|
||||
without specific prior written permission.
|
||||
|
||||
This software is provided by the copyright holders and contributors "as is" and
|
||||
any express or implied warranties, including, but not limited to, the implied
|
||||
warranties of merchantability and fitness for a particular purpose are disclaimed.
|
||||
In no event shall copyright holders or contributors be liable for any direct,
|
||||
indirect, incidental, special, exemplary, or consequential damages
|
||||
(including, but not limited to, procurement of substitute goods or services;
|
||||
loss of use, data, or profits; or business interruption) however caused
|
||||
and on any theory of liability, whether in contract, strict liability,
|
||||
or tort (including negligence or otherwise) arising in any way out of
|
||||
the use of this software, even if advised of the possibility of such damage.
|
||||
*/
|
||||
|
||||
#ifndef __OPENCV_BIF_HPP__
|
||||
#define __OPENCV_BIF_HPP__
|
||||
|
||||
#include "opencv2/core.hpp"
|
||||
|
||||
namespace cv {
|
||||
namespace face {
|
||||
|
||||
/** Implementation of bio-inspired features (BIF) from the paper:
|
||||
* Guo, Guodong, et al. "Human age estimation using bio-inspired features."
|
||||
* Computer Vision and Pattern Recognition, 2009. CVPR 2009.
|
||||
*/
|
||||
class CV_EXPORTS_W BIF : public Algorithm {
|
||||
public:
|
||||
/** @returns The number of filter bands used for computing BIF. */
|
||||
CV_WRAP virtual int getNumBands() const = 0;
|
||||
|
||||
/** @returns The number of image rotations. */
|
||||
CV_WRAP virtual int getNumRotations() const = 0;
|
||||
|
||||
/** Computes features sby input image.
|
||||
* @param image Input image (CV_32FC1).
|
||||
* @param features Feature vector (CV_32FC1).
|
||||
*/
|
||||
CV_WRAP virtual void compute(InputArray image,
|
||||
OutputArray features) const = 0;
|
||||
|
||||
/**
|
||||
* @param num_bands The number of filter bands (<=8) used for computing BIF.
|
||||
* @param num_rotations The number of image rotations for computing BIF.
|
||||
* @returns Object for computing BIF.
|
||||
*/
|
||||
CV_WRAP static Ptr<BIF> create(int num_bands = 8, int num_rotations = 12);
|
||||
};
|
||||
|
||||
} // namespace cv
|
||||
} // namespace face
|
||||
|
||||
#endif // #ifndef __OPENCV_FACEREC_HPP__
|
||||
60
3rdparty/opencv/inc/opencv2/face/face_alignment.hpp
vendored
Normal file
60
3rdparty/opencv/inc/opencv2/face/face_alignment.hpp
vendored
Normal file
@@ -0,0 +1,60 @@
|
||||
// This file is part of OpenCV project.
|
||||
// It is subject to the license terms in the LICENSE file found in the top-level directory
|
||||
// of this distribution and at http://opencv.org/license.html.
|
||||
#ifndef __OPENCV_FACE_ALIGNMENT_HPP__
|
||||
#define __OPENCV_FACE_ALIGNMENT_HPP__
|
||||
|
||||
#include "opencv2/face/facemark_train.hpp"
|
||||
|
||||
namespace cv{
|
||||
namespace face{
|
||||
class CV_EXPORTS_W FacemarkKazemi : public Facemark
|
||||
{
|
||||
public:
|
||||
struct CV_EXPORTS Params
|
||||
{
|
||||
/**
|
||||
* \brief Constructor
|
||||
*/
|
||||
Params();
|
||||
/// cascade_depth This stores the deapth of cascade used for training.
|
||||
unsigned long cascade_depth;
|
||||
/// tree_depth This stores the max height of the regression tree built.
|
||||
unsigned long tree_depth;
|
||||
/// num_trees_per_cascade_level This stores number of trees fit per cascade level.
|
||||
unsigned long num_trees_per_cascade_level;
|
||||
/// learning_rate stores the learning rate in gradient boosting, also referred as shrinkage.
|
||||
float learning_rate;
|
||||
/// oversampling_amount stores number of initialisations used to create training samples.
|
||||
unsigned long oversampling_amount;
|
||||
/// num_test_coordinates stores number of test coordinates.
|
||||
unsigned long num_test_coordinates;
|
||||
/// lambda stores a value to calculate probability of closeness of two coordinates.
|
||||
float lambda;
|
||||
/// num_test_splits stores number of random test splits generated.
|
||||
unsigned long num_test_splits;
|
||||
/// configfile stores the name of the file containing the values of training parameters
|
||||
String configfile;
|
||||
};
|
||||
static Ptr<FacemarkKazemi> create(const FacemarkKazemi::Params ¶meters = FacemarkKazemi::Params());
|
||||
virtual ~FacemarkKazemi();
|
||||
|
||||
/** @brief This function is used to train the model using gradient boosting to get a cascade of regressors
|
||||
*which can then be used to predict shape.
|
||||
*@param images A vector of type cv::Mat which stores the images which are used in training samples.
|
||||
*@param landmarks A vector of vectors of type cv::Point2f which stores the landmarks detected in a particular image.
|
||||
*@param scale A size of type cv::Size to which all images and landmarks have to be scaled to.
|
||||
*@param configfile A variable of type std::string which stores the name of the file storing parameters for training the model.
|
||||
*@param modelFilename A variable of type std::string which stores the name of the trained model file that has to be saved.
|
||||
*@returns A boolean value. The function returns true if the model is trained properly or false if it is not trained.
|
||||
*/
|
||||
virtual bool training(std::vector<Mat>& images, std::vector< std::vector<Point2f> >& landmarks,std::string configfile,Size scale,std::string modelFilename = "face_landmarks.dat")=0;
|
||||
|
||||
/// set the custom face detector
|
||||
virtual bool setFaceDetector(bool(*f)(InputArray , OutputArray, void*), void* userData)=0;
|
||||
/// get faces using the custom detector
|
||||
virtual bool getFaces(InputArray image, OutputArray faces)=0;
|
||||
};
|
||||
|
||||
}} // namespace
|
||||
#endif
|
||||
95
3rdparty/opencv/inc/opencv2/face/facemark.hpp
vendored
Normal file
95
3rdparty/opencv/inc/opencv2/face/facemark.hpp
vendored
Normal file
@@ -0,0 +1,95 @@
|
||||
// This file is part of OpenCV project.
|
||||
// It is subject to the license terms in the LICENSE file found in the top-level directory
|
||||
// of this distribution and at http://opencv.org/license.html.
|
||||
|
||||
/*
|
||||
This file was part of GSoC Project: Facemark API for OpenCV
|
||||
Final report: https://gist.github.com/kurnianggoro/74de9121e122ad0bd825176751d47ecc
|
||||
Student: Laksono Kurnianggoro
|
||||
Mentor: Delia Passalacqua
|
||||
*/
|
||||
|
||||
#ifndef __OPENCV_FACELANDMARK_HPP__
|
||||
#define __OPENCV_FACELANDMARK_HPP__
|
||||
|
||||
/**
|
||||
@defgroup face Face Analysis
|
||||
- @ref tutorial_table_of_content_facemark
|
||||
- The Facemark API
|
||||
*/
|
||||
|
||||
#include "opencv2/core.hpp"
|
||||
#include <vector>
|
||||
|
||||
|
||||
namespace cv {
|
||||
namespace face {
|
||||
|
||||
|
||||
/** @brief Abstract base class for all facemark models
|
||||
|
||||
To utilize this API in your program, please take a look at the @ref tutorial_table_of_content_facemark
|
||||
### Description
|
||||
|
||||
Facemark is a base class which provides universal access to any specific facemark algorithm.
|
||||
Therefore, the users should declare a desired algorithm before they can use it in their application.
|
||||
|
||||
Here is an example on how to declare a facemark algorithm:
|
||||
@code
|
||||
// Using Facemark in your code:
|
||||
Ptr<Facemark> facemark = createFacemarkLBF();
|
||||
@endcode
|
||||
|
||||
The typical pipeline for facemark detection is as follows:
|
||||
- Load the trained model using Facemark::loadModel.
|
||||
- Perform the fitting on an image via Facemark::fit.
|
||||
*/
|
||||
class CV_EXPORTS_W Facemark : public virtual Algorithm
|
||||
{
|
||||
public:
|
||||
|
||||
/** @brief A function to load the trained model before the fitting process.
|
||||
@param model A string represent the filename of a trained model.
|
||||
|
||||
<B>Example of usage</B>
|
||||
@code
|
||||
facemark->loadModel("../data/lbf.model");
|
||||
@endcode
|
||||
*/
|
||||
CV_WRAP virtual void loadModel( String model ) = 0;
|
||||
// virtual void saveModel(String fs)=0;
|
||||
|
||||
/** @brief Detect facial landmarks from an image.
|
||||
@param image Input image.
|
||||
@param faces Output of the function which represent region of interest of the detected faces.
|
||||
Each face is stored in cv::Rect container.
|
||||
@param landmarks The detected landmark points for each faces.
|
||||
|
||||
<B>Example of usage</B>
|
||||
@code
|
||||
Mat image = imread("image.jpg");
|
||||
std::vector<Rect> faces;
|
||||
std::vector<std::vector<Point2f> > landmarks;
|
||||
facemark->fit(image, faces, landmarks);
|
||||
@endcode
|
||||
*/
|
||||
CV_WRAP virtual bool fit( InputArray image,
|
||||
InputArray faces,
|
||||
OutputArrayOfArrays landmarks) = 0;
|
||||
}; /* Facemark*/
|
||||
|
||||
|
||||
//! construct an AAM facemark detector
|
||||
CV_EXPORTS_W Ptr<Facemark> createFacemarkAAM();
|
||||
|
||||
//! construct an LBF facemark detector
|
||||
CV_EXPORTS_W Ptr<Facemark> createFacemarkLBF();
|
||||
|
||||
//! construct a Kazemi facemark detector
|
||||
CV_EXPORTS_W Ptr<Facemark> createFacemarkKazemi();
|
||||
|
||||
|
||||
} // face
|
||||
} // cv
|
||||
|
||||
#endif //__OPENCV_FACELANDMARK_HPP__
|
||||
162
3rdparty/opencv/inc/opencv2/face/facemarkAAM.hpp
vendored
Normal file
162
3rdparty/opencv/inc/opencv2/face/facemarkAAM.hpp
vendored
Normal file
@@ -0,0 +1,162 @@
|
||||
/*
|
||||
By downloading, copying, installing or using the software you agree to this
|
||||
license. If you do not agree to this license, do not download, install,
|
||||
copy or use the software.
|
||||
License Agreement
|
||||
For Open Source Computer Vision Library
|
||||
(3-clause BSD License)
|
||||
Copyright (C) 2013, OpenCV Foundation, all rights reserved.
|
||||
Third party copyrights are property of their respective owners.
|
||||
Redistribution and use in source and binary forms, with or without modification,
|
||||
are permitted provided that the following conditions are met:
|
||||
* Redistributions of source code must retain the above copyright notice,
|
||||
this list of conditions and the following disclaimer.
|
||||
* Redistributions in binary form must reproduce the above copyright notice,
|
||||
this list of conditions and the following disclaimer in the documentation
|
||||
and/or other materials provided with the distribution.
|
||||
* Neither the names of the copyright holders nor the names of the contributors
|
||||
may be used to endorse or promote products derived from this software
|
||||
without specific prior written permission.
|
||||
This software is provided by the copyright holders and contributors "as is" and
|
||||
any express or implied warranties, including, but not limited to, the implied
|
||||
warranties of merchantability and fitness for a particular purpose are
|
||||
disclaimed. In no event shall copyright holders or contributors be liable for
|
||||
any direct, indirect, incidental, special, exemplary, or consequential damages
|
||||
(including, but not limited to, procurement of substitute goods or services;
|
||||
loss of use, data, or profits; or business interruption) however caused
|
||||
and on any theory of liability, whether in contract, strict liability,
|
||||
or tort (including negligence or otherwise) arising in any way out of
|
||||
the use of this software, even if advised of the possibility of such damage.
|
||||
|
||||
This file was part of GSoC Project: Facemark API for OpenCV
|
||||
Final report: https://gist.github.com/kurnianggoro/74de9121e122ad0bd825176751d47ecc
|
||||
Student: Laksono Kurnianggoro
|
||||
Mentor: Delia Passalacqua
|
||||
*/
|
||||
|
||||
#ifndef __OPENCV_FACEMARK_AAM_HPP__
|
||||
#define __OPENCV_FACEMARK_AAM_HPP__
|
||||
|
||||
#include "opencv2/face/facemark_train.hpp"
|
||||
namespace cv {
|
||||
namespace face {
|
||||
|
||||
//! @addtogroup face
|
||||
//! @{
|
||||
|
||||
class CV_EXPORTS_W FacemarkAAM : public FacemarkTrain
|
||||
{
|
||||
public:
|
||||
struct CV_EXPORTS Params
|
||||
{
|
||||
/**
|
||||
* \brief Constructor
|
||||
*/
|
||||
Params();
|
||||
|
||||
/**
|
||||
* \brief Read parameters from file, currently unused
|
||||
*/
|
||||
void read(const FileNode& /*fn*/);
|
||||
|
||||
/**
|
||||
* \brief Read parameters from file, currently unused
|
||||
*/
|
||||
void write(FileStorage& /*fs*/) const;
|
||||
|
||||
std::string model_filename;
|
||||
int m;
|
||||
int n;
|
||||
int n_iter;
|
||||
bool verbose;
|
||||
bool save_model;
|
||||
int max_m, max_n, texture_max_m;
|
||||
std::vector<float>scales;
|
||||
};
|
||||
|
||||
/**
|
||||
* \brief Optional parameter for fitting process.
|
||||
*/
|
||||
struct CV_EXPORTS Config
|
||||
{
|
||||
Config( Mat rot = Mat::eye(2,2,CV_32F),
|
||||
Point2f trans = Point2f(0.0f, 0.0f),
|
||||
float scaling = 1.0f,
|
||||
int scale_id=0
|
||||
);
|
||||
|
||||
Mat R;
|
||||
Point2f t;
|
||||
float scale;
|
||||
int model_scale_idx;
|
||||
|
||||
};
|
||||
|
||||
/**
|
||||
* \brief Data container for the facemark::getData function
|
||||
*/
|
||||
struct CV_EXPORTS Data
|
||||
{
|
||||
std::vector<Point2f> s0;
|
||||
};
|
||||
|
||||
/**
|
||||
* \brief The model of AAM Algorithm
|
||||
*/
|
||||
struct CV_EXPORTS Model
|
||||
{
|
||||
std::vector<float>scales;
|
||||
//!< defines the scales considered to build the model
|
||||
|
||||
/*warping*/
|
||||
std::vector<Vec3i> triangles;
|
||||
//!< each element contains 3 values, represent index of facemarks that construct one triangle (obtained using delaunay triangulation)
|
||||
|
||||
struct Texture{
|
||||
int max_m; //!< unused delete
|
||||
Rect resolution;
|
||||
//!< resolution of the current scale
|
||||
Mat A;
|
||||
//!< gray values from all face region in the dataset, projected in PCA space
|
||||
Mat A0;
|
||||
//!< average of gray values from all face region in the dataset
|
||||
Mat AA;
|
||||
//!< gray values from all erorded face region in the dataset, projected in PCA space
|
||||
Mat AA0;
|
||||
//!< average of gray values from all erorded face region in the dataset
|
||||
|
||||
std::vector<std::vector<Point> > textureIdx;
|
||||
//!< index for warping of each delaunay triangle region constructed by 3 facemarks
|
||||
std::vector<Point2f> base_shape;
|
||||
//!< basic shape, normalized to be fit in an image with current detection resolution
|
||||
std::vector<int> ind1;
|
||||
//!< index of pixels for mapping process to obtains the grays values of face region
|
||||
std::vector<int> ind2;
|
||||
//!< index of pixels for mapping process to obtains the grays values of eroded face region
|
||||
};
|
||||
std::vector<Texture> textures;
|
||||
//!< a container to holds the texture data for each scale of fitting
|
||||
|
||||
/*shape*/
|
||||
std::vector<Point2f> s0;
|
||||
//!< the basic shape obtained from training dataset
|
||||
Mat S,Q;
|
||||
//!< the encoded shapes from training data
|
||||
|
||||
};
|
||||
|
||||
//! overload with additional Config structures
|
||||
virtual bool fitConfig( InputArray image, InputArray roi, OutputArrayOfArrays _landmarks, const std::vector<Config> &runtime_params ) = 0;
|
||||
|
||||
|
||||
//! initializer
|
||||
static Ptr<FacemarkAAM> create(const FacemarkAAM::Params ¶meters = FacemarkAAM::Params() );
|
||||
virtual ~FacemarkAAM() {}
|
||||
|
||||
}; /* AAM */
|
||||
|
||||
//! @}
|
||||
|
||||
} /* namespace face */
|
||||
} /* namespace cv */
|
||||
#endif
|
||||
120
3rdparty/opencv/inc/opencv2/face/facemarkLBF.hpp
vendored
Normal file
120
3rdparty/opencv/inc/opencv2/face/facemarkLBF.hpp
vendored
Normal file
@@ -0,0 +1,120 @@
|
||||
/*
|
||||
By downloading, copying, installing or using the software you agree to this
|
||||
license. If you do not agree to this license, do not download, install,
|
||||
copy or use the software.
|
||||
License Agreement
|
||||
For Open Source Computer Vision Library
|
||||
(3-clause BSD License)
|
||||
Copyright (C) 2013, OpenCV Foundation, all rights reserved.
|
||||
Third party copyrights are property of their respective owners.
|
||||
Redistribution and use in source and binary forms, with or without modification,
|
||||
are permitted provided that the following conditions are met:
|
||||
* Redistributions of source code must retain the above copyright notice,
|
||||
this list of conditions and the following disclaimer.
|
||||
* Redistributions in binary form must reproduce the above copyright notice,
|
||||
this list of conditions and the following disclaimer in the documentation
|
||||
and/or other materials provided with the distribution.
|
||||
* Neither the names of the copyright holders nor the names of the contributors
|
||||
may be used to endorse or promote products derived from this software
|
||||
without specific prior written permission.
|
||||
This software is provided by the copyright holders and contributors "as is" and
|
||||
any express or implied warranties, including, but not limited to, the implied
|
||||
warranties of merchantability and fitness for a particular purpose are
|
||||
disclaimed. In no event shall copyright holders or contributors be liable for
|
||||
any direct, indirect, incidental, special, exemplary, or consequential damages
|
||||
(including, but not limited to, procurement of substitute goods or services;
|
||||
loss of use, data, or profits; or business interruption) however caused
|
||||
and on any theory of liability, whether in contract, strict liability,
|
||||
or tort (including negligence or otherwise) arising in any way out of
|
||||
the use of this software, even if advised of the possibility of such damage.
|
||||
|
||||
This file was part of GSoC Project: Facemark API for OpenCV
|
||||
Final report: https://gist.github.com/kurnianggoro/74de9121e122ad0bd825176751d47ecc
|
||||
Student: Laksono Kurnianggoro
|
||||
Mentor: Delia Passalacqua
|
||||
*/
|
||||
|
||||
#ifndef __OPENCV_FACEMARK_LBF_HPP__
|
||||
#define __OPENCV_FACEMARK_LBF_HPP__
|
||||
|
||||
#include "opencv2/face/facemark_train.hpp"
|
||||
|
||||
namespace cv {
|
||||
namespace face {
|
||||
|
||||
//! @addtogroup face
|
||||
//! @{
|
||||
|
||||
class CV_EXPORTS_W FacemarkLBF : public FacemarkTrain
|
||||
{
|
||||
public:
|
||||
struct CV_EXPORTS Params
|
||||
{
|
||||
/**
|
||||
* \brief Constructor
|
||||
*/
|
||||
Params();
|
||||
|
||||
double shape_offset;
|
||||
//!< offset for the loaded face landmark points
|
||||
String cascade_face;
|
||||
//!< filename of the face detector model
|
||||
bool verbose;
|
||||
//!< show the training print-out
|
||||
|
||||
int n_landmarks;
|
||||
//!< number of landmark points
|
||||
int initShape_n;
|
||||
//!< multiplier for augment the training data
|
||||
|
||||
int stages_n;
|
||||
//!< number of refinement stages
|
||||
int tree_n;
|
||||
//!< number of tree in the model for each landmark point refinement
|
||||
int tree_depth;
|
||||
//!< the depth of decision tree, defines the size of feature
|
||||
double bagging_overlap;
|
||||
//!< overlap ratio for training the LBF feature
|
||||
|
||||
std::string model_filename;
|
||||
//!< filename where the trained model will be saved
|
||||
bool save_model; //!< flag to save the trained model or not
|
||||
unsigned int seed; //!< seed for shuffling the training data
|
||||
|
||||
std::vector<int> feats_m;
|
||||
std::vector<double> radius_m;
|
||||
std::vector<int> pupils[2];
|
||||
//!< index of facemark points on pupils of left and right eye
|
||||
|
||||
Rect detectROI;
|
||||
|
||||
void read(const FileNode& /*fn*/);
|
||||
void write(FileStorage& /*fs*/) const;
|
||||
|
||||
};
|
||||
|
||||
class BBox {
|
||||
public:
|
||||
BBox();
|
||||
~BBox();
|
||||
BBox(double x, double y, double w, double h);
|
||||
|
||||
Mat project(const Mat &shape) const;
|
||||
Mat reproject(const Mat &shape) const;
|
||||
|
||||
double x, y;
|
||||
double x_center, y_center;
|
||||
double x_scale, y_scale;
|
||||
double width, height;
|
||||
};
|
||||
|
||||
static Ptr<FacemarkLBF> create(const FacemarkLBF::Params ¶meters = FacemarkLBF::Params() );
|
||||
virtual ~FacemarkLBF(){};
|
||||
}; /* LBF */
|
||||
|
||||
//! @}
|
||||
|
||||
} /* namespace face */
|
||||
}/* namespace cv */
|
||||
|
||||
#endif
|
||||
392
3rdparty/opencv/inc/opencv2/face/facemark_train.hpp
vendored
Normal file
392
3rdparty/opencv/inc/opencv2/face/facemark_train.hpp
vendored
Normal file
@@ -0,0 +1,392 @@
|
||||
// This file is part of OpenCV project.
|
||||
// It is subject to the license terms in the LICENSE file found in the top-level directory
|
||||
// of this distribution and at http://opencv.org/license.html.
|
||||
|
||||
/*
|
||||
This file was part of GSoC Project: Facemark API for OpenCV
|
||||
Final report: https://gist.github.com/kurnianggoro/74de9121e122ad0bd825176751d47ecc
|
||||
Student: Laksono Kurnianggoro
|
||||
Mentor: Delia Passalacqua
|
||||
*/
|
||||
|
||||
#ifndef __OPENCV_FACELANDMARKTRAIN_HPP__
|
||||
#define __OPENCV_FACELANDMARKTRAIN_HPP__
|
||||
|
||||
/**
|
||||
@defgroup face Face Analysis
|
||||
- @ref tutorial_table_of_content_facemark
|
||||
- The Facemark API
|
||||
*/
|
||||
|
||||
#include "opencv2/face/facemark.hpp"
|
||||
#include "opencv2/objdetect.hpp"
|
||||
#include <vector>
|
||||
#include <string>
|
||||
|
||||
|
||||
namespace cv {
|
||||
namespace face {
|
||||
|
||||
//! @addtogroup face
|
||||
//! @{
|
||||
|
||||
typedef bool(*FN_FaceDetector)(InputArray, OutputArray, void* userData);
|
||||
|
||||
struct CParams{
|
||||
String cascade; //!< the face detector
|
||||
double scaleFactor; //!< Parameter specifying how much the image size is reduced at each image scale.
|
||||
int minNeighbors; //!< Parameter specifying how many neighbors each candidate rectangle should have to retain it.
|
||||
Size minSize; //!< Minimum possible object size.
|
||||
Size maxSize; //!< Maximum possible object size.
|
||||
|
||||
CV_EXPORTS CParams(
|
||||
String cascade_model,
|
||||
double sf = 1.1,
|
||||
int minN = 3,
|
||||
Size minSz = Size(30, 30),
|
||||
Size maxSz = Size()
|
||||
);
|
||||
|
||||
CascadeClassifier face_cascade;
|
||||
};
|
||||
|
||||
/** @brief Default face detector
|
||||
This function is mainly utilized by the implementation of a Facemark Algorithm.
|
||||
End users are advised to use function Facemark::getFaces which can be manually defined
|
||||
and circumvented to the algorithm by Facemark::setFaceDetector.
|
||||
|
||||
@param image The input image to be processed.
|
||||
@param faces Output of the function which represent region of interest of the detected faces.
|
||||
Each face is stored in cv::Rect container.
|
||||
@param params detector parameters
|
||||
|
||||
<B>Example of usage</B>
|
||||
@code
|
||||
std::vector<cv::Rect> faces;
|
||||
CParams params("haarcascade_frontalface_alt.xml");
|
||||
cv::face::getFaces(frame, faces, ¶ms);
|
||||
for(int j=0;j<faces.size();j++){
|
||||
cv::rectangle(frame, faces[j], cv::Scalar(255,0,255));
|
||||
}
|
||||
cv::imshow("detection", frame);
|
||||
@endcode
|
||||
*/
|
||||
CV_EXPORTS bool getFaces(InputArray image, OutputArray faces, CParams* params);
|
||||
|
||||
CV_EXPORTS_W bool getFacesHAAR(InputArray image, OutputArray faces, const String& face_cascade_name);
|
||||
|
||||
/** @brief A utility to load list of paths to training image and annotation file.
|
||||
@param imageList The specified file contains paths to the training images.
|
||||
@param annotationList The specified file contains paths to the training annotations.
|
||||
@param images The loaded paths of training images.
|
||||
@param annotations The loaded paths of annotation files.
|
||||
|
||||
Example of usage:
|
||||
@code
|
||||
String imageFiles = "images_path.txt";
|
||||
String ptsFiles = "annotations_path.txt";
|
||||
std::vector<String> images_train;
|
||||
std::vector<String> landmarks_train;
|
||||
loadDatasetList(imageFiles,ptsFiles,images_train,landmarks_train);
|
||||
@endcode
|
||||
*/
|
||||
CV_EXPORTS_W bool loadDatasetList(String imageList,
|
||||
String annotationList,
|
||||
std::vector<String> & images,
|
||||
std::vector<String> & annotations);
|
||||
|
||||
/** @brief A utility to load facial landmark dataset from a single file.
|
||||
|
||||
@param filename The filename of a file that contains the dataset information.
|
||||
Each line contains the filename of an image followed by
|
||||
pairs of x and y values of facial landmarks points separated by a space.
|
||||
Example
|
||||
@code
|
||||
/home/user/ibug/image_003_1.jpg 336.820955 240.864510 334.238298 260.922709 335.266918 ...
|
||||
/home/user/ibug/image_005_1.jpg 376.158428 230.845712 376.736984 254.924635 383.265403 ...
|
||||
@endcode
|
||||
@param images A vector where each element represent the filename of image in the dataset.
|
||||
Images are not loaded by default to save the memory.
|
||||
@param facePoints The loaded landmark points for all training data.
|
||||
@param delim Delimiter between each element, the default value is a whitespace.
|
||||
@param offset An offset value to adjust the loaded points.
|
||||
|
||||
<B>Example of usage</B>
|
||||
@code
|
||||
cv::String imageFiles = "../data/images_train.txt";
|
||||
cv::String ptsFiles = "../data/points_train.txt";
|
||||
std::vector<String> images;
|
||||
std::vector<std::vector<Point2f> > facePoints;
|
||||
loadTrainingData(imageFiles, ptsFiles, images, facePoints, 0.0f);
|
||||
@endcode
|
||||
*/
|
||||
CV_EXPORTS_W bool loadTrainingData( String filename , std::vector<String> & images,
|
||||
OutputArray facePoints,
|
||||
char delim = ' ', float offset = 0.0f);
|
||||
|
||||
/** @brief A utility to load facial landmark information from the dataset.
|
||||
|
||||
@param imageList A file contains the list of image filenames in the training dataset.
|
||||
@param groundTruth A file contains the list of filenames
|
||||
where the landmarks points information are stored.
|
||||
The content in each file should follow the standard format (see face::loadFacePoints).
|
||||
@param images A vector where each element represent the filename of image in the dataset.
|
||||
Images are not loaded by default to save the memory.
|
||||
@param facePoints The loaded landmark points for all training data.
|
||||
@param offset An offset value to adjust the loaded points.
|
||||
|
||||
<B>Example of usage</B>
|
||||
@code
|
||||
cv::String imageFiles = "../data/images_train.txt";
|
||||
cv::String ptsFiles = "../data/points_train.txt";
|
||||
std::vector<String> images;
|
||||
std::vector<std::vector<Point2f> > facePoints;
|
||||
loadTrainingData(imageFiles, ptsFiles, images, facePoints, 0.0f);
|
||||
@endcode
|
||||
|
||||
example of content in the images_train.txt
|
||||
@code
|
||||
/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
|
||||
@endcode
|
||||
|
||||
example of content in the points_train.txt
|
||||
@code
|
||||
/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
|
||||
@endcode
|
||||
*/
|
||||
CV_EXPORTS_W bool loadTrainingData( String imageList, String groundTruth,
|
||||
std::vector<String> & images,
|
||||
OutputArray facePoints,
|
||||
float offset = 0.0f);
|
||||
|
||||
/** @brief This function extracts the data for training from .txt files which contains the corresponding image name and landmarks.
|
||||
*The first file in each file should give the path of the image whose
|
||||
*landmarks are being described in the file. Then in the subsequent
|
||||
*lines there should be coordinates of the landmarks in the image
|
||||
*i.e each line should be of the form x,y
|
||||
*where x represents the x coordinate of the landmark and y represents
|
||||
*the y coordinate of the landmark.
|
||||
*
|
||||
*For reference you can see the files as provided in the
|
||||
*<a href="http://www.ifp.illinois.edu/~vuongle2/helen/">HELEN dataset</a>
|
||||
*
|
||||
* @param filename A vector of type cv::String containing name of the .txt files.
|
||||
* @param trainlandmarks A vector of type cv::Point2f that would store shape or landmarks of all images.
|
||||
* @param trainimages A vector of type cv::String which stores the name of images whose landmarks are tracked
|
||||
* @returns A boolean value. It returns true when it reads the data successfully and false otherwise
|
||||
*/
|
||||
CV_EXPORTS_W bool loadTrainingData(std::vector<String> filename,std::vector< std::vector<Point2f> >
|
||||
&trainlandmarks,std::vector<String> & trainimages);
|
||||
|
||||
/** @brief A utility to load facial landmark information from a given file.
|
||||
|
||||
@param filename The filename of file contains the facial landmarks data.
|
||||
@param points The loaded facial landmark points.
|
||||
@param offset An offset value to adjust the loaded points.
|
||||
|
||||
<B>Example of usage</B>
|
||||
@code
|
||||
std::vector<Point2f> points;
|
||||
face::loadFacePoints("filename.txt", points, 0.0f);
|
||||
@endcode
|
||||
|
||||
The annotation file should follow the default format which is
|
||||
@code
|
||||
version: 1
|
||||
n_points: 68
|
||||
{
|
||||
212.716603 499.771793
|
||||
230.232816 566.290071
|
||||
...
|
||||
}
|
||||
@endcode
|
||||
where n_points is the number of points considered
|
||||
and each point is represented as its position in x and y.
|
||||
*/
|
||||
CV_EXPORTS_W bool loadFacePoints( String filename, OutputArray points,
|
||||
float offset = 0.0f);
|
||||
|
||||
/** @brief Utility to draw the detected facial landmark points
|
||||
|
||||
@param image The input image to be processed.
|
||||
@param points Contains the data of points which will be drawn.
|
||||
@param color The color of points in BGR format represented by cv::Scalar.
|
||||
|
||||
<B>Example of usage</B>
|
||||
@code
|
||||
std::vector<Rect> faces;
|
||||
std::vector<std::vector<Point2f> > landmarks;
|
||||
facemark->getFaces(img, faces);
|
||||
facemark->fit(img, faces, landmarks);
|
||||
for(int j=0;j<rects.size();j++){
|
||||
face::drawFacemarks(frame, landmarks[j], Scalar(0,0,255));
|
||||
}
|
||||
@endcode
|
||||
*/
|
||||
CV_EXPORTS_W void drawFacemarks( InputOutputArray image, InputArray points,
|
||||
Scalar color = Scalar(255,0,0));
|
||||
|
||||
/** @brief Abstract base class for trainable facemark models
|
||||
|
||||
To utilize this API in your program, please take a look at the @ref 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:
|
||||
@code
|
||||
// Using Facemark in your code:
|
||||
Ptr<Facemark> facemark = FacemarkLBF::create();
|
||||
@endcode
|
||||
|
||||
|
||||
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.
|
||||
*/
|
||||
class CV_EXPORTS_W FacemarkTrain : public Facemark
|
||||
{
|
||||
public:
|
||||
/** @brief Add one training sample to the trainer.
|
||||
|
||||
@param image Input image.
|
||||
@param landmarks The ground-truth of facial landmarks points corresponds to the image.
|
||||
|
||||
<B>Example of usage</B>
|
||||
@code
|
||||
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);
|
||||
}
|
||||
@endcode
|
||||
|
||||
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
|
||||
@code
|
||||
/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
|
||||
@endcode
|
||||
|
||||
example of content in the points_train.txt
|
||||
@code
|
||||
/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
|
||||
@endcode
|
||||
|
||||
*/
|
||||
virtual bool addTrainingSample(InputArray image, InputArray landmarks)=0;
|
||||
|
||||
/** @brief Trains a Facemark algorithm using the given dataset.
|
||||
Before the training process, training samples should be added to the trainer
|
||||
using face::addTrainingSample function.
|
||||
|
||||
@param parameters Optional extra parameters (algorithm dependent).
|
||||
|
||||
<B>Example of usage</B>
|
||||
@code
|
||||
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();
|
||||
@endcode
|
||||
*/
|
||||
|
||||
virtual void training(void* parameters=0)=0;
|
||||
|
||||
/** @brief Set a user defined face detector for the Facemark algorithm.
|
||||
@param detector The user defined face detector function
|
||||
@param userData Detector parameters
|
||||
|
||||
<B>Example of usage</B>
|
||||
@code
|
||||
MyDetectorParameters detectorParameters(...);
|
||||
facemark->setFaceDetector(myDetector, &detectorParameters);
|
||||
@endcode
|
||||
|
||||
Example of a user defined face detector
|
||||
@code
|
||||
bool myDetector( InputArray image, OutputArray faces, void* userData)
|
||||
{
|
||||
MyDetectorParameters* params = (MyDetectorParameters*)userData;
|
||||
// -------- do something --------
|
||||
}
|
||||
@endcode
|
||||
|
||||
TODO Lifetime of detector parameters is uncontrolled. Rework interface design to "Ptr<FaceDetector>".
|
||||
*/
|
||||
virtual bool setFaceDetector(FN_FaceDetector detector, void* userData = 0)=0;
|
||||
|
||||
/** @brief Detect faces from a given image using default or user defined face detector.
|
||||
Some Algorithm might not provide a default face detector.
|
||||
|
||||
@param image Input image.
|
||||
@param faces Output of the function which represent region of interest of the detected faces. Each face is stored in cv::Rect container.
|
||||
|
||||
<B>Example of usage</B>
|
||||
@code
|
||||
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));
|
||||
}
|
||||
@endcode
|
||||
*/
|
||||
virtual bool getFaces(InputArray image, OutputArray faces)=0;
|
||||
|
||||
/** @brief Get data from an algorithm
|
||||
|
||||
@param items The obtained data, algorithm dependent.
|
||||
|
||||
<B>Example of usage</B>
|
||||
@code
|
||||
Ptr<FacemarkAAM> facemark = FacemarkAAM::create();
|
||||
facemark->loadModel("AAM.yml");
|
||||
|
||||
FacemarkAAM::Data data;
|
||||
facemark->getData(&data);
|
||||
std::vector<Point2f> s0 = data.s0;
|
||||
|
||||
cout<<s0<<endl;
|
||||
@endcode
|
||||
*/
|
||||
virtual bool getData(void * items=0)=0; // FIXIT
|
||||
}; /* Facemark*/
|
||||
|
||||
//! @}
|
||||
} /* namespace face */
|
||||
} /* namespace cv */
|
||||
#endif //__OPENCV_FACELANDMARKTRAIN_HPP__
|
||||
191
3rdparty/opencv/inc/opencv2/face/facerec.hpp
vendored
Normal file
191
3rdparty/opencv/inc/opencv2/face/facerec.hpp
vendored
Normal file
@@ -0,0 +1,191 @@
|
||||
// This file is part of OpenCV project.
|
||||
// It is subject to the license terms in the LICENSE file found in the top-level directory
|
||||
// of this distribution and at http://opencv.org/license.html.
|
||||
|
||||
// Copyright (c) 2011,2012. Philipp Wagner <bytefish[at]gmx[dot]de>.
|
||||
// Third party copyrights are property of their respective owners.
|
||||
|
||||
#ifndef __OPENCV_FACEREC_HPP__
|
||||
#define __OPENCV_FACEREC_HPP__
|
||||
|
||||
#include "opencv2/face.hpp"
|
||||
#include "opencv2/core.hpp"
|
||||
|
||||
namespace cv { namespace face {
|
||||
|
||||
//! @addtogroup face
|
||||
//! @{
|
||||
|
||||
// base for two classes
|
||||
class CV_EXPORTS_W BasicFaceRecognizer : public FaceRecognizer
|
||||
{
|
||||
public:
|
||||
/** @see setNumComponents */
|
||||
CV_WRAP int getNumComponents() const;
|
||||
/** @copybrief getNumComponents @see getNumComponents */
|
||||
CV_WRAP void setNumComponents(int val);
|
||||
/** @see setThreshold */
|
||||
CV_WRAP double getThreshold() const CV_OVERRIDE;
|
||||
/** @copybrief getThreshold @see getThreshold */
|
||||
CV_WRAP void setThreshold(double val) CV_OVERRIDE;
|
||||
CV_WRAP std::vector<cv::Mat> getProjections() const;
|
||||
CV_WRAP cv::Mat getLabels() const;
|
||||
CV_WRAP cv::Mat getEigenValues() const;
|
||||
CV_WRAP cv::Mat getEigenVectors() const;
|
||||
CV_WRAP cv::Mat getMean() const;
|
||||
|
||||
virtual void read(const FileNode& fn) CV_OVERRIDE;
|
||||
virtual void write(FileStorage& fs) const CV_OVERRIDE;
|
||||
virtual bool empty() const CV_OVERRIDE;
|
||||
|
||||
using FaceRecognizer::read;
|
||||
using FaceRecognizer::write;
|
||||
|
||||
protected:
|
||||
int _num_components;
|
||||
double _threshold;
|
||||
std::vector<Mat> _projections;
|
||||
Mat _labels;
|
||||
Mat _eigenvectors;
|
||||
Mat _eigenvalues;
|
||||
Mat _mean;
|
||||
};
|
||||
|
||||
class CV_EXPORTS_W EigenFaceRecognizer : public BasicFaceRecognizer
|
||||
{
|
||||
public:
|
||||
/**
|
||||
@param num_components The number of components (read: Eigenfaces) kept for this Principal
|
||||
Component Analysis. As a hint: There's no rule how many components (read: Eigenfaces) should be
|
||||
kept for good reconstruction capabilities. It is based on your input data, so experiment with the
|
||||
number. Keeping 80 components should almost always be sufficient.
|
||||
@param threshold The threshold applied in the prediction.
|
||||
|
||||
### Notes:
|
||||
|
||||
- Training and prediction must be done on grayscale images, use cvtColor to convert between the
|
||||
color spaces.
|
||||
- **THE EIGENFACES METHOD MAKES THE ASSUMPTION, THAT THE TRAINING AND TEST IMAGES ARE OF EQUAL
|
||||
SIZE.** (caps-lock, because I got so many mails asking for this). You have to make sure your
|
||||
input data has the correct shape, else a meaningful exception is thrown. Use resize to resize
|
||||
the images.
|
||||
- This model does not support updating.
|
||||
|
||||
### Model internal data:
|
||||
|
||||
- num_components see EigenFaceRecognizer::create.
|
||||
- threshold see EigenFaceRecognizer::create.
|
||||
- eigenvalues The eigenvalues for this Principal Component Analysis (ordered descending).
|
||||
- eigenvectors The eigenvectors for this Principal Component Analysis (ordered by their
|
||||
eigenvalue).
|
||||
- mean The sample mean calculated from the training data.
|
||||
- projections The projections of the training data.
|
||||
- labels The threshold applied in the prediction. If the distance to the nearest neighbor is
|
||||
larger than the threshold, this method returns -1.
|
||||
*/
|
||||
CV_WRAP static Ptr<EigenFaceRecognizer> create(int num_components = 0, double threshold = DBL_MAX);
|
||||
};
|
||||
|
||||
class CV_EXPORTS_W FisherFaceRecognizer : public BasicFaceRecognizer
|
||||
{
|
||||
public:
|
||||
/**
|
||||
@param num_components The number of components (read: Fisherfaces) kept for this Linear
|
||||
Discriminant Analysis with the Fisherfaces criterion. It's useful to keep all components, that
|
||||
means the number of your classes c (read: subjects, persons you want to recognize). If you leave
|
||||
this at the default (0) or set it to a value less-equal 0 or greater (c-1), it will be set to the
|
||||
correct number (c-1) automatically.
|
||||
@param threshold The threshold applied in the prediction. If the distance to the nearest neighbor
|
||||
is larger than the threshold, this method returns -1.
|
||||
|
||||
### Notes:
|
||||
|
||||
- Training and prediction must be done on grayscale images, use cvtColor to convert between the
|
||||
color spaces.
|
||||
- **THE FISHERFACES METHOD MAKES THE ASSUMPTION, THAT THE TRAINING AND TEST IMAGES ARE OF EQUAL
|
||||
SIZE.** (caps-lock, because I got so many mails asking for this). You have to make sure your
|
||||
input data has the correct shape, else a meaningful exception is thrown. Use resize to resize
|
||||
the images.
|
||||
- This model does not support updating.
|
||||
|
||||
### Model internal data:
|
||||
|
||||
- num_components see FisherFaceRecognizer::create.
|
||||
- threshold see FisherFaceRecognizer::create.
|
||||
- eigenvalues The eigenvalues for this Linear Discriminant Analysis (ordered descending).
|
||||
- eigenvectors The eigenvectors for this Linear Discriminant Analysis (ordered by their
|
||||
eigenvalue).
|
||||
- mean The sample mean calculated from the training data.
|
||||
- projections The projections of the training data.
|
||||
- labels The labels corresponding to the projections.
|
||||
*/
|
||||
CV_WRAP static Ptr<FisherFaceRecognizer> create(int num_components = 0, double threshold = DBL_MAX);
|
||||
};
|
||||
|
||||
|
||||
class CV_EXPORTS_W LBPHFaceRecognizer : public FaceRecognizer
|
||||
{
|
||||
public:
|
||||
/** @see setGridX */
|
||||
CV_WRAP virtual int getGridX() const = 0;
|
||||
/** @copybrief getGridX @see getGridX */
|
||||
CV_WRAP virtual void setGridX(int val) = 0;
|
||||
/** @see setGridY */
|
||||
CV_WRAP virtual int getGridY() const = 0;
|
||||
/** @copybrief getGridY @see getGridY */
|
||||
CV_WRAP virtual void setGridY(int val) = 0;
|
||||
/** @see setRadius */
|
||||
CV_WRAP virtual int getRadius() const = 0;
|
||||
/** @copybrief getRadius @see getRadius */
|
||||
CV_WRAP virtual void setRadius(int val) = 0;
|
||||
/** @see setNeighbors */
|
||||
CV_WRAP virtual int getNeighbors() const = 0;
|
||||
/** @copybrief getNeighbors @see getNeighbors */
|
||||
CV_WRAP virtual void setNeighbors(int val) = 0;
|
||||
/** @see setThreshold */
|
||||
CV_WRAP virtual double getThreshold() const CV_OVERRIDE = 0;
|
||||
/** @copybrief getThreshold @see getThreshold */
|
||||
CV_WRAP virtual void setThreshold(double val) CV_OVERRIDE = 0;
|
||||
CV_WRAP virtual std::vector<cv::Mat> getHistograms() const = 0;
|
||||
CV_WRAP virtual cv::Mat getLabels() const = 0;
|
||||
|
||||
/**
|
||||
@param radius The radius used for building the Circular Local Binary Pattern. The greater the
|
||||
radius, the smoother the image but more spatial information you can get.
|
||||
@param neighbors The number of sample points to build a Circular Local Binary Pattern from. An
|
||||
appropriate value is to use `8` sample points. Keep in mind: the more sample points you include,
|
||||
the higher the computational cost.
|
||||
@param grid_x The number of cells in the horizontal direction, 8 is a common value used in
|
||||
publications. The more cells, the finer the grid, the higher the dimensionality of the resulting
|
||||
feature vector.
|
||||
@param grid_y The number of cells in the vertical direction, 8 is a common value used in
|
||||
publications. The more cells, the finer the grid, the higher the dimensionality of the resulting
|
||||
feature vector.
|
||||
@param threshold The threshold applied in the prediction. If the distance to the nearest neighbor
|
||||
is larger than the threshold, this method returns -1.
|
||||
|
||||
### Notes:
|
||||
|
||||
- The Circular Local Binary Patterns (used in training and prediction) expect the data given as
|
||||
grayscale images, use cvtColor to convert between the color spaces.
|
||||
- This model supports updating.
|
||||
|
||||
### Model internal data:
|
||||
|
||||
- radius see LBPHFaceRecognizer::create.
|
||||
- neighbors see LBPHFaceRecognizer::create.
|
||||
- grid_x see LLBPHFaceRecognizer::create.
|
||||
- grid_y see LBPHFaceRecognizer::create.
|
||||
- threshold see LBPHFaceRecognizer::create.
|
||||
- histograms Local Binary Patterns Histograms calculated from the given training data (empty if
|
||||
none was given).
|
||||
- labels Labels corresponding to the calculated Local Binary Patterns Histograms.
|
||||
*/
|
||||
CV_WRAP static Ptr<LBPHFaceRecognizer> create(int radius=1, int neighbors=8, int grid_x=8, int grid_y=8, double threshold = DBL_MAX);
|
||||
};
|
||||
|
||||
//! @}
|
||||
|
||||
}} //namespace cv::face
|
||||
|
||||
#endif //__OPENCV_FACEREC_HPP__
|
||||
114
3rdparty/opencv/inc/opencv2/face/mace.hpp
vendored
Normal file
114
3rdparty/opencv/inc/opencv2/face/mace.hpp
vendored
Normal file
@@ -0,0 +1,114 @@
|
||||
// This file is part of the OpenCV project.
|
||||
// It is subject to the license terms in the LICENSE file found in the top-level directory
|
||||
// of this distribution and at http://opencv.org/license.html.
|
||||
|
||||
#ifndef __mace_h_onboard__
|
||||
#define __mace_h_onboard__
|
||||
|
||||
#include "opencv2/core.hpp"
|
||||
|
||||
|
||||
namespace cv {
|
||||
namespace face {
|
||||
|
||||
//! @addtogroup face
|
||||
//! @{
|
||||
|
||||
|
||||
/**
|
||||
@brief Minimum Average Correlation Energy Filter
|
||||
useful for authentication with (cancellable) biometrical features.
|
||||
(does not need many positives to train (10-50), and no negatives at all, also robust to noise/salting)
|
||||
|
||||
see also: @cite Savvides04
|
||||
|
||||
this implementation is largely based on: https://code.google.com/archive/p/pam-face-authentication (GSOC 2009)
|
||||
|
||||
use it like:
|
||||
@code
|
||||
|
||||
Ptr<face::MACE> mace = face::MACE::create(64);
|
||||
|
||||
vector<Mat> pos_images = ...
|
||||
mace->train(pos_images);
|
||||
|
||||
Mat query = ...
|
||||
bool same = mace->same(query);
|
||||
|
||||
@endcode
|
||||
|
||||
you can also use two-factor authentication, with an additional passphrase:
|
||||
|
||||
@code
|
||||
String owners_passphrase = "ilikehotdogs";
|
||||
Ptr<face::MACE> mace = face::MACE::create(64);
|
||||
mace->salt(owners_passphrase);
|
||||
vector<Mat> pos_images = ...
|
||||
mace->train(pos_images);
|
||||
|
||||
// now, users have to give a valid passphrase, along with the image:
|
||||
Mat query = ...
|
||||
cout << "enter passphrase: ";
|
||||
string pass;
|
||||
getline(cin, pass);
|
||||
mace->salt(pass);
|
||||
bool same = mace->same(query);
|
||||
@endcode
|
||||
|
||||
save/load your model:
|
||||
@code
|
||||
Ptr<face::MACE> mace = face::MACE::create(64);
|
||||
mace->train(pos_images);
|
||||
mace->save("my_mace.xml");
|
||||
|
||||
// later:
|
||||
Ptr<MACE> reloaded = MACE::load("my_mace.xml");
|
||||
reloaded->same(some_image);
|
||||
@endcode
|
||||
|
||||
*/
|
||||
|
||||
class CV_EXPORTS_W MACE : public cv::Algorithm
|
||||
{
|
||||
public:
|
||||
/**
|
||||
@brief optionally encrypt images with random convolution
|
||||
@param passphrase a crc64 random seed will get generated from this
|
||||
*/
|
||||
CV_WRAP virtual void salt(const cv::String &passphrase) = 0;
|
||||
|
||||
/**
|
||||
@brief train it on positive features
|
||||
compute the mace filter: `h = D(-1) * X * (X(+) * D(-1) * X)(-1) * C`
|
||||
also calculate a minimal threshold for this class, the smallest self-similarity from the train images
|
||||
@param images a vector<Mat> with the train images
|
||||
*/
|
||||
CV_WRAP virtual void train(cv::InputArrayOfArrays images) = 0;
|
||||
|
||||
/**
|
||||
@brief correlate query img and threshold to min class value
|
||||
@param query a Mat with query image
|
||||
*/
|
||||
CV_WRAP virtual bool same(cv::InputArray query) const = 0;
|
||||
|
||||
|
||||
/**
|
||||
@brief constructor
|
||||
@param filename build a new MACE instance from a pre-serialized FileStorage
|
||||
@param objname (optional) top-level node in the FileStorage
|
||||
*/
|
||||
CV_WRAP static cv::Ptr<MACE> load(const String &filename, const String &objname=String());
|
||||
|
||||
/**
|
||||
@brief constructor
|
||||
@param IMGSIZE images will get resized to this (should be an even number)
|
||||
*/
|
||||
CV_WRAP static cv::Ptr<MACE> create(int IMGSIZE=64);
|
||||
};
|
||||
|
||||
//! @}
|
||||
|
||||
}/* namespace face */
|
||||
}/* namespace cv */
|
||||
|
||||
#endif // __mace_h_onboard__
|
||||
127
3rdparty/opencv/inc/opencv2/face/predict_collector.hpp
vendored
Normal file
127
3rdparty/opencv/inc/opencv2/face/predict_collector.hpp
vendored
Normal file
@@ -0,0 +1,127 @@
|
||||
/*
|
||||
By downloading, copying, installing or using the software you agree to this license.
|
||||
If you do not agree to this license, do not download, install,
|
||||
copy or use the software.
|
||||
|
||||
|
||||
License Agreement
|
||||
For Open Source Computer Vision Library
|
||||
(3-clause BSD License)
|
||||
|
||||
Copyright (C) 2000-2015, Intel Corporation, all rights reserved.
|
||||
Copyright (C) 2009-2011, Willow Garage Inc., all rights reserved.
|
||||
Copyright (C) 2009-2015, NVIDIA Corporation, all rights reserved.
|
||||
Copyright (C) 2010-2013, Advanced Micro Devices, Inc., all rights reserved.
|
||||
Copyright (C) 2015, OpenCV Foundation, all rights reserved.
|
||||
Copyright (C) 2015, Itseez Inc., all rights reserved.
|
||||
Third party copyrights are property of their respective owners.
|
||||
|
||||
Redistribution and use in source and binary forms, with or without modification,
|
||||
are permitted provided that the following conditions are met:
|
||||
|
||||
* Redistributions of source code must retain the above copyright notice,
|
||||
this list of conditions and the following disclaimer.
|
||||
|
||||
* Redistributions in binary form must reproduce the above copyright notice,
|
||||
this list of conditions and the following disclaimer in the documentation
|
||||
and/or other materials provided with the distribution.
|
||||
|
||||
* Neither the names of the copyright holders nor the names of the contributors
|
||||
may be used to endorse or promote products derived from this software
|
||||
without specific prior written permission.
|
||||
|
||||
This software is provided by the copyright holders and contributors "as is" and
|
||||
any express or implied warranties, including, but not limited to, the implied
|
||||
warranties of merchantability and fitness for a particular purpose are disclaimed.
|
||||
In no event shall copyright holders or contributors be liable for any direct,
|
||||
indirect, incidental, special, exemplary, or consequential damages
|
||||
(including, but not limited to, procurement of substitute goods or services;
|
||||
loss of use, data, or profits; or business interruption) however caused
|
||||
and on any theory of liability, whether in contract, strict liability,
|
||||
or tort (including negligence or otherwise) arising in any way out of
|
||||
the use of this software, even if advised of the possibility of such damage.
|
||||
*/
|
||||
|
||||
#ifndef __OPENCV_PREDICT_COLLECTOR_HPP__
|
||||
#define __OPENCV_PREDICT_COLLECTOR_HPP__
|
||||
|
||||
#include <vector>
|
||||
#include <map>
|
||||
#include <utility>
|
||||
#include <cfloat>
|
||||
|
||||
#include "opencv2/core/base.hpp"
|
||||
|
||||
namespace cv {
|
||||
namespace face {
|
||||
//! @addtogroup face
|
||||
//! @{
|
||||
/** @brief Abstract base class for all strategies of prediction result handling
|
||||
*/
|
||||
class CV_EXPORTS_W PredictCollector
|
||||
{
|
||||
public:
|
||||
virtual ~PredictCollector() {}
|
||||
|
||||
/** @brief Interface method called by face recognizer before results processing
|
||||
@param size total size of prediction evaluation that recognizer could perform
|
||||
*/
|
||||
virtual void init(size_t size) { CV_UNUSED(size); }
|
||||
|
||||
/** @brief Interface method called by face recognizer for each result
|
||||
@param label current prediction label
|
||||
@param dist current prediction distance (confidence)
|
||||
*/
|
||||
virtual bool collect(int label, double dist) = 0;
|
||||
};
|
||||
|
||||
/** @brief Default predict collector
|
||||
|
||||
Trace minimal distance with treshhold checking (that is default behavior for most predict logic)
|
||||
*/
|
||||
class CV_EXPORTS_W StandardCollector : public PredictCollector
|
||||
{
|
||||
public:
|
||||
struct PredictResult
|
||||
{
|
||||
int label;
|
||||
double distance;
|
||||
PredictResult(int label_ = -1, double distance_ = DBL_MAX) : label(label_), distance(distance_) {}
|
||||
};
|
||||
protected:
|
||||
double threshold;
|
||||
PredictResult minRes;
|
||||
std::vector<PredictResult> data;
|
||||
public:
|
||||
/** @brief Constructor
|
||||
@param threshold_ set threshold
|
||||
*/
|
||||
StandardCollector(double threshold_ = DBL_MAX);
|
||||
/** @brief overloaded interface method */
|
||||
void init(size_t size) CV_OVERRIDE;
|
||||
/** @brief overloaded interface method */
|
||||
bool collect(int label, double dist) CV_OVERRIDE;
|
||||
/** @brief Returns label with minimal distance */
|
||||
CV_WRAP int getMinLabel() const;
|
||||
/** @brief Returns minimal distance value */
|
||||
CV_WRAP double getMinDist() const;
|
||||
/** @brief Return results as vector
|
||||
@param sorted If set, results will be sorted by distance
|
||||
Each values is a pair of label and distance.
|
||||
*/
|
||||
CV_WRAP std::vector< std::pair<int, double> > getResults(bool sorted = false) const;
|
||||
/** @brief Return results as map
|
||||
Labels are keys, values are minimal distances
|
||||
*/
|
||||
std::map<int, double> getResultsMap() const;
|
||||
/** @brief Static constructor
|
||||
@param threshold set threshold
|
||||
*/
|
||||
CV_WRAP static Ptr<StandardCollector> create(double threshold = DBL_MAX);
|
||||
};
|
||||
|
||||
//! @}
|
||||
}
|
||||
}
|
||||
|
||||
#endif
|
||||
Reference in New Issue
Block a user