\brief InitTracker \param frame \return
| 481 | /// \return |
| 482 | /// |
| 483 | bool InitTracker(cv::UMat frame) override |
| 484 | { |
| 485 | if (!m_trackerSettingsLoaded) |
| 486 | { |
| 487 | bool useDeepSORT = true; |
| 488 | if (useDeepSORT) |
| 489 | { |
| 490 | #ifdef _WIN32 |
| 491 | std::string pathToModel = "../../data/"; |
| 492 | #else |
| 493 | std::string pathToModel = "../data/"; |
| 494 | #endif |
| 495 | |
| 496 | m_trackerSettings.m_embeddings.emplace_back(pathToModel + "reid/osnet_x0_25_msmt17.onnx", |
| 497 | pathToModel + "reid/osnet_x0_25_msmt17.onnx", |
| 498 | cv::Size(128, 256), |
| 499 | std::vector<objtype_t>{ TypeConverter::Str2Type("person"), TypeConverter::Str2Type("car"), TypeConverter::Str2Type("bus"), TypeConverter::Str2Type("truck"), TypeConverter::Str2Type("vehicle") }); |
| 500 | |
| 501 | std::array<track_t, tracking::DistsCount> distType{ |
| 502 | 0.f, // DistCenters |
| 503 | 0.f, // DistRects |
| 504 | 0.5f, // DistJaccard |
| 505 | 0.f, // DistHist |
| 506 | 0.5f, // DistFeatureCos |
| 507 | 0.f // DistMahalanobis |
| 508 | }; |
| 509 | if (!m_trackerSettings.SetDistances(distType)) |
| 510 | m_logger->error("SetDistances failed! Absolutly summ must be equal 1"); |
| 511 | } |
| 512 | else |
| 513 | { |
| 514 | m_trackerSettings.SetDistance(tracking::DistCenters); |
| 515 | } |
| 516 | |
| 517 | m_trackerSettings.m_kalmanType = tracking::KalmanLinear; |
| 518 | m_trackerSettings.m_filterGoal = tracking::FilterRect; |
| 519 | m_trackerSettings.m_lostTrackType = useDeepSORT ? tracking::TrackNone : tracking::TrackCSRT; // Use visual objects tracker for collisions resolving. Used if m_filterGoal == tracking::FilterRect |
| 520 | m_trackerSettings.m_matchType = tracking::MatchHungrian; |
| 521 | m_trackerSettings.m_useAcceleration = false; // Use constant acceleration motion model |
| 522 | m_trackerSettings.m_dt = m_trackerSettings.m_useAcceleration ? 0.05f : 0.4f; // Delta time for Kalman filter |
| 523 | m_trackerSettings.m_accelNoiseMag = 0.2f; // Accel noise magnitude for Kalman filter |
| 524 | m_trackerSettings.m_distThres = useDeepSORT ? 0.7f : 0.8f; // Distance threshold between region and object on two frames |
| 525 | #if 0 |
| 526 | m_trackerSettings.m_minAreaRadiusPix = frame.rows / 20.f; |
| 527 | #else |
| 528 | m_trackerSettings.m_minAreaRadiusPix = -1.f; |
| 529 | #endif |
| 530 | m_trackerSettings.m_minAreaRadiusK = 0.8f; |
| 531 | m_trackerSettings.m_maximumAllowedLostTime = 2.; // Maximum allowed skipped frames |
| 532 | m_trackerSettings.m_maxTraceLength = 2.; // Maximum trace length |
| 533 | } |
| 534 | m_trackerSettings.AddNearTypes(TypeConverter::Str2Type("car"), TypeConverter::Str2Type("bus"), true); |
| 535 | m_trackerSettings.AddNearTypes(TypeConverter::Str2Type("car"), TypeConverter::Str2Type("truck"), true); |
| 536 | m_trackerSettings.AddNearTypes(TypeConverter::Str2Type("bus"), TypeConverter::Str2Type("truck"), true); |
| 537 | m_trackerSettings.AddNearTypes(TypeConverter::Str2Type("person"), TypeConverter::Str2Type("bicycle"), true); |
| 538 | m_trackerSettings.AddNearTypes(TypeConverter::Str2Type("person"), TypeConverter::Str2Type("motorbike"), true); |
| 539 | |
| 540 | m_tracker = BaseTracker::CreateTracker(m_trackerSettings); |
nothing calls this directly
no test coverage detected