@@ -282,6 +282,17 @@ NAN_METHOD(FaceRecognizerWrap::PredictSync) {
282282 double confidence = 0.0 ;
283283 self->rec ->predict (im, predictedLabel, confidence);
284284
285+ #if CV_MAJOR_VERSION >= 3
286+ // Older versions of OpenCV3 incorrectly returned label=0 at
287+ // confidence=DBL_MAX instead of label=-1 on failure. This can be removed
288+ // once the fix* becomes more widespread.
289+ //
290+ // * https://github.com/Itseez/opencv_contrib/commit/0aa58ae9b30a017b356a86d29453c0b56ed9e625#diff-d9c561bf45c255c5951ff1ab55e80473
291+ if (predictedLabel == 0 && confidence == DBL_MAX) {
292+ predictedLabel = -1 ;
293+ }
294+ #endif
295+
285296 v8::Local<v8::Object> res = Nan::New<Object>();
286297 res->Set (Nan::New (" id" ).ToLocalChecked (), Nan::New<Number>(predictedLabel));
287298 res->Set (Nan::New (" confidence" ).ToLocalChecked (), Nan::New<Number>(confidence));
@@ -304,6 +315,16 @@ class PredictASyncWorker: public Nan::AsyncWorker {
304315
305316 void Execute () {
306317 this ->rec ->predict (this ->im , this ->predictedLabel , this ->confidence );
318+ #if CV_MAJOR_VERSION >= 3
319+ // Older versions of OpenCV3 incorrectly returned label=0 at
320+ // confidence=DBL_MAX instead of label=-1 on failure. This can be removed
321+ // once the fix* becomes more widespread.
322+ //
323+ // * https://github.com/Itseez/opencv_contrib/commit/0aa58ae9b30a017b356a86d29453c0b56ed9e625#diff-d9c561bf45c255c5951ff1ab55e80473
324+ if (this ->predictedLabel == 0 && this ->confidence == DBL_MAX) {
325+ this ->predictedLabel = -1 ;
326+ }
327+ #endif
307328 }
308329
309330 void HandleOKCallback () {
0 commit comments