Add multitracker and metrics
[trackerpp.git] / src / Engine.h
1 #ifndef _ENGINE_H_
2 #define _ENGINE_H_
3
4 #include<string>
5 #include<sstream>
6 #include<set>
7 #include "Tracker.h"
8 #include "Detector.h"
9 #include "VideoReader.h"
10
11 namespace suanzi{
12
13 class EngineObserver;
14
15 class Engine
16 {
17 public:
18     static Engine* create();
19     void destroy();
20     virtual void start();
21     void addObserver(EngineObserver* o);
22     void setVideoSrc(VideoSrcType type, const std::string& url);
23
24 private:
25     Engine();
26     virtual ~Engine();
27     void run();
28 //    Tracker* tracker;
29     Detector* detector;
30     std::set<EngineObserver *> observer_list;
31     std::string videoSrc;
32     VideoReader* reader;
33 };
34
35 struct Person
36 {
37     typedef enum {
38         Male,
39         Female
40     } Gender;
41
42     typedef enum {
43         Kid,        // < 10
44         Teenager,   // 12 ~ 19
45         Adult_2,    // 20 - 30
46         Adult_3,    // 30 - 40
47         Adult_4,    // 40 - 50
48         Adult_5,    // 50 - 60
49         Elder       // > 60
50     } Ages;
51
52     unsigned long id = 0x001;
53     Gender gender = Female;
54     Ages age = Kid;
55
56     std::string ageToString (Ages age){
57         switch (age){
58         case Kid: return "Kid";
59         case Teenager: return "Teenager";
60         default: return "no";
61         }
62     }
63
64     std::string toString(){
65         std::stringstream ss;
66         ss << "Person: id=" << id << ". Gender:" << (gender == Gender::Male ? "Male" : "Female" ) <<
67             ". Age: " << ageToString(age);
68         return ss.str();
69     }
70 };
71
72 class EngineObserver
73 {
74 public:
75     //virtual void onPersonIn(std::set<Person> persons) = 0;
76     virtual void onPersonIn(Person& p) = 0;
77     virtual void onPersonOut(Person& p) = 0;
78 };
79
80 } // namespace suanzi
81
82 #endif /* _ENGINE_H_ */