diff --git a/src/ai_engine_module/pedestrian_vehicle_retrograde.cpp b/src/ai_engine_module/pedestrian_vehicle_retrograde.cpp index b777ab2..3090e43 100644 --- a/src/ai_engine_module/pedestrian_vehicle_retrograde.cpp +++ b/src/ai_engine_module/pedestrian_vehicle_retrograde.cpp @@ -380,10 +380,11 @@ bool PedestrianVehicleRetrograde::update_mstreams(const std::vector & obj.bottom = clip(trace.bottom, 0, height); vpc_img_info img_info = pVpcUtil->crop(src_img, obj); - result_data.roi_img_desc = img_info.pic_desc; - - // 保存结果 - obj_to_alarm_boxes_[obj_key].emplace_back(std::move(result_data)); + if(img_info.pic_desc != nullptr){ + result_data.roi_img_desc = img_info.pic_desc; + // 保存结果 + obj_to_alarm_boxes_[obj_key].emplace_back(std::move(result_data)); + } } LOG_DEBUG("obj_to_alarm_boxes_ size: {}", obj_to_alarm_boxes_.size()); diff --git a/src/ai_engine_module/pedestrian_vehicle_trespass.cpp b/src/ai_engine_module/pedestrian_vehicle_trespass.cpp index ba78a92..2847a11 100644 --- a/src/ai_engine_module/pedestrian_vehicle_trespass.cpp +++ b/src/ai_engine_module/pedestrian_vehicle_trespass.cpp @@ -188,11 +188,6 @@ void PedestrianVehicleTrespass::pedestrianvehicletrespass_init_region(const stri cv::Mat &dst_mat = trespass_regions[obj_key]; cv::cvtColor(src, trespass_regions[obj_key], cv::COLOR_BGR2GRAY); cv::threshold(trespass_regions[obj_key], trespass_regions[obj_key], 100, 255, cv::THRESH_BINARY); - - if (false) { - cv::imwrite("ori.jpg", src); - cv::imwrite("region.jpg", trespass_regions[obj_key]); - } } /* 非法闯入禁区的 算法判断函数 */ @@ -302,7 +297,6 @@ bool PedestrianVehicleTrespass::update_mstreams(const std::vector &ta int height = src_img->getHeight(); video_object_info obj; strcpy(obj.task_id, obj_key.task_id.c_str()); - // obj.task_id = obj_key.task_id.c_str(); obj.object_id = obj_key.obj_id; obj.left = clip(result_data.box.left, 0, width); obj.top = clip(result_data.box.top, 0, height); @@ -310,9 +304,11 @@ bool PedestrianVehicleTrespass::update_mstreams(const std::vector &ta obj.bottom = clip(result_data.box.bottom, 0, height); vpc_img_info img_info = pVpcUtil->crop(src_img, obj); - result_data.roi_img_desc = img_info.pic_desc; - - obj_to_alarm_boxes_[obj_key].emplace_back(std::move(result_data)); + if(img_info.pic_desc != nullptr){ + result_data.roi_img_desc = img_info.pic_desc; + obj_to_alarm_boxes_[obj_key].emplace_back(std::move(result_data)); + } + obj_to_position_.erase(obj_key); } diff --git a/src/ai_platform/MultiSourceProcess.cpp b/src/ai_platform/MultiSourceProcess.cpp index e44774d..85914e9 100644 --- a/src/ai_platform/MultiSourceProcess.cpp +++ b/src/ai_platform/MultiSourceProcess.cpp @@ -246,9 +246,20 @@ bool CMultiSourceProcess::AddTask(task_param _cur_task_param){ m_FinishedTaskMap[task_id] = false; m_FinishedTaskMtx.unlock(); - // 设置定时截图的时间间隔 auto algor_map = m_task_param_manager->get_task_other_param(task_id); if (algor_map != nullptr){ + /* 如果开启了行人 机动车非法闯入功能 生成闯入区域mask */ + if (algor_map->find(algorithm_type_t::PEDESTRIAN_TRESPASS) != algor_map->end()) { + pedestrian_vehicle_trespass_.pedestrianvehicletrespass_init_region( + task_id, algorithm_type_t::PEDESTRIAN_TRESPASS, input_image_width, input_image_height); + } + + if (algor_map->find(algorithm_type_t::VEHICLE_TRESPASS) != algor_map->end()) { + pedestrian_vehicle_trespass_.pedestrianvehicletrespass_init_region( + task_id, algorithm_type_t::VEHICLE_TRESPASS, input_image_width, input_image_height); + } + + // 设置定时截图的时间间隔 auto algor = algor_map->find(algorithm_type_t::VIDEO_TIMING_SNAPSHOT); if(algor != algor_map->end()){ task_param_manager::algo_param_type_t_* cur_task_params = algor->second; @@ -663,54 +674,7 @@ int CMultiSourceProcess::endframe_obj_process(const OBJ_KEY &obj_key, algorithm_ vehicle_locus_finished(obj_key); /* 开启行人&机动车逆行算法模块,获取该目标的算法分析结果 返回结果+快照 最后释放资源 */ - endframe_retrograde_obj_process(obj_key); -} - -int CMultiSourceProcess::endframe_retrograde_obj_process(const OBJ_KEY &obj_key) { - auto task_param_ptr = m_task_param_manager->get_task_algor_param(obj_key.video_id); - - /* 开启行人&机动车逆行算法模块,获取该目标的算法分析结果 返回结果+快照 最后释放资源 */ - if (task_param_ptr->human_algors.find(algorithm_type_t::PEDESTRIAN_RETROGRADE) != - task_param_ptr->human_algors.end()) - retrograde_alarm(obj_key, algorithm_type_t::PEDESTRIAN_RETROGRADE); - - if (task_param_ptr->vehicle_algors.find(algorithm_type_t::VEHICLE_RETROGRADE) != - task_param_ptr->vehicle_algors.end()) - retrograde_alarm(obj_key, algorithm_type_t::VEHICLE_RETROGRADE); -} - -void CMultiSourceProcess::retrograde_alarm(const OBJ_KEY &obj_key, const algorithm_type_t &algor_type) { - - auto results = pedestrian_vehicle_retrograde_.get_results_by_id( - ai_engine_module::obj_key_t{obj_key.obj_id, obj_key.video_id, algor_type}); - - bool bRetroGrade = true ; - for (unsigned idx = 0; idx < results.size(); ++idx) { - auto &result = results[idx]; - - vpc_img_info src_img; - src_img.pic_desc = result.origin_img_desc; - src_img.task_id = obj_key.video_id; - - vpc_img_info roi_img; - roi_img.pic_desc = result.roi_img_desc; - roi_img.task_id = obj_key.video_id; - roi_img.object_id = obj_key.obj_id; - - if(bRetroGrade){ - auto &&json_str = helpers::gen_json::gen_retrograde_json(obj_key.video_id, obj_key.obj_id, result.box, algor_type); - save_snapshot_process(obj_key, algor_type, src_img, roi_img, idx, json_str); - } else { - VPCUtil::vpc_img_release(src_img); - VPCUtil::vpc_img_release(roi_img); - } - - if (bRetroGrade == true) { - bRetroGrade = false; - } - - } - + endframe_retrograde_trespass(obj_key); } void CMultiSourceProcess::vehicle_locus_finished(const OBJ_KEY obj_key) { @@ -892,6 +856,64 @@ void CMultiSourceProcess::algorthim_retrograde_trespass(vector& vpt_inte } } +int CMultiSourceProcess::endframe_retrograde_trespass(const OBJ_KEY &obj_key) { + auto task_param_ptr = m_task_param_manager->get_task_algor_param(obj_key.video_id); + + /* 开启行人&机动车逆行算法模块,获取该目标的算法分析结果 返回结果+快照 最后释放资源 */ + if (task_param_ptr->human_algors.find(algorithm_type_t::PEDESTRIAN_RETROGRADE) != + task_param_ptr->human_algors.end()) + retrograde_trespass_alarm(obj_key, algorithm_type_t::PEDESTRIAN_RETROGRADE); + + if (task_param_ptr->vehicle_algors.find(algorithm_type_t::VEHICLE_RETROGRADE) != + task_param_ptr->vehicle_algors.end()) + retrograde_trespass_alarm(obj_key, algorithm_type_t::VEHICLE_RETROGRADE); + + if (task_param_ptr->human_algors.find(algorithm_type_t::PEDESTRIAN_TRESPASS) != task_param_ptr->human_algors.end()) + retrograde_trespass_alarm(obj_key, algorithm_type_t::PEDESTRIAN_TRESPASS); + + if (task_param_ptr->vehicle_algors.find(algorithm_type_t::VEHICLE_TRESPASS) != task_param_ptr->vehicle_algors.end()) + retrograde_trespass_alarm(obj_key, algorithm_type_t::VEHICLE_TRESPASS); +} + +void CMultiSourceProcess::retrograde_trespass_alarm(const OBJ_KEY &obj_key, const algorithm_type_t &algor_type) { + + vector results ; + if(algor_type == algorithm_type_t::PEDESTRIAN_RETROGRADE || algor_type == algorithm_type_t::VEHICLE_RETROGRADE){ + results = pedestrian_vehicle_retrograde_.get_results_by_id(ai_engine_module::obj_key_t{obj_key.obj_id, obj_key.video_id, algor_type}); + } else if(algor_type == algorithm_type_t::PEDESTRIAN_TRESPASS || algor_type == algorithm_type_t::VEHICLE_TRESPASS){ + results = pedestrian_vehicle_trespass_.get_results_by_id(ai_engine_module::obj_key_t{obj_key.obj_id, obj_key.video_id, algor_type}); + } else { + return ; + } + + + bool bRetroGrade = true ; + for (unsigned idx = 0; idx < results.size(); ++idx) { + auto &result = results[idx]; + + vpc_img_info src_img; + src_img.pic_desc = result.origin_img_desc; + src_img.task_id = obj_key.video_id; + + vpc_img_info roi_img; + roi_img.pic_desc = result.roi_img_desc; + roi_img.task_id = obj_key.video_id; + roi_img.object_id = obj_key.obj_id; + + if(bRetroGrade){ + auto &&json_str = helpers::gen_json::gen_retrograde_json(obj_key.video_id, obj_key.obj_id, result.box, algor_type); + save_snapshot_process(obj_key, algor_type, src_img, roi_img, idx, json_str); + } else { + VPCUtil::vpc_img_release(src_img); + VPCUtil::vpc_img_release(roi_img); + } + + if (bRetroGrade == true) { + bRetroGrade = false; + } + } +} + bool CMultiSourceProcess::save_snapshot_process(const OBJ_KEY &obj_key, const algorithm_type_t &algorithm_type, vpc_img_info src_img, vpc_img_info roi_img, const long long id,const std::string &json_str) { auto task_other_params = m_task_param_manager->get_task_other_param(obj_key.video_id); diff --git a/src/ai_platform/MultiSourceProcess.h b/src/ai_platform/MultiSourceProcess.h index 59c1567..534fbe0 100644 --- a/src/ai_platform/MultiSourceProcess.h +++ b/src/ai_platform/MultiSourceProcess.h @@ -68,8 +68,8 @@ private: bool save_snapshot_process(const OBJ_KEY &obj_key, const algorithm_type_t &algorithm_type, vpc_img_info img_info, vpc_img_info roi_img, const long long id,const std::string &json_str); - int endframe_retrograde_obj_process(const OBJ_KEY &obj_key); - void retrograde_alarm(const OBJ_KEY &obj_key, const algorithm_type_t &algor_type) ; + int endframe_retrograde_trespass(const OBJ_KEY &obj_key); + void retrograde_trespass_alarm(const OBJ_KEY &obj_key, const algorithm_type_t &algor_type) ; private: int m_devId; diff --git a/src/demo/demo.cpp b/src/demo/demo.cpp index 864b769..87a18d1 100644 --- a/src/demo/demo.cpp +++ b/src/demo/demo.cpp @@ -522,7 +522,7 @@ void test_gpu(int gpuID){ } std::vector algor_vec = {algorithm_type_t::FACE_SNAPSHOT, algorithm_type_t::HUMAN_SNAPSHOT,algorithm_type_t::ROAD_WORK_DET, algorithm_type_t::PEDESTRIAN_RETROGRADE, algorithm_type_t::VEHICLE_RETROGRADE, - algorithm_type_t::VEHICLE_SNAPSHOT, algorithm_type_t::NONMOTOR_VEHICLE_SNAPSHOT, algorithm_type_t::VIDEO_TIMING_SNAPSHOT}; + algorithm_type_t::PEDESTRIAN_TRESPASS, algorithm_type_t::VEHICLE_TRESPASS, algorithm_type_t::VEHICLE_SNAPSHOT, algorithm_type_t::NONMOTOR_VEHICLE_SNAPSHOT, algorithm_type_t::VIDEO_TIMING_SNAPSHOT}; string task_id = createTask(handle, algor_vec, 0 + gpuID * 10); // string task_id1 = createTask(handle, algor_vec, 1 + gpuID * 10);