diff --git a/build/src/Makefile b/build/src/Makefile index 5bb8ba0..18240b9 100755 --- a/build/src/Makefile +++ b/build/src/Makefile @@ -1,7 +1,7 @@ XX = g++ -PROJECT_ROOT= /home/cmhu/vpt_ascend_arm +PROJECT_ROOT= /data/cmhu/projects/vpt_ascend_arm DEPEND_DIR = $(PROJECT_ROOT)/bin SRC_ROOT = $(PROJECT_ROOT)/src @@ -68,6 +68,7 @@ SRCS:=$(wildcard $(SRC_ROOT)/ai_platform/*.cpp) \ $(wildcard $(SRC_ROOT)/decoder/gb28181/Message/*.cpp) \ $(wildcard $(SRC_ROOT)/decoder/gb28181/tinyxml2/*.cpp) \ $(wildcard $(SRC_ROOT)/decoder/gb28181/websocket/*.cpp) \ + $(wildcard $(SRC_ROOT)/helpers/*.cpp) \ OBJS = $(patsubst %.cpp, %.o, $(notdir $(SRCS))) @@ -116,6 +117,8 @@ $(TARGET):$(OBJS) %.o:$(SRC_ROOT)/decoder/gb28181/tinyxml2/%.cpp $(XX) $(CXXFLAGS) -c $< +%.o:$(SRC_ROOT)/helpers/%.cpp + $(XX) $(CXXFLAGS) -c $< diff --git a/src/ai_engine_module/GatherDetect.cpp b/src/ai_engine_module/GatherDetect.cpp index 4162197..5a92286 100644 --- a/src/ai_engine_module/GatherDetect.cpp +++ b/src/ai_engine_module/GatherDetect.cpp @@ -6,14 +6,19 @@ * @Description: */ #include "GatherDetect.h" -#include "../ai_platform/mvpt_process_assist.h" +#include "../helpers/img_util.h" GatherDetect::GatherDetect() { m_task_param_manager = task_param_manager::getInstance(); } -std::vector GatherDetect::process(vector vec_vptMem, vector &ol_det_result, algorithm_type_t algor_type) { +void GatherDetect::init(algorithm_type_t eType) +{ + m_eType = eType; +} + +std::vector GatherDetect::process(vector vec_vptMem, vector &ol_det_result) { std::vector results; map && algor_config_param = m_task_param_manager->get_task_algor_params(); @@ -23,55 +28,65 @@ std::vector GatherDetect::process(vector vec_vptMem { DeviceMemory* cur_vptMem = vec_vptMem[idx]; string task_id = cur_vptMem->getId(); - map taskid_obj_count; + + auto it_algor = algor_param.find(task_id); + if (it_algor == algor_param.end()) { + continue; + } + + task_param_manager::algo_param_type_t_* cur_task_params = algor_param[task_id][m_eType]; + if (nullptr == cur_task_params) { + continue; + } + + algor_basic_config_param_t* basic_param = (algor_basic_config_param_t*)cur_task_params->basic_param; + if (basic_param == nullptr || basic_param->adapt_param == nullptr) { + continue; + } + universal_algor_adapt_param *adapt_param = basic_param->adapt_param; + map> taskid_to_boxes; - if (algor_config_param.count(task_id) && algor_config_param[task_id].human_algors.count(algor_type)) + + onelevel_det_result &cur_task_ol_detres = ol_det_result[idx]; + for (int c = 0; c < cur_task_ol_detres.obj_count; c++) { - task_param_manager::algo_param_type_t_* cur_task_params = algor_param[task_id][algor_type]; - { - onelevel_det_result &cur_task_ol_detres = ol_det_result[idx]; + auto& obj_c = cur_task_ol_detres.obj[c]; - for (int c = 0; c < cur_task_ol_detres.obj_count; c++) - { - auto& obj_c = cur_task_ol_detres.obj[c]; + bool bHuman = m_eType == algorithm_type_t::HUMAN_GATHER || m_eType == algorithm_type_t::HUMAN_DENSITY || m_eType == algorithm_type_t::HUMAN_REGION_GATHER; - bool bHuman = algor_type == algorithm_type_t::HUMAN_GATHER || algor_type == algorithm_type_t::HUMAN_DENSITY || algor_type == algorithm_type_t::HUMAN_REGION_GATHER; + bool bCount = false; + if(bHuman && obj_c.index == (int)det_class_label_t::HUMAN) { + bCount = true; + } else if (m_eType == algorithm_type_t::VEHICLE_GATHER && obj_c.index >= 4 && obj_c.index <= 8) { + bCount = true; + } - bool bCount = false; - if(bHuman && obj_c.index == (int)det_class_label_t::HUMAN) { - bCount = true; - } else if (algor_type == algorithm_type_t::VEHICLE_GATHER && obj_c.index >= 4 && obj_c.index <= 8) { - bCount = true; - } - - if (bCount && snapshot_legal_inarea(cur_task_params->basic_param->algor_valid_rect, obj_c.left, obj_c.top, obj_c.right, obj_c.bottom)) - { - taskid_obj_count[task_id]++; - - auto tmp_box = cur_task_ol_detres.obj[c]; - box_t box; - box.top = tmp_box.top; - box.left = tmp_box.left; - box.right = tmp_box.right; - box.bottom = tmp_box.bottom; - box.score = tmp_box.confidence; - taskid_to_boxes[task_id].emplace_back(std::move(box)); - } - } + sy_point center; + center.x_ = (obj_c.right + obj_c.left)/ 2 ; + center.y_ = (obj_c.bottom + obj_c.top) / 2; + // vec_pt.push_back(center); + if (bCount && common::isInPolygon(adapt_param->points, adapt_param->points_count, center)) { + box_t box; + box.top = obj_c.top; + box.left = obj_c.left; + box.right = obj_c.right; + box.bottom = obj_c.bottom; + box.score = obj_c.confidence; + taskid_to_boxes[task_id].emplace_back(std::move(box)); } + } - int count_threshold = ((algor_config_param_human_gather*)cur_task_params->algor_param)->human_count_threshold; - int frame_stride = ((algor_config_param_human_gather*)cur_task_params->algor_param)->frame_stride; + int count_threshold = ((algor_config_param_human_gather*)cur_task_params->algor_param)->human_count_threshold; + int frame_stride = ((algor_config_param_human_gather*)cur_task_params->algor_param)->frame_stride; - if (taskid_obj_count[task_id] > count_threshold && cur_vptMem->getFrameNb() % frame_stride == 0) - { - GatherResult data; - data.origin_img = VPCUtil::vpc_devMem2vpcImg(vec_vptMem[idx]); - data.task_id = task_id; - data.boxes = std::move(taskid_to_boxes[task_id]); - data.id = gid_++; - results.emplace_back(std::move(data)); - } + if (taskid_to_boxes[task_id].size() > count_threshold && cur_vptMem->getFrameNb() % frame_stride == 0) + { + GatherResult data; + data.origin_img = VPCUtil::vpc_devMem2vpcImg(vec_vptMem[idx]); + data.task_id = task_id; + data.boxes = std::move(taskid_to_boxes[task_id]); + data.id = gid_++; + results.emplace_back(std::move(data)); } } diff --git a/src/ai_engine_module/GatherDetect.h b/src/ai_engine_module/GatherDetect.h index 37eba8f..98ca4cb 100644 --- a/src/ai_engine_module/GatherDetect.h +++ b/src/ai_engine_module/GatherDetect.h @@ -28,9 +28,13 @@ class GatherDetect public: GatherDetect(); - std::vector process(vector vec_vptMem, vector &ol_det_result, algorithm_type_t type); + void init(algorithm_type_t eType); + + std::vector process(vector vec_vptMem, vector &ol_det_result); private: task_param_manager *m_task_param_manager{nullptr}; long long gid_{0}; + + algorithm_type_t m_eType{algorithm_type_t::UNKNOWN}; }; \ No newline at end of file diff --git a/src/ai_engine_module/RegionLeave.cpp b/src/ai_engine_module/RegionLeave.cpp index ff3aee9..9b34e41 100644 --- a/src/ai_engine_module/RegionLeave.cpp +++ b/src/ai_engine_module/RegionLeave.cpp @@ -5,9 +5,10 @@ #include #include "../helpers/gen_json.hpp" -#include "../ai_platform/mvpt_process_assist.h" +#include "../helpers/img_util.h" +namespace ai_engine_module { std::set algor_type_to_det_label_set(const algorithm_type_t &algor_type) { if (algorithm_type_t::HUMAN_LEAVE_REGION == algor_type || algorithm_type_t::HUMAN_REGION_DISMISS == algor_type @@ -55,65 +56,6 @@ void RegionLeave::set_callback(callback_t cb) { } #endif -/* 根据用户输入的点 初始化禁区区域mask */ -bool RegionLeave::add_task(const string &task_id, const int width, const int height) { - - auto &¶ms_ptr = m_task_param_manager->get_task_other_param(task_id, m_eType); - if (!params_ptr) - { - LOG_ERROR("{} is nullptr when get algor param from task_param", task_id); - return false; - } - - if (params_ptr->algor_param == nullptr) - return false; - - auto *algor_params_ptr = (algor_config_param_trespass_basic *)(params_ptr->algor_param); - if (algor_params_ptr == nullptr) - { - return false; - } - - cv::Mat src(height, width, CV_8UC3); - src.setTo(0); - - std::vector contour; - for (int idx = 0; idx < algor_params_ptr->points_count; idx++) { - contour.emplace_back(algor_params_ptr->points[idx].x_, algor_params_ptr->points[idx].y_); - } - - if(contour.size() <= 0){ - return false; - } - - std::vector> contours; - contours.push_back(contour); - - cv::polylines(src, contours, true, cv::Scalar(255, 255, 255), 2, 8); // 第2个参数可以采用contour或者contours,均可 - cv::fillPoly(src, contours, cv::Scalar(255, 255, 255)); // fillPoly函数的第二个参数是二维数组 - - cv::Mat &dst_mat = region_map[task_id]; - cv::cvtColor(src, region_map[task_id], cv::COLOR_BGR2GRAY); - cv::threshold(region_map[task_id], region_map[task_id], 100, 255, cv::THRESH_BINARY); - - return true; -} - -/* 目标在禁区内外的辅助判断函数 */ -bool RegionLeave::in_rect_analysis(string task_id, const box_t &cur_bos) { - int center_x = int((cur_bos.left + cur_bos.right) / 2.0); - int center_y = int((cur_bos.top + cur_bos.bottom) / 2.0); - - cv::Mat &dst_mat = region_map[task_id]; - if (dst_mat.data[center_y * dst_mat.cols + center_x] && dst_mat.data[center_y * dst_mat.cols + center_x + 1] && - dst_mat.data[center_y * dst_mat.cols + center_x - 1] && dst_mat.data[(center_y + 1) * dst_mat.cols + center_x] && - dst_mat.data[(center_y - 1) * dst_mat.cols + center_x]) { - return true; // 进入禁区 - } else { - return false; // 未进入禁区 - } -} - bool RegionLeave::is_valid_box(string task_id, const box_t &box, const algorithm_type_t &algor_type) { auto &¶ms_ptr = m_task_param_manager->get_task_other_param(task_id, algor_type); if (!params_ptr) @@ -125,9 +67,6 @@ bool RegionLeave::is_valid_box(string task_id, const box_t &box, const algorithm if (params_ptr->basic_param == nullptr) return false; - if (!snapshot_legal_inarea(params_ptr->basic_param->algor_valid_rect, box.left, box.top, box.right, box.bottom)) - return false; - if (params_ptr->algor_param == nullptr) return false; @@ -163,23 +102,20 @@ void RegionLeave::process(std::vector& vec_gpuMem, const std::vec } } - auto it = region_map.find(task_id); - if (it == region_map.end()) { - continue; - } - auto &¶ms_ptr = m_task_param_manager->get_task_other_param(task_id, m_eType); - if (!params_ptr && !params_ptr->basic_param) + if (!params_ptr || !params_ptr->basic_param) { - LOG_ERROR("{} is nullptr when get algor param from task_param", task_id); continue; } - bool b_src_saved = false; + auto& basic_param = params_ptr->basic_param; + if (basic_param == nullptr || basic_param->adapt_param == nullptr) { + continue; + } + universal_algor_adapt_param *adapt_param = basic_param->adapt_param; string sep = "/"; - auto& basic_param = params_ptr->basic_param; std::string cur_src_ts = std::to_string(helpers::timer::get_timestamp()); std::string origin_file_path = basic_param->result_folder + sep + task_id + "_origin_" + cur_src_ts + ".jpg"; @@ -205,12 +141,15 @@ void RegionLeave::process(std::vector& vec_gpuMem, const std::vec obj_to_position_.erase(obj_key); // 如果不满足条件 非 合法框 依然删除 } - //! add or update. - if (in_rect_analysis(task_id, unique_box)) { + sy_point center; + center.x_ = (obj_c.right + obj_c.left)/ 2 ; + center.y_ = (obj_c.bottom + obj_c.top) / 2; + if (common::isInPolygon(adapt_param->points, adapt_param->points_count, center)) { // 禁区内 // 新加 obj_to_position_[obj_key] = unique_box; - } else { + } else { + // 更新 if (obj_to_position_.find(obj_key) != obj_to_position_.end()) // 之前在禁区内,可报警 { box_t box; @@ -243,13 +182,4 @@ void RegionLeave::process(std::vector& vec_gpuMem, const std::vec } } -void RegionLeave::release_task(string task_id){ - auto it = region_map.find(task_id); - if (it != region_map.end()) - { - region_map.erase(it); - } -} - - - +} // namespace ai_engine_module \ No newline at end of file diff --git a/src/ai_engine_module/RegionLeave.h b/src/ai_engine_module/RegionLeave.h index bd5deca..b8d3617 100644 --- a/src/ai_engine_module/RegionLeave.h +++ b/src/ai_engine_module/RegionLeave.h @@ -13,6 +13,8 @@ #include "../reprocessing_module/save_snapshot_reprocessing.h" +namespace ai_engine_module { + class RegionLeave { public: RegionLeave(); @@ -20,20 +22,14 @@ public: void init(int devId, algorithm_type_t eType); - bool add_task(const string &task_id, const int width, const int height); - void process(std::vector& vec_gpuMem, const std::vector &det_result, const vector> &delete_objs); - void release_task(string task_id); - #ifdef POST_USE_RABBITMQ typedef std::function callback_t; void set_callback(callback_t cb); #endif private: - bool in_rect_analysis(string task_id, const box_t &cur_bos); - bool is_valid_box(string task_id, const box_t &box, const algorithm_type_t &algor_type); private: @@ -48,4 +44,6 @@ private: }; +} // namespace ai_engine_module + #endif // __REGION_LEAVE_H__ \ No newline at end of file diff --git a/src/ai_engine_module/common.h b/src/ai_engine_module/common.h new file mode 100644 index 0000000..d19c2d2 --- /dev/null +++ b/src/ai_engine_module/common.h @@ -0,0 +1,7 @@ +#ifndef __AI_ENGINE_MODULE_COMMON_H__ +#define __AI_ENGINE_MODULE_COMMON_H__ + +#include "sy_common.h" //通用数据结构体定义 + + +#endif // __AI_ENGINE_MODULE_COMMON_H__ \ No newline at end of file diff --git a/src/ai_engine_module/face_det_ai_engine.cpp b/src/ai_engine_module/face_det_ai_engine.cpp index 70542f1..739ca20 100755 --- a/src/ai_engine_module/face_det_ai_engine.cpp +++ b/src/ai_engine_module/face_det_ai_engine.cpp @@ -7,6 +7,8 @@ #include "opencv2/opencv.hpp" #include "face_detect.h" +#include "../helpers/img_util.h" + face_det_ai_engine::face_det_ai_engine(){ m_max_batchsize = 10; } @@ -81,15 +83,27 @@ int face_det_ai_engine::ai_engine_process_batch(std::vector &task_i auto task_id_iter = task_ids.cbegin(); for (int c = 0; c < total_batchsize; ++c) { - task_param_manager::algo_param_type_t_* cur_task_params = algor_param[*task_id_iter++][algorithm_type_t::FACE_SNAPSHOT]; + string task_id = *task_id_iter; + task_id_iter++; + + task_param_manager::algo_param_type_t_* cur_task_params = algor_param[task_id][algorithm_type_t::FACE_SNAPSHOT]; + if (cur_task_params->basic_param == nullptr) { + continue; + } + + auto adapt_param = cur_task_params->basic_param->adapt_param; + if (adapt_param == nullptr){ + continue; + } + for (int i = 0; i < fd_result_[c].count; ++i) { - if (!snapshot_legal_inarea(cur_task_params->basic_param->algor_valid_rect, - fd_result_[c].info[i].face_position.left_, fd_result_[c].info[i].face_position.top_, - fd_result_[c].info[i].face_position.left_ + fd_result_[c].info[i].face_position.width_, - fd_result_[c].info[i].face_position.top_ + fd_result_[c].info[i].face_position.height_) - || fd_result_[c].info[i].face_pos_score < ((algor_config_param_snapshot *)cur_task_params->algor_param)->threshold) - { + auto& obj_c = fd_result_[c].info[i]; + + sy_point center; + center.x_ = obj_c.face_position.left_ + obj_c.face_position.width_ / 2 ; + center.y_ = obj_c.face_position.top_ + obj_c.face_position.height_ / 2; + if (!common::isInPolygon(adapt_param->points, adapt_param->points_count, center) || obj_c.face_pos_score < ((algor_config_param_snapshot *)cur_task_params->algor_param)->threshold) { continue; } diff --git a/src/ai_engine_module/motocycle_hs_process.cpp b/src/ai_engine_module/motocycle_hs_process.cpp index c125367..9f97e97 100644 --- a/src/ai_engine_module/motocycle_hs_process.cpp +++ b/src/ai_engine_module/motocycle_hs_process.cpp @@ -4,7 +4,7 @@ #include "../decoder/interface/DeviceMemory.hpp" #include "../common/logger.hpp" #include "../ai_platform/mvpt_process_assist.h" - +#include "../helpers/img_util.h" namespace ai_engine_module { @@ -37,10 +37,18 @@ namespace ai_engine_module bool is_valid_box(const int top, const int left, const int right, const int bottom, const float score, const algorithm_type_t &algor_type, const task_param_manager::algo_param_type_t_ *params_ptr = nullptr) { - if (!params_ptr) + if (!params_ptr || params_ptr->basic_param == nullptr) + return false; + + universal_algor_adapt_param *adapt_param = params_ptr->basic_param->adapt_param; + if (nullptr == adapt_param) { return false; + } - if (!snapshot_legal_inarea(params_ptr->basic_param->algor_valid_rect, left, top, right, bottom)) + sy_point center; + center.x_ = (right + left)/ 2 ; + center.y_ = (bottom + top) / 2; + if (!common::isInPolygon(adapt_param->points, adapt_param->points_count, center)) return false; if (params_ptr->algor_param == nullptr) diff --git a/src/ai_engine_module/motocycle_phone_process.cpp b/src/ai_engine_module/motocycle_phone_process.cpp index 5955511..d9504e3 100644 --- a/src/ai_engine_module/motocycle_phone_process.cpp +++ b/src/ai_engine_module/motocycle_phone_process.cpp @@ -4,7 +4,7 @@ #include "../decoder/interface/DeviceMemory.hpp" #include "../common/logger.hpp" #include "../ai_platform/mvpt_process_assist.h" - +#include "../helpers/img_util.h" namespace ai_engine_module { @@ -38,10 +38,18 @@ namespace ai_engine_module const algorithm_type_t &algor_type, const int src_img_w, const int src_img_h, const task_param_manager::algo_param_type_t_ *params_ptr = nullptr) { - if (!params_ptr) + if (!params_ptr || params_ptr->basic_param == nullptr) + return false; + + universal_algor_adapt_param *adapt_param = params_ptr->basic_param->adapt_param; + if (nullptr == adapt_param) { return false; + } - if (!snapshot_legal_inarea(params_ptr->basic_param->algor_valid_rect, left, top, right, bottom)) + sy_point center; + center.x_ = (right + left)/ 2 ; + center.y_ = (bottom + top) / 2; + if (!common::isInPolygon(adapt_param->points, adapt_param->points_count, center)) return false; if (params_ptr->algor_param == nullptr) diff --git a/src/ai_engine_module/motocycle_refit_phone_process.cpp b/src/ai_engine_module/motocycle_refit_phone_process.cpp index 58c7b1b..f6cec17 100644 --- a/src/ai_engine_module/motocycle_refit_phone_process.cpp +++ b/src/ai_engine_module/motocycle_refit_phone_process.cpp @@ -4,7 +4,7 @@ #include "../decoder/interface/DeviceMemory.hpp" #include "../common/logger.hpp" #include "../ai_platform/mvpt_process_assist.h" - +#include "../helpers/img_util.h" namespace ai_engine_module { @@ -39,10 +39,18 @@ namespace ai_engine_module const algorithm_type_t &algor_type, const int src_img_w, const int src_img_h, const task_param_manager::algo_param_type_t_ *params_ptr = nullptr) { - if (!params_ptr) + if (!params_ptr || params_ptr->basic_param == nullptr) + return false; + + universal_algor_adapt_param *adapt_param = params_ptr->basic_param->adapt_param; + if (nullptr == adapt_param) { return false; + } - if (!snapshot_legal_inarea(params_ptr->basic_param->algor_valid_rect, left, top, right, bottom)) + sy_point center; + center.x_ = (right + left)/ 2 ; + center.y_ = (bottom + top) / 2; + if (!common::isInPolygon(adapt_param->points, adapt_param->points_count, center)) return false; if (params_ptr->algor_param == nullptr) diff --git a/src/ai_engine_module/motocycle_refit_process.cpp b/src/ai_engine_module/motocycle_refit_process.cpp index d1fa7a2..8d8aa36 100644 --- a/src/ai_engine_module/motocycle_refit_process.cpp +++ b/src/ai_engine_module/motocycle_refit_process.cpp @@ -4,7 +4,7 @@ #include "../decoder/interface/DeviceMemory.hpp" #include "../common/logger.hpp" #include "../ai_platform/mvpt_process_assist.h" - +#include "../helpers/img_util.h" namespace ai_engine_module { @@ -36,10 +36,18 @@ namespace ai_engine_module const algorithm_type_t &algor_type, const int src_img_w, const int src_img_h, const task_param_manager::algo_param_type_t_ *params_ptr = nullptr) { - if (!params_ptr) + if (!params_ptr || params_ptr->basic_param == nullptr) + return false; + + universal_algor_adapt_param *adapt_param = params_ptr->basic_param->adapt_param; + if (nullptr == adapt_param) { return false; + } - if (!snapshot_legal_inarea(params_ptr->basic_param->algor_valid_rect, left, top, right, bottom)) + sy_point center; + center.x_ = (right + left)/ 2 ; + center.y_ = (bottom + top) / 2; + if (!common::isInPolygon(adapt_param->points, adapt_param->points_count, center)) return false; if (params_ptr->algor_param == nullptr) diff --git a/src/ai_engine_module/pedestrian_vehicle_retrograde.cpp b/src/ai_engine_module/pedestrian_vehicle_retrograde.cpp index 3b698d9..2245de3 100755 --- a/src/ai_engine_module/pedestrian_vehicle_retrograde.cpp +++ b/src/ai_engine_module/pedestrian_vehicle_retrograde.cpp @@ -15,6 +15,7 @@ #include "../decoder/interface/DeviceMemory.hpp" #include "../common/logger.hpp" #include "../ai_platform/mvpt_process_assist.h" +#include "../helpers/img_util.h" namespace ai_engine_module { namespace pedestrian_vehicle_retrograde { @@ -50,11 +51,19 @@ bool is_valid_box(const int &cls, const algorithm_type_t &algor_type) { bool is_valid_box(const box_t &box, const algorithm_type_t &algor_type, const task_param_manager::algo_param_type_t_ *params_ptr = nullptr) { - if (!params_ptr) - return false; + if (!params_ptr || params_ptr->basic_param == nullptr) + return false; - if (!snapshot_legal_inarea(params_ptr->basic_param->algor_valid_rect, box.left, box.top, box.right, box.bottom)) - return false; + universal_algor_adapt_param *adapt_param = params_ptr->basic_param->adapt_param; + if (nullptr == adapt_param) { + return false; + } + + sy_point center; + center.x_ = (box.right + box.left)/ 2 ; + center.y_ = (box.bottom + box.top) / 2; + if (!common::isInPolygon(adapt_param->points, adapt_param->points_count, center)) + return false; if (params_ptr->algor_param == nullptr) return false; diff --git a/src/ai_engine_module/pedestrian_vehicle_trespass.cpp b/src/ai_engine_module/pedestrian_vehicle_trespass.cpp index e2f0e0a..c9fd2a4 100755 --- a/src/ai_engine_module/pedestrian_vehicle_trespass.cpp +++ b/src/ai_engine_module/pedestrian_vehicle_trespass.cpp @@ -17,7 +17,7 @@ #include "../decoder/interface/DeviceMemory.hpp" #include "../common/logger.hpp" #include "../ai_platform/mvpt_process_assist.h" - +#include "../helpers/img_util.h" namespace ai_engine_module { namespace pedestrian_vehicle_trespass { @@ -55,11 +55,19 @@ bool is_valid_box(const int &cls, const algorithm_type_t &algor_type) { bool is_valid_box(const box_t &box, const algorithm_type_t &algor_type, const task_param_manager::algo_param_type_t_ *params_ptr = nullptr) { - if (!params_ptr) - return false; + if (!params_ptr || params_ptr->basic_param == nullptr) + return false; - if (!snapshot_legal_inarea(params_ptr->basic_param->algor_valid_rect, box.left, box.top, box.right, box.bottom)) - return false; + universal_algor_adapt_param *adapt_param = params_ptr->basic_param->adapt_param; + if (nullptr == adapt_param) { + return false; + } + + sy_point center; + center.x_ = (box.right + box.left)/ 2 ; + center.y_ = (box.bottom + box.top) / 2; + if (!common::isInPolygon(adapt_param->points, adapt_param->points_count, center)) + return false; if (params_ptr->algor_param == nullptr) return false; diff --git a/src/ai_engine_module/road_seg_correlation_algor.cpp b/src/ai_engine_module/road_seg_correlation_algor.cpp index 31b91d7..a97d4ab 100644 --- a/src/ai_engine_module/road_seg_correlation_algor.cpp +++ b/src/ai_engine_module/road_seg_correlation_algor.cpp @@ -5,9 +5,9 @@ #include "../common/logger.hpp" #include "../ai_platform/mvpt_process_assist.h" #include -#if 1 #include "opencv2/opencv.hpp" -#endif +#include "../helpers/img_util.h" + namespace ai_engine_module { @@ -62,10 +62,18 @@ namespace ai_engine_module const algorithm_type_t &algor_type, const int src_img_w, const int src_img_h, const task_param_manager::algo_param_type_t_ *params_ptr = nullptr) { - if (!params_ptr) + if (!params_ptr || params_ptr->basic_param == nullptr) return false; - if (!snapshot_legal_inarea(params_ptr->basic_param->algor_valid_rect, left, top, right, bottom)) + universal_algor_adapt_param *adapt_param = params_ptr->basic_param->adapt_param; + if (nullptr == adapt_param) { + return false; + } + + sy_point center; + center.x_ = (right + left)/ 2 ; + center.y_ = (bottom + top) / 2; + if (!common::isInPolygon(adapt_param->points, adapt_param->points_count, center)) return false; if (params_ptr->algor_param == nullptr) diff --git a/src/ai_engine_module/traffic_light_process.cpp b/src/ai_engine_module/traffic_light_process.cpp index 303d50d..e390ae8 100644 --- a/src/ai_engine_module/traffic_light_process.cpp +++ b/src/ai_engine_module/traffic_light_process.cpp @@ -4,10 +4,8 @@ #include "../decoder/interface/DeviceMemory.hpp" #include "../common/logger.hpp" #include "../ai_platform/mvpt_process_assist.h" - -#if 1 #include "opencv2/opencv.hpp" -#endif +#include "../helpers/img_util.h" namespace ai_engine_module { @@ -40,10 +38,18 @@ namespace ai_engine_module const algorithm_type_t &algor_type, const int src_img_w, const int src_img_h, const task_param_manager::algo_param_type_t_ *params_ptr = nullptr) { - if (!params_ptr) + if (!params_ptr || params_ptr->basic_param == nullptr) return false; - if (!snapshot_legal_inarea(params_ptr->basic_param->algor_valid_rect, left, top, right, bottom)) + universal_algor_adapt_param *adapt_param = params_ptr->basic_param->adapt_param; + if (nullptr == adapt_param) { + return false; + } + + sy_point center; + center.x_ = (right + left)/ 2 ; + center.y_ = (bottom + top) / 2; + if (!common::isInPolygon(adapt_param->points, adapt_param->points_count, center)) return false; if (params_ptr->algor_param == nullptr) diff --git a/src/ai_engine_module/tricycle_manned_process.cpp b/src/ai_engine_module/tricycle_manned_process.cpp index a75f3cc..ca67354 100644 --- a/src/ai_engine_module/tricycle_manned_process.cpp +++ b/src/ai_engine_module/tricycle_manned_process.cpp @@ -4,7 +4,7 @@ #include "../decoder/interface/DeviceMemory.hpp" #include "../common/logger.hpp" #include "../ai_platform/mvpt_process_assist.h" - +#include "../helpers/img_util.h" namespace ai_engine_module { @@ -144,13 +144,18 @@ namespace ai_engine_module { auto& taskId = *taskId_iter; auto algor_param_wrap = task_param_manager_->get_task_other_param(taskId, this->algor_type_); - if (!algor_param_wrap) + if (!algor_param_wrap || algor_param_wrap->basic_param == nullptr) { LOG_ERROR("{} is nullptr when get algor param from task_param", taskId.c_str()); continue; } auto algor_param = ((algor_param_type)algor_param_wrap->algor_param); + universal_algor_adapt_param *adapt_param = algor_param_wrap->basic_param->adapt_param; + if (nullptr == adapt_param) { + continue; + } + input_data_wrap_t data; int top = std::max(int(box.top - (IMAGE_CROP_EXPAND_RATIO * box.top)), 0); int left = std::max(int(box.left - (IMAGE_CROP_EXPAND_RATIO * box.left)), 0); @@ -160,8 +165,12 @@ namespace ai_engine_module int width = right - left; int height = bottom - top; + sy_point center; + center.x_ = (right + left)/ 2 ; + center.y_ = (bottom + top) / 2; + if ((width < algor_param->obj_min_width || height < algor_param->obj_min_height || box.confidence < algor_param->obj_confidence_threshold) || - !snapshot_legal_inarea(algor_param_wrap->basic_param->algor_valid_rect, left, top, right, bottom)) + !common::isInPolygon(adapt_param->points, adapt_param->points_count, center)) continue; data.box.top = top; diff --git a/src/ai_engine_module/truck_manned_process.cpp b/src/ai_engine_module/truck_manned_process.cpp index 2eb6bc7..124ea4b 100644 --- a/src/ai_engine_module/truck_manned_process.cpp +++ b/src/ai_engine_module/truck_manned_process.cpp @@ -7,7 +7,7 @@ #include "opencv2/opencv.hpp" #include "opencv2/imgcodecs/legacy/constants_c.h" - +#include "../helpers/img_util.h" namespace ai_engine_module { @@ -260,13 +260,18 @@ namespace ai_engine_module { auto& taskId = *taskId_iter; auto algor_param_wrap = task_param_manager_->get_task_other_param(taskId, this->algor_type_); - if (!algor_param_wrap) + if (!algor_param_wrap || algor_param_wrap->basic_param == nullptr) { LOG_ERROR("{} is nullptr when get algor param from task_param", taskId.c_str()); continue; } auto algor_param = ((algor_param_type)algor_param_wrap->algor_param); + universal_algor_adapt_param *adapt_param = algor_param_wrap->basic_param->adapt_param; + if (nullptr == adapt_param) { + continue; + } + input_data_wrap_t data; int top = std::max(int(box.top - (IMAGE_CROP_EXPAND_RATIO * box.top)), 0); int left = std::max(int(box.left - (IMAGE_CROP_EXPAND_RATIO * box.left)), 0); @@ -276,8 +281,12 @@ namespace ai_engine_module int width = right - left; int height = bottom - top; + sy_point center; + center.x_ = (right + left)/ 2 ; + center.y_ = (bottom + top) / 2; + if ((width < algor_param->obj_min_width || height < algor_param->obj_min_height || box.confidence < algor_param->obj_confidence_threshold) || - !snapshot_legal_inarea(algor_param_wrap->basic_param->algor_valid_rect, left, top, right, bottom)) + !common::isInPolygon(adapt_param->points, adapt_param->points_count, center)) continue; //统计货车检测框内行人及非机动车的数量 diff --git a/src/ai_platform/MultiSourceProcess.cpp b/src/ai_platform/MultiSourceProcess.cpp index df3805e..8764d77 100755 --- a/src/ai_platform/MultiSourceProcess.cpp +++ b/src/ai_platform/MultiSourceProcess.cpp @@ -13,7 +13,8 @@ #include "../helpers/os_helper.hpp" #include "../helpers/gen_json.hpp" #include "../helpers/str_helper.hpp" -#include "../helpers/common_tool.h" +#include "../helpers/img_util.h" + #include "../reprocessing_module/save_snapshot_reprocessing.h" #include "macro_definition.h" @@ -22,6 +23,7 @@ #include "mvpt_process_assist.h" #include "../util/vpc_util.h" +#include "../util/common_tool.h" #include "../decoder/gb28181/websocket/WebsocketClient.h" @@ -229,6 +231,11 @@ int CMultiSourceProcess::InitAlgorthim(tsl_aiplatform_param vptParam){ m_algorthim_region_dismiss.init(vptParam.gpuid, algorithm_type_t::HUMAN_REGION_DISMISS); m_algorthim_region_fastmoving.init(vptParam.gpuid, algorithm_type_t::HUMAN_REGION_FAST_MOVING); + m_human_gather.init(algorithm_type_t::HUMAN_GATHER); + m_human_density.init(algorithm_type_t::HUMAN_DENSITY); + m_human_region_gather.init(algorithm_type_t::HUMAN_REGION_GATHER); + m_vehicle_gather.init(algorithm_type_t::VEHICLE_GATHER); + m_task_param_manager = task_param_manager::getInstance(); m_snapshot_reprocessing = new snapshot_reprocessing(m_devId); @@ -432,11 +439,6 @@ bool CMultiSourceProcess::AddTask(task_param _cur_task_param){ m_face_det_ai_engine.add_tracker(task_id, skip_frame_); // 跳帧数暂时写死 #endif - // 必须在 add_task_param 之后 todo 这里需要用参数过滤是否初始化 - m_algorthim_region_leave.add_task(task_id, input_image_width, input_image_height); - m_algorthim_region_dismiss.add_task(task_id, input_image_width, input_image_height); - m_algorthim_region_fastmoving.add_task(task_id, input_image_width, input_image_height); - m_FinishedTaskMtx.lock(); m_FinishedTaskMap[task_id] = false; m_FinishedTaskMtx.unlock(); @@ -689,10 +691,6 @@ bool CMultiSourceProcess::finish_task(const string taskID, const bool delete_sna pedestrian_vehicle_retrograde_.force_release_result(taskID); //221024 byzsh // #endif - m_algorthim_region_leave.release_task(taskID); - m_algorthim_region_dismiss.release_task(taskID); - m_algorthim_region_fastmoving.release_task(taskID); - #ifdef USE_VILLAGE tricycle_manned_.force_release_result(taskID); truck_manned_.force_release_result(taskID); @@ -932,8 +930,8 @@ int CMultiSourceProcess::algorthim_vpt(vector vec_gpuMem){ gather_process(vec_vptMem, vptResult, algorithm_type_t::HUMAN_GATHER); // modified by zsh gather_process(vec_vptMem, vptResult, algorithm_type_t::HUMAN_DENSITY); - gather_process(vec_vptMem, vptResult, algorithm_type_t::VEHICLE_GATHER); gather_process(vec_vptMem, vptResult, algorithm_type_t::HUMAN_REGION_GATHER); + gather_process(vec_vptMem, vptResult, algorithm_type_t::VEHICLE_GATHER); // m_snapshot_reprocessing->screen_effective_snapshot(vptResult); @@ -2208,11 +2206,14 @@ void CMultiSourceProcess::cross_line_process(vector vec_gpuMem, v { continue; } - - bool b_src_saved = false; algor_config_param_illegal_crossing_line* algor_param = (algor_config_param_illegal_crossing_line*)cur_task_params->algor_param; algor_basic_config_param_t* basic_param = (algor_basic_config_param_t*)cur_task_params->basic_param; + if (basic_param == nullptr || basic_param->adapt_param == nullptr) { + continue; + } + universal_algor_adapt_param *adapt_param = basic_param->adapt_param; + jxline std_line(algor_param->p1.x_, algor_param->p1.y_, algor_param->p2.x_, algor_param->p2.y_); std::string cur_src_ts = std::to_string(helpers::timer::get_timestamp()); @@ -2231,8 +2232,10 @@ void CMultiSourceProcess::cross_line_process(vector vec_gpuMem, v bCount = true; } - if (!bCount || !snapshot_legal_inarea(basic_param->algor_valid_rect, obj_c.left, obj_c.top, obj_c.right, obj_c.bottom)) - { + sy_point center; + center.x_ = (obj_c.right + obj_c.left)/ 2 ; + center.y_ = (obj_c.bottom + obj_c.top) / 2; + if (!bCount || !common::isInPolygon(adapt_param->points, adapt_param->points_count, center)) { continue; } @@ -2312,6 +2315,10 @@ void CMultiSourceProcess::wander_detect(vector& vec_gpuMem, vecto algor_config_param_behavior* algor_param = (algor_config_param_behavior*)cur_task_params->algor_param; algor_basic_config_param_t* basic_param = (algor_basic_config_param_t*)cur_task_params->basic_param; + if (basic_param == nullptr || basic_param->adapt_param == nullptr) { + continue; + } + universal_algor_adapt_param *adapt_param = basic_param->adapt_param; long algor_skip_gap = algor_param->duration; @@ -2329,8 +2336,10 @@ void CMultiSourceProcess::wander_detect(vector& vec_gpuMem, vecto bCount = true; } - if (!bCount || !snapshot_legal_inarea(basic_param->algor_valid_rect, obj_c.left, obj_c.top, obj_c.right, obj_c.bottom)) - { + sy_point center; + center.x_ = (obj_c.right + obj_c.left)/ 2 ; + center.y_ = (obj_c.bottom + obj_c.top) / 2; + if (!bCount || !common::isInPolygon(adapt_param->points, adapt_param->points_count, center)) { continue; } @@ -2390,7 +2399,15 @@ void CMultiSourceProcess::wander_detect(vector& vec_gpuMem, vecto int CMultiSourceProcess::gather_process(vector& vec_gpuMem, vector &ol_det_result, algorithm_type_t algor_type) { /* 人数聚集算法功能 每帧都会获取算法结果 并返回 */ std::vector results; - results = m_algorthim_gather.process(vec_gpuMem, ol_det_result, algor_type); + if (algor_type == algorithm_type_t::HUMAN_GATHER) { + results = m_human_gather.process(vec_gpuMem, ol_det_result); + } else if (algor_type == algorithm_type_t::HUMAN_DENSITY) { + results = m_human_density.process(vec_gpuMem, ol_det_result); + } else if (algor_type == algorithm_type_t::HUMAN_REGION_GATHER) { + results = m_human_region_gather.process(vec_gpuMem, ol_det_result); + } else if (algor_type == algorithm_type_t::VEHICLE_GATHER) { + results = m_vehicle_gather.process(vec_gpuMem, ol_det_result); + } int algorithm_type = (int)algor_type; for (auto &result : results) { @@ -2511,7 +2528,7 @@ bool CMultiSourceProcess::CheckTime() { nYear = info->tm_year + 1900; nMonth = info->tm_mon + 1; nDay = info->tm_mday; - if (nYear == 2024 && nMonth <= 12) + if (nYear == 2025 && nMonth <= 12) { return true; } diff --git a/src/ai_platform/MultiSourceProcess.h b/src/ai_platform/MultiSourceProcess.h index 2eedcf7..3da9438 100755 --- a/src/ai_platform/MultiSourceProcess.h +++ b/src/ai_platform/MultiSourceProcess.h @@ -182,11 +182,14 @@ private: face_det_ai_engine m_face_det_ai_engine; // 人脸检测 - RegionLeave m_algorthim_region_leave; - RegionLeave m_algorthim_region_dismiss; - RegionLeave m_algorthim_region_fastmoving; - - GatherDetect m_algorthim_gather; + ai_engine_module::RegionLeave m_algorthim_region_leave; + ai_engine_module::RegionLeave m_algorthim_region_dismiss; + ai_engine_module::RegionLeave m_algorthim_region_fastmoving; + + GatherDetect m_human_gather; + GatherDetect m_human_density; + GatherDetect m_human_region_gather; + GatherDetect m_vehicle_gather; deque m_recoderinfo_queue; mutex m_recoderinfo_queue_mtx; diff --git a/src/ai_platform/header.h b/src/ai_platform/header.h index 8af8ff7..4e91b0f 100755 --- a/src/ai_platform/header.h +++ b/src/ai_platform/header.h @@ -480,11 +480,28 @@ typedef struct algor_config_param_snapshot { #endif +#ifndef __UNIVERSAL_ADAPTATON__ +#define __UNIVERSAL_ADAPTATON__ +#define ROI_MAX_POINT 50 +#define MAX_DIRECTION_LINE 50 +typedef struct universal_algor_adapt_param { + sy_point points[ROI_MAX_POINT]; + int points_count; //多边形顶点数量(不超过ROI_MAX_POINT) + // sy_direction direction[MAX_DIRECTION_LINE]; + int line_count; //拌线数量(不超过MAX_DIRECTION_LINE) + + universal_algor_adapt_param() + : points_count(0), line_count(0) { + } +} universal_algor_adapt_param; +#endif + // 算法的初始化参数 #ifndef __ALGOR_CONFIG_PARAM__BASIC__ #define __ALGOR_CONFIG_PARAM__BASIC__ typedef struct algor_basic_config_param_t { + universal_algor_adapt_param *adapt_param{nullptr}; //此处传入共性适配参数 sy_rect algor_valid_rect; char *result_folder_little; //目标快照抠图保存地址 char *result_folder; //目标快照大图保存地址 @@ -496,7 +513,6 @@ typedef struct algor_basic_config_param_t { - //算法的初始化参数 #ifndef __ALGOR_CONFIG_PARAM__ #define __ALGOR_CONFIG_PARAM__ diff --git a/src/ai_platform/task_param_manager.cpp b/src/ai_platform/task_param_manager.cpp index d0461cd..bb5f94c 100755 --- a/src/ai_platform/task_param_manager.cpp +++ b/src/ai_platform/task_param_manager.cpp @@ -311,6 +311,14 @@ void task_param_manager::add_task_param(string task_id, task_param task_param) { dst_basic_param->algor_valid_rect.width_ = src_basic_param->algor_valid_rect.width_; dst_basic_param->algor_valid_rect.height_ = src_basic_param->algor_valid_rect.height_; + /* 拷贝共性算法适配参数 */ + auto &adapt_param = src_basic_param->adapt_param; + if (adapt_param) { + dst_basic_param->adapt_param = new universal_algor_adapt_param; + *((universal_algor_adapt_param *)(dst_basic_param->adapt_param)) = + *((universal_algor_adapt_param *)adapt_param); // deep copy. + } + copied_algor_param->basic_param = dst_basic_param; m_task_params[task_id][algor_config_param.algor_type] = copied_algor_param; } @@ -339,6 +347,14 @@ void task_param_manager::delete_task_param(string task_id) { delete[] cur_param->video_folder; cur_param->video_folder = nullptr; } + + universal_algor_adapt_param *adapt_param = + (universal_algor_adapt_param *)cur_param->adapt_param; + if (adapt_param) { + delete (universal_algor_adapt_param *)cur_param->adapt_param; + cur_param->adapt_param = nullptr; + } + if (cur_param) { delete ((algor_init_config_param_t *)m_task_params[task_id][iter.first])->basic_param; ((algor_init_config_param_t *)m_task_params[task_id][iter.first])->basic_param = nullptr; diff --git a/src/decoder/dvpp/DvppDecoder.cpp b/src/decoder/dvpp/DvppDecoder.cpp index 8cecbd0..1552f73 100644 --- a/src/decoder/dvpp/DvppDecoder.cpp +++ b/src/decoder/dvpp/DvppDecoder.cpp @@ -601,7 +601,6 @@ void DvppDecoder::read_thread() { continue; } - frame_nb++; int nSended = -1; while ((ret = av_bsf_receive_packet(h264bsfc, pkt)) == 0) { if(!m_bRunning){ @@ -609,6 +608,7 @@ void DvppDecoder::read_thread() { } nSended = sendPkt(vdecChannelDesc, pkt, frame_nb); } + frame_nb++; if(nSended < 0) { // 执行出错,强行结束整个任务 diff --git a/src/demo/demo.cpp b/src/demo/demo.cpp index 9bd22a2..1f71afb 100755 --- a/src/demo/demo.cpp +++ b/src/demo/demo.cpp @@ -65,476 +65,222 @@ void init_mq_conn(void *handle) { void set_task_params(task_param &tparam, const unsigned &idx, const algorithm_type_t &algor_type) { auto algor_init_params = new algor_init_config_param_t; - switch (algor_type) { - - case algorithm_type_t::NONMOTOR_VEHICLE_NOHELMET: { - auto algor_params = new algor_config_param_manned_incident; - { - algor_params->m = 10; - algor_params->n = 8; - algor_params->obj_confidence_threshold = 0.5f; - algor_params->obj_min_height = 6; - algor_params->obj_min_width = 32; - } - - auto basic_params = new algor_basic_config_param_t; - { - // basic_params->algor_valid_rect.top_ = 0; - // basic_params->algor_valid_rect.left_ = 0; - // basic_params->algor_valid_rect.width_ = 1920; - // basic_params->algor_valid_rect.height_ = 1080; - basic_params->video_folder = "res/video_recode"; - basic_params->result_folder = "res/motor_nohelmet"; - basic_params->result_folder_little = "res/motor_nohelmet_little"; - } - - algor_init_params->algor_param = algor_params; - algor_init_params->basic_param = basic_params; - } break; - - case algorithm_type_t::NONMOTOR_VEHICLE_OVERMAN: { - auto algor_params = new algor_config_param_manned_incident; - { - algor_params->m = 10; - algor_params->n = 8; - algor_params->hs_count_threshold = 2; - algor_params->obj_confidence_threshold = 0.5f; - algor_params->obj_min_height = 6; - algor_params->obj_min_width = 32; - } - - auto basic_params = new algor_basic_config_param_t; - { - // basic_params->algor_valid_rect.top_ = 0; - // basic_params->algor_valid_rect.left_ = 0; - // basic_params->algor_valid_rect.width_ = 1920; - // basic_params->algor_valid_rect.height_ = 1080; - basic_params->video_folder = "res/video_recode"; - basic_params->result_folder = "res/motor_overman"; - basic_params->result_folder_little = "res/motor_overman_little"; - } - - algor_init_params->algor_param = algor_params; - algor_init_params->basic_param = basic_params; - } break; - - case algorithm_type_t::TRICYCLE_MANNED: { - auto algor_params = new algor_config_param_manned_incident; - { - algor_params->m = 10; - algor_params->n = 8; - algor_params->hs_count_threshold = 1; - algor_params->obj_confidence_threshold = 0.5f; - algor_params->obj_min_height = 6; - algor_params->obj_min_width = 32; - } - - auto basic_params = new algor_basic_config_param_t; - { - basic_params->video_folder = "res/video_recode"; - basic_params->result_folder = "res/tricycle_manned"; - basic_params->result_folder_little = "res/tricycle_manned_little"; - } - - algor_init_params->algor_param = algor_params; - algor_init_params->basic_param = basic_params; - } break; - - case algorithm_type_t::TRUCK_MANNED: { - auto algor_params = new algor_config_param_manned_incident; - { - // algor_params->m = 10; - // algor_params->n = 8; - algor_params->m = 5; - algor_params->n = 5; - algor_params->hs_count_threshold = 1; - algor_params->obj_confidence_threshold = 0.5f; - algor_params->obj_min_height = 6; - algor_params->obj_min_width = 32; - } - - auto basic_params = new algor_basic_config_param_t; - { - basic_params->video_folder = "res/video_recode"; - basic_params->result_folder = "res/truck_manned"; - basic_params->result_folder_little = "res/truck_manned_little"; - } - - algor_init_params->algor_param = algor_params; - algor_init_params->basic_param = basic_params; - } break; - - case algorithm_type_t::NONMOTOR_VEHICLE_USEPHONE: { - auto algor_params = new algor_config_param_manned_incident; - { - algor_params->m = 10; - algor_params->n = 8; - algor_params->obj_confidence_threshold = 0.5f; - algor_params->obj_min_height = 75; - algor_params->obj_min_width = 51; - } - - auto basic_params = new algor_basic_config_param_t; - { - basic_params->video_folder = "res/video_recode"; - basic_params->result_folder = "res/motor_usephone"; - basic_params->result_folder_little = "res/motor_usephone_little"; - } - - algor_init_params->algor_param = algor_params; - algor_init_params->basic_param = basic_params; - } break; - - case algorithm_type_t::NONMOTOR_VEHICLE_REFIT: { - auto algor_params = new algor_config_param_manned_incident; - { - algor_params->m = 10; - algor_params->n = 8; - algor_params->obj_confidence_threshold = 0.5f; - algor_params->obj_min_height = 75; - algor_params->obj_min_width = 51; - } - - auto basic_params = new algor_basic_config_param_t; - { - basic_params->video_folder = "res/video_recode"; - basic_params->result_folder = "res/motor_refit"; - basic_params->result_folder_little = "res/motor_refit_little"; - } - - algor_init_params->algor_param = algor_params; - algor_init_params->basic_param = basic_params; - } break; - - case algorithm_type_t::PERSON_RUNNING_REDLIGHTS: { - auto algor_params = new algor_config_param_manned_incident; - { - algor_params->m = 10; - algor_params->n = 8; - algor_params->hs_count_threshold = 1; - algor_params->obj_confidence_threshold = 0.5f; - algor_params->obj_min_height = 6; - algor_params->obj_min_width = 32; - } - + case algorithm_type_t::FACE_SNAPSHOT: { auto basic_params = new algor_basic_config_param_t; { - basic_params->video_folder = "res/video_recode"; - basic_params->result_folder = "res/person_runred"; - basic_params->result_folder_little = "res/person_runred_little"; + basic_params->result_folder = "res/face"; + basic_params->result_folder_little = "res/face_little"; + + //共性算法适配测试用 + auto adapt_params = new universal_algor_adapt_param; + { + adapt_params->points_count = 4; // 0表示不生效 + adapt_params->points[0].x_ = 505; adapt_params->points[0].y_ = 481; + adapt_params->points[1].x_ = 741; adapt_params->points[1].y_ = 881; + adapt_params->points[2].x_ = 1911; adapt_params->points[2].y_ = 667; + adapt_params->points[3].x_ = 1484; adapt_params->points[3].y_ = 410; + } + basic_params->adapt_param = adapt_params; } + auto algor_params = new algor_config_param_snapshot; + { algor_params->threshold = 0.5f; } algor_init_params->algor_param = algor_params; algor_init_params->basic_param = basic_params; } break; - case algorithm_type_t::NONMOTOR_RUNNING_REDLIGHTS: { - auto algor_params = new algor_config_param_manned_incident; - { - algor_params->m = 10; - algor_params->n = 8; - algor_params->hs_count_threshold = 0; - algor_params->obj_confidence_threshold = 0.5f; - algor_params->obj_min_height = 6; - algor_params->obj_min_width = 32; - } - + case algorithm_type_t::HUMAN_SNAPSHOT: { auto basic_params = new algor_basic_config_param_t; { - basic_params->video_folder = "res/video_recode"; - basic_params->result_folder = "res/motor_runred"; - basic_params->result_folder_little = "res/motor_runred_little"; - } - - algor_init_params->algor_param = algor_params; - algor_init_params->basic_param = basic_params; - } break; - - case algorithm_type_t::PERSON_IN_VEHICLELANE: { - auto algor_params = new algor_config_param_manned_incident; - { - algor_params->m = 10; - algor_params->n = 8; - algor_params->obj_confidence_threshold = 0.5f; - algor_params->obj_min_height = 6; - algor_params->obj_min_width = 32; - } + basic_params->result_folder = "res/human"; + basic_params->result_folder_little = "res/human_little"; - auto basic_params = new algor_basic_config_param_t; - { - basic_params->video_folder = "res/video_recode"; - basic_params->result_folder = "res/person_vehiclelane"; - basic_params->result_folder_little = "res/person_vehiclelane_little"; + //共性算法适配测试用 + auto adapt_params = new universal_algor_adapt_param; + { + adapt_params->points_count = 4; // 0表示不生效 + adapt_params->points[0].x_ = 505; adapt_params->points[0].y_ = 481; + adapt_params->points[1].x_ = 741; adapt_params->points[1].y_ = 881; + adapt_params->points[2].x_ = 1911; adapt_params->points[2].y_ = 667; + adapt_params->points[3].x_ = 1484; adapt_params->points[3].y_ = 410; + } + basic_params->adapt_param = adapt_params; } + auto algor_params = new algor_config_param_snapshot; + { algor_params->threshold = 0.5f; } algor_init_params->algor_param = algor_params; algor_init_params->basic_param = basic_params; } break; - case algorithm_type_t::NONMOTOR_IN_VEHICLELANE: { - auto algor_params = new algor_config_param_manned_incident; - { - algor_params->m = 10; - algor_params->n = 8; - algor_params->obj_confidence_threshold = 0.5f; - algor_params->obj_min_height = 6; - algor_params->obj_min_width = 32; + case algorithm_type_t::PEDESTRIAN_FALL: { + auto algor_params = new algor_config_param_pedestrian_fall; + { + algor_params->threshold = 0.85f; + algor_params->pedestrian_min_width = 20; + algor_params->pedestrian_min_height = 20; + algor_params->pedestrian_confidence_threshold = 0.85; } auto basic_params = new algor_basic_config_param_t; { - basic_params->video_folder = "res/video_recode"; - basic_params->result_folder = "res/motor_vehiclelane"; - basic_params->result_folder_little = "res/motor_vehiclelane_little"; - } - - algor_init_params->algor_param = algor_params; - algor_init_params->basic_param = basic_params; - } break; - - case algorithm_type_t::NONMOTOR_CEOSSPARKLINE: { - auto algor_params = new algor_config_param_manned_incident; - { - algor_params->m = 10; - algor_params->n = 8; - algor_params->obj_confidence_threshold = 0.5f; - algor_params->obj_min_height = 6; - algor_params->obj_min_width = 32; - } + basic_params->result_folder = "res/fall"; + basic_params->result_folder_little = "res/fall_little"; - auto basic_params = new algor_basic_config_param_t; - { - basic_params->video_folder = "res/video_recode"; - basic_params->result_folder = "res/motor_crossparkline"; - basic_params->result_folder_little = "res/motor_crossparkline_little"; + auto adapt_params = new universal_algor_adapt_param; + { + adapt_params->points_count = 4; // 0表示不生效 + adapt_params->points[0].x_ = 0; adapt_params->points[0].y_ = 0; + adapt_params->points[1].x_ = 1920; adapt_params->points[1].y_ = 0; + adapt_params->points[2].x_ = 1920; adapt_params->points[2].y_ = 1080; + adapt_params->points[3].x_ = 0; adapt_params->points[3].y_ = 1080; + } + basic_params->adapt_param = adapt_params; } algor_init_params->algor_param = algor_params; algor_init_params->basic_param = basic_params; } break; - case algorithm_type_t::PERSON_CROSS: { - auto algor_params = new algor_config_param_manned_incident; + case algorithm_type_t::PEDESTRIAN_FIGHT: { + auto algor_params = new algor_config_param_pedestrian_fight; { - algor_params->m = 10; - algor_params->n = 8; - algor_params->obj_confidence_threshold = 0.5f; - algor_params->obj_min_height = 6; - algor_params->obj_min_width = 32; + algor_params->threshold = 0.85f; + algor_params->pedestrian_min_width = 20; + algor_params->pedestrian_min_height = 20; + algor_params->pedestrian_confidence_threshold = 0.85; } auto basic_params = new algor_basic_config_param_t; { - basic_params->video_folder = "res/video_recode"; - basic_params->result_folder = "res/person_cross"; - basic_params->result_folder_little = "res/person_cross_little"; - } - - algor_init_params->algor_param = algor_params; - algor_init_params->basic_param = basic_params; - } break; - - case algorithm_type_t::NONMOTOR_WRONGDIRECTION: { - auto algor_params = new algor_config_param_manned_incident; - { - algor_params->m = 10; - algor_params->n = 8; - algor_params->obj_confidence_threshold = 0.5f; - algor_params->obj_min_height = 6; - algor_params->obj_min_width = 32; - } + basic_params->result_folder = "res/fight"; + basic_params->result_folder_little = "res/fight_little"; - auto basic_params = new algor_basic_config_param_t; - { - basic_params->video_folder = "res/video_recode"; - basic_params->result_folder = "res/motor_wrongdirection"; - basic_params->result_folder_little = "res/motor_wrongdirection_little"; + auto adapt_params = new universal_algor_adapt_param; + { + adapt_params->points_count = 4; // 0表示不生效 + adapt_params->points[0].x_ = 0; adapt_params->points[0].y_ = 0; + adapt_params->points[1].x_ = 1920; adapt_params->points[1].y_ = 0; + adapt_params->points[2].x_ = 1920; adapt_params->points[2].y_ = 1080; + adapt_params->points[3].x_ = 0; adapt_params->points[3].y_ = 1080; + } + basic_params->adapt_param = adapt_params; } algor_init_params->algor_param = algor_params; algor_init_params->basic_param = basic_params; } break; - case algorithm_type_t::VEHICLE_WRONGDIRECTION: { - auto algor_params = new algor_config_param_manned_incident; - { - algor_params->m = 5; - algor_params->n = 5; - algor_params->obj_confidence_threshold = 0.5f; - algor_params->obj_min_height = 60; - algor_params->obj_min_width = 60; - } - - auto basic_params = new algor_basic_config_param_t; - { - basic_params->video_folder = "res/video_recode"; - basic_params->result_folder = "res/vehicle_wrongdirection"; - basic_params->result_folder_little = "res/vehicle_wrongdirection_little"; - } - - algor_init_params->algor_param = algor_params; - algor_init_params->basic_param = basic_params; - } break; + case algorithm_type_t::HUMAN_GATHER: { - case algorithm_type_t::VEHICLE_NOTGIVEWAY: { - auto algor_params = new algor_config_param_manned_incident; + auto algor_params = new algor_config_param_human_gather; { - algor_params->m = 10; - algor_params->n = 8; - algor_params->obj_confidence_threshold = 0.5f; - algor_params->obj_min_height = 40; - algor_params->obj_min_width = 40; + algor_params->frame_stride = 3; + algor_params->human_count_threshold = 3; } auto basic_params = new algor_basic_config_param_t; { - basic_params->video_folder = "res/video_recode"; - basic_params->result_folder = "res/vehicle_notgiveway"; - basic_params->result_folder_little = "res/vehicle_notgiveway_little"; - } - - algor_init_params->algor_param = algor_params; - algor_init_params->basic_param = basic_params; - } break; - - case algorithm_type_t::VEHICLE_SOLIDLINETURNAROUND: { - auto algor_params = new algor_config_param_manned_incident; - { - algor_params->m = 10; - algor_params->n = 8; - algor_params->obj_confidence_threshold = 0.5f; - algor_params->obj_min_height = 40; - algor_params->obj_min_width = 40; - } + basic_params->result_folder = "res/gather"; + basic_params->result_folder_little = "res/gather_little"; - auto basic_params = new algor_basic_config_param_t; - { - basic_params->video_folder = "res/video_recode"; - basic_params->result_folder = "res/vehicle_solid_turnaround"; - basic_params->result_folder_little = "res/vehicle_solid_turnaround_little"; + //共性算法适配测试用 + auto adapt_params = new universal_algor_adapt_param; + { + adapt_params->points_count = 4; // 0表示不生效 + adapt_params->points[0].x_ = 505; adapt_params->points[0].y_ = 481; + adapt_params->points[1].x_ = 741; adapt_params->points[1].y_ = 881; + adapt_params->points[2].x_ = 1911; adapt_params->points[2].y_ = 667; + adapt_params->points[3].x_ = 1484; adapt_params->points[3].y_ = 410; + } + basic_params->adapt_param = adapt_params; } algor_init_params->algor_param = algor_params; algor_init_params->basic_param = basic_params; } break; - - case algorithm_type_t::VEHICLE_NOTDECELERATION: { - auto algor_params = new algor_config_param_manned_incident; - { - algor_params->m = 10; - algor_params->n = 8; - algor_params->obj_confidence_threshold = 0.5f; - algor_params->obj_min_height = 40; - algor_params->obj_min_width = 40; - } - - auto basic_params = new algor_basic_config_param_t; - { - basic_params->video_folder = "res/video_recode"; - basic_params->result_folder = "res/vehicle_not_deceleration"; - basic_params->result_folder_little = "res/vehicle_not_deceleration_little"; - } - algor_init_params->algor_param = algor_params; - algor_init_params->basic_param = basic_params; - } break; + case algorithm_type_t::HUMAN_REGION_GATHER: { - - case algorithm_type_t::FACE_SNAPSHOT: { - auto basic_params = new algor_basic_config_param_t; + auto algor_params = new algor_config_param_human_gather; { - basic_params->algor_valid_rect.top_ = 0; - basic_params->algor_valid_rect.left_ = 0; - basic_params->algor_valid_rect.width_ = 1920; - basic_params->algor_valid_rect.height_ = 1080; - - basic_params->result_folder = "res/face"; - basic_params->result_folder_little = "res/face_little"; + algor_params->frame_stride = 3; + algor_params->human_count_threshold = 3; } - auto algor_params = new algor_config_param_snapshot; - { algor_params->threshold = 0.5f; } - - algor_init_params->algor_param = algor_params; - algor_init_params->basic_param = basic_params; - } break; - case algorithm_type_t::HUMAN_SNAPSHOT: { auto basic_params = new algor_basic_config_param_t; { - basic_params->algor_valid_rect.top_ = 0; - basic_params->algor_valid_rect.left_ = 0; - basic_params->algor_valid_rect.width_ = 1920; - basic_params->algor_valid_rect.height_ = 1080; - - basic_params->result_folder = "res/human"; - basic_params->result_folder_little = "res/human_little"; + basic_params->result_folder = "res/region_gather"; + basic_params->result_folder_little = "res/region_gather_little"; + + //共性算法适配测试用 + auto adapt_params = new universal_algor_adapt_param; + { + adapt_params->points_count = 4; // 0表示不生效 + adapt_params->points[0].x_ = 505; adapt_params->points[0].y_ = 481; + adapt_params->points[1].x_ = 741; adapt_params->points[1].y_ = 881; + adapt_params->points[2].x_ = 1911; adapt_params->points[2].y_ = 667; + adapt_params->points[3].x_ = 1484; adapt_params->points[3].y_ = 410; + } + basic_params->adapt_param = adapt_params; } - auto algor_params = new algor_config_param_snapshot; - { algor_params->threshold = 0.5f; } algor_init_params->algor_param = algor_params; algor_init_params->basic_param = basic_params; } break; - case algorithm_type_t::PEDESTRIAN_FALL: { - auto algor_params = new algor_config_param_pedestrian_fall; - { algor_params->threshold = 0.7f; } + case algorithm_type_t::HUMAN_DENSITY: { - auto basic_params = new algor_basic_config_param_t; - { - basic_params->algor_valid_rect.top_ = 0; - basic_params->algor_valid_rect.left_ = 0; - basic_params->algor_valid_rect.width_ = 1920; - basic_params->algor_valid_rect.height_ = 1080; - - basic_params->result_folder = "res/fall"; - basic_params->result_folder_little = "res/fall_little"; - } - - algor_init_params->algor_param = algor_params; - algor_init_params->basic_param = basic_params; - } break; - - case algorithm_type_t::PEDESTRIAN_FIGHT: { - auto algor_params = new algor_config_param_pedestrian_fight; + auto algor_params = new algor_config_param_human_gather; { - algor_params->threshold = 0.7f; - algor_params->iou_threshold = 0.1f; + algor_params->frame_stride = 3; + algor_params->human_count_threshold = 3; } auto basic_params = new algor_basic_config_param_t; { - - basic_params->algor_valid_rect.top_ = 0; - basic_params->algor_valid_rect.left_ = 0; - basic_params->algor_valid_rect.width_ = 1920; - basic_params->algor_valid_rect.height_ = 1080; - basic_params->result_folder = "res/fight"; - basic_params->result_folder_little = "res/fight_little"; + basic_params->result_folder = "res/human_density"; + basic_params->result_folder_little = "res/human_density_little"; + + //共性算法适配测试用 + auto adapt_params = new universal_algor_adapt_param; + { + adapt_params->points_count = 4; // 0表示不生效 + adapt_params->points[0].x_ = 505; adapt_params->points[0].y_ = 481; + adapt_params->points[1].x_ = 741; adapt_params->points[1].y_ = 881; + adapt_params->points[2].x_ = 1911; adapt_params->points[2].y_ = 667; + adapt_params->points[3].x_ = 1484; adapt_params->points[3].y_ = 410; + } + basic_params->adapt_param = adapt_params; } algor_init_params->algor_param = algor_params; algor_init_params->basic_param = basic_params; } break; - case algorithm_type_t::HUMAN_GATHER: { + case algorithm_type_t::VEHICLE_GATHER: { auto algor_params = new algor_config_param_human_gather; { - algor_params->frame_stride = 1; - // algor_params->human_count_threshold = 3; + algor_params->frame_stride = 3; algor_params->human_count_threshold = 1; } auto basic_params = new algor_basic_config_param_t; { - basic_params->algor_valid_rect.top_ = 0; - basic_params->algor_valid_rect.left_ = 0; - basic_params->algor_valid_rect.width_ = 1920; - basic_params->algor_valid_rect.height_ = 1080; - basic_params->result_folder = "res/gather"; - basic_params->result_folder_little = "res/gather_little"; + basic_params->result_folder = "res/vehicle_gather"; + basic_params->result_folder_little = "res/vehicle_gather_little"; + + auto adapt_params = new universal_algor_adapt_param; + { + adapt_params->points_count = 4; // 0表示不生效 + adapt_params->points[0].x_ = 505; adapt_params->points[0].y_ = 481; + adapt_params->points[1].x_ = 741; adapt_params->points[1].y_ = 881; + adapt_params->points[2].x_ = 1911; adapt_params->points[2].y_ = 667; + adapt_params->points[3].x_ = 1484; adapt_params->points[3].y_ = 410; + } + basic_params->adapt_param = adapt_params; } algor_init_params->algor_param = algor_params; @@ -554,12 +300,11 @@ void set_task_params(task_param &tparam, const unsigned &idx, const algorithm_ty auto basic_params = new algor_basic_config_param_t; { - basic_params->algor_valid_rect.top_ = 0; - basic_params->algor_valid_rect.left_ = 0; - basic_params->algor_valid_rect.width_ = 1920; - basic_params->algor_valid_rect.height_ = 1080; basic_params->result_folder = "res/no_reflective_clothing"; basic_params->result_folder_little = "res/no_reflective_clothing_little"; + + auto adapt_params = new universal_algor_adapt_param; + basic_params->adapt_param = adapt_params; } algor_init_params->algor_param = algor_params; @@ -579,12 +324,11 @@ void set_task_params(task_param &tparam, const unsigned &idx, const algorithm_ty auto basic_params = new algor_basic_config_param_t; { - basic_params->algor_valid_rect.top_ = 0; - basic_params->algor_valid_rect.left_ = 0; - basic_params->algor_valid_rect.width_ = 1920; - basic_params->algor_valid_rect.height_ = 1080; basic_params->result_folder = "res/no_safety_helmet"; basic_params->result_folder_little = "res/no_safety_helmet_little"; + + auto adapt_params = new universal_algor_adapt_param; + basic_params->adapt_param = adapt_params; } algor_init_params->algor_param = algor_params; @@ -604,12 +348,11 @@ void set_task_params(task_param &tparam, const unsigned &idx, const algorithm_ty auto basic_params = new algor_basic_config_param_t; { - basic_params->algor_valid_rect.top_ = 0; - basic_params->algor_valid_rect.left_ = 0; - basic_params->algor_valid_rect.width_ = 1920; - basic_params->algor_valid_rect.height_ = 1080; basic_params->result_folder = "res/call_phone"; basic_params->result_folder_little = "res/call_phone_little"; + + auto adapt_params = new universal_algor_adapt_param; + basic_params->adapt_param = adapt_params; } algor_init_params->algor_param = algor_params; @@ -629,12 +372,11 @@ void set_task_params(task_param &tparam, const unsigned &idx, const algorithm_ty auto basic_params = new algor_basic_config_param_t; { - basic_params->algor_valid_rect.top_ = 0; - basic_params->algor_valid_rect.left_ = 0; - basic_params->algor_valid_rect.width_ = 1920; - basic_params->algor_valid_rect.height_ = 1080; basic_params->result_folder = "res/smoking"; basic_params->result_folder_little = "res/smoking_little"; + + auto adapt_params = new universal_algor_adapt_param; + basic_params->adapt_param = adapt_params; } algor_init_params->algor_param = algor_params; @@ -645,18 +387,25 @@ void set_task_params(task_param &tparam, const unsigned &idx, const algorithm_ty auto basic_params = new algor_basic_config_param_t; { - basic_params->algor_valid_rect.top_ = 0; - basic_params->algor_valid_rect.left_ = 0; - basic_params->algor_valid_rect.width_ = 1920; - basic_params->algor_valid_rect.height_ = 1080; basic_params->result_folder = "res/vehicle"; basic_params->result_folder_little = "res/vehicle_little"; + + //共性算法适配测试用 + auto adapt_params = new universal_algor_adapt_param; + { + adapt_params->points_count = 4; // 0表示不生效 + adapt_params->points[0].x_ = 505; adapt_params->points[0].y_ = 481; + adapt_params->points[1].x_ = 741; adapt_params->points[1].y_ = 881; + adapt_params->points[2].x_ = 1911; adapt_params->points[2].y_ = 667; + adapt_params->points[3].x_ = 1484; adapt_params->points[3].y_ = 410; + } + basic_params->adapt_param = adapt_params; } - auto algor_params = new algor_config_param_snapshot; - algor_params->threshold = 0.5f; - algor_params->snap_frame_interval = 5; - + { + algor_params->threshold = 0.5f; + algor_params->snap_frame_interval = 1; + } algor_init_params->algor_param = algor_params; algor_init_params->basic_param = basic_params; } break; @@ -665,12 +414,18 @@ void set_task_params(task_param &tparam, const unsigned &idx, const algorithm_ty auto basic_params = new algor_basic_config_param_t; { - basic_params->algor_valid_rect.top_ = 0; - basic_params->algor_valid_rect.left_ = 0; - basic_params->algor_valid_rect.width_ = 1920; - basic_params->algor_valid_rect.height_ = 1080; basic_params->result_folder = "res/nonmotor"; basic_params->result_folder_little = "res/nonmotor_little"; + + auto adapt_params = new universal_algor_adapt_param; + { + adapt_params->points_count = 4; // 0表示不生效 + adapt_params->points[0].x_ = 505; adapt_params->points[0].y_ = 481; + adapt_params->points[1].x_ = 741; adapt_params->points[1].y_ = 881; + adapt_params->points[2].x_ = 1911; adapt_params->points[2].y_ = 667; + adapt_params->points[3].x_ = 1484; adapt_params->points[3].y_ = 410; + } + basic_params->adapt_param = adapt_params; } auto algor_params = new algor_config_param_snapshot; @@ -679,6 +434,7 @@ void set_task_params(task_param &tparam, const unsigned &idx, const algorithm_ty algor_init_params->algor_param = algor_params; algor_init_params->basic_param = basic_params; } break; + case algorithm_type_t::TAKEAWAY_MEMBER_CLASSIFICATION: { auto algor_params = new algor_config_param_takeaway_member_classification; @@ -690,12 +446,11 @@ void set_task_params(task_param &tparam, const unsigned &idx, const algorithm_ty auto basic_params = new algor_basic_config_param_t; { - basic_params->algor_valid_rect.top_ = 0; - basic_params->algor_valid_rect.left_ = 0; - basic_params->algor_valid_rect.width_ = 1920; - basic_params->algor_valid_rect.height_ = 1080; basic_params->result_folder = "res/takeaway"; basic_params->result_folder_little = "res/takeaway_little"; + + auto adapt_params = new universal_algor_adapt_param; + basic_params->adapt_param = adapt_params; } algor_init_params->algor_param = algor_params; @@ -720,12 +475,11 @@ void set_task_params(task_param &tparam, const unsigned &idx, const algorithm_ty auto basic_params = new algor_basic_config_param_t; { - basic_params->algor_valid_rect.top_ = 0; - basic_params->algor_valid_rect.left_ = 0; - basic_params->algor_valid_rect.width_ = 1920; - basic_params->algor_valid_rect.height_ = 1080; basic_params->result_folder = "res/pedestrian_retrograde"; basic_params->result_folder_little = "res/pedestrian_retrograde_little"; + + auto adapt_params = new universal_algor_adapt_param; + basic_params->adapt_param = adapt_params; } algor_init_params->algor_param = algor_params; @@ -751,13 +505,10 @@ void set_task_params(task_param &tparam, const unsigned &idx, const algorithm_ty auto basic_params = new algor_basic_config_param_t; { - basic_params->algor_valid_rect.top_ = 0; - - basic_params->algor_valid_rect.left_ = 0; - basic_params->algor_valid_rect.width_ = 1920; - basic_params->algor_valid_rect.height_ = 1080; basic_params->result_folder = "res/vehicle_retrograde"; basic_params->result_folder_little = "res/vehicle_retrograde_little"; + auto adapt_params = new universal_algor_adapt_param; + basic_params->adapt_param = adapt_params; } algor_init_params->algor_param = algor_params; @@ -770,31 +521,123 @@ void set_task_params(task_param &tparam, const unsigned &idx, const algorithm_ty auto algor_params = new algor_config_param_pedestrian_trespass; { algor_params->conf_threshold = 0.5f; - algor_params->minmum_height = 64; - algor_params->minmum_width = 32; + algor_params->minmum_height = 20; + algor_params->minmum_width = 20; algor_params->points_count = 4; - algor_params->points[0].x_ = 200; - algor_params->points[0].y_ = 200; + algor_params->points[0].x_ = 505; + algor_params->points[0].y_ = 481; - algor_params->points[1].x_ = 600; - algor_params->points[1].y_ = 200; + algor_params->points[1].x_ = 741; + algor_params->points[1].y_ = 881; - algor_params->points[2].x_ = 600; - algor_params->points[2].y_ = 500; + algor_params->points[2].x_ = 1911; + algor_params->points[2].y_ = 667; - algor_params->points[3].x_ = 200; - algor_params->points[3].y_ = 500; + algor_params->points[3].x_ = 1484; + algor_params->points[3].y_ = 410; } auto basic_params = new algor_basic_config_param_t; { - basic_params->algor_valid_rect.top_ = 0; - basic_params->algor_valid_rect.left_ = 0; - basic_params->algor_valid_rect.width_ = 1920; - basic_params->algor_valid_rect.height_ = 1080; basic_params->result_folder = "res/pedestrian_trespass"; basic_params->result_folder_little = "res/pedestrian_trespass_little"; + auto adapt_params = new universal_algor_adapt_param; + { + adapt_params->points_count = 4; // 0表示不生效 + adapt_params->points[0].x_ = 0; adapt_params->points[0].y_ = 0; + adapt_params->points[1].x_ = 1920; adapt_params->points[1].y_ = 0; + adapt_params->points[2].x_ = 1920; adapt_params->points[2].y_ = 1080; + adapt_params->points[3].x_ = 0; adapt_params->points[3].y_ = 1080; + } + basic_params->adapt_param = adapt_params; + } + + algor_init_params->algor_param = algor_params; + algor_init_params->basic_param = basic_params; + + } break; + + case algorithm_type_t::HUMAN_LEAVE_REGION: { + // 578 1300 600 + auto algor_params = new algor_config_param_trespass_basic; + { + algor_params->conf_threshold = 0.5f; + algor_params->minmum_height = 20; + algor_params->minmum_width = 20; + } + + auto basic_params = new algor_basic_config_param_t; + { + basic_params->result_folder = "res/human_region_leave"; + basic_params->result_folder_little = "res/human_region_leave_little"; + auto adapt_params = new universal_algor_adapt_param; + { + adapt_params->points_count = 4; // 0表示不生效 + adapt_params->points[0].x_ = 505; adapt_params->points[0].y_ = 481; + adapt_params->points[1].x_ = 741; adapt_params->points[1].y_ = 881; + adapt_params->points[2].x_ = 1911; adapt_params->points[2].y_ = 667; + adapt_params->points[3].x_ = 1484; adapt_params->points[3].y_ = 410; + } + basic_params->adapt_param = adapt_params; + } + + algor_init_params->algor_param = algor_params; + algor_init_params->basic_param = basic_params; + + } break; + + case algorithm_type_t::HUMAN_REGION_DISMISS: { + // 578 1300 600 + auto algor_params = new algor_config_param_trespass_basic; + { + algor_params->conf_threshold = 0.5f; + algor_params->minmum_height = 20; + algor_params->minmum_width = 20; + } + + auto basic_params = new algor_basic_config_param_t; + { + basic_params->result_folder = "res/human_region_dismiss"; + basic_params->result_folder_little = "res/human_region_dismiss_little"; + auto adapt_params = new universal_algor_adapt_param; + { + adapt_params->points_count = 4; // 0表示不生效 + adapt_params->points[0].x_ = 505; adapt_params->points[0].y_ = 481; + adapt_params->points[1].x_ = 741; adapt_params->points[1].y_ = 881; + adapt_params->points[2].x_ = 1911; adapt_params->points[2].y_ = 667; + adapt_params->points[3].x_ = 1484; adapt_params->points[3].y_ = 410; + } + basic_params->adapt_param = adapt_params; + } + + algor_init_params->algor_param = algor_params; + algor_init_params->basic_param = basic_params; + + } break; + + case algorithm_type_t::HUMAN_REGION_FAST_MOVING: { + // 578 1300 600 + auto algor_params = new algor_config_param_trespass_basic; + { + algor_params->conf_threshold = 0.5f; + algor_params->minmum_height = 20; + algor_params->minmum_width = 20; + } + + auto basic_params = new algor_basic_config_param_t; + { + basic_params->result_folder = "res/human_region_fastmoving"; + basic_params->result_folder_little = "res/human_region_fastmoving_little"; + auto adapt_params = new universal_algor_adapt_param; + { + adapt_params->points_count = 4; // 0表示不生效 + adapt_params->points[0].x_ = 505; adapt_params->points[0].y_ = 481; + adapt_params->points[1].x_ = 741; adapt_params->points[1].y_ = 881; + adapt_params->points[2].x_ = 1911; adapt_params->points[2].y_ = 667; + adapt_params->points[3].x_ = 1484; adapt_params->points[3].y_ = 410; + } + basic_params->adapt_param = adapt_params; } algor_init_params->algor_param = algor_params; @@ -807,31 +650,36 @@ void set_task_params(task_param &tparam, const unsigned &idx, const algorithm_ty auto algor_params = new algor_config_param_vehicle_trespass; { algor_params->conf_threshold = 0.5f; - algor_params->minmum_height = 64; - algor_params->minmum_width = 64; - algor_params->points_count = 4; + algor_params->minmum_height = 20; + algor_params->minmum_width = 20; - algor_params->points[0].x_ = 500; - algor_params->points[0].y_ = 500; + algor_params->points_count = 4; + algor_params->points[0].x_ = 505; + algor_params->points[0].y_ = 481; - algor_params->points[1].x_ = 1500; - algor_params->points[1].y_ = 500; + algor_params->points[1].x_ = 741; + algor_params->points[1].y_ = 881; - algor_params->points[2].x_ = 1500; - algor_params->points[2].y_ = 900; + algor_params->points[2].x_ = 1911; + algor_params->points[2].y_ = 667; - algor_params->points[3].x_ = 500; - algor_params->points[3].y_ = 900; + algor_params->points[3].x_ = 1484; + algor_params->points[3].y_ = 410; } auto basic_params = new algor_basic_config_param_t; { - basic_params->algor_valid_rect.top_ = 0; - basic_params->algor_valid_rect.left_ = 0; - basic_params->algor_valid_rect.width_ = 1920; - basic_params->algor_valid_rect.height_ = 1080; basic_params->result_folder = "res/vehicle_trespass"; basic_params->result_folder_little = "res/vehicle_trespass_little"; + auto adapt_params = new universal_algor_adapt_param; + { + adapt_params->points_count = 4; // 0表示不生效 + adapt_params->points[0].x_ = 0; adapt_params->points[0].y_ = 0; + adapt_params->points[1].x_ = 1920; adapt_params->points[1].y_ = 0; + adapt_params->points[2].x_ = 1920; adapt_params->points[2].y_ = 1080; + adapt_params->points[3].x_ = 0; adapt_params->points[3].y_ = 1080; + } + basic_params->adapt_param = adapt_params; } algor_init_params->algor_param = algor_params; @@ -858,12 +706,6 @@ void set_task_params(task_param &tparam, const unsigned &idx, const algorithm_ty auto basic_params = new algor_basic_config_param_t; { - basic_params->algor_valid_rect.top_ = 0; - basic_params->algor_valid_rect.left_ = 0; - // basic_params->algor_valid_rect.width_ = 1920; - // basic_params->algor_valid_rect.height_ = 1080; - basic_params->algor_valid_rect.width_ = 2560; - basic_params->algor_valid_rect.height_ = 1440; basic_params->result_folder = "res/road_work"; basic_params->result_folder_little = "res/road_work_little"; } @@ -876,7 +718,7 @@ void set_task_params(task_param &tparam, const unsigned &idx, const algorithm_ty auto algor_params = new algor_config_param_road_work; { - algor_params->frame_stride = 1; + algor_params->frame_stride = 5; } auto basic_params = new algor_basic_config_param_t; @@ -888,6 +730,155 @@ void set_task_params(task_param &tparam, const unsigned &idx, const algorithm_ty algor_init_params->basic_param = basic_params; } break; + case algorithm_type_t::HUMAN_CROSSING_LINE: { + auto algor_params = new algor_config_param_illegal_crossing_line; + { + algor_params->p1.x_ = 827; + algor_params->p1.y_ = 321; + algor_params->p2.x_ = 1911; + algor_params->p2.y_ = 1072; + algor_params->conf_threshold = 0.6; + algor_params->minmum_width = 20; + algor_params->minmum_height = 20; + } + + auto basic_params = new algor_basic_config_param_t; + { + basic_params->result_folder = "res/human_cross_line"; + basic_params->result_folder_little = "res/human_cross_line_little"; + //共性算法适配测试用 + auto adapt_params = new universal_algor_adapt_param; + { + adapt_params->points_count = 4; // 0表示不生效 + adapt_params->points[0].x_ = 0; adapt_params->points[0].y_ = 0; + adapt_params->points[1].x_ = 1920; adapt_params->points[1].y_ = 0; + adapt_params->points[2].x_ = 1920; adapt_params->points[2].y_ = 1080; + adapt_params->points[3].x_ = 0; adapt_params->points[3].y_ = 1080; + } + basic_params->adapt_param = adapt_params; + } + + algor_init_params->algor_param = algor_params; + algor_init_params->basic_param = basic_params; + } break; + + case algorithm_type_t::HUMAN_CLIMB: { + auto algor_params = new algor_config_param_illegal_crossing_line; + { + algor_params->p1.x_ = 827; + algor_params->p1.y_ = 321; + algor_params->p2.x_ = 1911; + algor_params->p2.y_ = 1072; + algor_params->conf_threshold = 0.5; + algor_params->minmum_width = 20; + algor_params->minmum_height = 20; + } + + auto basic_params = new algor_basic_config_param_t; + { + basic_params->result_folder = "res/human_climb"; + basic_params->result_folder_little = "res/human_climb_little"; + + auto adapt_params = new universal_algor_adapt_param; + { + adapt_params->points_count = 4; // 0表示不生效 + adapt_params->points[0].x_ = 0; adapt_params->points[0].y_ = 0; + adapt_params->points[1].x_ = 1920; adapt_params->points[1].y_ = 0; + adapt_params->points[2].x_ = 1920; adapt_params->points[2].y_ = 1080; + adapt_params->points[3].x_ = 0; adapt_params->points[3].y_ = 1080; + } + basic_params->adapt_param = adapt_params; + } + + algor_init_params->algor_param = algor_params; + algor_init_params->basic_param = basic_params; + } break; + + case algorithm_type_t::VEHICLE_ILLEGAL_CROSSING_LINE: { + auto algor_params = new algor_config_param_illegal_crossing_line; + { + algor_params->p1.x_ = 827; + algor_params->p1.y_ = 321; + algor_params->p2.x_ = 1911; + algor_params->p2.y_ = 1072; + algor_params->minmum_width = 10; + algor_params->minmum_height = 10; + } + + auto basic_params = new algor_basic_config_param_t; + { + basic_params->result_folder = "res/vehicle_cross_line"; + basic_params->result_folder_little = "res/vehicle_cross_line_little"; + auto adapt_params = new universal_algor_adapt_param; + { + adapt_params->points_count = 4; // 0表示不生效 + adapt_params->points[0].x_ = 0; adapt_params->points[0].y_ = 0; + adapt_params->points[1].x_ = 1920; adapt_params->points[1].y_ = 0; + adapt_params->points[2].x_ = 1920; adapt_params->points[2].y_ = 1080; + adapt_params->points[3].x_ = 0; adapt_params->points[3].y_ = 1080; + } + basic_params->adapt_param = adapt_params; + } + + algor_init_params->algor_param = algor_params; + algor_init_params->basic_param = basic_params; + } break; + + case algorithm_type_t::HUMAN_LINGER: { + auto algor_params = new algor_config_param_behavior; + { + algor_params->duration = 50; //帧 + algor_params->minmum_width = 20; + algor_params->minmum_height = 20; + algor_params->conf_threshold = 0.5; + } + + auto basic_params = new algor_basic_config_param_t; + { + basic_params->result_folder = "res/human_linger"; + basic_params->result_folder_little = "res/human_linger_little"; + + auto adapt_params = new universal_algor_adapt_param; + { + adapt_params->points_count = 4; // 0表示不生效 + adapt_params->points[0].x_ = 505; adapt_params->points[0].y_ = 481; + adapt_params->points[1].x_ = 741; adapt_params->points[1].y_ = 881; + adapt_params->points[2].x_ = 1911; adapt_params->points[2].y_ = 667; + adapt_params->points[3].x_ = 1484; adapt_params->points[3].y_ = 410; + } + basic_params->adapt_param = adapt_params; + } + + algor_init_params->algor_param = algor_params; + algor_init_params->basic_param = basic_params; + } break; + case algorithm_type_t::VEHICLE_ILLEGAL_PARKING: { + auto algor_params = new algor_config_param_behavior; + { + algor_params->duration = 25; //帧 + algor_params->minmum_width = 10; + algor_params->minmum_height = 10; + } + + auto basic_params = new algor_basic_config_param_t; + { + basic_params->result_folder = "res/vehicle_parking"; + basic_params->result_folder_little = "res/vehicle_parking_little"; + auto adapt_params = new universal_algor_adapt_param; + { + adapt_params->points_count = 4; // 0表示不生效 + adapt_params->points[0].x_ = 505; adapt_params->points[0].y_ = 481; + adapt_params->points[1].x_ = 741; adapt_params->points[1].y_ = 881; + adapt_params->points[2].x_ = 1911; adapt_params->points[2].y_ = 667; + adapt_params->points[3].x_ = 1484; adapt_params->points[3].y_ = 410; + } + basic_params->adapt_param = adapt_params; + } + + algor_init_params->algor_param = algor_params; + algor_init_params->basic_param = basic_params; + } break; + default: { if (algor_init_params != nullptr) { delete algor_init_params; @@ -899,9 +890,9 @@ void set_task_params(task_param &tparam, const unsigned &idx, const algorithm_ty tparam.algor_config_params[idx].algor_type = algor_type; tparam.algor_config_params[idx].algor_init_config_param = algor_init_params; - } + static long long get_cur_time(){ chrono::time_point tpMicro = chrono::time_point_cast(chrono::system_clock::now()); @@ -1017,6 +1008,15 @@ string createTask(void *handle, std::vector algor_vec, int gi, case 32: tparam.ipc_url = "/data/share/data/141_74.avi"; break; + case 33: + tparam.ipc_url = "/data/share/data/human_gather.mp4"; + break; + case 34: + tparam.ipc_url = "/data/share/data/12.mp4"; + break; + case 35: + tparam.ipc_url = "/data/share/data/铁路文化宫-门口1_20D40580_1607648331.avi"; + break; default: tparam.ipc_url = "/opt/share/data/Street.uvf"; break; @@ -1219,12 +1219,21 @@ void test_gpu(int gpuID){ algorithm_type_t::NONMOTOR_VEHICLE_REFIT, algorithm_type_t::PERSON_RUNNING_REDLIGHTS, algorithm_type_t::NONMOTOR_RUNNING_REDLIGHTS, algorithm_type_t::PERSON_IN_VEHICLELANE, algorithm_type_t::NONMOTOR_IN_VEHICLELANE, algorithm_type_t::NONMOTOR_CEOSSPARKLINE, algorithm_type_t::PERSON_CROSS, algorithm_type_t::NONMOTOR_WRONGDIRECTION, algorithm_type_t::VEHICLE_WRONGDIRECTION, algorithm_type_t::VEHICLE_NOTGIVEWAY, algorithm_type_t::VEHICLE_SOLIDLINETURNAROUND, algorithm_type_t::VEHICLE_NOTDECELERATION}; - // std::vector algor_vec3 = {algorithm_type_t::NONMOTOR_VEHICLE_NOHELMET, algorithm_type_t::NONMOTOR_VEHICLE_OVERMAN, algorithm_type_t::TRICYCLE_MANNED, algorithm_type_t::TRUCK_MANNED, algorithm_type_t::NONMOTOR_VEHICLE_USEPHONE, - // algorithm_type_t::NONMOTOR_VEHICLE_REFIT, algorithm_type_t::PERSON_RUNNING_REDLIGHTS, algorithm_type_t::NONMOTOR_RUNNING_REDLIGHTS}; + std::vector algor_vec3 = {algorithm_type_t::PERSON_CROSS, algorithm_type_t::NONMOTOR_WRONGDIRECTION, algorithm_type_t::VEHICLE_WRONGDIRECTION, algorithm_type_t::VEHICLE_NOTGIVEWAY, algorithm_type_t::VEHICLE_SOLIDLINETURNAROUND}; - + std::vector algor_vec_human = {algorithm_type_t::HUMAN_SNAPSHOT, algorithm_type_t::VIDEO_TIMING_SNAPSHOT, algorithm_type_t::FACE_SNAPSHOT, algorithm_type_t::HUMAN_GATHER, algorithm_type_t::HUMAN_REGION_GATHER + ,algorithm_type_t::HUMAN_DENSITY,algorithm_type_t::HUMAN_LINGER, algorithm_type_t::HUMAN_REGION_FAST_MOVING, algorithm_type_t::HUMAN_REGION_DISMISS, algorithm_type_t::HUMAN_CLIMB, algorithm_type_t::HUMAN_CROSSING_LINE + , algorithm_type_t::HUMAN_LEAVE_REGION}; + + std::vector algor_vec_car = {algorithm_type_t::VEHICLE_SNAPSHOT, algorithm_type_t::VEHICLE_TRESPASS, algorithm_type_t::VEHICLE_GATHER, algorithm_type_t::VEHICLE_ILLEGAL_PARKING + ,algorithm_type_t::VEHICLE_ILLEGAL_CROSSING_LINE}; + + std::vector algor_wenhuagong = {algorithm_type_t::NONMOTOR_VEHICLE_SNAPSHOT, algorithm_type_t::VEHICLE_TRESPASS,algorithm_type_t::VEHICLE_SNAPSHOT,algorithm_type_t::VEHICLE_GATHER,algorithm_type_t::VEHICLE_ILLEGAL_PARKING,algorithm_type_t::VEHICLE_ILLEGAL_CROSSING_LINE + ,algorithm_type_t::HUMAN_GATHER, algorithm_type_t::FACE_SNAPSHOT, algorithm_type_t::HUMAN_LEAVE_REGION, algorithm_type_t::HUMAN_REGION_DISMISS, algorithm_type_t::HUMAN_REGION_FAST_MOVING, algorithm_type_t::HUMAN_SNAPSHOT, algorithm_type_t::HUMAN_REGION_GATHER, algorithm_type_t::HUMAN_DENSITY, algorithm_type_t::HUMAN_CROSSING_LINE, algorithm_type_t::HUMAN_CLIMB, algorithm_type_t::HUMAN_LINGER + }; + // int repeat_num = 1000; // createTask(handle, algor_vec2, 0, false); // createTask(handle, algor_vec2, 2, false); @@ -1254,7 +1263,10 @@ void test_gpu(int gpuID){ // createTask(handle, algor_vec2, 24, false); // createTask(handle, algor_vec2, 30, false); // createTask(handle, algor_vec2, 31, false); - createTask(handle, algor_vec2, 32, false); + + // createTask(handle, algor_vec_human, 33, false); + + createTask(handle, algor_wenhuagong, 35, false); // int task_index = 0; // while (true) diff --git a/src/helpers/img_util.cpp b/src/helpers/img_util.cpp new file mode 100644 index 0000000..c3be8f6 --- /dev/null +++ b/src/helpers/img_util.cpp @@ -0,0 +1,56 @@ +#include "img_util.h" +#include "opencv2/opencv.hpp" + +namespace common { + +bool isInPolygon(const sy_point* point_array, int point_count, const sy_point& center) { + + std::vector polygon; + for (size_t i = 0; i < point_count; i++) + { + polygon.push_back(cv::Point(point_array[i].x_, point_array[i].y_)); + } + + if (polygon.size() <= 0) + { + return false; + } + + // 定义一个点 + cv::Point pt(center.x_, center.y_); + + // 使用pointPolygonTest函数判断点是否在多边形内 + double sign = cv::pointPolygonTest(polygon, pt, false); + if (sign > 0) + { + return true; + } + + return false; +} + +void save_result(int height, int width, sy_point* point_array, int point_count, std::vector vec_pt) { + cv::Mat image = cv::Mat::zeros(height, width, CV_8UC3); + + // 定义一个多边形的顶点数组(例如一个五边形) + std::vector polyPoints; + for (size_t i = 0; i < point_count; i++) + { + polyPoints.push_back(cv::Point(point_array[i].x_, point_array[i].y_)); + } + + // 绘制多边形边界,颜色为绿色,线宽 2 + const cv::Point* pts = &polyPoints[0]; + int npts = (int)polyPoints.size(); + cv::polylines(image, &pts, &npts, 1, true, cv::Scalar(0, 255, 0), 2); + + for (size_t i = 0; i < vec_pt.size(); i++) + { + cv::circle(image, cv::Point(vec_pt[i].x_, vec_pt[i].y_), 2, cv::Scalar(0, 255, 255), -1); + } + + cv::imwrite("gahter.jpg", image); + +} + +} \ No newline at end of file diff --git a/src/helpers/img_util.h b/src/helpers/img_util.h new file mode 100644 index 0000000..a84aa1c --- /dev/null +++ b/src/helpers/img_util.h @@ -0,0 +1,15 @@ +#ifndef __HELPERS_IMG_TUIL_H__ +#define __HELPERS_IMG_TUIL_H__ + + +#include "../common/sy_common.h" +#include + +namespace common { + +bool isInPolygon(const sy_point* point_array, int point_count, const sy_point& center); + +void save_result(int height, int width, sy_point* point_array, int point_count, std::vector vec_pt); +} + +#endif \ No newline at end of file diff --git a/src/reprocessing_module/mq_manager.cpp b/src/reprocessing_module/mq_manager.cpp index 20bb169..1281735 100755 --- a/src/reprocessing_module/mq_manager.cpp +++ b/src/reprocessing_module/mq_manager.cpp @@ -47,10 +47,10 @@ namespace mq bool status; if (!(status = task_status_to_mq_handle_[key]->sync_publish(msg))) - LOG_ERROR("rbMQ publish {} failed", msg); + LOG_ERROR("rbMQ publish failed:{}", msg); else if (verbose) - LOG_DEBUG("rbMQ publish {} successful", msg); + LOG_DEBUG("rbMQ publish successful:{}", msg); return status; } diff --git a/src/reprocessing_module/save_snapshot_reprocessing.cpp b/src/reprocessing_module/save_snapshot_reprocessing.cpp index a8236d2..32b341f 100755 --- a/src/reprocessing_module/save_snapshot_reprocessing.cpp +++ b/src/reprocessing_module/save_snapshot_reprocessing.cpp @@ -110,11 +110,8 @@ void save_snapshot_reprocessing::save_img_process() { VPCUtil::vpc_img_release(cur_image.img_info); #ifdef POST_USE_RABBITMQ - // LOG_INFO("mq publish process in: {}", cur_image.json_str); if (bSaved && callback_ != nullptr && cur_image.json_str.length() > 0) { - // LOG_INFO("mq publish process begin"); callback_(cur_image.json_str.c_str()); - LOG_INFO("mq publish process end: {} ", cur_image.json_str); } #endif diff --git a/src/reprocessing_module/snapshot_reprocessing.cpp b/src/reprocessing_module/snapshot_reprocessing.cpp index 1fa4708..8add36b 100755 --- a/src/reprocessing_module/snapshot_reprocessing.cpp +++ b/src/reprocessing_module/snapshot_reprocessing.cpp @@ -3,6 +3,7 @@ #include "../common/logger.hpp" #include "../ai_platform/mvpt_process_assist.h" #include "../decoder/interface/DeviceMemory.hpp" +#include "../helpers/img_util.h" snapshot_reprocessing::snapshot_reprocessing(int devId) @@ -49,6 +50,16 @@ vector snapshot_reprocessing::get_vehicle_snapshot(vectorbasic_param || !cur_task_params->basic_param->adapt_param) + { + continue; + } + + // 多边形区域 + auto adapt_param = cur_task_params->basic_param->adapt_param; + if (adapt_param->points_count <= 0) { + continue; + } // 同一目标间隔多少帧保存 int snap_frame_interval = ((algor_config_param_snapshot*)cur_task_params->algor_param)->snap_frame_interval; @@ -61,9 +72,14 @@ vector snapshot_reprocessing::get_vehicle_snapshot(vector 0 && det_obj.num % snap_frame_interval >= skip_frame){ continue; } + + sy_point center; + center.x_ = (det_obj.left + det_obj.right) * 0.5; + center.y_ = det_obj.bottom; + int type_index = det_obj.index; if ((type_index == 4 || type_index == 5 || type_index == 6 || type_index ==7 || type_index ==8) - && snapshot_legal_inarea(cur_task_params->basic_param->algor_valid_rect, det_obj.left, det_obj.top, det_obj.right, det_obj.bottom)) + && common::isInPolygon(adapt_param->points, adapt_param->points_count, center)) { video_object_info obj_info; obj_info.top = det_obj.top; @@ -202,6 +218,30 @@ void snapshot_reprocessing::update_bestsnapshot(vector vec_devMem index = total_snapshot_info[new_obj].index.index; } + algorithm_type_t algor_type; + if (index ==0) algor_type = algorithm_type_t::HUMAN_SNAPSHOT; + if (index ==1 || index ==2 || index ==3) algor_type = algorithm_type_t::NONMOTOR_VEHICLE_SNAPSHOT; + if (index ==4 || index ==5 || index ==6 || index ==7 || index ==8) algor_type = algorithm_type_t::VEHICLE_SNAPSHOT; + if (!(algor_config_param.count(task_id) && algor_param.count(task_id) && algor_param[task_id].count(algor_type))) + continue; + task_param_manager::algo_param_type_t_* cur_task_params = algor_param[task_id][algor_type]; + if (!cur_task_params || !cur_task_params->basic_param || !cur_task_params->basic_param->adapt_param) { + continue; + } + + // 多边形区域 + auto adapt_param = cur_task_params->basic_param->adapt_param; + if (adapt_param->points_count <= 0) { + continue; + } + + sy_point center; + center.x_ = (obj_info.left + obj_info.right) * 0.5; + center.y_ = obj_info.bottom; + if (!common::isInPolygon(adapt_param->points, adapt_param->points_count, center)) { + continue; + } + int cur_real_width = (obj_info.right - obj_info.left); int cur_real_height = (obj_info.bottom - obj_info.top); int cur_real_index = obj_info.index; @@ -220,17 +260,6 @@ void snapshot_reprocessing::update_bestsnapshot(vector vec_devMem { /* manager insert new object. */ /* 判断目标合法 */ - algorithm_type_t algor_type; - if (index ==0) algor_type = algorithm_type_t::HUMAN_SNAPSHOT; - if (index ==1 || index ==2 || index ==3) algor_type = algorithm_type_t::NONMOTOR_VEHICLE_SNAPSHOT; - if (index ==4 || index ==5 || index ==6 || index ==7 || index ==8) algor_type = algorithm_type_t::VEHICLE_SNAPSHOT; - if (!(algor_config_param.count(task_id) && algor_param.count(task_id) && algor_param[task_id].count(algor_type))) - continue; - task_param_manager::algo_param_type_t_* cur_task_params = algor_param[task_id][algor_type]; - if (!snapshot_legal_inarea(cur_task_params->basic_param->algor_valid_rect,obj_info.left, obj_info.top, obj_info.right, obj_info.bottom)){ - continue; - } - if(!snapshot_legal_minarea(index, cur_real_width, cur_real_height)){ continue; } @@ -265,15 +294,6 @@ void snapshot_reprocessing::update_bestsnapshot(vector vec_devMem } else { total_snapshot_info[new_obj].last_area = (obj_info.right - obj_info.left) * (obj_info.bottom - obj_info.top); - algorithm_type_t algor_type; - if (index ==0) algor_type = algorithm_type_t::HUMAN_SNAPSHOT; - if (index ==1 || index ==2 || index ==3) algor_type = algorithm_type_t::NONMOTOR_VEHICLE_SNAPSHOT; - if (index ==4 || index ==5 || index ==6 || index ==7 || index ==8) algor_type = algorithm_type_t::VEHICLE_SNAPSHOT; - if (!(algor_config_param.count(task_id) && algor_param.count(task_id) && algor_param[task_id].count(algor_type))) - continue; - task_param_manager::algo_param_type_t_* cur_task_params = algor_param[task_id][algor_type]; - if (!snapshot_legal_inarea(cur_task_params->basic_param->algor_valid_rect,obj_info.left, obj_info.top, obj_info.right, obj_info.bottom)) - continue; //--------------------------------------------------------------- if (!best_snapshot_judge_algor(new_obj, total_snapshot_info[new_obj], obj_info.left, obj_info.top, cur_real_width, cur_real_height, frame_width, frame_height)) @@ -590,6 +610,31 @@ int snapshot_reprocessing::update_face_bestsnapshot(vector vec_de det_objinfo obj_info = ol_det_result[idx].obj[c]; OBJ_KEY new_obj = { task_id, obj_info.id }; + if (obj_info.confidence < 0.6) + continue; + //--------------------------------------------- + //230327 增加指定区域过滤------------------------------------------ + if (!(algor_config_param.count(task_id) && algor_param.count(task_id) && algor_param[task_id].count(algorithm_type_t::FACE_SNAPSHOT))) + continue; + + task_param_manager::algo_param_type_t_* cur_task_params = algor_param[task_id][algorithm_type_t::FACE_SNAPSHOT]; + if (!cur_task_params || !cur_task_params->basic_param || !cur_task_params->basic_param->adapt_param) { + continue; + } + + auto adapt_param = cur_task_params->basic_param->adapt_param; + if (adapt_param->points_count <= 0) { + continue; + } + + //增加指定区域过滤------------------------------------------ + sy_point center; + center.x_ = (obj_info.left + obj_info.right) * 0.5; + center.y_ = obj_info.bottom; + if (!common::isInPolygon(adapt_param->points, adapt_param->points_count, center)) { + continue; + } + int cur_real_width = (obj_info.right - obj_info.left); int cur_real_height = (obj_info.bottom - obj_info.top); int cur_real_index = obj_info.index; @@ -604,17 +649,6 @@ int snapshot_reprocessing::update_face_bestsnapshot(vector vec_de continue; } - // added by zsh 221024 人脸质量过滤------------- - if (obj_info.confidence < 0.6) - continue; - //--------------------------------------------- - //230327 增加指定区域过滤------------------------------------------ - if (!(algor_config_param.count(task_id) && algor_param.count(task_id) && algor_param[task_id].count(algorithm_type_t::FACE_SNAPSHOT))) - continue; - task_param_manager::algo_param_type_t_* cur_task_params = algor_param[task_id][algorithm_type_t::FACE_SNAPSHOT]; - if (!snapshot_legal_inarea(cur_task_params->basic_param->algor_valid_rect,obj_info.left, - obj_info.top, obj_info.right, obj_info.bottom)) - continue; //--------------------------------------------------------------- LOG_DEBUG(" {}: {}",task_id, obj_info.id); @@ -665,17 +699,6 @@ int snapshot_reprocessing::update_face_bestsnapshot(vector vec_de } else { - // added by zsh 221024 人脸质量过滤------------- - if (obj_info.confidence < 0.6) - continue; - //--------------------------------------------- - //230327 指定区域过滤------------------------------------------ - if (!(algor_config_param.count(task_id) && algor_param.count(task_id) && algor_param[task_id].count(algorithm_type_t::FACE_SNAPSHOT))) - continue; - task_param_manager::algo_param_type_t_* cur_task_params = algor_param[task_id][algorithm_type_t::FACE_SNAPSHOT]; - if (!snapshot_legal_inarea(cur_task_params->basic_param->algor_valid_rect,obj_info.left, obj_info.top, obj_info.right, obj_info.bottom)) - continue; - // 最佳快照判断 if (!best_face_snapshot_judge_algor_v2(new_obj, total_face_snapshot_info[new_obj], obj_info.left, obj_info.top, cur_real_width, cur_real_height, frame_width, frame_height, obj_info.roll, obj_info.yaw, obj_info.pitch )) diff --git a/src/util/JpegUtil.cpp b/src/util/JpegUtil.cpp index 28b113f..da3151d 100755 --- a/src/util/JpegUtil.cpp +++ b/src/util/JpegUtil.cpp @@ -86,7 +86,7 @@ bool JpegUtil::jpeg_encode(acldvppPicDesc *encodeInputDesc_, string out_file_nam // 8. 申请输出内存,申请Device内存encodeOutBufferDev_,存放编码后的输出数据 uint32_t outBufferSize= 0; int ret = acldvppJpegPredictEncSize(encodeInputDesc_, jpegeConfig_, &outBufferSize); - if (ret != ACL_SUCCESS) { + if (ret != ACL_SUCCESS || outBufferSize <= 0) { LOG_ERROR("acldvppJpegPredictEncSize failed!"); return false; } diff --git a/src/helpers/common_tool.cpp b/src/util/common_tool.cpp index a73b21d..a73b21d 100644 --- a/src/helpers/common_tool.cpp +++ b/src/util/common_tool.cpp diff --git a/src/helpers/common_tool.h b/src/util/common_tool.h index 16ae420..16ae420 100644 --- a/src/helpers/common_tool.h +++ b/src/util/common_tool.h