Commit b00d3d35ad08a8679db2cad948b17ab1f9d284e5

Authored by Hu Chunming
1 parent c692ff9e

添加行人、机动车非法闯入

src/ai_engine_module/pedestrian_vehicle_retrograde.cpp
@@ -380,10 +380,11 @@ bool PedestrianVehicleRetrograde::update_mstreams(const std::vector<task_id_t> & @@ -380,10 +380,11 @@ bool PedestrianVehicleRetrograde::update_mstreams(const std::vector<task_id_t> &
380 obj.bottom = clip(trace.bottom, 0, height); 380 obj.bottom = clip(trace.bottom, 0, height);
381 381
382 vpc_img_info img_info = pVpcUtil->crop(src_img, obj); 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 LOG_DEBUG("obj_to_alarm_boxes_ size: {}", obj_to_alarm_boxes_.size()); 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,11 +188,6 @@ void PedestrianVehicleTrespass::pedestrianvehicletrespass_init_region(const stri
188 cv::Mat &dst_mat = trespass_regions[obj_key]; 188 cv::Mat &dst_mat = trespass_regions[obj_key];
189 cv::cvtColor(src, trespass_regions[obj_key], cv::COLOR_BGR2GRAY); 189 cv::cvtColor(src, trespass_regions[obj_key], cv::COLOR_BGR2GRAY);
190 cv::threshold(trespass_regions[obj_key], trespass_regions[obj_key], 100, 255, cv::THRESH_BINARY); 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,7 +297,6 @@ bool PedestrianVehicleTrespass::update_mstreams(const std::vector<task_id_t> &ta
302 int height = src_img->getHeight(); 297 int height = src_img->getHeight();
303 video_object_info obj; 298 video_object_info obj;
304 strcpy(obj.task_id, obj_key.task_id.c_str()); 299 strcpy(obj.task_id, obj_key.task_id.c_str());
305 - // obj.task_id = obj_key.task_id.c_str();  
306 obj.object_id = obj_key.obj_id; 300 obj.object_id = obj_key.obj_id;
307 obj.left = clip(result_data.box.left, 0, width); 301 obj.left = clip(result_data.box.left, 0, width);
308 obj.top = clip(result_data.box.top, 0, height); 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,9 +304,11 @@ bool PedestrianVehicleTrespass::update_mstreams(const std::vector<task_id_t> &ta
310 obj.bottom = clip(result_data.box.bottom, 0, height); 304 obj.bottom = clip(result_data.box.bottom, 0, height);
311 305
312 vpc_img_info img_info = pVpcUtil->crop(src_img, obj); 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 obj_to_position_.erase(obj_key); 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,9 +246,20 @@ bool CMultiSourceProcess::AddTask(task_param _cur_task_param){
246 m_FinishedTaskMap[task_id] = false; 246 m_FinishedTaskMap[task_id] = false;
247 m_FinishedTaskMtx.unlock(); 247 m_FinishedTaskMtx.unlock();
248 248
249 - // 设置定时截图的时间间隔  
250 auto algor_map = m_task_param_manager->get_task_other_param(task_id); 249 auto algor_map = m_task_param_manager->get_task_other_param(task_id);
251 if (algor_map != nullptr){ 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 auto algor = algor_map->find(algorithm_type_t::VIDEO_TIMING_SNAPSHOT); 263 auto algor = algor_map->find(algorithm_type_t::VIDEO_TIMING_SNAPSHOT);
253 if(algor != algor_map->end()){ 264 if(algor != algor_map->end()){
254 task_param_manager::algo_param_type_t_* cur_task_params = algor->second; 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,54 +674,7 @@ int CMultiSourceProcess::endframe_obj_process(const OBJ_KEY &obj_key, algorithm_
663 vehicle_locus_finished(obj_key); 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 void CMultiSourceProcess::vehicle_locus_finished(const OBJ_KEY obj_key) { 680 void CMultiSourceProcess::vehicle_locus_finished(const OBJ_KEY obj_key) {
@@ -892,6 +856,64 @@ void CMultiSourceProcess::algorthim_retrograde_trespass(vector&lt;string&gt;&amp; vpt_inte @@ -892,6 +856,64 @@ void CMultiSourceProcess::algorthim_retrograde_trespass(vector&lt;string&gt;&amp; 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 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, 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 const long long id,const std::string &json_str) { 918 const long long id,const std::string &json_str) {
897 auto task_other_params = m_task_param_manager->get_task_other_param(obj_key.video_id); 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,8 +68,8 @@ private:
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, 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 const long long id,const std::string &json_str); 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 private: 74 private:
75 int m_devId; 75 int m_devId;
src/demo/demo.cpp
@@ -522,7 +522,7 @@ void test_gpu(int gpuID){ @@ -522,7 +522,7 @@ void test_gpu(int gpuID){
522 } 522 }
523 523
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, 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 string task_id = createTask(handle, algor_vec, 0 + gpuID * 10); 527 string task_id = createTask(handle, algor_vec, 0 + gpuID * 10);
528 // string task_id1 = createTask(handle, algor_vec, 1 + gpuID * 10); 528 // string task_id1 = createTask(handle, algor_vec, 1 + gpuID * 10);