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

Setup branching code for skeleton/blob versions

parent 255b67c0
Loading
Loading
Loading
Loading
+2 −0
Original line number Diff line number Diff line
ofxOsc
ofxNuitrack
ofxRealSenseTwo
ofxOpenCv
ofxGuiExtended
ofxNetwork
+0 −16
Original line number Diff line number Diff line
@@ -68,22 +68,6 @@ void SkeletonFinder::drawSensorBox()
	sensorBox.draw();
}

void SkeletonFinder::drawSkeletons2d(ofRectangle _rect) {
	// TODO ? this seems to draw the skeleton on displays 1-5, which isn't _really_ useful
	/*float xFactor = _rect.width / captureScreenSize.x;
	float yFactor = _rect.height / captureScreenSize.y;

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

	}*/
}

// adapted from ofxNuitrack example
void SkeletonFinder::drawSkeletons() {
	static vector<Bone> bones = {
+0 −5
Original line number Diff line number Diff line
@@ -62,7 +62,6 @@ public:
    void update(nuitrack::SkeletonData::Ptr data);
    
    void drawSensorBox();
    void drawSkeletons2d(ofRectangle _rect);
    void drawSkeletons();

    string getShortDesc();
@@ -91,10 +90,6 @@ public:
    ofParameter<int> sensorBoxBack;

    ofVboMesh sensorBox;
   
    // TODO: What are those
    ofVec3f normal;
    float p;
};

+19 −10
Original line number Diff line number Diff line
@@ -9,9 +9,7 @@
#include "TrackingNetworkManager.h"


void TrackingNetworkManager::setup(ofxGui &gui, string _realsenseSerial){
    mDeviceSerial = _realsenseSerial;
    
void TrackingNetworkManager::setup(ofxGui &gui){    
    string localAddress = "127.0.0.1";
    
    for(int i = 0; i < localIpAddresses.size(); i++){
@@ -41,11 +39,11 @@ void TrackingNetworkManager::setup(ofxGui &gui, string _realsenseSerial){


//--------------------------------------------------------------
void TrackingNetworkManager::update(const SkeletonFinder& skeletonFinder){
void TrackingNetworkManager::update(const BodyFinder& bodyFinder){
    long currentMillis = ofGetElapsedTimeMillis();

    //send trackingdata to all connected clients
    sendTrackingData(skeletonFinder);
    sendTrackingData(bodyFinder);
    
    // OSC receiver queues up new messages, so you need to iterate
	// through waiting messages to get each incoming message
@@ -103,23 +101,33 @@ void TrackingNetworkManager::update(const SkeletonFinder& skeletonFinder){
	}
}

void TrackingNetworkManager::sendTrackingData(const SkeletonFinder& skeletonFinder) {
	vector<Skeleton> skeletons = skeletonFinder.getSkeletons();
void TrackingNetworkManager::sendTrackingData(const BodyFinder& bodyFinder) {

#ifdef BLOB
    // TODO
#else
	vector<Skeleton> skeletons = bodyFinder.getSkeletons();
	if (skeletons.size() > 0) {
		// Only one skeleton is to be on the scene for the perspective to work
		if (skeletons.size() > 1) {
			sendMultipleSkeletonsAlert();
			sendMultipleBodiesAlert();
		}
		sendSkeletonData(skeletons[0]);
	}
#endif
}

void TrackingNetworkManager::sendMultipleSkeletonsAlert() {
void TrackingNetworkManager::sendMultipleBodiesAlert() {
	ofxOscMessage alertMsg;
	alertMsg.setAddress("/ks/server/track/multiple-skeletons");
	alertMsg.setAddress("/ks/server/track/multiple-bodies");
	sendMessageToTrackingClients(alertMsg);
}

#ifdef BLOB
void TrackingNetworkManager::sendBlobData(const BlobTrackeb& blob) {
	// TODO
}
#else
void TrackingNetworkManager::sendSkeletonData(const Skeleton& skel) {
	ofxOscMessage skeletonMsg;
	skeletonMsg.setAddress("/ks/server/track/skeleton");
@@ -134,6 +142,7 @@ void TrackingNetworkManager::sendSkeletonData(const Skeleton& skel) {

	sendMessageToTrackingClients(skeletonMsg);
}
#endif

void TrackingNetworkManager::sendMessageToTrackingClients(ofxOscMessage _msg){
    for(int j = 0; j < knownClients.size(); j++){
+22 −7
Original line number Diff line number Diff line
@@ -12,7 +12,13 @@
#include "ofConstants.h"
#include "ofxOsc.h"
#include "TrackingClient.h"

#ifdef BLOB
    #include "BlobFinder.h"
    #include "BlobTracker.h"
#else
    #include "SkeletonFinder.h"
#endif

#include <cmath>
#include <regex>
@@ -28,15 +34,26 @@
#define NETWORK_BROADCAST_PORT 47500
#define NETWORK_LISTENING_PORT 47600

#ifdef BLOB
    typedef BlobFinder BodyFinder;
#else
    typedef SkeletonFinder BodyFinder;
#endif

class TrackingNetworkManager {
    
public:    
    void setup(ofxGui &gui, string _realsenseSerial);
    void update(const SkeletonFinder& skeletonFinder);
    void setup(ofxGui &gui);

    void sendTrackingData(const SkeletonFinder& skeletonFinder);
    void update(const BodyFinder& bodyFinder);
    void sendTrackingData(const BodyFinder& bodyFinder);
    void sendMultipleBodiesAlert();

#ifdef BLOB
    void sendBlobData(const BlobTracker& blob);
#else
    void sendSkeletonData(const Skeleton& skeleton);
    void sendMultipleSkeletonsAlert();
#endif

    void sendMessageToTrackingClients(ofxOscMessage _msg);
    void checkTrackingClients(long _currentMillis);
@@ -48,8 +65,6 @@ public:

    vector<string>  localIpAddresses;
    
    string          mDeviceSerial;
    
    //----------------------------------------
    // Server side:
    ofxOscReceiver  serverReceiver;         // OSC receiver
Loading