OpenCV 4.12.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
 使用預設或使用者定義的人臉檢測器從給定影像中檢測人臉。某些演算法可能未提供預設的人臉檢測器。
 
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
Definition cvstd_wrapper.hpp:23

面部特徵點檢測的典型流程如下

  • (非強制) 使用FacemarkTrain::setFaceDetector 設定使用者定義的人臉檢測器。面部特徵點演算法旨在將面部點擬合到人臉中。因此,應向面部特徵點演算法提供人臉資訊。某些演算法可能提供預設的人臉識別功能。但是,使用者可能更喜歡使用自己的人臉檢測器以獲得最佳檢測結果。
  • (非強制) 使用FacemarkTrain::training 為特定演算法訓練模型。在這種情況下,模型應由演算法自動儲存。如果使用者已有訓練好的模型,則可以省略此部分。
  • 使用Facemark::loadModel 載入訓練好的模型。
  • 透過Facemark::fit 執行擬合。

成員函式文件

◆ addTrainingSample()

virtual bool cv::face::FacemarkTrain::addTrainingSample ( InputArray image,
InputArray landmarks )
純虛擬函式

向訓練器新增一個訓練樣本。

引數
image輸入影像。
landmarks面部特徵點ground-truth對應於影像。

使用示例

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:830
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 )
純虛擬函式

使用預設或使用者定義的人臉檢測器從給定影像中檢測人臉。某些演算法可能未提供預設的人臉檢測器。

引數
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

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

此類的文件生成自以下檔案