29using ObjectPtr = std::shared_ptr<apollo::perception::base::Object>;
33 std::string config_file =
42 one_shot_fuser_ = BaseOneShotTypeFusionRegisterer::GetInstanceByName(
43 one_shot_fusion_method_);
45 bool init_success =
true;
47 CHECK_NOTNULL(one_shot_fuser_);
49 sequence_fuser_ = BaseSequenceTypeFusionRegisterer::GetInstanceByName(
50 sequence_fusion_method_);
51 CHECK_NOTNULL(sequence_fuser_);
58 if (frame ==
nullptr) {
61 std::vector<ObjectPtr>* objects = use_tracked_objects_
64 if (enable_temporal_fusion_ && frame->
timestamp > 0.0) {
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),
73 object->type = ObjectType::UNKNOWN_UNMOVABLE;
74 object->type_probs[
static_cast<int>(ObjectType::UNKNOWN_UNMOVABLE)] =
78 const int track_id =
object->track_id;
81 if (tracked_objects.empty()) {
82 AERROR <<
"Find zero-length track, so skip.";
85 if (
object != tracked_objects.rbegin()->second) {
86 AERROR <<
"There must exist some timestamp in disorder, so skip.";
89 if (!sequence_fuser_->
TypeFusion(option_, &tracked_objects)) {
90 AERROR <<
"Failed to fuse types, so break.";
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),
101 object->type = ObjectType::UNKNOWN_UNMOVABLE;
102 object->type_probs[
static_cast<int>(ObjectType::UNKNOWN_UNMOVABLE)] =
106 if (!one_shot_fuser_->
TypeFusion(option_,
object)) {
107 AERROR <<
"Failed to fuse types, so continue.";
virtual bool Init(const TypeFusionInitOption &option)=0
Init type fusion
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
virtual bool Init(const TypeFusionInitOption &option)=0
Init type fusion
bool Classify(const ClassifierOptions &options, RadarFrame *frame) override
Classify objects and update type info
bool Init(const ClassifierInitOptions &options=ClassifierInitOptions()) override
Init fused classifier
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)
#define PERCEPTION_REGISTER_CLASSIFIER(name)
bool GetProtoFromFile(const std::string &file_name, google::protobuf::Message *message)
Parses the content of the file specified by the file_name as a representation of protobufs,...
std::shared_ptr< apollo::perception::base::Object > ObjectPtr
std::string GetConfigFile(const std::string &config_path, const std::string &config_file)
optional bool use_tracked_objects
optional double temporal_window
optional bool enable_temporal_fusion
optional string sequence_fusion_method
optional string one_shot_fusion_method
std::vector< std::shared_ptr< base::Object > > tracked_objects
std::vector< std::shared_ptr< base::Object > > segmented_objects