forked from Smorodov/Multitarget-tracker
-
Notifications
You must be signed in to change notification settings - Fork 2
Expand file tree
/
Copy pathTrackerSettings.cpp
More file actions
96 lines (80 loc) · 5.79 KB
/
TrackerSettings.cpp
File metadata and controls
96 lines (80 loc) · 5.79 KB
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
#include <sstream>
#include "TrackerSettings.h"
#include <inih/INIReader.h>
///
/// \brief CarsCounting::ParseTrackerSettings
///
bool ParseTrackerSettings(const std::string& settingsFile, TrackerSettings& trackerSettings)
{
bool res = false;
std::cout << "ParseTrackerSettings: " << settingsFile << " ..." << std::endl;
INIReader reader(settingsFile);
if (reader.ParseError() >= 0)
{
std::cout << "ParseTrackerSettings - readed" << std::endl;
trackerSettings = TrackerSettings();
// Read tracking settings
auto trackerType = reader.GetInteger("tracking", "tracker_type", -1);
if (trackerType == (int)tracking::ByteTrack)
trackerSettings.m_tracker = tracking::ByteTrack;
else
trackerSettings.m_tracker = tracking::UniversalTracker;
auto distType = reader.GetInteger("tracking", "distance_type", -1);
if (distType >= 0 && distType < (int)tracking::DistsCount)
trackerSettings.SetDistance((tracking::DistType)distType);
auto kalmanType = reader.GetInteger("tracking", "kalman_type", -1);
if (kalmanType >= 0 && kalmanType < (int)tracking::KalmanCount)
trackerSettings.m_kalmanType = (tracking::KalmanType)kalmanType;
auto filterGoal = reader.GetInteger("tracking", "filter_goal", -1);
if (filterGoal >= 0 && filterGoal < (int)tracking::FiltersCount)
trackerSettings.m_filterGoal = (tracking::FilterGoal)filterGoal;
auto lostTrackType = reader.GetInteger("tracking", "lost_track_type", -1);
if (lostTrackType >= 0 && lostTrackType < (int)tracking::SingleTracksCount)
trackerSettings.m_lostTrackType = (tracking::LostTrackType)lostTrackType;
auto matchType = reader.GetInteger("tracking", "match_type", -1);
if (matchType >= 0 && matchType < (int)tracking::MatchCount)
trackerSettings.m_matchType = (tracking::MatchType)matchType;
trackerSettings.m_useAcceleration = reader.GetInteger("tracking", "use_aceleration", 0) != 0; // Use constant acceleration motion model
trackerSettings.m_dt = static_cast<track_t>(reader.GetReal("tracking", "delta_time", 0.4)); // Delta time for Kalman filter
trackerSettings.m_accelNoiseMag = static_cast<track_t>(reader.GetReal("tracking", "accel_noise", 0.2)); // Accel noise magnitude for Kalman filter
trackerSettings.m_distThres = static_cast<track_t>(reader.GetReal("tracking", "dist_thresh", 0.8)); // Distance threshold between region and object on two frames
trackerSettings.m_minAreaRadiusPix = static_cast<track_t>(reader.GetReal("tracking", "min_area_radius_pix", -1.));
trackerSettings.m_minAreaRadiusK = static_cast<track_t>(reader.GetReal("tracking", "min_area_radius_k", 0.8));
trackerSettings.m_maximumAllowedLostTime = reader.GetReal("tracking", "max_lost_time", 1.); // Maximum lost time in seconds
trackerSettings.m_maxTraceLength = reader.GetReal("tracking", "max_trace_len", 2.); // Maximum trace length in seconds
trackerSettings.m_useAbandonedDetection = reader.GetInteger("tracking", "detect_abandoned", 0) != 0;
trackerSettings.m_minStaticTime = reader.GetInteger("tracking", "min_static_time", 5);
trackerSettings.m_maxStaticTime = reader.GetInteger("tracking", "max_static_time", 25);
trackerSettings.m_maxSpeedForStatic = reader.GetInteger("tracking", "max_speed_for_static", 10);
trackerSettings.m_byteTrackSettings.m_trackBuffer = reader.GetInteger("tracking", "bytetrack_track_buffer", 30);
trackerSettings.m_byteTrackSettings.m_trackThresh = reader.GetReal("tracking", "bytetrack_track_thresh", 0.5);
trackerSettings.m_byteTrackSettings.m_highThresh = reader.GetReal("tracking", "bytetrack_high_thresh", 0.5);
trackerSettings.m_byteTrackSettings.m_matchThresh = reader.GetReal("tracking", "bytetrack_match_thresh", 0.8);
// Read detection settings
trackerSettings.m_nnWeights = reader.GetString("detection", "nn_weights", "data/yolov4-tiny_best.weights");
trackerSettings.m_nnConfig = reader.GetString("detection", "nn_config", "data/yolov4-tiny.cfg");
trackerSettings.m_classNames = reader.GetString("detection", "class_names", "data/traffic.names");
trackerSettings.m_confidenceThreshold = static_cast<track_t>(reader.GetReal("detection", "confidence_threshold", 0.5));
trackerSettings.m_maxCropRatio = static_cast<track_t>(reader.GetReal("detection", "max_crop_ratio", -1));
trackerSettings.m_maxBatch = reader.GetInteger("detection", "max_batch", 1);
trackerSettings.m_gpuId = reader.GetInteger("detection", "gpu_id", 0);
trackerSettings.m_netType = reader.GetString("detection", "net_type", "YOLOV4");
trackerSettings.m_inferencePrecision = reader.GetString("detection", "inference_precision", "FP16");
trackerSettings.m_detectorBackend = reader.GetInteger("detection", "detector_backend", (int)tracking::Detectors::DNN_OCV);
trackerSettings.m_dnnTarget = reader.GetString("detection", "ocv_dnn_target", "DNN_TARGET_CPU");
trackerSettings.m_dnnBackend = reader.GetString("detection", "ocv_dnn_backend", "DNN_BACKEND_OPENCV");
trackerSettings.m_maxVideoMemory = reader.GetInteger("detection", "video_memory", 0);
trackerSettings.m_inputSize.width = reader.GetInteger("detection", "input_width", 0);
trackerSettings.m_inputSize.height = reader.GetInteger("detection", "input_height", 0);
std::stringstream whiteList{ reader.GetString("detection", "white_list", "") };
trackerSettings.m_whiteList.clear();
std::string wname;
while (std::getline(whiteList, wname, ';'))
{
trackerSettings.m_whiteList.push_back(wname);
}
res = true;
}
std::cout << "ParseTrackerSettings: " << res << std::endl;
return res;
}