Skip to content

Commit 5101dcc

Browse files
committed
Fix python version face landmark detector
1 parent 7bba4cf commit 5101dcc

File tree

6 files changed

+17
-21
lines changed

6 files changed

+17
-21
lines changed

modules/face/include/opencv2/face/facemark.hpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -74,8 +74,8 @@ class CV_EXPORTS_W Facemark : public virtual Algorithm
7474
@endcode
7575
*/
7676
CV_WRAP virtual bool fit( InputArray image,
77-
InputArray faces,
78-
OutputArrayOfArrays landmarks ) = 0;
77+
const std::vector<Rect>& faces,
78+
CV_OUT std::vector<std::vector<Point2f> >& landmarks ) = 0;
7979
}; /* Facemark*/
8080

8181

modules/face/include/opencv2/face/facemarkAAM.hpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -146,7 +146,7 @@ class CV_EXPORTS_W FacemarkAAM : public FacemarkTrain
146146
};
147147

148148
//! overload with additional Config structures
149-
virtual bool fitConfig( InputArray image, InputArray roi, OutputArrayOfArrays _landmarks, const std::vector<Config> &runtime_params ) = 0;
149+
virtual bool fitConfig( InputArray image, const std::vector<Rect>& roi, std::vector<std::vector<Point2f> >& _landmarks, const std::vector<Config> &runtime_params ) = 0;
150150

151151

152152
//! initializer

modules/face/src/face_alignmentimpl.hpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -73,7 +73,7 @@ class FacemarkKazemiImpl : public FacemarkKazemi{
7373
void loadModel(String fs) CV_OVERRIDE;
7474
bool setFaceDetector(FN_FaceDetector f, void* userdata) CV_OVERRIDE;
7575
bool getFaces(InputArray image, OutputArray faces) CV_OVERRIDE;
76-
bool fit(InputArray image, InputArray faces, OutputArrayOfArrays landmarks ) CV_OVERRIDE;
76+
bool fit(InputArray image, const std::vector<Rect>& faces, CV_OUT std::vector<std::vector<Point2f> >& landmarks ) CV_OVERRIDE;
7777
void training(String imageList, String groundTruth);
7878
bool training(vector<Mat>& images, vector< vector<Point2f> >& landmarks,string filename,Size scale,string modelFilename) CV_OVERRIDE;
7979
// Destructor for the class.

modules/face/src/facemarkAAM.cpp

Lines changed: 6 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -103,12 +103,11 @@ class FacemarkAAMImpl : public FacemarkAAM {
103103

104104
bool getData(void * items) CV_OVERRIDE;
105105

106-
bool fitConfig( InputArray image, InputArray roi, OutputArrayOfArrays _landmarks, const std::vector<Config> &runtime_params ) CV_OVERRIDE;
106+
bool fitConfig( InputArray image, const std::vector<Rect>& roi, std::vector<std::vector<Point2f> >& _landmarks, const std::vector<Config> &runtime_params ) CV_OVERRIDE;
107107

108108
protected:
109109

110-
bool fit( InputArray image, InputArray faces, OutputArrayOfArrays landmarks ) CV_OVERRIDE;
111-
//bool fit( InputArray image, InputArray faces, InputOutputArray landmarks, void * runtime_params);//!< from many ROIs
110+
bool fit( InputArray image, const std::vector<Rect>& faces, CV_OUT std::vector<std::vector<Point2f> >& landmarks ) CV_OVERRIDE;
112111
bool fitImpl( const Mat image, std::vector<Point2f>& landmarks,const Mat R,const Point2f T,const float scale, const int sclIdx=0 );
113112

114113
bool addTrainingSample(InputArray image, InputArray landmarks) CV_OVERRIDE;
@@ -323,19 +322,18 @@ void FacemarkAAMImpl::training(void* parameters){
323322
if(params.verbose) printf("Training is completed\n");
324323
}
325324

326-
bool FacemarkAAMImpl::fit( InputArray image, InputArray roi, OutputArrayOfArrays _landmarks )
325+
bool FacemarkAAMImpl::fit( InputArray image, const std::vector<Rect>& roi, CV_OUT std::vector<std::vector<Point2f> >& _landmarks )
327326
{
328327
std::vector<Config> config; // empty
329328
return fitConfig(image, roi, _landmarks, config);
330329
}
331330

332-
bool FacemarkAAMImpl::fitConfig( InputArray image, InputArray roi, OutputArrayOfArrays _landmarks, const std::vector<Config> &configs )
331+
bool FacemarkAAMImpl::fitConfig( InputArray image, const std::vector<Rect>& roi, std::vector<std::vector<Point2f> >& _landmarks, const std::vector<Config> &configs )
333332
{
334-
std::vector<Rect> & faces = *(std::vector<Rect> *)roi.getObj();
333+
const std::vector<Rect> & faces = roi;
335334
if(faces.size()<1) return false;
336335

337-
std::vector<std::vector<Point2f> > & landmarks =
338-
*(std::vector<std::vector<Point2f> >*) _landmarks.getObj();
336+
std::vector<std::vector<Point2f> > & landmarks = _landmarks;
339337
landmarks.resize(faces.size());
340338

341339
Mat img = image.getMat();

modules/face/src/facemarkLBF.cpp

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -115,7 +115,7 @@ class FacemarkLBFImpl : public FacemarkLBF {
115115

116116
protected:
117117

118-
bool fit( InputArray image, InputArray faces, OutputArrayOfArrays landmarks ) CV_OVERRIDE;//!< from many ROIs
118+
bool fit( InputArray image, const std::vector<Rect> & faces, std::vector<std::vector<Point2f> > & landmarks ) CV_OVERRIDE;//!< from many ROIs
119119
bool fitImpl( const Mat image, std::vector<Point2f> & landmarks );//!< from a face
120120

121121
bool addTrainingSample(InputArray image, InputArray landmarks) CV_OVERRIDE;
@@ -370,14 +370,12 @@ void FacemarkLBFImpl::training(void* parameters){
370370
isModelTrained = true;
371371
}
372372

373-
bool FacemarkLBFImpl::fit( InputArray image, InputArray roi, OutputArrayOfArrays _landmarks )
373+
bool FacemarkLBFImpl::fit( InputArray image, const std::vector<Rect> & roi, CV_OUT std::vector<std::vector<Point2f> > & _landmarks )
374374
{
375-
// FIXIT
376-
std::vector<Rect> & faces = *(std::vector<Rect> *)roi.getObj();
375+
const std::vector<Rect> & faces = roi;
377376
if (faces.empty()) return false;
378377

379-
std::vector<std::vector<Point2f> > & landmarks =
380-
*(std::vector<std::vector<Point2f> >*) _landmarks.getObj();
378+
std::vector<std::vector<Point2f> > & landmarks = _landmarks;
381379

382380
landmarks.resize(faces.size());
383381

modules/face/src/getlandmarks.cpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -168,15 +168,15 @@ void FacemarkKazemiImpl :: loadModel(String filename){
168168
f.close();
169169
isModelLoaded = true;
170170
}
171-
bool FacemarkKazemiImpl::fit(InputArray img, InputArray roi, OutputArrayOfArrays landmarks){
171+
bool FacemarkKazemiImpl::fit(InputArray img, const std::vector<Rect>& roi, CV_OUT std::vector<std::vector<Point2f> >& landmarks){
172172
if(!isModelLoaded){
173173
String error_message = "No model loaded. Aborting....";
174174
CV_Error(Error::StsBadArg, error_message);
175175
return false;
176176
}
177177
Mat image = img.getMat();
178-
std::vector<Rect> & faces = *(std::vector<Rect>*)roi.getObj();
179-
std::vector<std::vector<Point2f> > & shapes = *(std::vector<std::vector<Point2f> >*) landmarks.getObj();
178+
const std::vector<Rect> & faces = roi;
179+
std::vector<std::vector<Point2f> > & shapes = landmarks;
180180
shapes.resize(faces.size());
181181

182182
if(image.empty()){

0 commit comments

Comments
 (0)