Commit b00d3d35ad08a8679db2cad948b17ab1f9d284e5
1 parent
c692ff9e
添加行人、机动车非法闯入
Showing
5 changed files
with
84 additions
and
65 deletions
src/ai_engine_module/pedestrian_vehicle_retrograde.cpp
... | ... | @@ -380,10 +380,11 @@ bool PedestrianVehicleRetrograde::update_mstreams(const std::vector<task_id_t> & |
380 | 380 | obj.bottom = clip(trace.bottom, 0, height); |
381 | 381 | |
382 | 382 | vpc_img_info img_info = pVpcUtil->crop(src_img, obj); |
383 | - result_data.roi_img_desc = img_info.pic_desc; | |
384 | - | |
385 | - // 保存结果 | |
386 | - obj_to_alarm_boxes_[obj_key].emplace_back(std::move(result_data)); | |
383 | + if(img_info.pic_desc != nullptr){ | |
384 | + result_data.roi_img_desc = img_info.pic_desc; | |
385 | + // 保存结果 | |
386 | + obj_to_alarm_boxes_[obj_key].emplace_back(std::move(result_data)); | |
387 | + } | |
387 | 388 | } |
388 | 389 | |
389 | 390 | LOG_DEBUG("obj_to_alarm_boxes_ size: {}", obj_to_alarm_boxes_.size()); | ... | ... |
src/ai_engine_module/pedestrian_vehicle_trespass.cpp
... | ... | @@ -188,11 +188,6 @@ void PedestrianVehicleTrespass::pedestrianvehicletrespass_init_region(const stri |
188 | 188 | cv::Mat &dst_mat = trespass_regions[obj_key]; |
189 | 189 | cv::cvtColor(src, trespass_regions[obj_key], cv::COLOR_BGR2GRAY); |
190 | 190 | cv::threshold(trespass_regions[obj_key], trespass_regions[obj_key], 100, 255, cv::THRESH_BINARY); |
191 | - | |
192 | - if (false) { | |
193 | - cv::imwrite("ori.jpg", src); | |
194 | - cv::imwrite("region.jpg", trespass_regions[obj_key]); | |
195 | - } | |
196 | 191 | } |
197 | 192 | |
198 | 193 | /* 非法闯入禁区的 算法判断函数 */ |
... | ... | @@ -302,7 +297,6 @@ bool PedestrianVehicleTrespass::update_mstreams(const std::vector<task_id_t> &ta |
302 | 297 | int height = src_img->getHeight(); |
303 | 298 | video_object_info obj; |
304 | 299 | strcpy(obj.task_id, obj_key.task_id.c_str()); |
305 | - // obj.task_id = obj_key.task_id.c_str(); | |
306 | 300 | obj.object_id = obj_key.obj_id; |
307 | 301 | obj.left = clip(result_data.box.left, 0, width); |
308 | 302 | obj.top = clip(result_data.box.top, 0, height); |
... | ... | @@ -310,9 +304,11 @@ bool PedestrianVehicleTrespass::update_mstreams(const std::vector<task_id_t> &ta |
310 | 304 | obj.bottom = clip(result_data.box.bottom, 0, height); |
311 | 305 | |
312 | 306 | vpc_img_info img_info = pVpcUtil->crop(src_img, obj); |
313 | - result_data.roi_img_desc = img_info.pic_desc; | |
314 | - | |
315 | - obj_to_alarm_boxes_[obj_key].emplace_back(std::move(result_data)); | |
307 | + if(img_info.pic_desc != nullptr){ | |
308 | + result_data.roi_img_desc = img_info.pic_desc; | |
309 | + obj_to_alarm_boxes_[obj_key].emplace_back(std::move(result_data)); | |
310 | + } | |
311 | + | |
316 | 312 | obj_to_position_.erase(obj_key); |
317 | 313 | } |
318 | 314 | ... | ... |
src/ai_platform/MultiSourceProcess.cpp
... | ... | @@ -246,9 +246,20 @@ bool CMultiSourceProcess::AddTask(task_param _cur_task_param){ |
246 | 246 | m_FinishedTaskMap[task_id] = false; |
247 | 247 | m_FinishedTaskMtx.unlock(); |
248 | 248 | |
249 | - // 设置定时截图的时间间隔 | |
250 | 249 | auto algor_map = m_task_param_manager->get_task_other_param(task_id); |
251 | 250 | if (algor_map != nullptr){ |
251 | + /* 如果开启了行人 机动车非法闯入功能 生成闯入区域mask */ | |
252 | + if (algor_map->find(algorithm_type_t::PEDESTRIAN_TRESPASS) != algor_map->end()) { | |
253 | + pedestrian_vehicle_trespass_.pedestrianvehicletrespass_init_region( | |
254 | + task_id, algorithm_type_t::PEDESTRIAN_TRESPASS, input_image_width, input_image_height); | |
255 | + } | |
256 | + | |
257 | + if (algor_map->find(algorithm_type_t::VEHICLE_TRESPASS) != algor_map->end()) { | |
258 | + pedestrian_vehicle_trespass_.pedestrianvehicletrespass_init_region( | |
259 | + task_id, algorithm_type_t::VEHICLE_TRESPASS, input_image_width, input_image_height); | |
260 | + } | |
261 | + | |
262 | + // 设置定时截图的时间间隔 | |
252 | 263 | auto algor = algor_map->find(algorithm_type_t::VIDEO_TIMING_SNAPSHOT); |
253 | 264 | if(algor != algor_map->end()){ |
254 | 265 | 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_ |
663 | 674 | vehicle_locus_finished(obj_key); |
664 | 675 | |
665 | 676 | /* 开启行人&机动车逆行算法模块,获取该目标的算法分析结果 返回结果+快照 最后释放资源 */ |
666 | - endframe_retrograde_obj_process(obj_key); | |
667 | -} | |
668 | - | |
669 | -int CMultiSourceProcess::endframe_retrograde_obj_process(const OBJ_KEY &obj_key) { | |
670 | - auto task_param_ptr = m_task_param_manager->get_task_algor_param(obj_key.video_id); | |
671 | - | |
672 | - /* 开启行人&机动车逆行算法模块,获取该目标的算法分析结果 返回结果+快照 最后释放资源 */ | |
673 | - if (task_param_ptr->human_algors.find(algorithm_type_t::PEDESTRIAN_RETROGRADE) != | |
674 | - task_param_ptr->human_algors.end()) | |
675 | - retrograde_alarm(obj_key, algorithm_type_t::PEDESTRIAN_RETROGRADE); | |
676 | - | |
677 | - if (task_param_ptr->vehicle_algors.find(algorithm_type_t::VEHICLE_RETROGRADE) != | |
678 | - task_param_ptr->vehicle_algors.end()) | |
679 | - retrograde_alarm(obj_key, algorithm_type_t::VEHICLE_RETROGRADE); | |
680 | -} | |
681 | - | |
682 | -void CMultiSourceProcess::retrograde_alarm(const OBJ_KEY &obj_key, const algorithm_type_t &algor_type) { | |
683 | - | |
684 | - auto results = pedestrian_vehicle_retrograde_.get_results_by_id( | |
685 | - ai_engine_module::obj_key_t{obj_key.obj_id, obj_key.video_id, algor_type}); | |
686 | - | |
687 | - bool bRetroGrade = true ; | |
688 | - for (unsigned idx = 0; idx < results.size(); ++idx) { | |
689 | - auto &result = results[idx]; | |
690 | - | |
691 | - vpc_img_info src_img; | |
692 | - src_img.pic_desc = result.origin_img_desc; | |
693 | - src_img.task_id = obj_key.video_id; | |
694 | - | |
695 | - vpc_img_info roi_img; | |
696 | - roi_img.pic_desc = result.roi_img_desc; | |
697 | - roi_img.task_id = obj_key.video_id; | |
698 | - roi_img.object_id = obj_key.obj_id; | |
699 | - | |
700 | - if(bRetroGrade){ | |
701 | - auto &&json_str = helpers::gen_json::gen_retrograde_json(obj_key.video_id, obj_key.obj_id, result.box, algor_type); | |
702 | - save_snapshot_process(obj_key, algor_type, src_img, roi_img, idx, json_str); | |
703 | - } else { | |
704 | - VPCUtil::vpc_img_release(src_img); | |
705 | - VPCUtil::vpc_img_release(roi_img); | |
706 | - } | |
707 | - | |
708 | - if (bRetroGrade == true) { | |
709 | - bRetroGrade = false; | |
710 | - } | |
711 | - | |
712 | - } | |
713 | - | |
677 | + endframe_retrograde_trespass(obj_key); | |
714 | 678 | } |
715 | 679 | |
716 | 680 | void CMultiSourceProcess::vehicle_locus_finished(const OBJ_KEY obj_key) { |
... | ... | @@ -892,6 +856,64 @@ void CMultiSourceProcess::algorthim_retrograde_trespass(vector<string>& vpt_inte |
892 | 856 | } |
893 | 857 | } |
894 | 858 | |
859 | +int CMultiSourceProcess::endframe_retrograde_trespass(const OBJ_KEY &obj_key) { | |
860 | + auto task_param_ptr = m_task_param_manager->get_task_algor_param(obj_key.video_id); | |
861 | + | |
862 | + /* 开启行人&机动车逆行算法模块,获取该目标的算法分析结果 返回结果+快照 最后释放资源 */ | |
863 | + if (task_param_ptr->human_algors.find(algorithm_type_t::PEDESTRIAN_RETROGRADE) != | |
864 | + task_param_ptr->human_algors.end()) | |
865 | + retrograde_trespass_alarm(obj_key, algorithm_type_t::PEDESTRIAN_RETROGRADE); | |
866 | + | |
867 | + if (task_param_ptr->vehicle_algors.find(algorithm_type_t::VEHICLE_RETROGRADE) != | |
868 | + task_param_ptr->vehicle_algors.end()) | |
869 | + retrograde_trespass_alarm(obj_key, algorithm_type_t::VEHICLE_RETROGRADE); | |
870 | + | |
871 | + if (task_param_ptr->human_algors.find(algorithm_type_t::PEDESTRIAN_TRESPASS) != task_param_ptr->human_algors.end()) | |
872 | + retrograde_trespass_alarm(obj_key, algorithm_type_t::PEDESTRIAN_TRESPASS); | |
873 | + | |
874 | + if (task_param_ptr->vehicle_algors.find(algorithm_type_t::VEHICLE_TRESPASS) != task_param_ptr->vehicle_algors.end()) | |
875 | + retrograde_trespass_alarm(obj_key, algorithm_type_t::VEHICLE_TRESPASS); | |
876 | +} | |
877 | + | |
878 | +void CMultiSourceProcess::retrograde_trespass_alarm(const OBJ_KEY &obj_key, const algorithm_type_t &algor_type) { | |
879 | + | |
880 | + vector<ai_engine_module::result_data_t> results ; | |
881 | + if(algor_type == algorithm_type_t::PEDESTRIAN_RETROGRADE || algor_type == algorithm_type_t::VEHICLE_RETROGRADE){ | |
882 | + results = pedestrian_vehicle_retrograde_.get_results_by_id(ai_engine_module::obj_key_t{obj_key.obj_id, obj_key.video_id, algor_type}); | |
883 | + } else if(algor_type == algorithm_type_t::PEDESTRIAN_TRESPASS || algor_type == algorithm_type_t::VEHICLE_TRESPASS){ | |
884 | + results = pedestrian_vehicle_trespass_.get_results_by_id(ai_engine_module::obj_key_t{obj_key.obj_id, obj_key.video_id, algor_type}); | |
885 | + } else { | |
886 | + return ; | |
887 | + } | |
888 | + | |
889 | + | |
890 | + bool bRetroGrade = true ; | |
891 | + for (unsigned idx = 0; idx < results.size(); ++idx) { | |
892 | + auto &result = results[idx]; | |
893 | + | |
894 | + vpc_img_info src_img; | |
895 | + src_img.pic_desc = result.origin_img_desc; | |
896 | + src_img.task_id = obj_key.video_id; | |
897 | + | |
898 | + vpc_img_info roi_img; | |
899 | + roi_img.pic_desc = result.roi_img_desc; | |
900 | + roi_img.task_id = obj_key.video_id; | |
901 | + roi_img.object_id = obj_key.obj_id; | |
902 | + | |
903 | + if(bRetroGrade){ | |
904 | + auto &&json_str = helpers::gen_json::gen_retrograde_json(obj_key.video_id, obj_key.obj_id, result.box, algor_type); | |
905 | + save_snapshot_process(obj_key, algor_type, src_img, roi_img, idx, json_str); | |
906 | + } else { | |
907 | + VPCUtil::vpc_img_release(src_img); | |
908 | + VPCUtil::vpc_img_release(roi_img); | |
909 | + } | |
910 | + | |
911 | + if (bRetroGrade == true) { | |
912 | + bRetroGrade = false; | |
913 | + } | |
914 | + } | |
915 | +} | |
916 | + | |
895 | 917 | 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, |
896 | 918 | const long long id,const std::string &json_str) { |
897 | 919 | auto task_other_params = m_task_param_manager->get_task_other_param(obj_key.video_id); | ... | ... |
src/ai_platform/MultiSourceProcess.h
... | ... | @@ -68,8 +68,8 @@ private: |
68 | 68 | 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, |
69 | 69 | const long long id,const std::string &json_str); |
70 | 70 | |
71 | - int endframe_retrograde_obj_process(const OBJ_KEY &obj_key); | |
72 | - void retrograde_alarm(const OBJ_KEY &obj_key, const algorithm_type_t &algor_type) ; | |
71 | + int endframe_retrograde_trespass(const OBJ_KEY &obj_key); | |
72 | + void retrograde_trespass_alarm(const OBJ_KEY &obj_key, const algorithm_type_t &algor_type) ; | |
73 | 73 | |
74 | 74 | private: |
75 | 75 | int m_devId; | ... | ... |
src/demo/demo.cpp
... | ... | @@ -522,7 +522,7 @@ void test_gpu(int gpuID){ |
522 | 522 | } |
523 | 523 | |
524 | 524 | std::vector<algorithm_type_t> 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, |
525 | - algorithm_type_t::VEHICLE_SNAPSHOT, algorithm_type_t::NONMOTOR_VEHICLE_SNAPSHOT, algorithm_type_t::VIDEO_TIMING_SNAPSHOT}; | |
525 | + 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}; | |
526 | 526 | |
527 | 527 | string task_id = createTask(handle, algor_vec, 0 + gpuID * 10); |
528 | 528 | // string task_id1 = createTask(handle, algor_vec, 1 + gpuID * 10); | ... | ... |