#include #include #include "node.h" #undef REGISTER_NODE #define REGISTER_NODE(NodeClass, NodeTypeStr) #include "../plugins/alarm/alarm_node.cpp" namespace rk3588 { namespace { FaceRecogItem MakeKnownFace(int track_id, int person_id, const std::string& name, float best_sim) { FaceRecogItem item; item.person_track_id = track_id; item.best_person_id = person_id; item.best_name = name; item.candidate_person_id = person_id; item.candidate_name = name; item.best_sim = best_sim; item.second_sim = 0.20f; item.unknown = false; return item; } FaceRecogItem MakeUnknownFace(int track_id, int candidate_person_id, const std::string& candidate_name, float best_sim) { FaceRecogItem item; item.person_track_id = track_id; item.candidate_person_id = candidate_person_id; item.candidate_name = candidate_name; item.best_sim = best_sim; item.second_sim = best_sim - 0.02f; item.unknown = true; return item; } TEST(FaceTrackAlarmTest, IgnoresLowQualityUntrackedFace) { FaceTrackAggregationConfig cfg; FaceTrackState state; FaceRecogItem item = MakeUnknownFace(-1, -1, "", 0.40f); const FaceTrackDecision decision = UpdateFaceTrackState(cfg, state, item, 1000); EXPECT_FALSE(decision.trigger_known); EXPECT_FALSE(decision.trigger_unknown); } TEST(FaceTrackAlarmTest, EmitsKnownAfterStableHitsOnSameTrack) { FaceTrackAggregationConfig cfg; cfg.known_min_hits = 3; cfg.known_hit_window_ms = 3000; FaceTrackState state; const FaceRecogItem item = MakeKnownFace(5, 1, "reg_001", 0.62f); EXPECT_FALSE(UpdateFaceTrackState(cfg, state, item, 1000).trigger_known); EXPECT_FALSE(UpdateFaceTrackState(cfg, state, item, 1500).trigger_known); const FaceTrackDecision decision = UpdateFaceTrackState(cfg, state, item, 2000); EXPECT_TRUE(decision.trigger_known); EXPECT_FALSE(decision.trigger_unknown); } TEST(FaceTrackAlarmTest, DoesNotEmitUnknownForKnownPersonScoreWobble) { FaceTrackAggregationConfig cfg; cfg.known_min_hits = 3; cfg.known_hit_window_ms = 3000; cfg.unknown_min_track_age_ms = 1000; cfg.unknown_min_quality_hits = 1; FaceTrackState state; const FaceRecogItem known = MakeKnownFace(9, 1, "reg_001", 0.63f); EXPECT_FALSE(UpdateFaceTrackState(cfg, state, known, 1000).trigger_known); EXPECT_FALSE(UpdateFaceTrackState(cfg, state, known, 1500).trigger_known); EXPECT_TRUE(UpdateFaceTrackState(cfg, state, known, 2000).trigger_known); const FaceRecogItem wobble = MakeUnknownFace(9, 1, "reg_001", 0.42f); const FaceTrackDecision decision = UpdateFaceTrackState(cfg, state, wobble, 2600); EXPECT_FALSE(decision.trigger_known); EXPECT_FALSE(decision.trigger_unknown); } } // namespace } // namespace rk3588