Skip to content
Snippets Groups Projects
Commit 4f5e7f93 authored by Thomas Boy's avatar Thomas Boy
Browse files

use different bk ground method, test, no bk gen needed

parent 0ee54406
No related branches found
No related tags found
No related merge requests found
......@@ -11,11 +11,12 @@ based on original demo.cpp
#include <stdlib.h> /* srand, rand */
#include <time.h> /* time */
#include <ctime>
#include <signal.h>
#define PROCESS_CENTER_VERSION_MAJOR 0
#define PROCESS_CENTER_VERSION_MINOR 9
#define PROCESS_CENTER_VERSION_MINOR_FIXES 8
#define PROCESS_CENTER_VERSION_MINOR_FIXES 9
//opencv
#include <opencv2/opencv.hpp>
......@@ -28,6 +29,17 @@ based on original demo.cpp
using namespace cv;
using namespace std;
int g_badSignalFlagAbort = 0;
void my_handler(int signum)
{
if (signum == SIGUSR1)
{
g_badSignalFlagAbort = 1;
cerr << "receive signal to abort"<<endl;
}
}
char* getCmdOption(char ** begin, char ** end, const std::string & option)
{
char ** itr = std::find(begin, end, option);
......@@ -46,6 +58,7 @@ bool cmdOptionExists(char** begin, char** end, const std::string& option)
int main(int argc, char * argv[])
{
signal(SIGUSR1, my_handler);
std::cout << "using processcenter " <<PROCESS_CENTER_VERSION_MAJOR <<"."<< PROCESS_CENTER_VERSION_MINOR<<"."<<PROCESS_CENTER_VERSION_MINOR_FIXES<< endl;
std::cout << "Using OpenCV " << CV_MAJOR_VERSION << "." << CV_MINOR_VERSION << "." << CV_SUBMINOR_VERSION << std::endl;
......@@ -127,7 +140,7 @@ int main(int argc, char * argv[])
// }
/* Background Subtraction Methods */
//IBGS *bgs;
IBGS *bgs;
//bgs = new FrameDifference;
//bgs = new StaticFrameDifference;
......@@ -154,7 +167,7 @@ int main(int argc, char * argv[])
//bgs = new FuzzySugenoIntegral;
//bgs = new FuzzyChoquetIntegral;
//bgs = new MultiLayer;
//bgs = new PixelBasedAdaptiveSegmenter;
bgs = new PixelBasedAdaptiveSegmenter;
//bgs = new LBSimpleGaussian;
//bgs = new LBFuzzyGaussian;
//bgs = new LBMixtureOfGaussians;
......@@ -173,7 +186,7 @@ int main(int argc, char * argv[])
//bgs = new ViBe;
//bgs = new Tapter;
Tapter *bgs = new Tapter;
//Tapter *bgs = new Tapter;
//see paper https://dl.acm.org/citation.cfm?id=2321600
//https://ieeexplore.ieee.org/document/4527178/
......@@ -215,106 +228,106 @@ int main(int argc, char * argv[])
cout <<"circleRadius: "<< circleRadius<<endl;
fsCen.release();
//first the static pic**********
//std::string fileName = getFileName(begin);
std::string staticFile = inputDir+"/bk.jpg";
cout <<"a) load first static background pic :"<< staticFile<<endl;
//we check for corrupt image
if(TToolBox::checkFileCorrupted(staticFile))
{
cout<<"error file: "<< staticFile<<" is corrupted, will abort"<<endl;
return EXIT_FAILURE;
}
img_input = imread(staticFile.c_str(), CV_LOAD_IMAGE_COLOR);
if(img_input.data )
{
//we cut out a smaller ROI
img_input = TToolBox::cropImageCircle(img_input,circleCenterX,circleCenterY,circleRadius);
cv::Mat img_mask;
cv::Mat img_bkgmodel;
bgs->process(img_input, img_mask, img_bkgmodel);
}
else
{
cout<<"error loading file: "<< staticFile<<", will abort"<<endl;
return EXIT_FAILURE;
}
// //first the static pic**********
// //std::string fileName = getFileName(begin);
// std::string staticFile = inputDir+"/bk.jpg";
// cout <<"a) load first static background pic :"<< staticFile<<endl;
// //we check for corrupt image
// if(TToolBox::checkFileCorrupted(staticFile))
// {
// cout<<"error file: "<< staticFile<<" is corrupted, will abort"<<endl;
// return EXIT_FAILURE;
// }
// img_input = imread(staticFile.c_str(), CV_LOAD_IMAGE_COLOR);
// if(img_input.data )
// {
// //we cut out a smaller ROI
// img_input = TToolBox::cropImageCircle(img_input,circleCenterX,circleCenterY,circleRadius);
// cv::Mat img_mask;
// cv::Mat img_bkgmodel;
// bgs->process(img_input, img_mask, img_bkgmodel);
// }
// else
// {
// cout<<"error loading file: "<< staticFile<<", will abort"<<endl;
// return EXIT_FAILURE;
// }
// std::string fileName;
// //! we train with first x on random draws
// int amountTrainingSteps = 10;
//// //we open the config file and readin
//// cv::String configFileName("./config/Tapter.xml");
//// {//read the config
//// FileStorage fs;
//// fs.open(configFileName, FileStorage::READ);
//// if (!fs.isOpened())
//// {
//// cout << "error during open " << configFileName << " will abort " <<endl;
//// return EXIT_FAILURE;
//// }
//// //param
//// amountTrainingSteps = (int) fs["trainingSteps"];
//// //cout <<"amountTrainingSteps: "<< amountTrainingSteps<< endl;
//// fs.release();
//// }
// cout <<"b) we train the background with random choosen files"<< fileName<<endl;
// //int j=255;
// vector<string> myRandomTrainList; //we save all draws in a list which will save to the results
// for(i=0;i<amountTrainingSteps;i++)
// {
// //random index
// int index = rand() % amountFiles; //TODO: double check no double draw ??
// fileName = inputDir + TToolBox::getFileName(index);
// myRandomTrainList.push_back(fileName);
// //we check for corrupt image
// if(TToolBox::checkFileCorrupted(fileName))
// {
// cout<<"error file: "<< fileName<<" is corrupted, will ignore it and draw new"<<endl;
// i--;
// continue; //we jump over the rest //TODO bad style
// }
// cout <<"\t"<<i <<"\t of \t"<<amountTrainingSteps<<" rnd file :"<< fileName<<endl;
// img_input = imread(fileName.c_str(), CV_LOAD_IMAGE_COLOR);
// if(img_input.data )
// {
// //we cut out a smaller ROI
// img_input = TToolBox::cropImageCircle(img_input,circleCenterX,circleCenterY,circleRadius);
// cv::Mat img_mask;
// cv::Mat img_bkgmodel;
// bgs->process(img_input, img_mask, img_bkgmodel); // by default, it shows automatically the foreground mask image
// }
// else
// {
// cout<<"error loading file: "<< fileName<<", will draw again"<<endl;
// i--;
// //return EXIT_FAILURE;
// }
// }
cout <<"a) we process all frames "<<endl;
int everyPic= 60*5;
std::string fileName;
//! we train with first x on random draws
int amountTrainingSteps = 200;
//we open the config file and readin
cv::String configFileName("./config/Tapter.xml");
{//read the config
FileStorage fs;
fs.open(configFileName, FileStorage::READ);
if (!fs.isOpened())
{
cout << "error during open " << configFileName << " will abort " <<endl;
return EXIT_FAILURE;
}
//param
amountTrainingSteps = (int) fs["trainingSteps"];
//cout <<"amountTrainingSteps: "<< amountTrainingSteps<< endl;
fs.release();
}
cout <<"b) we train the background with random choosen files"<< fileName<<endl;
//int j=255;
vector<string> myRandomTrainList; //we save all draws in a list which will save to the results
for(i=0;i<amountTrainingSteps;i++)
{
//random index
int index = rand() % amountFiles; //TODO: double check no double draw ??
fileName = inputDir + TToolBox::getFileName(index);
myRandomTrainList.push_back(fileName);
//we check for corrupt image
if(TToolBox::checkFileCorrupted(fileName))
{
cout<<"error file: "<< fileName<<" is corrupted, will ignore it and draw new"<<endl;
i--;
continue; //we jump over the rest //TODO bad style
}
cout <<"\t"<<i <<"\t of \t"<<amountTrainingSteps<<" rnd file :"<< fileName<<endl;
img_input = imread(fileName.c_str(), CV_LOAD_IMAGE_COLOR);
if(img_input.data )
{
//we cut out a smaller ROI
img_input = TToolBox::cropImageCircle(img_input,circleCenterX,circleCenterY,circleRadius);
cv::Mat img_mask;
cv::Mat img_bkgmodel;
bgs->process(img_input, img_mask, img_bkgmodel); // by default, it shows automatically the foreground mask image
}
else
{
cout<<"error loading file: "<< fileName<<", will draw again"<<endl;
i--;
//return EXIT_FAILURE;
}
}
cout <<"c) we produce train the background with random choosen files"<< fileName<<endl;
int everyPic=60*5;
int frameCounter=0;
vector<string> myFileErrorList;//list for pure io error
vector<string> myFileListNoContour; //list for no contours found;
vector<string> myFileListAfterContourSelection; //list for no contours found after selection;
vector<string> myFileListCorrupted; //list all corrupted jpg files
for(frameCounter=0;frameCounter<amountFiles;frameCounter++)
for(frameCounter=0;frameCounter<amountFiles||g_badSignalFlagAbort;frameCounter++)
{
//measure time consumption
clock_t begin = clock();
......@@ -494,8 +507,8 @@ int main(int argc, char * argv[])
muConvexHull = moments(conHull, true );
muConvexHullMassCenter= Point2f( muConvexHull.m10/muConvexHull.m00 , muConvexHull.m01/muConvexHull.m00 );
}
}//end after selection is empty
}
else //end after selection is empty
{
cerr<<"error, no contour found after selection in file: "<< fileName<<endl;
myFileListAfterContourSelection.push_back(fileName);
......@@ -531,9 +544,12 @@ int main(int argc, char * argv[])
#endif
//cout <<" found center at : "<< massCenters.at(0).x<< ";"<<massCenters.at(0).y<<endl;
//! step 8: we write down all our results in yml file
std::string nameOutPutFileData = outputDir + TToolBox::mNzero(frameCounter) + ".yml";
//cout <<"output file:" << nameOutPutFileData;
FileStorage fs(nameOutPutFileData.c_str(), FileStorage::WRITE);
fs << "masscenters" << massCenters;
fs << "polygonselection"<< contourSelection;
......@@ -614,11 +630,11 @@ int main(int argc, char * argv[])
double elapsed = double(endAll - beginAll) / CLOCKS_PER_SEC;
cout <<"process : "<<amountFiles<<" files took:\t"<<(int)(elapsed/60)<<" min -\t"<<(int)(elapsed/60/60)<<" h \n in total"<<endl;
//we write the random file list to a file
std::string nameOutRandomFile = outputDir + "randlist.yml";
FileStorage fs(nameOutRandomFile.c_str(), FileStorage::WRITE);
fs << "randomlist" << myRandomTrainList;
fs.release();
// //we write the random file list to a file
// std::string nameOutRandomFile = outputDir + "randlist.yml";
// FileStorage fs(nameOutRandomFile.c_str(), FileStorage::WRITE);
// fs << "randomlist" << myRandomTrainList;
// fs.release();
//TODO we should merge the file
......@@ -641,7 +657,6 @@ int main(int argc, char * argv[])
cout <<"amount of corrupted jpg files: "<< myFileListCorrupted.size()<<endl;
fs2 << "fileErrorIOcorruptFiles" << myFileListCorrupted;
fs2.release();
delete bgs;
......
......@@ -43,22 +43,23 @@ std::vector<std::vector<cv::Point>> TToolBox::applyCannyEdgeAndCalcCountours(cv:
// Find contours, use RETR_EXTERNAL ignore inner child structures, TREE more usefull ?
cv::findContours( imgCannyEdge, contours, hierarchy, cv::RETR_EXTERNAL, CV_CHAIN_APPROX_SIMPLE, cv::Point(0, 0) );
#define MC_SHOW_STEP_ANALYSE
#ifdef MC_SHOW_STEP_ANALYSE
// Draw contours on extra mat
Mat imgContour = Mat::zeros( imgCannyEdge.size(), CV_8UC3 );
imgContour = Scalar(255,255,255); //fille the picture
RNG rng(232323);
cv::Mat imgContour = cv::Mat::zeros( imgCannyEdge.size(), CV_8UC3 );
imgContour = cv::Scalar(255,255,255); //fille the picture
cv::RNG rng(232323);
for( size_t i = 0; i< contours.size(); i++ )
{
//random color
Scalar color = Scalar( rng.uniform(0, 255), rng.uniform(0,255), rng.uniform(0,255) );
cv::Scalar color = cv::Scalar( rng.uniform(0, 255), rng.uniform(0,255), rng.uniform(0,255) );
//contour
drawContours( imgContour, contours, i, color, 1, LINE_AA, hierarchy, 0, Point() );
cv::drawContours( imgContour, contours, i, color, 1, cv::LINE_AA, hierarchy, 0, cv::Point() );
}
cv::String outpath= "/homes/tb55xemi/work/bugTrainingSet/testRec/rec04379437pp/result/";
cv::String outpath= "/homes/tb55xemi/work/dev/bgslibrary-bgslib_qtgui_2.0.0/build/test0815/results";
std::ostringstream convert;
convert << outpath << frameCounter <<"_countour_canny_edge.jpg";
convert << outpath << "test_countour_canny_edge.jpg";
cv::imwrite(convert.str().c_str(), imgContour);
#endif
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment