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 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&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 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);
... ...