Commit b3f20f84 authored by Pierre Bürki's avatar Pierre Bürki
Browse files

Fix blobfinder having lost essential param

parent c12ed002
Loading
Loading
Loading
Loading
+15 −45
Original line number Diff line number Diff line
@@ -17,7 +17,7 @@ void BlobFinder::initGUI(ofxGui &gui){
    panel = gui.addPanel();
    
    panel->loadTheme("theme/theme_light.json");
    panel->setName("Tracking...");
    panel->setName("Tracking");

	sensorFboSize.addListener(this, &BlobFinder::allocate);

@@ -48,15 +48,12 @@ void BlobFinder::initGUI(ofxGui &gui){
	blobGuiGroup->add(blobAreaMinStp1.set("AreaMinStp1", 10, 0, 255));
	blobGuiGroup->add(blobAreaMinStp2.set("AreaMinStp2", 10, 0, 255));
	blobGuiGroup->add(countBlob.set("MaxBlobs", 5, 1, N_MAX_BLOBS));
 
	blobEyeGroup = panel->addGroup("Gazing");
	blobEyeGroup->add(useGazePoint.set("Use gaze point", true));
    blobEyeGroup->add(gazePoint.set("Gaze point", ofVec3f(0, 0, 1500), ofVec3f(-2000, 0, 0), ofVec3f(2000, 5000, 3000)));
    blobEyeGroup->add(eyeLevel.set("EyeLevel", 140, 0, 200));
    blobEyeGroup->add(eyeInset.set("EyeInset", .8, 0, 1));
	blobGuiGroup->add(eyeLevel.set("EyeLevel", 140, 0, 200));
    blobGuiGroup->add(eyeInset.set("EyeInset", .8, 0, 1));
    
    panel->loadFromFile("trackings.xml");

	loadMask();
}

void BlobFinder::allocate(int &value){
@@ -262,19 +259,19 @@ void BlobFinder::update(){
	
	eyeRef.setColor(black);

    float sensorFieldFront = sensorBoxFront.get() * SCALE;
    float sensorFieldBack = sensorBoxBack.get() * SCALE;
    float sensorFieldLeft = sensorBoxLeft.get() * SCALE;
    float sensorFieldRight = sensorBoxRight.get() * SCALE;
    float sensorFieldTop = sensorBoxTop .get() * SCALE;
    float sensorFieldBottom = sensorBoxBottom.get() * SCALE;
    float sensorFieldWidth = sensorFieldRight - sensorFieldLeft;
    float sensorFieldHeigth = sensorFieldTop - sensorFieldBottom;
    float sensorFieldDepth = sensorFieldBack - sensorFieldFront;
    const float sensorFieldFront = sensorBoxFront.get() * SCALE;
    const float sensorFieldBack = sensorBoxBack.get() * SCALE;
    const float sensorFieldLeft = sensorBoxLeft.get() * SCALE;
    const float sensorFieldRight = sensorBoxRight.get() * SCALE;
    const float sensorFieldTop = sensorBoxTop .get() * SCALE;
    const float sensorFieldBottom = sensorBoxBottom.get() * SCALE;
    const float sensorFieldWidth = sensorFieldRight - sensorFieldLeft;
    const float sensorFieldHeigth = sensorFieldTop - sensorFieldBottom;
    const float sensorFieldDepth = sensorFieldBack - sensorFieldFront;
    
    int eyeLevelColor = eyeLevel.get() / sensorFieldHeigth * 255;
    const int eyeLevelColor = eyeLevel.get() / sensorFieldHeigth * 255;
    
    int headTopThreshold = eyeLevelColor / 4;
    const int headTopThreshold = eyeLevelColor / 4;
    
    //ofLog(OF_LOG_NOTICE, "eyeLevelColor = " + ofToString(eyeLevelColor));
    
@@ -287,7 +284,6 @@ void BlobFinder::update(){
	int minBlobSize = pow(blobAreaMinStp1.get() * sensorFboSize.get(), 2);
	int maxBlobSize = pow(blobAreaMax.get() * sensorFboSize.get(), 2);


	detectedHeads.clear();

	contourFinder.findContours(grayImage, minBlobSize, maxBlobSize, countBlob.get(), false);
@@ -565,21 +561,6 @@ void BlobFinder::drawSensorBox()
	sensorBox.draw();
}

void BlobFinder::drawBodyBlobs2d(ofRectangle _rect){
    float xFactor = _rect.width / captureScreenSize.x;
    float yFactor = _rect.height / captureScreenSize.y;
    
    ofNoFill();
    for(int i = 0; i < blobEvents.size(); i++){
		if (blobEvents[i].hasBeenUpdated() && blobEvents[i].isActive()) {
			ofSetColor(255, 0, 0, 255);
			ofDrawRectangle(_rect.x + blobEvents[i].baseRectangle2d.x * xFactor, _rect.y + blobEvents[i].baseRectangle2d.y * yFactor, blobEvents[i].baseRectangle2d.width * xFactor, blobEvents[i].baseRectangle2d.height * yFactor);
			ofDrawBitmapString("blob[" + ofToString(blobEvents[i].mID) + "]\n alive = " + ofToString(blobEvents[i].getAgeInMillis()) + "\n sort = " + ofToString(blobEvents[i].sortPos) + "\n x = " + ofToString(blobEvents[i].headTop.x) + "\n y = " + ofToString(blobEvents[i].headTop.y) + "\n z = " + ofToString(blobEvents[i].headTop.z), _rect.x + blobEvents[i].baseRectangle2d.getCenter().x * xFactor, _rect.y + blobEvents[i].baseRectangle2d.getCenter().y * yFactor);
		}
        
    }
}

void BlobFinder::drawBodyBlobsBox(){
    for(int i = 0; i < blobEvents.size(); i++){
        //ofLog(OF_LOG_NOTICE, "blob[" + ofToString(i) + "] box =" + ofToString(blobEvents[i].bodyCenter));
@@ -593,15 +574,6 @@ void BlobFinder::drawBodyBlobsHeadTop(){
    }
}

void BlobFinder::drawGazePoint(){
	if (useGazePoint.get()) {
		//gazePointer.setPosition(gazePoint.get());
		//gazePointer.ofNode::draw();
		ofDrawSphere(gazePoint.get().x, gazePoint.get().y, gazePoint.get().z, 50);
		ofDrawLine(gazePoint.get().x, gazePoint.get().y, 0, gazePoint.get().x, gazePoint.get().y, 3000);
	}
}

bool BlobFinder::hasParamUpdate(){
    if(parameterHasUpdated){
        parameterHasUpdated = false;
@@ -610,8 +582,6 @@ bool BlobFinder::hasParamUpdate(){
    return false;
}



void BlobFinder::updateSensorBox(int & value){
    sensorBox.clear();
    sensorBox.setMode(OF_PRIMITIVE_LINES);
+0 −8
Original line number Diff line number Diff line
@@ -52,13 +52,9 @@ public:
    void updateSensorBox(int & value);
    
    void drawSensorBox();
    void drawBodyBlobs2d(ofRectangle _rect);

    void drawBodyBlobsBox();
    void drawBodyBlobsHeadTop();

    void drawGazePoint();

    vector <BlobTracker> blobEvents;
	vector <BodyBlob> detectedHeads;

@@ -116,7 +112,6 @@ public:
	ofxGuiGroup *blobSmoothGroup;
	ofxGuiGroup *sensorBoxGuiGroup;
	ofxGuiGroup *blobGuiGroup;
	ofxGuiGroup *blobEyeGroup;

    ofParameter<int> sensorBoxLeft;
    ofParameter<int> sensorBoxRight;
@@ -135,9 +130,6 @@ public:
    ofParameter<float> eyeLevel;
    ofParameter<float> eyeInset;

	ofParameter<bool> useGazePoint;

    ofParameter<ofVec3f> gazePoint;
    ofSpherePrimitive gazePointer;

	ofParameter<int> eventBreathSize;