Engine::Engine()
{
detector = new Detector();
- tracker = new Tracker();
}
Engine* Engine::create()
Engine::~Engine()
{
delete detector;
- delete tracker;
+// delete tracker;
}
void Engine::setVideoSrc(VideoSrcType type, const std::string& url)
LOG_DEBUG(TAG, "run");
cv::Mat frame;
while (reader->read(frame)){
+ LOG_DEBUG(TAG, "Size: " << frame.cols << "x" << frame.rows);
detector->detect(frame);
}
}
Engine();
virtual ~Engine();
void run();
- Tracker* tracker;
+// Tracker* tracker;
Detector* detector;
std::set<EngineObserver *> observer_list;
std::string videoSrc;
--- /dev/null
+#include "Metrics.h"
+
+using namespace suanzi;
+using namespace cv;
+
+Metrics::Metrics(const std::string& clf_path)
+{
+ descriptor = HOGDescriptor(Size(64, 128), Size(16, 16), Size(8, 8), Size(8, 8), 9);
+ if (clf_path.empty()){
+ } else {
+ }
+}
--- /dev/null
+#ifndef _METRICS_H_
+#define _METRICS_H_
+
+#include <string>
+#include <opencv2/opencv.hpp>
+
+namespace suanzi {
+
+class Metrics
+{
+public:
+ Metrics(const std::string& cl_path = "");
+ ~Metrics(){}
+ long int MaxCost = 100000;
+ const static int MaxPatch = 5;
+
+private:
+ cv::HOGDescriptor descriptor;
+};
+
+class Patch
+{
+public:
+ Patch(){};
+ ~Patch(){};
+};
+
+}
+
+#endif /* _METRICS_H_ */
--- /dev/null
+#include "MultiTracker.h"
+#include "Metrics.h"
+
+using namespace suanzi;
+
+MultiTracker::MultiTracker(Metrics* m) : metrics(m)
+{
+}
+
+
+MultiTracker::~MultiTracker()
+{
+ delete metrics;
+ trackers.clear();
+}
+
+Tracker* MultiTracker::createTracker(int id)
+{
+ Tracker* t = new Tracker(id);
+ addTracker(t);
+ return t;
+}
+
+void MultiTracker::addTracker(Tracker* t)
+{
+ trackers.insert(t);
+}
+
+void MultiTracker::removeTracker(Tracker *t)
+{
+ trackers.erase(t);
+}
+
+
+void MultiTracker::update()
+{
+
+}
--- /dev/null
+#ifndef _MULTI_TRACKER_H_
+#define _MULTI_TRACKER_H_
+
+#include "Tracker.h"
+#include "Metrics.h"
+
+namespace suanzi {
+
+class MultiTracker
+{
+public:
+ MultiTracker(Metrics* m);
+ virtual ~MultiTracker();
+ void addTracker(Tracker *t);
+ void removeTracker(Tracker *t);
+ Tracker* createTracker(int id = 0);
+ void update();
+
+
+private:
+ Metrics* metrics;
+ std::set<Tracker*> trackers;
+ int max_id = 0;
+};
+
+
+}
+
+#endif /* _MULTI_TRACKER_H_ */
#include "Tracker.h"
using namespace suanzi;
+using namespace cv;
-Tracker::Tracker()
+static const int MaxLost = 5;
+
+Tracker::Tracker(int id) : id(id)
{
+ status = TrackerStatus::Fire;
+ preStatus = TrackerStatus::Fire;
}
Tracker::~Tracker()
{
}
+
+void Tracker::addPatch(Patch* p)
+{
+ patches.push_back(p);
+ if (patches.size() > Metrics::MaxPatch){
+ patches.erase(patches.end());
+ }
+}
+
+void Tracker::updateState(const Mat& image)
+{
+ preStatus = this->status;
+ int lost_age = this->age - this->last_active;
+ int active_age = this->last_active;
+
+ if (lost_age >= MaxLost){
+ status = TrackerStatus::Delete;
+ } else if (lost_age >= 1 && active_age == 1){
+ status = TrackerStatus::Delete;
+ } else if (lost_age >= 1) {
+ status = TrackerStatus::Lost;
+ }
+}
#ifndef _TRACKER_H_
#define _TRACKER_H_
+#include <opencv2/opencv.hpp>
+#include <string>
+#include <vector>
+#include "Metrics.h"
+
namespace suanzi {
+typedef enum
+{
+ Fire = -1,
+ Active = 2,
+ Lost,
+ Delete
+} TrackerStatus;
+
class Tracker
{
public:
- Tracker();
+ Tracker(int id);
virtual ~Tracker();
+ void updateState(const cv::Mat& image);
+ void addPatch(Patch* p);
+
+private:
+ TrackerStatus status;
+ TrackerStatus preStatus;
+ int id;
+ int age;
+ int last_active;
+ std::vector<Patch *> patches;
};
+
}
#endif /* _TRACKER_H_ */
LOG_ERROR(TAG, "open video " + url);
throw std::runtime_error("Cannot open video url " + url);
}
- LOG_DEBUG(TAG, "reader video sourc succeed.");
+ LOG_DEBUG(TAG, "reader video sourc succeed. ");
}
UrlReader::~UrlReader()
{
+ vcap.release();
}
bool UrlReader::read(cv::Mat& mat)