Skip to content

Instantly share code, notes, and snippets.

@m9dfukc
Created May 24, 2017 08:48
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save m9dfukc/bb21bdc161d582afde5d49551ca6d734 to your computer and use it in GitHub Desktop.
Save m9dfukc/bb21bdc161d582afde5d49551ca6d734 to your computer and use it in GitHub Desktop.
ofxFaceTracker2 multiwindow thread issues

demo ofxFaceTracker2 threading issues

This simple example demonstrating ofxFaceTracker2 threading issues related to openframeworks second window. The application erratically crashes when running in release mode; resulting in the following error:

OpenCV Error: Assertion failed (0 <= roi.x && 0 <= roi.width && roi.x + roi.width <= m.cols && 0 <= roi.y && 0 <= roi.height && roi.y + roi.height <= m.rows) in Mat, file ... /opencv/modules/core/src/matrix.cpp, line 323

[ fatal ] ofThreadErrorLogger::exception: ... /opencv/modules/core/src/matrix.cpp:323: error: (-215) 0 <= roi.x && 0 <= roi.width && roi.x + roi.width <= m.cols && 0 <= roi.y && 0 <= roi.height && roi.y + roi.height <= m.rows in function Mat

Dependencies

#include "ofMain.h"
#include "ofApp.h"
//========================================================================
int main( ){
ofGLFWWindowSettings settings;
settings.width = 1024;
settings.height = 480;
settings.setPosition(ofVec2f(100, 100));
settings.resizable = true;
shared_ptr<ofAppBaseWindow> mainWindow = ofCreateWindow(settings);
settings.width = PROJECTOR_WIDTH;
settings.height = PROJECTOR_HEIGHT;
settings.setPosition(ofVec2f(ofGetScreenWidth(), 0));
settings.resizable = false;
settings.decorated = false;
settings.shareContextWith = mainWindow;
shared_ptr<ofAppBaseWindow> secondWindow = ofCreateWindow(settings);
secondWindow->setVerticalSync(true);
secondWindow->setFullscreen(true);
shared_ptr<ofApp> mainApp(new ofApp);
ofAddListener(secondWindow->events().draw, mainApp.get(), &ofApp::drawSecondWindow);
ofRunApp(mainWindow, mainApp);
ofRunMainLoop();
}
#include "ofApp.h"
#include "ofxCv.h"
//--------------------------------------------------------------
void ofApp::setup(){
cam.setDesiredFrameRate(25);
cam.setup(640, 480);
tracker.setup(ofToDataPath("shape_predictor_68_face_landmarks.dat"));
tracker.setThreaded(true); // there is a thread related bug with using a second window
found = false;
}
//--------------------------------------------------------------
void ofApp::update(){
cam.update();
if (cam.isFrameNew()) {
cv::Mat camMat = ofxCv::toCv(cam);
tracker.update(camMat);
if ((found = tracker.size() > 0)) {
}
}
}
//--------------------------------------------------------------
void ofApp::draw(){
ofBackground(0);
ofSetColor(255);
cam.draw(0, 0);
tracker.drawDebugPose();
}
//--------------------------------------------------------------
void ofApp::drawSecondWindow(ofEventArgs &args) {
if(found) {
tracker.drawDebugPose();
tracker.drawDebug();
}
}
#pragma once
#define PROJECTOR_WIDTH 800
#define PROJECTOR_HEIGHT 600
#include "ofMain.h"
#include "ofxFaceTracker2.h"
class ofApp : public ofBaseApp{
public:
void setup();
void update();
void draw();
void drawSecondWindow(ofEventArgs &args);
ofxFaceTracker2 tracker;
ofVideoGrabber cam;
bool found;
};
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment