40 inline void LoadDetectedObjects(std::vector<objectdetectutils::Object>& vDetectedObjects,
const std::vector<std::shared_ptr<ObjectDetector>>& vObjectDetectors)
43 size_t siNumObjectDetectors = vObjectDetectors.size();
46 std::vector<std::vector<objectdetectutils::Object>> vDetectedObjectBuffers(siNumObjectDetectors);
49 std::vector<std::future<bool>> vDetectedObjectsFuture;
52 for (
size_t siIdx = 0; siIdx < siNumObjectDetectors; ++siIdx)
55 if (vObjectDetectors[siIdx]->GetIsReady())
58 vDetectedObjectsFuture.emplace_back(vObjectDetectors[siIdx]->RequestDetectedObjects(vDetectedObjectBuffers[siIdx]));
64 for (
size_t siIdx = 0; siIdx < vDetectedObjectsFuture.size(); ++siIdx)
67 vDetectedObjectsFuture[siIdx].get();
72 vDetectedObjects.emplace_back(tObject);
92 const geoops::WaypointType& eDesiredDetectionType = geoops::WaypointType::eUNKNOWN)
95 std::vector<objectdetectutils::Object> vDetectedObjects;
97 std::string szIdentifiedObjects =
"";
100 std::chrono::system_clock::time_point tmCurrentTime = std::chrono::system_clock::now();
108 double dObjectTotalAge = std::fabs(std::chrono::duration_cast<std::chrono::milliseconds>(tmCurrentTime - stCandidate.tmCreation).count() / 1000.0);
110 double dArea = stCandidate.pBoundingBox->area();
112 double dAreaPercentage = (dArea / (stCandidate.cvImageResolution.width * stCandidate.cvImageResolution.height)) * 100.0;
115 if (stCandidate.dStraightLineDistance <= 0.0)
121 switch (eDesiredDetectionType)
123 case geoops::WaypointType::eMalletWaypoint:
125 if (stCandidate.eDetectionType != objectdetectutils::ObjectDetectionType::eMallet)
131 case geoops::WaypointType::eWaterBottleWaypoint:
133 if (stCandidate.eDetectionType != objectdetectutils::ObjectDetectionType::eWaterBottle)
139 case geoops::WaypointType::eObjectWaypoint:
141 if (stCandidate.eDetectionType != objectdetectutils::ObjectDetectionType::eMallet &&
142 stCandidate.eDetectionType != objectdetectutils::ObjectDetectionType::eWaterBottle)
155 if (stCandidate.eDetectionMethod == objectdetectutils::ObjectDetectionMethod::eTorch)
158 szIdentifiedObjects +=
"\tObject Class: " + stCandidate.szClassName +
" Object Age: " + std::to_string(dObjectTotalAge) +
159 "s Object Screen Percentage: " + std::to_string(dAreaPercentage) +
"%\n";
161 if (dAreaPercentage < constants::BBOX_MIN_SCREEN_PERCENTAGE || dObjectTotalAge < constants::BBOX_MIN_LIFETIME_THRESHOLD)
167 if (dArea > stBestObject.pBoundingBox->area())
170 stBestObject = stCandidate;
176 if (stBestObject.dConfidence != 0.0)
179 LOG_DEBUG(logging::g_qSharedLogger,
"ObjectDetectionChecker: Identified objects:\n{}", szIdentifiedObjects);
183 stObjectTarget = stBestObject;
185 return static_cast<int>(vDetectedObjects.size());
int IdentifyTargetObject(const std::vector< std::shared_ptr< ObjectDetector > > &vObjectDetectors, objectdetectutils::Object &stObjectTarget, const geoops::WaypointType &eDesiredDetectionType=geoops::WaypointType::eUNKNOWN)
Identify a target object in the rover's vision, using Torch detection.
Definition ObjectDetectionChecker.hpp:90
void LoadDetectedObjects(std::vector< objectdetectutils::Object > &vDetectedObjects, const std::vector< std::shared_ptr< ObjectDetector > > &vObjectDetectors)
Aggregates all detected objects from each provided object detector.
Definition ObjectDetectionChecker.hpp:40