From ed827659f8421941c8dc39d514d3836ccf781c7b Mon Sep 17 00:00:00 2001 From: Andrews Sobral <andrewssobral@gmail.com> Date: Sun, 10 Mar 2019 20:16:15 +0100 Subject: [PATCH] Added automatic object factory. Now it supports retrieving algorithm object by name. --- Demo.cpp | 119 ++++++++---------- Demo2.cpp | 115 +++++++---------- package_bgs/AdaptiveBackgroundLearning.h | 2 + .../AdaptiveSelectiveBackgroundLearning.h | 2 + package_bgs/CodeBook.h | 2 + package_bgs/DPAdaptiveMedian.h | 2 + package_bgs/DPEigenbackground.h | 2 + package_bgs/DPGrimsonGMM.h | 2 + package_bgs/DPMean.h | 2 + package_bgs/DPPratiMediod.h | 2 + package_bgs/DPTexture.h | 2 + package_bgs/DPWrenGA.h | 2 + package_bgs/DPZivkovicAGMM.h | 2 + package_bgs/FrameDifference.h | 2 + package_bgs/FuzzyChoquetIntegral.h | 2 + package_bgs/FuzzySugenoIntegral.h | 2 + package_bgs/GMG.h | 2 + package_bgs/IBGS.h | 64 +++++++++- package_bgs/IndependentMultimodal.h | 2 + package_bgs/KDE.h | 2 + package_bgs/KNN.h | 2 + package_bgs/LBAdaptiveSOM.h | 2 + package_bgs/LBFuzzyAdaptiveSOM.h | 2 + package_bgs/LBFuzzyGaussian.h | 2 + package_bgs/LBMixtureOfGaussians.h | 2 + package_bgs/LBP_MRF.h | 2 + package_bgs/LBSimpleGaussian.h | 2 + package_bgs/LOBSTER.h | 2 + package_bgs/MixtureOfGaussianV1.h | 2 + package_bgs/MixtureOfGaussianV2.h | 2 + package_bgs/MultiCue.h | 2 + package_bgs/MultiLayer.h | 2 + package_bgs/PAWCS.h | 2 + package_bgs/PixelBasedAdaptiveSegmenter.h | 2 + package_bgs/SigmaDelta.h | 2 + package_bgs/StaticFrameDifference.h | 2 + package_bgs/SuBSENSE.h | 2 + package_bgs/T2FGMM_UM.h | 2 + package_bgs/T2FGMM_UV.h | 2 + package_bgs/T2FMRF_UM.h | 2 + package_bgs/T2FMRF_UV.h | 2 + package_bgs/TwoPoints.h | 2 + package_bgs/ViBe.h | 2 + package_bgs/VuMeter.h | 2 + package_bgs/WeightedMovingMean.h | 2 + package_bgs/WeightedMovingVariance.h | 2 + package_bgs/_template_/Amber.h | 2 + package_bgs/_template_/MyBGS.h | 2 + package_bgs/bgslibrary.cpp | 18 +++ package_bgs/bgslibrary.h | 2 + 50 files changed, 266 insertions(+), 142 deletions(-) create mode 100644 package_bgs/bgslibrary.cpp diff --git a/Demo.cpp b/Demo.cpp index f48654d..762d2ae 100644 --- a/Demo.cpp +++ b/Demo.cpp @@ -15,18 +15,16 @@ You should have received a copy of the GNU General Public License along with BGSLibrary. If not, see <http://www.gnu.org/licenses/>. */ #include <iostream> +#include <vector> #include <opencv2/opencv.hpp> -using namespace cv; #include "package_bgs/bgslibrary.h" -using namespace ibgs; - int main(int argc, char **argv) { std::cout << "Using OpenCV " << CV_MAJOR_VERSION << "." << CV_MINOR_VERSION << "." << CV_SUBMINOR_VERSION << std::endl; - VideoCapture capture; + cv::VideoCapture capture; if (argc > 1) { @@ -43,76 +41,57 @@ int main(int argc, char **argv) } /* Background Subtraction Methods */ - IBGS *bgs; - - bgs = new FrameDifference; - //bgs = new StaticFrameDifference; - //bgs = new WeightedMovingMean; - //bgs = new WeightedMovingVariance; - //bgs = new MixtureOfGaussianV1; // only on OpenCV 2.x - //bgs = new MixtureOfGaussianV2; - //bgs = new AdaptiveBackgroundLearning; - //bgs = new AdaptiveSelectiveBackgroundLearning; - //bgs = new GMG; // only on OpenCV 2.x - //bgs = new KNN; // only on OpenCV 3.x - //bgs = new DPAdaptiveMedian; - //bgs = new DPGrimsonGMM; - //bgs = new DPZivkovicAGMM; - //bgs = new DPMean; - //bgs = new DPWrenGA; - //bgs = new DPPratiMediod; - //bgs = new DPEigenbackground; - //bgs = new DPTexture; - //bgs = new T2FGMM_UM; - //bgs = new T2FGMM_UV; - //bgs = new T2FMRF_UM; - //bgs = new T2FMRF_UV; - //bgs = new FuzzySugenoIntegral; - //bgs = new FuzzyChoquetIntegral; - //bgs = new MultiLayer; - //bgs = new PixelBasedAdaptiveSegmenter; - //bgs = new LBSimpleGaussian; - //bgs = new LBFuzzyGaussian; - //bgs = new LBMixtureOfGaussians; - //bgs = new LBAdaptiveSOM; - //bgs = new LBFuzzyAdaptiveSOM; - //bgs = new LBP_MRF; - //bgs = new VuMeter; - //bgs = new KDE; - //bgs = new IndependentMultimodal; - //bgs = new MultiCue; - //bgs = new SigmaDelta; - //bgs = new SuBSENSE; - //bgs = new LOBSTER; - //bgs = new PAWCS; - //bgs = new TwoPoints; - //bgs = new ViBe; - //bgs = new CodeBook; - - int key = 0; - cv::Mat img_input; - while (key != 'q') - { - capture >> img_input; - if (img_input.empty()) break; - - cv::imshow("input", img_input); - - 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 + auto algorithmsName = BGS_Factory::Instance()->GetRegisteredAlgorithmsName(); - //if(!img_mask.empty()) - // cv::imshow("Foreground", img_mask); - // do something - - key = cvWaitKey(33); + auto key = 0; + for (const std::string& algorithmName : algorithmsName) + { + std::cout << "Running " << algorithmName << std::endl; + auto bgs = BGS_Factory::Instance()->Create(algorithmName); + + cv::Mat img_input; + + capture.set(CV_CAP_PROP_POS_FRAMES, 0); // Set index to 0 (start frame) + auto frame_counter = 0; + std::cout << "Press 's' to stop:" << std::endl; + while (key != 's') + { + // Capture frame-by-frame + capture >> img_input; + frame_counter += 1; + + if (img_input.empty()) break; + + cv::imshow("input", img_input); + + cv::Mat img_mask; + cv::Mat img_bkgmodel; + try + { + bgs->process(img_input, img_mask, img_bkgmodel); // by default, it shows automatically the foreground mask image + + //if(!img_mask.empty()) + // cv::imshow("Foreground", img_mask); + // do something + } + catch (std::exception& e) + { + std::cout << "Exception occurred" << std::endl; + std::cout << e.what() << std::endl; + } + + key = cv::waitKey(33); + } + + std::cout << "Press 'q' to exit, or anything else to move to the next algorithm:" << std::endl; + key = cv::waitKey(0); + if (key == 'q') + break; + + cv::destroyAllWindows(); } - delete bgs; - capture.release(); - cvDestroyAllWindows(); return 0; } diff --git a/Demo2.cpp b/Demo2.cpp index 75c906b..ad95e73 100644 --- a/Demo2.cpp +++ b/Demo2.cpp @@ -15,6 +15,7 @@ You should have received a copy of the GNU General Public License along with BGSLibrary. If not, see <http://www.gnu.org/licenses/>. */ #include <iostream> +#include <vector> #include <opencv2/opencv.hpp> #include "package_bgs/bgslibrary.h" @@ -24,84 +25,58 @@ int main(int argc, char **argv) std::cout << "Using OpenCV " << CV_MAJOR_VERSION << "." << CV_MINOR_VERSION << "." << CV_SUBMINOR_VERSION << std::endl; /* Background Subtraction Methods */ - IBGS *bgs; - - bgs = new FrameDifference; - //bgs = new StaticFrameDifference; - //bgs = new WeightedMovingMean; - //bgs = new WeightedMovingVariance; - //bgs = new MixtureOfGaussianV1; // only on OpenCV 2.x - //bgs = new MixtureOfGaussianV2; - //bgs = new AdaptiveBackgroundLearning; - //bgs = new AdaptiveSelectiveBackgroundLearning; - //bgs = new GMG; // only on OpenCV 2.x - //bgs = new KNN; // only on OpenCV 3.x - //bgs = new DPAdaptiveMedian; - //bgs = new DPGrimsonGMM; - //bgs = new DPZivkovicAGMM; - //bgs = new DPMean; - //bgs = new DPWrenGA; - //bgs = new DPPratiMediod; - //bgs = new DPEigenbackground; - //bgs = new DPTexture; - //bgs = new T2FGMM_UM; - //bgs = new T2FGMM_UV; - //bgs = new T2FMRF_UM; - //bgs = new T2FMRF_UV; - //bgs = new FuzzySugenoIntegral; - //bgs = new FuzzyChoquetIntegral; - //bgs = new MultiLayer; - //bgs = new PixelBasedAdaptiveSegmenter; - //bgs = new LBSimpleGaussian; - //bgs = new LBFuzzyGaussian; - //bgs = new LBMixtureOfGaussians; - //bgs = new LBAdaptiveSOM; - //bgs = new LBFuzzyAdaptiveSOM; - //bgs = new LBP_MRF; - //bgs = new VuMeter; - //bgs = new KDE; - //bgs = new IndependentMultimodal; - //bgs = new MultiCue; - //bgs = new SigmaDelta; - //bgs = new SuBSENSE; - //bgs = new LOBSTER; - //bgs = new PAWCS; - //bgs = new TwoPoints; - //bgs = new ViBe; - //bgs = new CodeBook; - - int frameNumber = 1; - int key = 0; - while (key != 'q') + auto algorithmsName = BGS_Factory::Instance()->GetRegisteredAlgorithmsName(); + + auto key = 0; + for (const std::string& algorithmName : algorithmsName) { - std::stringstream ss; - ss << frameNumber; - std::string fileName = "dataset/frames/" + ss.str() + ".png"; - std::cout << "reading " << fileName << std::endl; + std::cout << "Running " << algorithmName << std::endl; + auto bgs = BGS_Factory::Instance()->Create(algorithmName); - cv::Mat img_input = cv::imread(fileName, CV_LOAD_IMAGE_COLOR); + auto frame_counter = 0; + std::cout << "Press 's' to stop:" << std::endl; + while (key != 's') + { + // Capture frame-by-frame + frame_counter++; + std::stringstream ss; + ss << frame_counter; + std::string fileName = "dataset/frames/" + ss.str() + ".png"; + std::cout << "reading " << fileName << std::endl; - if (img_input.empty()) - break; + cv::Mat img_input = cv::imread(fileName, CV_LOAD_IMAGE_COLOR); + + if (img_input.empty()) + break; - cv::imshow("input", img_input); + cv::imshow("input", img_input); - cv::Mat img_mask; - cv::Mat img_bkgmodel; - bgs->process(img_input, img_mask, img_bkgmodel); - // by default, "bgs->process(.)" automatically shows the foreground mask image - // or set "bgs->setShowOutput(false)" to disable + cv::Mat img_mask; + cv::Mat img_bkgmodel; + try + { + bgs->process(img_input, img_mask, img_bkgmodel); // by default, it shows automatically the foreground mask image - //if(!img_mask.empty()) - // cv::imshow("Foreground", img_mask); - // do something + //if(!img_mask.empty()) + // cv::imshow("Foreground", img_mask); + // do something + } + catch (std::exception& e) + { + std::cout << "Exception occurred" << std::endl; + std::cout << e.what() << std::endl; + } + + key = cv::waitKey(33); + } + + std::cout << "Press 'q' to exit, or anything else to move to the next algorithm:" << std::endl; + key = cv::waitKey(0); + if (key == 'q') + break; - key = cvWaitKey(33); - frameNumber++; + cv::destroyAllWindows(); } - cvWaitKey(0); - delete bgs; - cvDestroyAllWindows(); return 0; } diff --git a/package_bgs/AdaptiveBackgroundLearning.h b/package_bgs/AdaptiveBackgroundLearning.h index 3cfc686..d18114b 100644 --- a/package_bgs/AdaptiveBackgroundLearning.h +++ b/package_bgs/AdaptiveBackgroundLearning.h @@ -43,5 +43,7 @@ namespace bgslibrary void saveConfig(); void loadConfig(); }; + + static BGS_Register<AdaptiveBackgroundLearning> register_AdaptiveBackgroundLearning("AdaptiveBackgroundLearning"); } } diff --git a/package_bgs/AdaptiveSelectiveBackgroundLearning.h b/package_bgs/AdaptiveSelectiveBackgroundLearning.h index 24da44c..5f9c98f 100644 --- a/package_bgs/AdaptiveSelectiveBackgroundLearning.h +++ b/package_bgs/AdaptiveSelectiveBackgroundLearning.h @@ -43,5 +43,7 @@ namespace bgslibrary void saveConfig(); void loadConfig(); }; + + static BGS_Register<AdaptiveSelectiveBackgroundLearning> register_AdaptiveSelectiveBackgroundLearning("AdaptiveSelectiveBackgroundLearning"); } } diff --git a/package_bgs/CodeBook.h b/package_bgs/CodeBook.h index ec224ab..316600d 100644 --- a/package_bgs/CodeBook.h +++ b/package_bgs/CodeBook.h @@ -64,5 +64,7 @@ namespace bgslibrary void saveConfig(); void loadConfig(); }; + + static BGS_Register<CodeBook> register_CodeBook("CodeBook"); } } diff --git a/package_bgs/DPAdaptiveMedian.h b/package_bgs/DPAdaptiveMedian.h index 7d2b7fa..990f048 100644 --- a/package_bgs/DPAdaptiveMedian.h +++ b/package_bgs/DPAdaptiveMedian.h @@ -49,5 +49,7 @@ namespace bgslibrary void saveConfig(); void loadConfig(); }; + + static BGS_Register<DPAdaptiveMedian> register_DPAdaptiveMedian("DPAdaptiveMedian"); } } diff --git a/package_bgs/DPEigenbackground.h b/package_bgs/DPEigenbackground.h index f84fee7..d962559 100644 --- a/package_bgs/DPEigenbackground.h +++ b/package_bgs/DPEigenbackground.h @@ -51,5 +51,7 @@ namespace bgslibrary void saveConfig(); void loadConfig(); }; + + static BGS_Register<DPEigenbackground> register_DPEigenbackground("DPEigenbackground"); } } diff --git a/package_bgs/DPGrimsonGMM.h b/package_bgs/DPGrimsonGMM.h index dcc05eb..954261f 100644 --- a/package_bgs/DPGrimsonGMM.h +++ b/package_bgs/DPGrimsonGMM.h @@ -51,5 +51,7 @@ namespace bgslibrary void saveConfig(); void loadConfig(); }; + + static BGS_Register<DPGrimsonGMM> register_DPGrimsonGMM("DPGrimsonGMM"); } } diff --git a/package_bgs/DPMean.h b/package_bgs/DPMean.h index 6029968..ad63762 100644 --- a/package_bgs/DPMean.h +++ b/package_bgs/DPMean.h @@ -51,5 +51,7 @@ namespace bgslibrary void saveConfig(); void loadConfig(); }; + + static BGS_Register<DPMean> register_DPMean("DPMean"); } } diff --git a/package_bgs/DPPratiMediod.h b/package_bgs/DPPratiMediod.h index d37a77a..d71accc 100644 --- a/package_bgs/DPPratiMediod.h +++ b/package_bgs/DPPratiMediod.h @@ -52,5 +52,7 @@ namespace bgslibrary void saveConfig(); void loadConfig(); }; + + static BGS_Register<DPPratiMediod> register_DPPratiMediod("DPPratiMediod"); } } diff --git a/package_bgs/DPTexture.h b/package_bgs/DPTexture.h index 3cfdcea..38321e4 100644 --- a/package_bgs/DPTexture.h +++ b/package_bgs/DPTexture.h @@ -55,5 +55,7 @@ namespace bgslibrary void saveConfig(); void loadConfig(); }; + + static BGS_Register<DPTexture> register_DPTextured("DPTexture"); } } diff --git a/package_bgs/DPWrenGA.h b/package_bgs/DPWrenGA.h index e4b0b5f..d708692 100644 --- a/package_bgs/DPWrenGA.h +++ b/package_bgs/DPWrenGA.h @@ -51,5 +51,7 @@ namespace bgslibrary void saveConfig(); void loadConfig(); }; + + static BGS_Register<DPWrenGA> register_DPWrenGA("DPWrenGA"); } } diff --git a/package_bgs/DPZivkovicAGMM.h b/package_bgs/DPZivkovicAGMM.h index f35504b..25f4d4d 100644 --- a/package_bgs/DPZivkovicAGMM.h +++ b/package_bgs/DPZivkovicAGMM.h @@ -51,5 +51,7 @@ namespace bgslibrary void saveConfig(); void loadConfig(); }; + + static BGS_Register<DPZivkovicAGMM> register_DPZivkovicAGMM("DPZivkovicAGMM"); } } diff --git a/package_bgs/FrameDifference.h b/package_bgs/FrameDifference.h index 07bed8e..74c22db 100644 --- a/package_bgs/FrameDifference.h +++ b/package_bgs/FrameDifference.h @@ -38,6 +38,8 @@ namespace bgslibrary void saveConfig(); void loadConfig(); }; + + static BGS_Register<FrameDifference> register_FrameDifference("FrameDifference"); } } diff --git a/package_bgs/FuzzyChoquetIntegral.h b/package_bgs/FuzzyChoquetIntegral.h index 25681b0..000e031 100644 --- a/package_bgs/FuzzyChoquetIntegral.h +++ b/package_bgs/FuzzyChoquetIntegral.h @@ -49,5 +49,7 @@ namespace bgslibrary void saveConfig(); void loadConfig(); }; + + static BGS_Register<FuzzyChoquetIntegral> register_FuzzyChoquetIntegral("FuzzyChoquetIntegral"); } } diff --git a/package_bgs/FuzzySugenoIntegral.h b/package_bgs/FuzzySugenoIntegral.h index 70bde15..1cd913f 100644 --- a/package_bgs/FuzzySugenoIntegral.h +++ b/package_bgs/FuzzySugenoIntegral.h @@ -49,5 +49,7 @@ namespace bgslibrary void saveConfig(); void loadConfig(); }; + + static BGS_Register<FuzzySugenoIntegral> register_FuzzySugenoIntegral("FuzzySugenoIntegral"); } } diff --git a/package_bgs/GMG.h b/package_bgs/GMG.h index 0ff89c7..40473a5 100644 --- a/package_bgs/GMG.h +++ b/package_bgs/GMG.h @@ -43,6 +43,8 @@ namespace bgslibrary void saveConfig(); void loadConfig(); }; + + static BGS_Register<GMG> register_GMG("GMG"); } } diff --git a/package_bgs/IBGS.h b/package_bgs/IBGS.h index 37a079b..eb9858d 100644 --- a/package_bgs/IBGS.h +++ b/package_bgs/IBGS.h @@ -19,6 +19,11 @@ along with BGSLibrary. If not, see <http://www.gnu.org/licenses/>. #include <iostream> #include <fstream> #include <list> +#include <memory> +#include <string> +#include <functional> +#include <map> + #include <opencv2/opencv.hpp> #include <opencv2/imgproc/types_c.h> #include <opencv2/imgproc/imgproc_c.h> @@ -79,7 +84,62 @@ namespace bgslibrary virtual void saveConfig() = 0; virtual void loadConfig() = 0; }; + + class BGS_Factory + { + public: + static BGS_Factory* BGS_Factory::Instance() + { + static BGS_Factory factory; + return &factory; + } + + std::shared_ptr<IBGS> BGS_Factory::Create(std::string name) + { + IBGS* instance = nullptr; + + // find name in the registry and call factory method. + auto it = factoryFunctionRegistry.find(name); + if (it != factoryFunctionRegistry.end()) + instance = it->second(); + + // wrap instance in a shared ptr and return + if (instance != nullptr) + return std::shared_ptr<IBGS>(instance); + else + return nullptr; + } + + std::vector<std::string> BGS_Factory::GetRegisteredAlgorithmsName() + { + std::vector<std::string> algorithmsName; + for (auto it = factoryFunctionRegistry.begin(); it != factoryFunctionRegistry.end(); ++it) { + algorithmsName.push_back(it->first); + } + return algorithmsName; + } + + void BGS_Factory::RegisterFactoryFunction(std::string name, + std::function<IBGS*(void)> classFactoryFunction) + { + // register the class factory function + factoryFunctionRegistry[name] = classFactoryFunction; + } + + private: + std::map<std::string, std::function<IBGS*(void)>> factoryFunctionRegistry; + }; + + template<class T> + class BGS_Register + { + public: + BGS_Register(std::string className) + { + // register the class factory function + BGS_Factory::Instance()->RegisterFactoryFunction(className, + [](void) -> IBGS* { return new T(); }); + } + }; } } - -namespace ibgs = bgslibrary::algorithms; diff --git a/package_bgs/IndependentMultimodal.h b/package_bgs/IndependentMultimodal.h index 4e2e3a3..04eb774 100644 --- a/package_bgs/IndependentMultimodal.h +++ b/package_bgs/IndependentMultimodal.h @@ -39,5 +39,7 @@ namespace bgslibrary void saveConfig(); void loadConfig(); }; + + static BGS_Register<IndependentMultimodal> register_IndependentMultimodal("IndependentMultimodal"); } } diff --git a/package_bgs/KDE.h b/package_bgs/KDE.h index e77996f..1589b69 100644 --- a/package_bgs/KDE.h +++ b/package_bgs/KDE.h @@ -53,5 +53,7 @@ namespace bgslibrary void saveConfig(); void loadConfig(); }; + + static BGS_Register<KDE> register_KDE("KDE"); } } diff --git a/package_bgs/KNN.h b/package_bgs/KNN.h index 9e79d93..c732901 100644 --- a/package_bgs/KNN.h +++ b/package_bgs/KNN.h @@ -51,6 +51,8 @@ namespace bgslibrary void saveConfig(); void loadConfig(); }; + + static BGS_Register<KNN> register_KNN("KNN"); } } diff --git a/package_bgs/LBAdaptiveSOM.h b/package_bgs/LBAdaptiveSOM.h index 7671ae1..25e782b 100644 --- a/package_bgs/LBAdaptiveSOM.h +++ b/package_bgs/LBAdaptiveSOM.h @@ -46,5 +46,7 @@ namespace bgslibrary void saveConfig(); void loadConfig(); }; + + static BGS_Register<LBAdaptiveSOM> register_LBAdaptiveSOM("LBAdaptiveSOM"); } } diff --git a/package_bgs/LBFuzzyAdaptiveSOM.h b/package_bgs/LBFuzzyAdaptiveSOM.h index 6a4a85c..4a59e4c 100644 --- a/package_bgs/LBFuzzyAdaptiveSOM.h +++ b/package_bgs/LBFuzzyAdaptiveSOM.h @@ -46,5 +46,7 @@ namespace bgslibrary void saveConfig(); void loadConfig(); }; + + static BGS_Register<LBFuzzyAdaptiveSOM> register_LBFuzzyAdaptiveSOM("LBFuzzyAdaptiveSOM"); } } diff --git a/package_bgs/LBFuzzyGaussian.h b/package_bgs/LBFuzzyGaussian.h index 53c2667..3954fdb 100644 --- a/package_bgs/LBFuzzyGaussian.h +++ b/package_bgs/LBFuzzyGaussian.h @@ -45,5 +45,7 @@ namespace bgslibrary void saveConfig(); void loadConfig(); }; + + static BGS_Register<LBFuzzyGaussian> register_LBFuzzyGaussian("LBFuzzyGaussian"); } } diff --git a/package_bgs/LBMixtureOfGaussians.h b/package_bgs/LBMixtureOfGaussians.h index 8d4cb56..6de35d8 100644 --- a/package_bgs/LBMixtureOfGaussians.h +++ b/package_bgs/LBMixtureOfGaussians.h @@ -45,6 +45,8 @@ namespace bgslibrary void saveConfig(); void loadConfig(); }; + + static BGS_Register<LBMixtureOfGaussians> register_LBMixtureOfGaussians("LBMixtureOfGaussians"); } } diff --git a/package_bgs/LBP_MRF.h b/package_bgs/LBP_MRF.h index a6e5c05..0479ddd 100644 --- a/package_bgs/LBP_MRF.h +++ b/package_bgs/LBP_MRF.h @@ -39,5 +39,7 @@ namespace bgslibrary void saveConfig(); void loadConfig(); }; + + static BGS_Register<LBP_MRF> register_LBP_MRF("LBP_MRF"); } } diff --git a/package_bgs/LBSimpleGaussian.h b/package_bgs/LBSimpleGaussian.h index 5c82923..4a9b2af 100644 --- a/package_bgs/LBSimpleGaussian.h +++ b/package_bgs/LBSimpleGaussian.h @@ -44,5 +44,7 @@ namespace bgslibrary void saveConfig(); void loadConfig(); }; + + static BGS_Register<LBSimpleGaussian> register_LBSimpleGaussian("LBSimpleGaussian"); } } diff --git a/package_bgs/LOBSTER.h b/package_bgs/LOBSTER.h index 4b96ec9..8f0de18 100644 --- a/package_bgs/LOBSTER.h +++ b/package_bgs/LOBSTER.h @@ -44,5 +44,7 @@ namespace bgslibrary void saveConfig(); void loadConfig(); }; + + static BGS_Register<LOBSTER> register_LOBSTER("LOBSTER"); } } diff --git a/package_bgs/MixtureOfGaussianV1.h b/package_bgs/MixtureOfGaussianV1.h index e18dbdb..edf8b6d 100644 --- a/package_bgs/MixtureOfGaussianV1.h +++ b/package_bgs/MixtureOfGaussianV1.h @@ -47,6 +47,8 @@ namespace bgslibrary void saveConfig(); void loadConfig(); }; + + static BGS_Register<MixtureOfGaussianV1> register_MixtureOfGaussianV1("MixtureOfGaussianV1"); } } diff --git a/package_bgs/MixtureOfGaussianV2.h b/package_bgs/MixtureOfGaussianV2.h index ff4816d..c359f20 100644 --- a/package_bgs/MixtureOfGaussianV2.h +++ b/package_bgs/MixtureOfGaussianV2.h @@ -48,5 +48,7 @@ namespace bgslibrary void saveConfig(); void loadConfig(); }; + + static BGS_Register<MixtureOfGaussianV2> register_MixtureOfGaussianV2("MixtureOfGaussianV2"); } } diff --git a/package_bgs/MultiCue.h b/package_bgs/MultiCue.h index 44524e0..47403a5 100644 --- a/package_bgs/MultiCue.h +++ b/package_bgs/MultiCue.h @@ -250,5 +250,7 @@ namespace bgslibrary short** g_aCReferredIndex; //To handle cache-book short** g_aCContinuousCnt; //To handle cache-book }; + + static BGS_Register<MultiCue> register_MultiCue("MultiCue"); } } diff --git a/package_bgs/MultiLayer.h b/package_bgs/MultiLayer.h index 7838881..86da592 100644 --- a/package_bgs/MultiLayer.h +++ b/package_bgs/MultiLayer.h @@ -95,5 +95,7 @@ namespace bgslibrary void saveConfig(); void loadConfig(); }; + + static BGS_Register<MultiLayer> register_MultiLayer("MultiLayer"); } } diff --git a/package_bgs/PAWCS.h b/package_bgs/PAWCS.h index 173bcf6..bf37891 100644 --- a/package_bgs/PAWCS.h +++ b/package_bgs/PAWCS.h @@ -44,5 +44,7 @@ namespace bgslibrary void saveConfig(); void loadConfig(); }; + + static BGS_Register<PAWCS> register_PAWCS("PAWCS"); } } diff --git a/package_bgs/PixelBasedAdaptiveSegmenter.h b/package_bgs/PixelBasedAdaptiveSegmenter.h index 36dd0ad..acafc90 100644 --- a/package_bgs/PixelBasedAdaptiveSegmenter.h +++ b/package_bgs/PixelBasedAdaptiveSegmenter.h @@ -54,5 +54,7 @@ namespace bgslibrary void saveConfig(); void loadConfig(); }; + + static BGS_Register<PixelBasedAdaptiveSegmenter> register_PixelBasedAdaptiveSegmenter("PixelBasedAdaptiveSegmenter"); } } diff --git a/package_bgs/SigmaDelta.h b/package_bgs/SigmaDelta.h index c7b1a2c..5dd8a57 100644 --- a/package_bgs/SigmaDelta.h +++ b/package_bgs/SigmaDelta.h @@ -45,5 +45,7 @@ namespace bgslibrary void loadConfig(); void applyParams(); }; + + static BGS_Register<SigmaDelta> register_SigmaDelta("SigmaDelta"); } } diff --git a/package_bgs/StaticFrameDifference.h b/package_bgs/StaticFrameDifference.h index 8c8474c..9fcb093 100644 --- a/package_bgs/StaticFrameDifference.h +++ b/package_bgs/StaticFrameDifference.h @@ -38,5 +38,7 @@ namespace bgslibrary void saveConfig(); void loadConfig(); }; + + static BGS_Register<StaticFrameDifference> register_StaticFrameDifference("StaticFrameDifference"); } } diff --git a/package_bgs/SuBSENSE.h b/package_bgs/SuBSENSE.h index 9ac9aa6..ff17209 100644 --- a/package_bgs/SuBSENSE.h +++ b/package_bgs/SuBSENSE.h @@ -45,5 +45,7 @@ namespace bgslibrary void saveConfig(); void loadConfig(); }; + + static BGS_Register<SuBSENSE> register_SuBSENSE("SuBSENSE"); } } diff --git a/package_bgs/T2FGMM_UM.h b/package_bgs/T2FGMM_UM.h index c58aeb7..e8b4166 100644 --- a/package_bgs/T2FGMM_UM.h +++ b/package_bgs/T2FGMM_UM.h @@ -53,5 +53,7 @@ namespace bgslibrary void saveConfig(); void loadConfig(); }; + + static BGS_Register<T2FGMM_UM> register_T2FGMM_UM("T2FGMM_UM"); } } diff --git a/package_bgs/T2FGMM_UV.h b/package_bgs/T2FGMM_UV.h index 6102f3a..a8dab79 100644 --- a/package_bgs/T2FGMM_UV.h +++ b/package_bgs/T2FGMM_UV.h @@ -53,5 +53,7 @@ namespace bgslibrary void saveConfig(); void loadConfig(); }; + + static BGS_Register<T2FGMM_UV> register_T2FGMM_UV("T2FGMM_UV"); } } diff --git a/package_bgs/T2FMRF_UM.h b/package_bgs/T2FMRF_UM.h index 01f6014..8d324f4 100644 --- a/package_bgs/T2FMRF_UM.h +++ b/package_bgs/T2FMRF_UM.h @@ -60,5 +60,7 @@ namespace bgslibrary void saveConfig(); void loadConfig(); }; + + static BGS_Register<T2FMRF_UM> register_T2FMRF_UM("T2FMRF_UM"); } } diff --git a/package_bgs/T2FMRF_UV.h b/package_bgs/T2FMRF_UV.h index 1c69171..8fd4611 100644 --- a/package_bgs/T2FMRF_UV.h +++ b/package_bgs/T2FMRF_UV.h @@ -60,5 +60,7 @@ namespace bgslibrary void saveConfig(); void loadConfig(); }; + + static BGS_Register<T2FMRF_UV> register_T2FMRF_UV("T2FMRF_UV"); } } diff --git a/package_bgs/TwoPoints.h b/package_bgs/TwoPoints.h index b42c231..67176bc 100644 --- a/package_bgs/TwoPoints.h +++ b/package_bgs/TwoPoints.h @@ -42,5 +42,7 @@ namespace bgslibrary void saveConfig(); void loadConfig(); }; + + static BGS_Register<TwoPoints> register_TwoPoints("TwoPoints"); } } diff --git a/package_bgs/ViBe.h b/package_bgs/ViBe.h index c8014cb..dbe0e8f 100644 --- a/package_bgs/ViBe.h +++ b/package_bgs/ViBe.h @@ -48,5 +48,7 @@ namespace bgslibrary void saveConfig(); void loadConfig(); }; + + static BGS_Register<ViBe> register_ViBe("ViBe"); } } diff --git a/package_bgs/VuMeter.h b/package_bgs/VuMeter.h index fefd3ec..3912e32 100644 --- a/package_bgs/VuMeter.h +++ b/package_bgs/VuMeter.h @@ -48,5 +48,7 @@ namespace bgslibrary void saveConfig(); void loadConfig(); }; + + static BGS_Register<VuMeter> register_VuMeter("VuMeter"); } } diff --git a/package_bgs/WeightedMovingMean.h b/package_bgs/WeightedMovingMean.h index 4a1a3c5..7f3eefd 100644 --- a/package_bgs/WeightedMovingMean.h +++ b/package_bgs/WeightedMovingMean.h @@ -41,5 +41,7 @@ namespace bgslibrary void saveConfig(); void loadConfig(); }; + + static BGS_Register<WeightedMovingMean> register_WeightedMovingMean("WeightedMovingMean"); } } diff --git a/package_bgs/WeightedMovingVariance.h b/package_bgs/WeightedMovingVariance.h index 79198b4..791fd77 100644 --- a/package_bgs/WeightedMovingVariance.h +++ b/package_bgs/WeightedMovingVariance.h @@ -42,5 +42,7 @@ namespace bgslibrary void saveConfig(); void loadConfig(); }; + + static BGS_Register<WeightedMovingVariance> register_WeightedMovingVariance("WeightedMovingVariance"); } } diff --git a/package_bgs/_template_/Amber.h b/package_bgs/_template_/Amber.h index 37f0f8d..b66fa90 100644 --- a/package_bgs/_template_/Amber.h +++ b/package_bgs/_template_/Amber.h @@ -41,5 +41,7 @@ namespace bgslibrary void saveConfig(); void loadConfig(); }; + + static BGS_Register<Amber> register_Amber("Amber"); } } diff --git a/package_bgs/_template_/MyBGS.h b/package_bgs/_template_/MyBGS.h index dea2a2f..e3ff7c5 100644 --- a/package_bgs/_template_/MyBGS.h +++ b/package_bgs/_template_/MyBGS.h @@ -39,5 +39,7 @@ namespace bgslibrary void saveConfig() {} void loadConfig() {} }; + + static BGS_Register<MyBGS> register_MyBGS("MyBGS"); } } diff --git a/package_bgs/bgslibrary.cpp b/package_bgs/bgslibrary.cpp new file mode 100644 index 0000000..0334f6c --- /dev/null +++ b/package_bgs/bgslibrary.cpp @@ -0,0 +1,18 @@ +/* +This file is part of BGSLibrary. + +BGSLibrary is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +BGSLibrary is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with BGSLibrary. If not, see <http://www.gnu.org/licenses/>. +*/ + +#include "bgslibrary.h" diff --git a/package_bgs/bgslibrary.h b/package_bgs/bgslibrary.h index e95a06d..be45236 100644 --- a/package_bgs/bgslibrary.h +++ b/package_bgs/bgslibrary.h @@ -16,6 +16,8 @@ along with BGSLibrary. If not, see <http://www.gnu.org/licenses/>. */ #pragma once +#include "IBGS.h" + #include "FrameDifference.h" #include "StaticFrameDifference.h" #include "WeightedMovingMean.h" -- GitLab