1 #ifndef __OBJECTS_TRACKER_H_
2 #define __OBJECTS_TRACKER_H_
3 
4 #include "stdio.h"
5 #include <vector>
6 #include "math.h"
7 #include "track_link.h"
8 
9 class ObjectsTracker {
10 
11 public:
12 
13     struct Parameters
14     {
15         int maxTrackLifetime;
16 
17         int numLastPositionsToTrack;
18         int numDetectedToWaitBeforeFirstShow;
19         int numStepsToWaitBeforeFirstShow;
20         int numStepsToTrackWithoutDetectingIfObjectHasNotBeenShown;
21         int numStepsToShowWithoutDetecting;
22 
23         Parameters();
24     };
25 
26     enum ObjectStatus
27     {
28         DETECTED_NOT_SHOWN_YET,
29         DETECTED,
30         DETECTED_TEMPORARY_LOST,
31         WRONG_OBJECT
32     };
33 
34     struct ExtObject
35     {
36         int id;
37         Rect_T location;
38 		Rect_T predict_loc_when_miss;
39 		Rect_T smooth_rect;
40         ObjectStatus status;
41 		int detectedNum;
42 		int noDetectedNum;
43 		int obj_class;
44 		float score;
45 		int miss;
46 
ExtObjectExtObject47         ExtObject() {}
ExtObjectExtObject48         ExtObject(int _id, Rect_T _location, Rect_T _predict_loc_when_miss, Rect_T _smooth_rect, ObjectStatus _status,
49 						int _detectedNum, int _noDetectedNum, int _obj_class, float _score, int _miss)
50             :id(_id), location(_location), predict_loc_when_miss(_predict_loc_when_miss), smooth_rect(_smooth_rect), status(_status),
51             		detectedNum(_detectedNum), noDetectedNum(_noDetectedNum), obj_class(_obj_class), score(_score), miss(_miss)
52         {
53 
54         }
55 
56     };
57 
58     ObjectsTracker();
59     virtual ~ObjectsTracker();
60 
61   /*  bool setParameters(const Parameters& params);
62     const Parameters& getParameters() const;*/
63 
64     virtual void getObjects(std::vector<ExtObject>& result);
65 
66     //virtual int addObject(const Rect_T& location); //returns id of the new object
67 
68     void updateTrackedObjects(const std::vector<Rect_T>& detectedObjects, const std::vector<int> objects_class, const std::vector<float> objects_score, int maxTrackLifetime, int image_width, int image_height);
69   	Rect_T calcTrackedObjectPositionToShow(int i, ObjectStatus& status) const;
70     Parameters parameters;
71 
72     struct TrackedObject
73     {
74         typedef std::vector<Rect_T> PositionsVector;
75         PositionsVector lastPositions;
76 		Rect_T predict_loc_when_miss;
77         Rect_T smooth_Positionn;
78 		float vx;
79 		float vy;
80         int numDetectedFrames;
81         int numFramesDetected;
82         int numFramesNotDetected;
83 		int preNumFramesNotDetected;
84         int id;
85 		int obj_class;
86 		float score;
87 		int miss;
88 		//int flag_unshift;*/
TrackedObjectTrackedObject89         TrackedObject(const Rect_T& Rect_T):vx(0), vy(0), numDetectedFrames(1), numFramesDetected(1), numFramesNotDetected(0)
90         							, preNumFramesNotDetected(0), score(0), miss(0)
91 
92         {
93             lastPositions.push_back(Rect_T);
94             id=getNextId();
95         };
96 
getNextIdTrackedObject97         static int getNextId()
98         {
99             static int _id=0;
100             return _id++;
101         }
102     };
103 
104     int numTrackedSteps;
105     std::vector<TrackedObject> trackedObjects;
106     void predict_loctation(TrackedObject& curObject, int image_width,int image_height, float& pre_x, float& pre_y, float& v_x, float& v_y);
107 
108 };
109 
110 #endif /* end of __OBJECTS_TRACKER_H_ */
111