Identify a target object in the rover's vision, using Torch detection.
104 {
105
106 std::vector<objectdetectutils::Object> vDetectedObjects;
108 std::string szIdentifiedObjects = "";
109
110
111 double dBestAreaPercentage = 0.0;
112
113
114 std::chrono::system_clock::time_point tmCurrentTime = std::chrono::system_clock::now();
115
116
118
119
121 {
122
123 double dObjectTotalAge = std::fabs(std::chrono::duration_cast<std::chrono::milliseconds>(tmCurrentTime - stCandidate.tmCreation).count() / 1000.0);
124
125
126 if (stCandidate.pBoundingBox == nullptr)
127 {
128 continue;
129 }
130
131
132 double dArea = stCandidate.pBoundingBox->area();
133 double dAreaPercentage = (dArea / (stCandidate.cvImageResolution.width * stCandidate.cvImageResolution.height)) * 100.0;
134
135
136 switch (eDesiredDetectionType)
137 {
138 case geoops::WaypointType::eMalletWaypoint:
139 {
140 if (stCandidate.eDetectionType != objectdetectutils::ObjectDetectionType::eMallet)
141 continue;
142 break;
143 }
144 case geoops::WaypointType::eWaterBottleWaypoint:
145 {
146 if (stCandidate.eDetectionType != objectdetectutils::ObjectDetectionType::eWaterBottle)
147 continue;
148 break;
149 }
150 case geoops::WaypointType::eRockPickWaypoint:
151 {
152 if (stCandidate.eDetectionType != objectdetectutils::ObjectDetectionType::eRockPick)
153 continue;
154 break;
155 }
156 case geoops::WaypointType::eObjectWaypoint:
157 {
158 if (stCandidate.eDetectionType != objectdetectutils::ObjectDetectionType::eMallet &&
159 stCandidate.eDetectionType != objectdetectutils::ObjectDetectionType::eWaterBottle &&
160 stCandidate.eDetectionType != objectdetectutils::ObjectDetectionType::eRockPick)
161 {
162 continue;
163 }
164 break;
165 }
166 default:
167 {
168 break;
169 }
170 }
171
172
173 if (stCandidate.eDetectionMethod == objectdetectutils::ObjectDetectionMethod::eTorch)
174 {
175
176 szIdentifiedObjects += "\tObject Class: " + stCandidate.szClassName + " Object Age: " + std::to_string(dObjectTotalAge) +
177 "s Object Screen Percentage: " + std::to_string(dAreaPercentage) + "%\n";
178
179
180 if (dAreaPercentage < constants::BBOX_MIN_SCREEN_PERCENTAGE || dObjectTotalAge < constants::BBOX_MIN_LIFETIME_THRESHOLD)
181 {
182 continue;
183 }
184
185
186 if (dAreaPercentage > dBestAreaPercentage)
187 {
188
189 stBestObject = stCandidate;
190 dBestAreaPercentage = dAreaPercentage;
191 }
192 }
193 }
194
195
196 if (stBestObject.dConfidence != 0.0)
197 {
198
199 LOG_DEBUG(logging::g_qSharedLogger, "ObjectDetectionChecker: Identified objects:\n{}", szIdentifiedObjects);
200 }
201
202
203 stObjectTarget = stBestObject;
204
205 return static_cast<int>(vDetectedObjects.size());
206 }
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