/* * File: pedestrian_vehicle_trespass.hpp * Created Date: Tuesday February 22nd 2022 * Author: yangzilong (yangzilong@objecteye.com) * Description: * ----- * Last Modified: Tuesday, 22nd February 2022 4:35:04 pm * Modified By: yangzilong (yangzilong@objecteye.com>) * ----- * Copyright 2022 */ #pragma once #include "include.h" #include "opencv2/highgui/highgui.hpp" #include #include #include namespace ai_engine_module { namespace pedestrian_vehicle_trespass { using obj_id_t = long; using task_id_t = std::string; enum class direction_t { NEGATIVE = 0, POSITIVE = 1, }; struct trace_t { box_t box; point_t point; }; // struct unique_obj_id_t { // obj_id_t obj_id; // task_id_t task_id; // bool operator<(const unique_obj_id_t &obj) const { // return obj_id < obj.obj_id || (task_id < obj.task_id); // } // }; struct unique_obj_id_t { obj_id_t obj_id; task_id_t task_id; // bool operator<(const unique_obj_id_t &obj) const { // return obj_id < obj.obj_id || (task_id < obj.task_id); // } // 221012------------------------------------------------- bool operator<(const unique_obj_id_t &obj) const { if (obj_id < obj.obj_id) return true; else if (obj_id == obj.obj_id) { if (strcmp(task_id.c_str(), obj.task_id.c_str()) < 0) return true; } return false; } //---------------------------------------------------------- }; typedef struct result_data_t { box_t box; sy_img ori_img; sy_img roi_img; bool ori_img_is_in_gpu{false}; bool roi_img_is_in_gpu{false}; } result_data_t; using results_data_t = std::vector; using multi_obj_key_t = std::vector; class PedestrianVehicleTrespass { /** * @brief * 1. move able */ public: PedestrianVehicleTrespass(); ~PedestrianVehicleTrespass(); void pedestrianvehicletrespass_init_region(const string &task_id, const algorithm_type_t algor_type, const int width, const int height); bool update_mstreams(const std::set &tasks_id, const sy_img *det_input_images, const std::vector &det_result, const vector> &delete_objs); bool update_mstreams2(const std::vector &tasks_id, const sy_img *det_input_images, const std::vector &det_result, const vector> &delete_objs); std::shared_ptr get_results_by_id(const obj_key_t &id, bool do_erase = true); PedestrianVehicleTrespass(const PedestrianVehicleTrespass &) = delete; PedestrianVehicleTrespass &operator=(const PedestrianVehicleTrespass &) = delete; PedestrianVehicleTrespass(PedestrianVehicleTrespass &&) = default; PedestrianVehicleTrespass &operator=(PedestrianVehicleTrespass &&) = default; private: bool in_rect_analysis(const obj_key_t &id, const box_t &cur_bos); task_param_manager *task_param_manager_; std::map obj_to_alarm_boxes_; std::map obj_to_position_; // 保存物体上一帧的位置,基于非法闯入判断逻辑,上一帧在框外,下一帧闯入禁区 std::map trespass_regions; }; } // namespace pedestrian_vehicle_trespass } // namespace ai_engine_module