Initial work on face recognition using the FaceRecognizer class from opencv 2.4.4

This commit is contained in:
Peter Braden 2013-03-13 16:15:29 -07:00
parent ebd1f6e4e8
commit b17fceca72
5 changed files with 93 additions and 2 deletions

View File

@ -11,6 +11,7 @@
, "src/VideoCaptureWrap.cc"
, "src/CamShift.cc"
, "src/HighGUI.cc"
, "src/FaceRecognizer.cc"
]
, 'libraries': [
'<!@(pkg-config --libs opencv)'

View File

@ -1,5 +1,10 @@
var cv = require('../lib/opencv')
var facerec = new cv.FaceRecognizer();
/*
var win = new cv.NamedWindow("foo");
cv.readImage('./examples/stuff.png', function(e, im){
im.pyrDown();
@ -8,7 +13,7 @@ cv.readImage('./examples/stuff.png', function(e, im){
win.destroy();
})
*/
/*

52
src/FaceRecognizer.cc Normal file
View File

@ -0,0 +1,52 @@
#include "FaceRecognizer.h"
#include "OpenCV.h"
#if CV_MAJOR_VERSION >= 2 && CV_MINOR_VERSION >=4
#include "Matrix.h"
void AsyncPredict(uv_work_t *req);
void AfterAsyncPredict(uv_work_t *req);
Persistent<FunctionTemplate> FaceRecognizerWrap::constructor;
void
FaceRecognizerWrap::Init(Handle<Object> target) {
HandleScope scope;
// Constructor
constructor = Persistent<FunctionTemplate>::New(FunctionTemplate::New(FaceRecognizerWrap::New));
constructor->InstanceTemplate()->SetInternalFieldCount(1);
constructor->SetClassName(String::NewSymbol("FaceRecognizer"));
NODE_SET_PROTOTYPE_METHOD(constructor, "train", Train);
target->Set(String::NewSymbol("FaceRecognizer"), constructor->GetFunction());
};
Handle<Value>
FaceRecognizerWrap::New(const Arguments &args) {
HandleScope scope;
if (args.This()->InternalFieldCount() == 0)
return v8::ThrowException(v8::Exception::TypeError(v8::String::New("Cannot Instantiate without new")));
// By default initialize eigenface
cv::FaceRecognizer *f = cv::createEigenFaceRecognizer();
FaceRecognizerWrap *pt = new FaceRecognizerWrap(f);
pt->Wrap(args.This());
return args.This();
}
FaceRecognizerWrap::FaceRecognizerWrap(cv::FaceRecognizer* f){
}
Handle<Value>
FaceRecognizerWrap::Train(const Arguments& args){
SETUP_FUNCTION(Matrix)
}
#endif // End version > 2.4

28
src/FaceRecognizer.h Normal file
View File

@ -0,0 +1,28 @@
#include "OpenCV.h"
#if CV_MAJOR_VERSION >= 2 && CV_MINOR_VERSION >=4
#include "opencv2/contrib/contrib.hpp"
class FaceRecognizerWrap: public node::ObjectWrap {
public:
cv::FaceRecognizer* rec;
static Persistent<FunctionTemplate> constructor;
static void Init(Handle<Object> target);
static Handle<Value> New(const Arguments &args);
FaceRecognizerWrap(cv::FaceRecognizer* f);
JSFUNC(Train)
JSFUNC(Update)
JSFUNC(Predict)
static void EIO_Predict(eio_req *req);
static int EIO_AfterPredict(eio_req *req);
};
#endif

View File

@ -6,6 +6,7 @@
#include "Contours.h"
#include "CamShift.h"
#include "HighGUI.h"
#include "FaceRecognizer.h"
extern "C" void
@ -18,8 +19,12 @@ init(Handle<Object> target) {
VideoCaptureWrap::Init(target);
Contour::Init(target);
TrackedObject::Init(target);
NamedWindow::Init(target);
#if CV_MAJOR_VERSION >= 2 && CV_MINOR_VERSION >=4
FaceRecognizerWrap::Init(target);
#endif
};
NODE_MODULE(opencv, init)