OpenCV 4.5.3(日本語機械翻訳)
公開メンバ関数 | 全メンバ一覧
cv::face::FacemarkTrain クラス abstract

Abstract base class for trainable facemark models [詳解]

#include <facemark_train.hpp>

cv::face::Facemarkを継承しています。

cv::face::FacemarkAAM, cv::face::FacemarkLBFに継承されています。

公開メンバ関数

virtual bool addTrainingSample (InputArray image, InputArray landmarks)=0
訓練用サンプルを1つ追加します.[【詳解】(英語]
virtual void training (void *parameters=0)=0
モデルを学習します。Facemark与えられたデータセットを用いて,アルゴリズムの学習を行います.学習プロセスの前に,face::addTrainingSample関数を用いて学習サンプルをトレーナーに追加する必要があります.[【詳解】(英語]
virtual bool setFaceDetector (FN_FaceDetector detector, void *userData=0)=0
アルゴリズムにユーザ定義の顔検出器を設定します.Facemarkアルゴリズムを実行します.[【詳解】(英語]
virtual bool getFaces (InputArray image, OutputArray faces)=0
デフォルトまたはユーザ定義の顔検出器を用いて,与えられた画像から顔を検出します.一部のAlgorithmアルゴリズムによっては,デフォルトの顔検出器が用意されていない場合があります.[【詳解】(英語]
virtual bool getData (void *items=0)=0
アルゴリズムからデータを取得します.[【詳解】(英語]
- 基底クラス cv::face::Facemark に属する継承公開メンバ関数
virtual CV_WRAP void loadModel (String model)=0
フィッティング処理の前に,学習済みモデルを読み込むための関数.[【詳解】(英語]
virtual CV_WRAP bool fit (InputArray image, InputArray faces, OutputArrayOfArrays landmarks)=0
画像から顔のランドマークを検出します.[【詳解】(英語]
- 基底クラス cv::Algorithm に属する継承公開メンバ関数
virtual CV_WRAP void clear ()
アルゴリズムの状態をクリアする[【詳解】(英語]
virtual void write (FileStorage &fs) const
アルゴリズムのパラメーターをファイルストレージに格納[【詳解】(英語]
CV_WRAP void write (const Ptr< FileStorage > &fs, const String &name=String()) const
これはオーバーロードされたメンバ関数です。利便性のために用意されています。元の関数との違いは引き数のみです。
virtual CV_WRAP void read (const FileNode &fn)
アルゴリズム・パラメータをファイル・ストレージから読み込みます。[【詳解】(英語]
virtual CV_WRAP bool empty () const
が空の場合はtrueを返します。Algorithmが空の場合は真を返します。[【詳解】(英語]
virtual CV_WRAP void save (const String &filename) const
virtual CV_WRAP String getDefaultName () const

その他の継承メンバ

- 基底クラス cv::Algorithm に属する継承静的公開メンバ関数
template<typename _Tp >
static Ptr< _Tp > read (const FileNode &fn)
ファイル・ノードからアルゴリズムを読み込む[【詳解】(英語]
template<typename _Tp >
static Ptr< _Tp > load (const String &filename, const String &objname=String())
ファイルからアルゴリズムを読み込む[【詳解】(英語]
template<typename _Tp >
static Ptr< _Tp > loadFromString (const String &strModel, const String &objname=String())
文字列からアルゴリズムを読み込む[【詳解】(英語]
- 基底クラス cv::Algorithm に属する継承限定公開メンバ関数
void writeFormat (FileStorage &fs) const

詳解

学習可能な顔マークモデルのための抽象ベースクラス

このAPIをプログラムに利用するには、tutorial_table_of_content_facemarkを参照してください。

説明

OpenCV の AAM と LBF の顔特徴モデルは,抽象ベースクラスFacemarkTrainから派生しており,OpenCVにおけるこれらのフェイスマークアルゴリズムへの統一的なアクセスを提供します.

ここでは,フェイスマークアルゴリズムの宣言方法の例を示します.

// Using Facemark in your code:
Ptr<Facemark> facemark = FacemarkLBF::create();

フェイスマーク検出の典型的なパイプラインを以下に示します.

関数詳解

addTrainingSample()

virtual bool cv::face::FacemarkTrain::addTrainingSample ( InputArray image,
InputArray landmarks
)
pure virtual

訓練用サンプルを1つ追加します.

引数
image 入力画像.
landmarks 画像に対応する顔のランドマークポイントのグランドトゥルースです.

使用例

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);
}
CV_EXPORTS_W bool loadFacePoints(String filename, OutputArray points, float offset=0.0f)
A utility to load facial landmark information from a given file.
CV_EXPORTS_W bool loadDatasetList(String imageList, String annotationList, std::vector< String > &images, std::vector< String > &annotations)
A utility to load list of paths to training image and annotation file.
CV_EXPORTS_W Mat imread(const String &filename, int flags=IMREAD_COLOR)
Loads an image from a file.

学習ファイルの内容は,標準的な形式でなければなりません.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 )
pure virtual

アルゴリズムからデータを取得します.

引数
items 得られたデータは,アルゴリズムに依存します.

使用例

Ptr<FacemarkAAM> facemark = FacemarkAAM::create();
facemark->loadModel("AAM.yml");
FacemarkAAM::Data data;
facemark->getData(&data);
std::vector<Point2f> s0 = data.s0;
cout<<s0<<endl;
static Ptr< FacemarkAAM > create(const FacemarkAAM::Params &parameters=FacemarkAAM::Params())
initializer

getFaces()

virtual bool cv::face::FacemarkTrain::getFaces ( InputArray image,
OutputArray faces
)
pure virtual

デフォルトまたはユーザ定義の顔検出器を用いて,与えられた画像から顔を検出します.一部の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));
}
CV_EXPORTS_W void rectangle(InputOutputArray img, Point pt1, Point pt2, const Scalar &color, int thickness=1, int lineType=LINE_8, int shift=0)
Draws a simple, thick, or filled up-right rectangle.

setFaceDetector()

virtual bool cv::face::FacemarkTrain::setFaceDetector ( FN_FaceDetector detector,
void * userData = 0
)
pure virtual

アルゴリズムにユーザ定義の顔検出器を設定します.Facemarkアルゴリズムを実行します.

引数
detector ユーザ定義の顔検出機能
userData 検出器のパラメータ

使用例

MyDetectorParameters detectorParameters(...);
facemark->setFaceDetector(myDetector, &detectorParameters);

ユーザー定義顔検出器の例

bool myDetector( InputArray image, OutputArray faces, void* userData)
{
MyDetectorParameters* params = (MyDetectorParameters*)userData;
// -------- do something --------
}

TODO 検出器のパラメータの寿命を制御できない。Ptr<FaceDetector>"というインターフェースデザインに変更してください。

training()

virtual void cv::face::FacemarkTrain::training ( void * parameters = 0 )
pure virtual

モデルを学習します。Facemark与えられたデータセットを用いて,アルゴリズムの学習を行います.学習プロセスの前に,face::addTrainingSample関数を用いて学習サンプルをトレーナーに追加する必要があります.

引数
parameters オプションの追加パラメータ(アルゴリズムに依存)。

使用例

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();

このクラス詳解は次のファイルから抽出されました: