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