I am trying to display a live stream which is read by opencv4nodejs and processed by face-recognition module. Here problem is, promise.then() is not working. not even catch() on the corresponding condition.(i am new at node and promises.) expected workflow:
read frame from webcam(by cv.read) -> save to buffer(by cv.imwrite) -> read frame from buffer(by fr.loadImage) -> process(by detector.locateFaces) -> display -> repeat process.
const fr = require('face-recognition');
const cv = require('opencv4nodejs');
const events = require('events');
const detector = fr.FaceDetector()
const cap = new cv.VideoCapture(0);
const win = new fr.ImageWindow()
const eventEmitter = new events.EventEmitter();
function process(){
console.log('process');
return new Promise(function(resolve,reject){
console.log('promise');
var frame = cap.read();
cv.imwrite(`${__dirname}/buffer/img.jpg`, frame);
if(frame != null)
resolve('resolve');
else
reject('Problem While reading');
});
}
eventEmitter.on('read',function(string){
console.log('event call');
var promise = process();
promise.then(function(string){
console.log(string);
const image = fr.loadImage(`${__dirname}/buffer/img.jpg`);
const faceRectangles = detector.locateFaces(image);
win.setImage(image);
fr.hitEnterToContinue();
}).catch(function(err){
console.log(err);
});
});
while(true){
console.log('emit');
eventEmitter.emit('read','abcd');
}
/*****expected output should be*****
emit
event call
process
promise
resolve
/*****getting output*****
emit
event call
process
promise
*/
const fr = require('face-recognition');
const cv = require('opencv4nodejs');
const events = require('events');
const detector = fr.FaceDetector()
const cap = new cv.VideoCapture(0);
const win = new fr.ImageWindow()
const eventEmitter = new events.EventEmitter();
function process(){
console.log('process');
return new Promise(function(resolve,reject){
console.log('promise');
var frame = cap.read();
cv.imwrite(`${__dirname}/buffer/img.jpg`, frame);
if(frame != null)
resolve('resolve');
else
reject('Problem While reading');
});
}
eventEmitter.on('read',function(string){
console.log('event call');
var promise = process();
console.log(promise);
promise.then(function(string){
console.log(string);
const image = fr.loadImage(`${__dirname}/buffer/img.jpg`);
const faceRectangles = detector.locateFaces(image);
console.log(faceRectangles);
win.setImage(image);
// fr.hitEnterToContinue();
eventEmitter.emit('read','abcd');
}).catch(function(err){
console.log(err);
});
});
eventEmitter.emit('read','abcd');
changes:
1)remove while loop from eventEmitter.emit('read','abcd');
2)recursively emit event in promise.then()
I observed that while emitting event continuously promise.then() not working so i emit event in promise.then() so now its working nicely.