57 {
58 if (frame == nullptr) {
59 return false;
60 }
61 std::vector<ObjectPtr>* objects = use_tracked_objects_
62 ? &(frame->tracked_objects)
63 : &(frame->segmented_objects);
64 if (enable_temporal_fusion_ && frame->timestamp > 0.0) {
65
66 AINFO <<
"Combined classifier, temporal fusion";
69 for (auto& object : *objects) {
70 if (object->radar4d_supplement.is_background) {
71 object->type_probs.assign(static_cast<int>(ObjectType::MAX_OBJECT_TYPE),
72 0);
73 object->type = ObjectType::UNKNOWN_UNMOVABLE;
74 object->type_probs[static_cast<int>(ObjectType::UNKNOWN_UNMOVABLE)] =
75 1.0;
76 continue;
77 }
78 const int track_id = object->track_id;
80 temporal_window_);
81 if (tracked_objects.empty()) {
82 AERROR <<
"Find zero-length track, so skip.";
83 continue;
84 }
85 if (object != tracked_objects.rbegin()->second) {
86 AERROR <<
"There must exist some timestamp in disorder, so skip.";
87 continue;
88 }
89 if (!sequence_fuser_->
TypeFusion(option_, &tracked_objects)) {
90 AERROR <<
"Failed to fuse types, so break.";
91 break;
92 }
93 }
94 } else {
95
96 AINFO <<
"Combined classifier, one shot fusion";
97 for (auto& object : *objects) {
98 if (object->radar4d_supplement.is_background) {
99 object->type_probs.assign(static_cast<int>(ObjectType::MAX_OBJECT_TYPE),
100 0);
101 object->type = ObjectType::UNKNOWN_UNMOVABLE;
102 object->type_probs[static_cast<int>(ObjectType::UNKNOWN_UNMOVABLE)] =
103 1.0;
104 continue;
105 }
106 if (!one_shot_fuser_->
TypeFusion(option_,
object)) {
107 AERROR <<
"Failed to fuse types, so continue.";
108 }
109 }
110 }
111 return true;
112}
virtual bool TypeFusion(const TypeFusionOption &option, std::shared_ptr< perception::base::Object > object)=0
Type fusion
virtual bool TypeFusion(const TypeFusionOption &option, TrackedObjects *tracked_objects)=0
Type fusion
bool AddTrackedFrameObjects(const std::vector< std::shared_ptr< perception::base::Object > > &objects, TimeStampKey timestamp)
std::map< TimeStampKey, std::shared_ptr< apollo::perception::base::Object > > TrackedObjects
bool GetTrackInTemporalWindow(TrackIdKey track_id, TrackedObjects *track, TimeStampKey window_time)