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