From b5342c4a4bbfb17346e7bffc5dae129290d184be Mon Sep 17 00:00:00 2001 From: Peng Li Date: Mon, 9 Jul 2018 23:41:12 +0800 Subject: [PATCH 1/1] Init commit --- Makefile | 7 +++++ log4cpp.properties | 12 ++++++++ logs/.gitkeep | 0 main.cpp | 38 ++++++++++++++++++++++++++ src/Detector.cpp | 11 ++++++++ src/Detector.h | 18 ++++++++++++ src/Engine.cpp | 54 ++++++++++++++++++++++++++++++++++++ src/Engine.h | 79 +++++++++++++++++++++++++++++++++++++++++++++++++++++ src/Logger.cpp | 10 +++++++ src/Logger.h | 17 ++++++++++++ src/Tracker.cpp | 11 ++++++++ src/Tracker.h | 18 ++++++++++++ src/VideoSource.cpp | 0 src/VideoSource.h | 0 14 files changed, 275 insertions(+) create mode 100644 Makefile create mode 100644 log4cpp.properties create mode 100644 logs/.gitkeep create mode 100644 main.cpp create mode 100644 src/Detector.cpp create mode 100644 src/Detector.h create mode 100644 src/Engine.cpp create mode 100644 src/Engine.h create mode 100644 src/Logger.cpp create mode 100644 src/Logger.h create mode 100644 src/Tracker.cpp create mode 100644 src/Tracker.h create mode 100644 src/VideoSource.cpp create mode 100644 src/VideoSource.h diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..47cf62e --- /dev/null +++ b/Makefile @@ -0,0 +1,7 @@ +CC = g++ +CFLAGS += -Wall -std=c++11 + +SRC = src/*.cpp main.cpp + +all: + $(CC) $(CFLAGS) -o main $(SRC) -llog4cpp diff --git a/log4cpp.properties b/log4cpp.properties new file mode 100644 index 0000000..97b5939 --- /dev/null +++ b/log4cpp.properties @@ -0,0 +1,12 @@ +log4cpp.rootCategory=DEBUG, rootAppender, console + +log4cpp.appender.console=ConsoleAppender +log4cpp.appender.console.layout=PatternLayout +log4cpp.appender.console.layout.ConversionPattern=%d [%p] %m%n + +log4cpp.appender.rootAppender=RollingFileAppender +log4cpp.appender.rootAppender.maxFileSize=400000 +log4cpp.appender.rootAppender.maxBackupIndex=3 +log4cpp.appender.rootAppender.fileName=logs/log.txt +log4cpp.appender.rootAppender.layout=PatternLayout +log4cpp.appender.rootAppender.layout.ConversionPattern=%d [%p] %m%n diff --git a/logs/.gitkeep b/logs/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/main.cpp b/main.cpp new file mode 100644 index 0000000..e8999d7 --- /dev/null +++ b/main.cpp @@ -0,0 +1,38 @@ +#include +#include "src/Engine.h" +#include +#include "src/Logger.h" + +#define TAG "Main" + +using namespace suanzi; + +class Callback : public EngineObserver +{ + void onPersonIn(Person& p){ +// std::cout << "onPersonIn " << p.toString() << std::endl; + LOG_DEBUG(TAG, "OnPersonIn " << p.toString()) + + }; + + void onPersonOut(Person& p) { +// std::cout << "onPersonOut " << std::endl; + LOG_DEBUG(TAG, "OnPersonIn " << p.toString()) + }; +}; + + + +int main(int argc, char* argv[]) +{ + InitLogger("log4cpp.properties"); + LOG_DEBUG(TAG, "=================================="); + + Engine* e = Engine::create(); + e->addObserver(new Callback()); + e->setVideoSrc("xxxx"); + e->start(); + + e->destroy(); + log4cpp::Category::shutdown(); +} diff --git a/src/Detector.cpp b/src/Detector.cpp new file mode 100644 index 0000000..c2a1e20 --- /dev/null +++ b/src/Detector.cpp @@ -0,0 +1,11 @@ +#include "Detector.h" + +using namespace suanzi; + +Detector::Detector() +{ +} + +Detector::~Detector() +{ +} diff --git a/src/Detector.h b/src/Detector.h new file mode 100644 index 0000000..a17a5a0 --- /dev/null +++ b/src/Detector.h @@ -0,0 +1,18 @@ +#ifndef _DETECTOR_H_ +#define _DETECTOR_H_ + +namespace suanzi { + +class Detector +{ +public: + Detector(); + ~Detector(); +}; + +} + + +#endif /* _DETECTOR_H_ */ + + diff --git a/src/Engine.cpp b/src/Engine.cpp new file mode 100644 index 0000000..7b00ce6 --- /dev/null +++ b/src/Engine.cpp @@ -0,0 +1,54 @@ +#include "Engine.h" +#include "Logger.h" +#include + +using namespace suanzi; + +const static std::string TAG = "Engine"; + +static std::mutex g_mutex; +static Engine* g_instance = nullptr; + +Engine::Engine() +{ +} + +Engine* Engine::create() +{ + LOG_DEBUG(TAG, "create"); + std::lock_guard lock(g_mutex); + if (g_instance) + return g_instance; + + Engine* instance (new Engine()); + g_instance = instance; + return g_instance; +} + +void Engine::destroy() +{ + delete g_instance; +} + +Engine::~Engine() +{ +} + +void Engine::setVideoSrc(const std::string& url) +{ + videoSrc = url; +} + +void Engine::start() +{ + LOG_DEBUG(TAG, "start"); + Person p; + for(auto& o: observer_list){ + o->onPersonIn(p); + } +} + +void Engine::addObserver(EngineObserver *observer) +{ + observer_list.insert(observer); +} diff --git a/src/Engine.h b/src/Engine.h new file mode 100644 index 0000000..66b1341 --- /dev/null +++ b/src/Engine.h @@ -0,0 +1,79 @@ +#ifndef _ENGINE_H_ +#define _ENGINE_H_ + +#include +#include +#include +#include "Tracker.h" +#include "Detector.h" + +namespace suanzi{ + +class EngineObserver; + +class Engine +{ +public: + static Engine* create(); + void destroy(); + virtual void start(); + void addObserver(EngineObserver* o); + void setVideoSrc(const std::string& url); + +private: + Engine(); + virtual ~Engine(); + Tracker* tracker; + Detector* detector; + std::set observer_list; + std::string videoSrc; +}; + +struct Person +{ + typedef enum { + Male, + Female + } Gender; + + typedef enum { + Kid, // < 10 + Teenager, // 12 ~ 19 + Adult_2, // 20 - 30 + Adult_3, // 30 - 40 + Adult_4, // 40 - 50 + Adult_5, // 50 - 60 + Elder // > 60 + } Ages; + + unsigned long id = 0x001; + Gender gender = Female; + Ages age = Kid; + + std::string ageToString (Ages age){ + switch (age){ + case Kid: return "Kid"; + case Teenager: return "Teenager"; + default: return "no"; + } + } + + std::string toString(){ + std::stringstream ss; + ss << "Person: id=" << id << ". Gender:" << (gender == Gender::Male ? "Male" : "Female" ) << + ". Age: " << ageToString(age); + return ss.str(); + } +}; + +class EngineObserver +{ +public: + //virtual void onPersonIn(std::set persons) = 0; + virtual void onPersonIn(Person& p) = 0; + virtual void onPersonOut(Person& p) = 0; +}; + +} // namespace suanzi + +#endif /* _ENGINE_H_ */ diff --git a/src/Logger.cpp b/src/Logger.cpp new file mode 100644 index 0000000..06693ed --- /dev/null +++ b/src/Logger.cpp @@ -0,0 +1,10 @@ +#include "Logger.h" + +log4cpp::Category * gLogger; + +void InitLogger(const char* fname) +{ + log4cpp::PropertyConfigurator::configure(fname); + log4cpp::Category& logger = log4cpp::Category::getInstance("rootAppender"); + gLogger = &logger; +} diff --git a/src/Logger.h b/src/Logger.h new file mode 100644 index 0000000..de5a0b8 --- /dev/null +++ b/src/Logger.h @@ -0,0 +1,17 @@ +#ifndef _LOGGER_H_ +#define _LOGGER_H_ + +#include +#include + +extern log4cpp::Category * gLogger; + +#define LOG_DEBUG(TAG, msg) LOG4CPP_DEBUG_S((*gLogger)) << '[' << TAG << ']' <<" ("<<__FILE__<<":"<<__LINE__<<") - " << msg; +#define LOG_INFO(TAG, msg) LOG4CPP_INFO_S((*gLogger)) << '[' << TAG << ']' <<" ("<<__FILE__<<":"<<__LINE__<<") - " << msg; +#define LOG_WARN(TAG, msg) LOG4CPP_WARN_S((*gLogger)) << '[' << TAG << ']' <<" ("<<__FILE__<<":"<<__LINE__<<") - " << msg; +#define LOG_ERROR(TAG, msg) LOG4CPP_ERROR_S((*gLogger)) << '[' << TAG << ']' <<" ("<<__FILE__<<":"<<__LINE__<<") - " << msg; +#define LOG_FATAL(TAG, msg) LOG4CPP_FATAL_S((*gLogger)) << '[' << TAG << ']' <<" ("<<__FILE__<<":"<<__LINE__<<") - " << msg; + +void InitLogger(const char* fname); + +#endif /* _LOGGER_H_ */ diff --git a/src/Tracker.cpp b/src/Tracker.cpp new file mode 100644 index 0000000..79fd941 --- /dev/null +++ b/src/Tracker.cpp @@ -0,0 +1,11 @@ +#include "Tracker.h" + +using namespace suanzi; + +Tracker::Tracker() +{ +} + +Tracker::~Tracker() +{ +} diff --git a/src/Tracker.h b/src/Tracker.h new file mode 100644 index 0000000..407634b --- /dev/null +++ b/src/Tracker.h @@ -0,0 +1,18 @@ +#ifndef _TRACKER_H_ +#define _TRACKER_H_ + +namespace suanzi { + +class Tracker +{ +public: + Tracker(); + ~Tracker(); + + virtual void createMetrics() = 0; + virtual void display() = 0; +}; + +} + +#endif /* _TRACKER_H_ */ diff --git a/src/VideoSource.cpp b/src/VideoSource.cpp new file mode 100644 index 0000000..e69de29 diff --git a/src/VideoSource.h b/src/VideoSource.h new file mode 100644 index 0000000..e69de29 -- 2.11.0