OpenCV 5.0.0
Open Source Computer Vision
読み込み中...
検索中...
見つかりません
🤖 AIによる機械翻訳(非公式) — これは OpenCV 5.0.0 公式リファレンス(英語)を AI (Claude) で自動翻訳したものです。訳に誤りを含む場合があります。正確な情報は 公式英語版(原文) を参照してください。
cv::face::FacemarkTrain クラスabstract

学習可能なfacemarkモデルのための抽象基底クラス。続き...

#include <opencv2/face/facemark_train.hpp>

Collaboration diagram for cv::face::FacemarkTrain:

公開メンバ関数

virtual bool addTrainingSample (InputArray image, InputArray landmarks)=0
 1つの学習サンプルをトレーナーに追加する。
 
virtual bool getData (void *items=0)=0
 アルゴリズムからデータを取得する。
 
virtual bool getFaces (InputArray image, OutputArray faces)=0
 デフォルトまたはユーザー定義の顔検出器を使用して、与えられた画像から顔を検出する。一部の Algorithm はデフォルトの顔検出器を提供しない場合がある。
 
virtual bool setFaceDetector (FN_FaceDetector detector, void *userData=0)=0
 Facemark アルゴリズムにユーザー定義の顔検出器を設定する。
 
virtual void training (void *parameters=0)=0
 与えられたデータセットを使用して Facemark アルゴリズムを学習する。学習処理の前に、face::addTrainingSample 関数を使用して学習サンプルをトレーナーに追加しておく必要がある。
 
- Public Member Functions inherited from cv::face::Facemark
virtual bool fit (InputArray image, InputArray faces, OutputArrayOfArrays landmarks)=0
 画像から顔ランドマークを検出する。
 
virtual void loadModel (String model)=0
 フィッティング処理の前に学習済みモデルを読み込む関数。
 
- Public Member Functions inherited from 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
 
virtual void write (FileStorage &fs) const
 アルゴリズムの引数をファイルストレージに保存する。
 
void write (FileStorage &fs, const String &name) const
 

Additional Inherited Members

- Static Public Member Functions inherited from 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)
 ファイルノードからアルゴリズムを読み込む。
 
- Protected Member Functions inherited from cv::Algorithm
void writeFormat (FileStorage &fs) const
 

詳細説明

学習可能なfacemarkモデルのための抽象基底クラス。

このAPIをプログラムで利用するには、顔ランドマーク検出器APIのチュートリアル を参照のこと

説明

OpenCVのAAMおよびLBFのfacemarkモデルは、抽象基底クラス FacemarkTrain から派生しており、これがOpenCVのこれらのfacemarkアルゴリズムへの統一されたアクセスを提供する。

facemarkアルゴリズムの宣言方法の例を以下に示す:

// Using Facemark in your code:
static Ptr< FacemarkLBF > create(const FacemarkLBF::Params &parameters=FacemarkLBF::Params())
std::shared_ptr< _Tp > Ptr
Definition cvstd_wrapper.hpp:23

facemark検出の典型的なパイプラインは以下のとおりである:

  • (任意)FacemarkTrain::setFaceDetector を使用してユーザー定義の顔検出を設定する。facemarkアルゴリズムは顔点を顔にフィッティングするように設計されている。したがって、顔の情報をfacemarkアルゴリズムに提供する必要がある。一部のアルゴリズムはデフォルトの顔認識関数を提供する場合がある。ただし、ユーザーは可能な限り最良の検出結果を得るために、独自の顔検出器を使用することを好むかもしれない。
  • (任意)FacemarkTrain::training を使用して特定のアルゴリズムのモデルを学習する。この場合、モデルはアルゴリズムによって自動的に保存されるべきである。ユーザーがすでに学習済みモデルを持っている場合、この部分は省略できる。
  • Facemark::loadModel を使用して学習済みモデルを読み込む。
  • Facemark::fit を介してフィッティングを実行する。

メンバ関数詳解

◆ 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);
}
Comma-separated Matrix Initializer.
Definition mat.hpp:964
std::string String
Definition cvstd.hpp:151
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.
bool loadFacePoints(String filename, OutputArray points, float offset=0.0f)
A utility to load facial landmark information from a given file.
Mat imread(const String &filename, int flags=IMREAD_COLOR_BGR)
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取得されたデータ。アルゴリズムに依存する。

使用例

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())
initializer
Data container for the facemark::getData function.
Definition facemarkAAM.hpp:99
std::vector< Point2f > s0
Definition facemarkAAM.hpp:100

◆ 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));
}
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 --------
}
This is the proxy class for passing read-only input arrays into OpenCV functions.
Definition mat.hpp:270
This type is very similar to InputArray except that it is used for input/output and output function p...
Definition mat.hpp:410

TODO 検出器パラメータのライフタイムが制御されていない。インターフェース設計を "Ptr<FaceDetector>" に作り直すこと。

◆ training()

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

与えられたデータセットを使用して Facemark アルゴリズムを学習する。学習処理の前に、face::addTrainingSample 関数を使用して学習サンプルをトレーナーに追加しておく必要がある。

引数
parameters省略可能な追加パラメータ(アルゴリズムに依存する)。

使用例

params.model_filename = "ibug68.model"; // filename to save the trained model
// add training samples (see Facemark::addTrainingSample)
facemark->training();
Definition facemarkLBF.hpp:52

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