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