diff options
author | siddhu8990 | 2017-04-19 11:56:09 +0530 |
---|---|---|
committer | siddhu8990 | 2017-04-19 11:56:09 +0530 |
commit | 453598b49cb3d4a62b1797dbc90f0e3dd4521329 (patch) | |
tree | 9d10176d0a4be5eb567ade03e1dd6172c77605e4 /thirdparty/raspberrypi/includes/opencv2/contrib/detection_based_tracker.hpp | |
parent | aceeb1fe05a8ff6c126ea9ba166a19249488dbd1 (diff) | |
download | scilab2c-453598b49cb3d4a62b1797dbc90f0e3dd4521329.tar.gz scilab2c-453598b49cb3d4a62b1797dbc90f0e3dd4521329.tar.bz2 scilab2c-453598b49cb3d4a62b1797dbc90f0e3dd4521329.zip |
Copyright message updated in added files and libraries separated in 'thirdparty' folder
Diffstat (limited to 'thirdparty/raspberrypi/includes/opencv2/contrib/detection_based_tracker.hpp')
-rw-r--r-- | thirdparty/raspberrypi/includes/opencv2/contrib/detection_based_tracker.hpp | 106 |
1 files changed, 106 insertions, 0 deletions
diff --git a/thirdparty/raspberrypi/includes/opencv2/contrib/detection_based_tracker.hpp b/thirdparty/raspberrypi/includes/opencv2/contrib/detection_based_tracker.hpp new file mode 100644 index 00000000..56aa1ccb --- /dev/null +++ b/thirdparty/raspberrypi/includes/opencv2/contrib/detection_based_tracker.hpp @@ -0,0 +1,106 @@ +#pragma once + +#if defined(__linux__) || defined(LINUX) || defined(__APPLE__) || defined(ANDROID) + +#include <opencv2/core/core.hpp> +#include <opencv2/objdetect/objdetect.hpp> + +#include <vector> + +class DetectionBasedTracker +{ + public: + struct Parameters + { + int minObjectSize; + int maxObjectSize; + double scaleFactor; + int maxTrackLifetime; + int minNeighbors; + int minDetectionPeriod; //the minimal time between run of the big object detector (on the whole frame) in ms (1000 mean 1 sec), default=0 + + Parameters(); + }; + + DetectionBasedTracker(const std::string& cascadeFilename, const Parameters& params); + virtual ~DetectionBasedTracker(); + + virtual bool run(); + virtual void stop(); + virtual void resetTracking(); + + virtual void process(const cv::Mat& imageGray); + + bool setParameters(const Parameters& params); + const Parameters& getParameters(); + + + typedef std::pair<cv::Rect, int> Object; + virtual void getObjects(std::vector<cv::Rect>& result) const; + virtual void getObjects(std::vector<Object>& result) const; + + protected: + class SeparateDetectionWork; + cv::Ptr<SeparateDetectionWork> separateDetectionWork; + friend void* workcycleObjectDetectorFunction(void* p); + + + struct InnerParameters + { + int numLastPositionsToTrack; + int numStepsToWaitBeforeFirstShow; + int numStepsToTrackWithoutDetectingIfObjectHasNotBeenShown; + int numStepsToShowWithoutDetecting; + + float coeffTrackingWindowSize; + float coeffObjectSizeToTrack; + float coeffObjectSpeedUsingInPrediction; + + InnerParameters(); + }; + Parameters parameters; + InnerParameters innerParameters; + + struct TrackedObject + { + typedef std::vector<cv::Rect> PositionsVector; + + PositionsVector lastPositions; + + int numDetectedFrames; + int numFramesNotDetected; + int id; + + TrackedObject(const cv::Rect& rect):numDetectedFrames(1), numFramesNotDetected(0) + { + lastPositions.push_back(rect); + id=getNextId(); + }; + + static int getNextId() + { + static int _id=0; + return _id++; + } + }; + + int numTrackedSteps; + std::vector<TrackedObject> trackedObjects; + + std::vector<float> weightsPositionsSmoothing; + std::vector<float> weightsSizesSmoothing; + + cv::CascadeClassifier cascadeForTracking; + + + void updateTrackedObjects(const std::vector<cv::Rect>& detectedObjects); + cv::Rect calcTrackedObjectPositionToShow(int i) const; + void detectInRegion(const cv::Mat& img, const cv::Rect& r, std::vector<cv::Rect>& detectedObjectsInRegions); +}; + +namespace cv +{ + using ::DetectionBasedTracker; +} //end of cv namespace + +#endif |