OrangePi3588Media/plugins/alarm/actions/action_base.h
2026-04-18 20:58:31 +08:00

62 lines
1.4 KiB
C++

#pragma once
#include <memory>
#include <string>
#include <vector>
#include "frame/frame.h"
#include "utils/simple_json.h"
namespace rk3588 {
enum class FaceAlarmStatus {
Uncertain,
Known,
Unknown,
};
inline const char* FaceAlarmStatusName(FaceAlarmStatus status) {
switch (status) {
case FaceAlarmStatus::Known:
return "known";
case FaceAlarmStatus::Unknown:
return "unknown";
case FaceAlarmStatus::Uncertain:
default:
return "uncertain";
}
}
struct FaceAlarmMatch {
FaceAlarmStatus status = FaceAlarmStatus::Uncertain;
int candidate_person_id = -1;
std::string candidate_name;
float best_sim = 0.0f;
float second_sim = 0.0f;
};
struct AlarmEvent {
std::string event_id;
std::string rule_name;
std::string node_id;
uint64_t timestamp_ms;
uint64_t frame_id;
std::vector<Detection> detections;
std::vector<FaceAlarmMatch> face_matches;
std::vector<BehaviorEventItem> behavior_events;
std::string snapshot_url;
std::string clip_url;
};
class IAlarmAction {
public:
virtual ~IAlarmAction() = default;
virtual bool Init(const SimpleJson& config) = 0;
virtual void Execute(AlarmEvent& event, std::shared_ptr<Frame> frame) = 0;
virtual void Drain() {}
virtual void Stop() {}
virtual std::string Name() const = 0;
};
} // namespace rk3588