From 053a693c9a456b2faeebdd34f27698be2142e82f Mon Sep 17 00:00:00 2001 From: Peter Braden Date: Wed, 13 Mar 2013 18:08:05 -0700 Subject: [PATCH] Basic version of Face recognition working --- smoke/smoketest.js | 12 ++++++++---- src/FaceRecognizer.cc | 38 +++++++++++++++++++++++++++----------- 2 files changed, 35 insertions(+), 15 deletions(-) diff --git a/smoke/smoketest.js b/smoke/smoketest.js index bbca4da..6982106 100755 --- a/smoke/smoketest.js +++ b/smoke/smoketest.js @@ -1,13 +1,17 @@ var cv = require('../lib/opencv') +var trainingData = [] +for (var i = 1; i< 41; i++){ + for (var j = 1; j<10; j++){ + trainingData.push([i,"/Users/peterbraden/Downloads/orl_faces/s" + i + "/" + j + ".pgm" ]) + } +} var facerec = new cv.FaceRecognizer(); -facerec.train([ - [0, '/Users/peterbraden/Downloads/orl_faces/s1/1.pgm'] - , [0, '/Users/peterbraden/Downloads/orl_faces/s1/2.pgm'] -]) +facerec.train(trainingData); +console.log(facerec.predictSync('/Users/peterbraden/Downloads/orl_faces/s1/10.pgm')); /* diff --git a/src/FaceRecognizer.cc b/src/FaceRecognizer.cc index 7f4d790..bef6bf1 100644 --- a/src/FaceRecognizer.cc +++ b/src/FaceRecognizer.cc @@ -5,6 +5,22 @@ #include "Matrix.h" + +// Todo, move somewhere useful +cv::Mat fromMatrixOrFilename(Local v){ + cv::Mat im; + if (v->IsString()){ + std::string filename = std::string(*v8::String::AsciiValue(v->ToString())); + im = cv::imread(filename); + //std::cout<< im.size(); + } else { + Matrix *img = ObjectWrap::Unwrap(v->ToObject()); + im = img->mat; + } + return im; +} + + void AsyncPredict(uv_work_t *req); void AfterAsyncPredict(uv_work_t *req); @@ -73,14 +89,7 @@ FaceRecognizerWrap::Train(const Arguments& args){ } int label = valarr->Get(0)->Uint32Value(); - cv::Mat im; - if (valarr->Get(1)->IsString()){ - std::string filename = std::string(*v8::String::AsciiValue(valarr->Get(1)->ToString())); - im = cv::imread(filename); - } else { - Matrix *img = ObjectWrap::Unwrap(valarr->Get(1)->ToObject()); - im = img->mat; - } + cv::Mat im = fromMatrixOrFilename(valarr->Get(1)); labels.push_back(label); images.push_back(im); } @@ -94,9 +103,16 @@ FaceRecognizerWrap::Train(const Arguments& args){ Handle FaceRecognizerWrap::PredictSync(const Arguments& args){ SETUP_FUNCTION(FaceRecognizerWrap) - + + cv::Mat im = fromMatrixOrFilename(args[0]);//TODO CHECK! + cv::cvtColor(im, im, CV_RGB2GRAY); + // int predictedLabel = self->rec->predict(im); + + int predictedLabel = -1; + double confidence = 0.0; + self->rec->predict(im, predictedLabel, confidence); +// std::cout << confidence; + return scope.Close(Number::New(predictedLabel)); } - - #endif // End version > 2.4