#pragma once #include #include #include "../vp_node.h" #include "../../objects/shapes/vp_point.h" #include "../../objects/shapes/vp_line.h" #include "../../objects/vp_image_record_control_meta.h" #include "../../objects/vp_video_record_control_meta.h" namespace vp_nodes { // behaviour analysis node for stop (support multi channels) class vp_ba_person_gathering_node : public vp_node { private: // channel -> status of targets (id -> num of hit frames) std::map> all_person_gathering_checking_status; // channel -> jam status of channel (jam or not) std::map all_person_gathering_results; // channel -> last frame index to notify jam std::map all_last_notifys; // record params bool need_record_image; bool need_record_video; bool isNearby(int p1_width, int p1_x, int p1_y, int p2_width, int p2_x, int p2_y, float factor); float person_gathering_distance_factor = 4.0f; // jam checking logic parameters which may be configed by constructor passed in by user const int check_interval_frames = 1; const int check_min_hit_frames = 1 * 1; // 25 fps * 2 seconds int min_gathering_person = 3; const int check_notify_interval = 10; // interval time (seconds) to notify (ensure not frequently) protected: virtual std::shared_ptr handle_frame_meta(std::shared_ptr meta) override; public: vp_ba_person_gathering_node(std::string node_name, int min_gathering_person, bool need_record_image = true, bool need_record_video = true); ~vp_ba_person_gathering_node(); std::string to_string() override; }; }