From 7d7ec3606e875c8721748bf8018377b896c08d13 Mon Sep 17 00:00:00 2001 From: dviid Date: Fri, 6 Apr 2012 18:46:38 +0200 Subject: [PATCH] mode + drawing mode file chooser make sure you add the config.refindx to your environment --- config.refindx | 1 + example/RefractiveIndex.cpp | 20 +++++-- example/RefractiveIndex.h | 5 ++ src/AbstractAnalysis.cpp | 90 ++++++++++++++++++++++++++------ src/AbstractAnalysis.h | 7 ++- src/CamNoiseAnalysis.cpp | 10 ++-- src/ColorMultiAnalysis.cpp | 2 + src/ColorSingleAnalysis.cpp | 2 + src/DiffNoiseAnalysis.cpp | 2 + src/IResponseAnalysis.cpp | 2 + src/RelaxRateAnalysis.cpp | 2 + src/ShadowScapesAnalysis.cpp | 2 + src/ShapeFromShadingAnalysis.cpp | 2 + src/StrobeAnalysis.cpp | 2 + 14 files changed, 122 insertions(+), 27 deletions(-) diff --git a/config.refindx b/config.refindx index 8f73c79..5e1bcea 100644 --- a/config.refindx +++ b/config.refindx @@ -1,6 +1,7 @@ + drawing 1 640 diff --git a/example/RefractiveIndex.cpp b/example/RefractiveIndex.cpp index e84d88c..e26495b 100644 --- a/example/RefractiveIndex.cpp +++ b/example/RefractiveIndex.cpp @@ -27,8 +27,10 @@ #define ISTATE_TRANSITION 0xCCCC #define ISTATE_END 0xDDDD + int _state = ISTATE_UNDEF; +int RefractiveIndex::_mode; ofPixels RefractiveIndex::_pixels; ofVideoGrabber RefractiveIndex::_vidGrabber; int RefractiveIndex::_vid_w, RefractiveIndex::_vid_h, RefractiveIndex::_vid_id; @@ -49,6 +51,10 @@ void RefractiveIndex::setup() } else { XML.loadFile("config.refindx"); } + + // + string m = XML.getValue("config:mode", "analysing"); + _mode = (m == "analysing" ? MODE_ANALYSING : (m == "drawing" ? MODE_DRAWING : MODE_ANALYSING)); // _vid_id = XML.getValue("config:camera:id", CAMERA_ID); @@ -82,8 +88,10 @@ void RefractiveIndex::setup() cout << "* cam width = " << _vid_w << endl; cout << "* cam height = " << _vid_h << endl; - _vid_stream_open = false; - setup_camera(); + if(_mode == MODE_ANALYSING) { + _vid_stream_open = false; + setup_camera(); + } cout << "RRRRRREADY!" << endl; @@ -173,10 +181,14 @@ void RefractiveIndex::state_analysis() break; case ISTATE_STOP: stop_analysis(); // blocking - _state = ISTATE_TRANSITION; + if(_mode == MODE_DRAWING) + _state = ISTATE_UNDEF; + else + _state = ISTATE_TRANSITION; break; case ISTATE_END: - stop_camera(); + if(_mode == MODE_ANALYSING) + stop_camera(); ::exit(1); break; case ISTATE_UNDEF: diff --git a/example/RefractiveIndex.h b/example/RefractiveIndex.h index 6aabfd2..61b40f8 100644 --- a/example/RefractiveIndex.h +++ b/example/RefractiveIndex.h @@ -11,6 +11,9 @@ #include "ofxOpenCv.h" #include "ofxXmlSettings.h" +#define MODE_DRAWING 0xEEFF +#define MODE_ANALYSING 0xFFEE + class RefractiveIndex : public ofBaseApp { public: @@ -55,6 +58,8 @@ public: // acquisition static ofPixels _pixels; static ofVideoGrabber _vidGrabber; + static int _mode; + vector videoSourceList; static int _vid_w, _vid_h, _vid_id; static bool _vid_stream_open; diff --git a/src/AbstractAnalysis.cpp b/src/AbstractAnalysis.cpp index f0b83ee..8ceb2c6 100644 --- a/src/AbstractAnalysis.cpp +++ b/src/AbstractAnalysis.cpp @@ -3,31 +3,72 @@ #include "AbstractAnalysis.h" #include "RefractiveIndex.h" #include "ofxFileHelper.h" +#include "ofSystemUtils.h" + +void AbstractAnalysis::setup(int camWidth, int camHeight) { + + _cam_w = camWidth; _cam_h = camHeight; + + if(RefractiveIndex::_mode == MODE_DRAWING) { + ofFileDialogResult r = ofSystemLoadDialog("choooose da folda", true); + if(!r.bSuccess) { + ofSystemAlertDialog("OOOOPS.... ERROR..."); + return; + } + + _whole_file_path_analysis = r.filePath; + _whole_file_path_synthesis = r.filePath + "/darwings"; + } + +} // this is the main threaded loop for a given analysis void AbstractAnalysis::do_synthesize() { - for(int i = 0; i < NUM_RUN; i++) { - - cout << "NUM_RUN: " << i << endl; + switch(RefractiveIndex::_mode) + { + case MODE_ANALYSING: + { + for(int i = 0; i < NUM_RUN; i++) { - _saved_filenames_analysis.clear(); - _saved_filenames_synthesis.clear(); - - _state = STATE_ACQUIRING; - acquire(); - if(_state == STATE_STOP) goto exit; - _state = STATE_SYNTHESISING; - synthesise(); - if(_state == STATE_STOP) goto exit; - _state = STATE_DISPLAY_RESULTS; - displayresults(); - cleanup(); + cout << "NUM_RUN: " << i << endl; + + _saved_filenames_analysis.clear(); + _saved_filenames_synthesis.clear(); + + _state = STATE_ACQUIRING; + acquire(); + if(_state == STATE_STOP) goto exit; + _state = STATE_SYNTHESISING; + synthesise(); + if(_state == STATE_STOP) goto exit; + _state = STATE_DISPLAY_RESULTS; + displayresults(); + cleanup(); + } + } + + case MODE_DRAWING: + { + ofxFileHelper fileHelperDrawing; + if(!fileHelperDrawing.doesDirectoryExist(_whole_file_path_synthesis)){ + fileHelperDrawing.makeDirectory(_whole_file_path_synthesis); + } + + read_dir_create_list(_whole_file_path_analysis); + _state = STATE_SYNTHESISING; + synthesise(); + if(_state == STATE_STOP) goto exit; + _state = STATE_DISPLAY_RESULTS; + displayresults(); + cleanup(); + } } - exit: +exit: cleanup(); - ofNotifyEvent(_synthesize_cb, _name); + ofNotifyEvent(_synthesize_cb, _name); + } void AbstractAnalysis::create_dir_allocate_images() @@ -116,6 +157,20 @@ void AbstractAnalysis::create_dir_allocate_images() } +void AbstractAnalysis::read_dir_create_list(string folder_path) +{ + File dir(folder_path); + + if(dir.exists() && dir.isDirectory()) { + vector list; + dir.list(list); + for(int i = 0; i < list.size(); i++) { + string filepath = folder_path + "/" + list[i]; + _saved_filenames_analysis.push_back(filepath); + } + } +} + void AbstractAnalysis::saveImageAnalysis(string filename) { @@ -180,6 +235,7 @@ void AbstractAnalysis::saveImageSynthesis(string filename, ofxCvImage* newPixels #endif _saved_filenames_synthesis.push_back(_whole_file_path_synthesis+"/"+filename); + } diff --git a/src/AbstractAnalysis.h b/src/AbstractAnalysis.h index 298f9a6..f736b21 100755 --- a/src/AbstractAnalysis.h +++ b/src/AbstractAnalysis.h @@ -25,7 +25,7 @@ public: virtual ~AbstractAnalysis(){;} // generic function to set up the camera - virtual void setup(int camWidth, int camHeight){_cam_w = camWidth; _cam_h = camHeight;} + virtual void setup(int camWidth, int camHeight); // this is the main threaded loop for a given analysis void do_synthesize(); @@ -37,6 +37,8 @@ protected: virtual void create_dir_allocate_images(); + virtual void read_dir_create_list(string folder_path); + virtual void saveImageAnalysis(string filename); virtual void saveImageSynthesis(string filename, ofxCvImage* newPixels, ofImageType newType); @@ -54,7 +56,8 @@ protected: public: - string _name; + string _name; + string _draw_directory; // event ofEvent _synthesize_cb; diff --git a/src/CamNoiseAnalysis.cpp b/src/CamNoiseAnalysis.cpp index b2fd2b5..e59b364 100755 --- a/src/CamNoiseAnalysis.cpp +++ b/src/CamNoiseAnalysis.cpp @@ -15,6 +15,8 @@ using Poco::Thread; void CamNoiseAnalysis::setup(int camWidth, int camHeight) { + AbstractAnalysis::setup(camWidth, camHeight); + NUM_RUN = RefractiveIndex::XML.getValue("config:analysis_NUM_RUN:NUM_RUN_camnoise", NUMBER_RUNS); cout << "NUM_RUN CamNoiseAnalysis " << NUM_RUN << endl; //NUM_RUN = 5; @@ -151,17 +153,17 @@ void CamNoiseAnalysis::synthesise() //cvColorImage2.setFromPixels(image5.getPixels(), image5.width, image5.height); cvColorImage1.convertToGrayscalePlanarImage(cvGrayImage1, 1); - // cvColorImage2.convertToGrayscalePlanarImage(cvGrayImage2, 1); + // cvColorImage2.convertToGrayscalePlanarImage(cvGrayImage2, 1); //added by tom we weren't actually setting cvgrayimage1 anywhere // cvGrayImage1.setFromPixels(cvColorImage1.getPixels(),cvColorImage1.width,cvColorImage1.height); //cvGrayDiff1.absDiff(cvGrayImage2, cvGrayImage1); -//cvGrayImage1=cvColorImage1; - +//cvGrayImage1=cvColorImage1; + cvGrayImage1.erode(); cvGrayImage1.erode(); cvGrayImage1.erode(); cvGrayImage1.blur(); - cvGrayImage1.contrastStretch(); + cvGrayImage1.contrastStretch(); /* cvColorImage1.erode(); cvColorImage1.erode(); cvColorImage1.erode(); diff --git a/src/ColorMultiAnalysis.cpp b/src/ColorMultiAnalysis.cpp index ab2b8a0..f07439e 100755 --- a/src/ColorMultiAnalysis.cpp +++ b/src/ColorMultiAnalysis.cpp @@ -14,6 +14,8 @@ using Poco::Thread; void ColorMultiAnalysis::setup(int camWidth, int camHeight) { + AbstractAnalysis::setup(camWidth, camHeight); + NUM_RUN = RefractiveIndex::XML.getValue("config:analysis_NUM_RUN:NUM_RUN_colormulti", NUMBER_RUNS); cout << "NUM_RUN ColorMultiAnalysis " << NUM_RUN << endl; //NUM_RUN = 5; diff --git a/src/ColorSingleAnalysis.cpp b/src/ColorSingleAnalysis.cpp index aa00795..cc7c78c 100755 --- a/src/ColorSingleAnalysis.cpp +++ b/src/ColorSingleAnalysis.cpp @@ -15,6 +15,8 @@ using Poco::Thread; void ColorSingleAnalysis::setup(int camWidth, int camHeight) { + AbstractAnalysis::setup(camWidth, camHeight); + NUM_RUN = RefractiveIndex::XML.getValue("config:analysis_NUM_RUN:NUM_RUN_colorsingle", NUMBER_RUNS); cout << "NUM_RUN ColorSingleAnalysis " << NUM_RUN << endl; //NUM_RUN = 5; diff --git a/src/DiffNoiseAnalysis.cpp b/src/DiffNoiseAnalysis.cpp index 596e8ea..5a48dad 100755 --- a/src/DiffNoiseAnalysis.cpp +++ b/src/DiffNoiseAnalysis.cpp @@ -15,6 +15,8 @@ using Poco::Thread; void DiffNoiseAnalysis::setup(int camWidth, int camHeight) { + AbstractAnalysis::setup(camWidth, camHeight); + NUM_RUN = RefractiveIndex::XML.getValue("config:analysis_NUM_RUN:NUM_RUN_diffnoise", NUMBER_RUNS); cout << "NUM_RUN DiffNoiseAnalysis " << NUM_RUN << endl; //NUM_RUN = 5; diff --git a/src/IResponseAnalysis.cpp b/src/IResponseAnalysis.cpp index a3beb30..884f6a9 100755 --- a/src/IResponseAnalysis.cpp +++ b/src/IResponseAnalysis.cpp @@ -15,6 +15,8 @@ using Poco::Thread; void IResponseAnalysis::setup(int camWidth, int camHeight) { + AbstractAnalysis::setup(camWidth, camHeight); + NUM_RUN = RefractiveIndex::XML.getValue("config:analysis_NUM_RUN:NUM_RUN_iresponse", NUMBER_RUNS); cout << "NUM_RUN IResponseAnalysis " << NUM_RUN << endl; //NUM_RUN = 5; diff --git a/src/RelaxRateAnalysis.cpp b/src/RelaxRateAnalysis.cpp index 9329a77..16c3e46 100755 --- a/src/RelaxRateAnalysis.cpp +++ b/src/RelaxRateAnalysis.cpp @@ -17,6 +17,8 @@ using Poco::Thread; void RelaxRateAnalysis::setup(int camWidth, int camHeight) { + AbstractAnalysis::setup(camWidth, camHeight); + NUM_RUN = RefractiveIndex::XML.getValue("config:analysis_NUM_RUN:NUM_RUN_relaxrate", NUMBER_RUNS); cout << "NUM_RUN RelaxRateAnalysis " << NUM_RUN << endl; //NUM_RUN = 5; diff --git a/src/ShadowScapesAnalysis.cpp b/src/ShadowScapesAnalysis.cpp index 4af38e2..3d41da2 100755 --- a/src/ShadowScapesAnalysis.cpp +++ b/src/ShadowScapesAnalysis.cpp @@ -19,6 +19,8 @@ using Poco::Thread; void ShadowScapesAnalysis::setup(int camWidth, int camHeight) { + AbstractAnalysis::setup(camWidth, camHeight); + NUM_RUN = RefractiveIndex::XML.getValue("config:analysis_NUM_RUN:NUM_RUN_shadowscapes", NUMBER_RUNS); cout << "NUM_RUN ShadowScapesAnalysis " << NUM_RUN << endl; //NUM_RUN = 5; diff --git a/src/ShapeFromShadingAnalysis.cpp b/src/ShapeFromShadingAnalysis.cpp index 3dc12d9..a2bf3ae 100755 --- a/src/ShapeFromShadingAnalysis.cpp +++ b/src/ShapeFromShadingAnalysis.cpp @@ -15,6 +15,8 @@ using Poco::Thread; void ShapeFromShadingAnalysis::setup(int camWidth, int camHeight) { + AbstractAnalysis::setup(camWidth, camHeight); + NUM_RUN = RefractiveIndex::XML.getValue("config:analysis_NUM_RUN:NUM_RUN_shapefromshading", NUMBER_RUNS); cout << "NUM_RUN ShapeFromShadingAnalysis " << NUM_RUN << endl; //NUM_RUN = 5; diff --git a/src/StrobeAnalysis.cpp b/src/StrobeAnalysis.cpp index 5c1a5d4..b45241a 100755 --- a/src/StrobeAnalysis.cpp +++ b/src/StrobeAnalysis.cpp @@ -15,6 +15,8 @@ using Poco::Thread; void StrobeAnalysis::setup(int camWidth, int camHeight) { + AbstractAnalysis::setup(camWidth, camHeight); + NUM_RUN = RefractiveIndex::XML.getValue("config:analysis_NUM_RUN:NUM_RUN_strobe", NUMBER_RUNS); cout << "NUM_RUN StrobeAnalysis " << NUM_RUN << endl; //NUM_RUN = 5;