Commit a164dbead2ef67dd4d1bd3db0d3b91fc4c479c7a
1 parent
b6e71beb
同步 HUMAN_TIMING_SNAPSHOT、NONMOTOR_VEHICLE_TIMING_SNAPSHOT、VEHICLE_TIMING_SNAPSHOT
Showing
8 changed files
with
145 additions
and
115 deletions
src/ai_engine_module/ai_engine_module.h
src/ai_engine_module/face_detect.h
100755 → 100644
src/ai_platform/MultiSourceProcess.cpp
@@ -631,7 +631,9 @@ int CMultiSourceProcess::algorthim_vpt(vector<DeviceMemory*> vec_gpuMem){ | @@ -631,7 +631,9 @@ int CMultiSourceProcess::algorthim_vpt(vector<DeviceMemory*> vec_gpuMem){ | ||
631 | /* for snapshot algorithm. 轨迹结束目标 做最后的结果返回(当前返回算法结果+快照保存路径)*/ | 631 | /* for snapshot algorithm. 轨迹结束目标 做最后的结果返回(当前返回算法结果+快照保存路径)*/ |
632 | vehicle_snapshot(vpt_interest_task_id, deleteObjectID); | 632 | vehicle_snapshot(vpt_interest_task_id, deleteObjectID); |
633 | #else | 633 | #else |
634 | - algorithm_vehicle_relult(vec_vptMem, vptResult, deleteObjectID); | 634 | + algorithm_timing_snapshot(vec_vptMem, vptResult, algorithm_type_t::HUMAN_TIMING_SNAPSHOT); |
635 | + algorithm_timing_snapshot(vec_vptMem, vptResult, algorithm_type_t::VEHICLE_TIMING_SNAPSHOT); | ||
636 | + algorithm_timing_snapshot(vec_vptMem, vptResult, algorithm_type_t::NONMOTOR_VEHICLE_TIMING_SNAPSHOT); | ||
635 | 637 | ||
636 | send_locus_finished_msg(vpt_interest_task_id, deleteObjectID); | 638 | send_locus_finished_msg(vpt_interest_task_id, deleteObjectID); |
637 | #endif | 639 | #endif |
@@ -706,9 +708,9 @@ void CMultiSourceProcess::trace_record(vector<DeviceMemory*>& vec_gpuMem, vector | @@ -706,9 +708,9 @@ void CMultiSourceProcess::trace_record(vector<DeviceMemory*>& vec_gpuMem, vector | ||
706 | } | 708 | } |
707 | } | 709 | } |
708 | 710 | ||
709 | -int CMultiSourceProcess::algorithm_vehicle_relult(vector<DeviceMemory*> vec_devMem, vector<onelevel_det_result>& vptResult, vector<vector<int>>& delete_object_id) { | 711 | +int CMultiSourceProcess::algorithm_timing_snapshot(vector<DeviceMemory*> vec_devMem, vector<onelevel_det_result>& vptResult, algorithm_type_t algor_type) { |
710 | 712 | ||
711 | - vector<multi_obj_data_t> results = m_snapshot_reprocessing->get_vehicle_snapshot(vec_devMem, vptResult, skip_frame_); | 713 | + vector<multi_obj_data_t> results = m_snapshot_reprocessing->get_timing_snapshot(vec_devMem, vptResult, algor_type); |
712 | 714 | ||
713 | VPCUtil* pVPCUtil = VPCUtil::getInstance(); | 715 | VPCUtil* pVPCUtil = VPCUtil::getInstance(); |
714 | for (auto &result : results) { | 716 | for (auto &result : results) { |
@@ -717,9 +719,9 @@ int CMultiSourceProcess::algorithm_vehicle_relult(vector<DeviceMemory*> vec_devM | @@ -717,9 +719,9 @@ int CMultiSourceProcess::algorithm_vehicle_relult(vector<DeviceMemory*> vec_devM | ||
717 | } | 719 | } |
718 | auto task_id = result.task_id; | 720 | auto task_id = result.task_id; |
719 | auto task_other_params = m_task_param_manager->get_task_other_param(task_id); | 721 | auto task_other_params = m_task_param_manager->get_task_other_param(task_id); |
720 | - const auto &algor_other_params = task_other_params->find(algorithm_type_t::VEHICLE_SNAPSHOT); | 722 | + const auto &algor_other_params = task_other_params->find(algor_type); |
721 | if (algor_other_params == task_other_params->end()) { | 723 | if (algor_other_params == task_other_params->end()) { |
722 | - LOG_ERROR("[Error] taskId {} not found algor {}", task_id.c_str(), (int)algorithm_type_t::VEHICLE_SNAPSHOT); | 724 | + LOG_ERROR("[Error] taskId {} not found algor {}", task_id.c_str(), (int)algor_type); |
723 | continue; | 725 | continue; |
724 | } | 726 | } |
725 | const algor_basic_config_param_t *basic_param = algor_other_params->second->basic_param; | 727 | const algor_basic_config_param_t *basic_param = algor_other_params->second->basic_param; |
@@ -756,7 +758,7 @@ int CMultiSourceProcess::algorithm_vehicle_relult(vector<DeviceMemory*> vec_devM | @@ -756,7 +758,7 @@ int CMultiSourceProcess::algorithm_vehicle_relult(vector<DeviceMemory*> vec_devM | ||
756 | strcpy(new_obj_ss_info.video_image_path, fpath_origin.c_str()); | 758 | strcpy(new_obj_ss_info.video_image_path, fpath_origin.c_str()); |
757 | strcpy(new_obj_ss_info.snapshot_image_path, fpath_roi.c_str()); | 759 | strcpy(new_obj_ss_info.snapshot_image_path, fpath_roi.c_str()); |
758 | new_obj_ss_info.nFinished = 0; | 760 | new_obj_ss_info.nFinished = 0; |
759 | - string json_str = helpers::gen_json::gen_multi_obj_json(algorithm_type_t::VEHICLE_SNAPSHOT, new_obj_ss_info); | 761 | + string json_str = helpers::gen_json::gen_multi_obj_json(algor_type, new_obj_ss_info); |
760 | 762 | ||
761 | ImgSaveInfo save_info; | 763 | ImgSaveInfo save_info; |
762 | save_info.file_path = fpath_roi; | 764 | save_info.file_path = fpath_roi; |
@@ -764,7 +766,7 @@ int CMultiSourceProcess::algorithm_vehicle_relult(vector<DeviceMemory*> vec_devM | @@ -764,7 +766,7 @@ int CMultiSourceProcess::algorithm_vehicle_relult(vector<DeviceMemory*> vec_devM | ||
764 | save_info.json_str = json_str; | 766 | save_info.json_str = json_str; |
765 | m_save_snapshot_reprocessing->reprocessing_process_wo_locus_async(save_info); | 767 | m_save_snapshot_reprocessing->reprocessing_process_wo_locus_async(save_info); |
766 | 768 | ||
767 | - OBJ_KEY obj_key{task_id, obj.object_id}; | 769 | + ai_engine_module::obj_key_t obj_key{obj.object_id, task_id, algor_type}; |
768 | // 保存有轨迹的object记录,轨迹结束时需要发消息 | 770 | // 保存有轨迹的object记录,轨迹结束时需要发消息 |
769 | std::lock_guard<std::mutex> l(m_total_mutex); | 771 | std::lock_guard<std::mutex> l(m_total_mutex); |
770 | m_total_snapshot_info_multi_object.insert(obj_key); | 772 | m_total_snapshot_info_multi_object.insert(obj_key); |
@@ -784,31 +786,44 @@ void CMultiSourceProcess::send_locus_finished_msg(vector<string>& vpt_interest_t | @@ -784,31 +786,44 @@ void CMultiSourceProcess::send_locus_finished_msg(vector<string>& vpt_interest_t | ||
784 | string task_id = *task_iter; | 786 | string task_id = *task_iter; |
785 | for (int &j : deleteObjectID[i]) // loop algor type. | 787 | for (int &j : deleteObjectID[i]) // loop algor type. |
786 | { | 788 | { |
787 | - OBJ_KEY obj_key = {task_id, j}; | ||
788 | - | ||
789 | auto task_param_ptr = m_task_param_manager->get_task_algor_param(task_id); | 789 | auto task_param_ptr = m_task_param_manager->get_task_algor_param(task_id); |
790 | 790 | ||
791 | // 该路任务开启了抓拍功能 开始抓拍保存;若未开启抓拍,清空显存资源 | 791 | // 该路任务开启了抓拍功能 开始抓拍保存;若未开启抓拍,清空显存资源 |
792 | - if (task_param_ptr->vehicle_algors.find(algorithm_type_t::VEHICLE_SNAPSHOT) != task_param_ptr->vehicle_algors.end()) { | ||
793 | - std::lock_guard<std::mutex> l(m_total_mutex); | ||
794 | - if (m_total_snapshot_info_multi_object.find(obj_key) != m_total_snapshot_info_multi_object.end()) { | ||
795 | - video_object_snapshot new_obj_ss_info; | ||
796 | - new_obj_ss_info.object_id = j; | ||
797 | - new_obj_ss_info.nFinished = 1; | ||
798 | - strcpy(new_obj_ss_info.task_id, task_id.c_str()); | ||
799 | - string json_str = helpers::gen_json::gen_multi_obj_json(algorithm_type_t::VEHICLE_SNAPSHOT, new_obj_ss_info); | ||
800 | - // 通知结束的轨迹 | ||
801 | - ImgSaveInfo save_info; | ||
802 | - save_info.json_str = json_str; | ||
803 | - m_save_snapshot_reprocessing->reprocessing_process_wo_locus_async(save_info); | ||
804 | - | ||
805 | - m_total_snapshot_info_multi_object.erase(obj_key); | ||
806 | - } | 792 | + if (task_param_ptr->vehicle_algors.find(algorithm_type_t::VEHICLE_TIMING_SNAPSHOT) != task_param_ptr->vehicle_algors.end()) { |
793 | + ai_engine_module::obj_key_t obj_key = {j, task_id, algorithm_type_t::VEHICLE_TIMING_SNAPSHOT}; | ||
794 | + timing_snapshot_finish_msg(obj_key, algorithm_type_t::VEHICLE_TIMING_SNAPSHOT); | ||
795 | + } | ||
796 | + | ||
797 | + if (task_param_ptr->vehicle_algors.find(algorithm_type_t::NONMOTOR_VEHICLE_TIMING_SNAPSHOT) != task_param_ptr->vehicle_algors.end()) { | ||
798 | + ai_engine_module::obj_key_t obj_key = {j, task_id, algorithm_type_t::NONMOTOR_VEHICLE_TIMING_SNAPSHOT}; | ||
799 | + timing_snapshot_finish_msg(obj_key, algorithm_type_t::NONMOTOR_VEHICLE_TIMING_SNAPSHOT); | ||
800 | + } | ||
801 | + | ||
802 | + if (task_param_ptr->vehicle_algors.find(algorithm_type_t::HUMAN_TIMING_SNAPSHOT) != task_param_ptr->vehicle_algors.end()) { | ||
803 | + ai_engine_module::obj_key_t obj_key = {j, task_id, algorithm_type_t::HUMAN_TIMING_SNAPSHOT}; | ||
804 | + timing_snapshot_finish_msg(obj_key, algorithm_type_t::HUMAN_TIMING_SNAPSHOT); | ||
807 | } | 805 | } |
808 | } | 806 | } |
809 | } | 807 | } |
810 | } | 808 | } |
811 | 809 | ||
810 | +void CMultiSourceProcess::timing_snapshot_finish_msg(ai_engine_module::obj_key_t obj_key, algorithm_type_t algor_type) { | ||
811 | + std::lock_guard<std::mutex> l(m_total_mutex); | ||
812 | + if (m_total_snapshot_info_multi_object.find(obj_key) != m_total_snapshot_info_multi_object.end()) { | ||
813 | + video_object_snapshot new_obj_ss_info; | ||
814 | + new_obj_ss_info.object_id = obj_key.obj_id; | ||
815 | + new_obj_ss_info.nFinished = 1; | ||
816 | + strcpy(new_obj_ss_info.task_id, obj_key.task_id.c_str()); | ||
817 | + string json_str = helpers::gen_json::gen_multi_obj_json(algor_type, new_obj_ss_info); | ||
818 | + // 通知结束的轨迹 | ||
819 | + ImgSaveInfo save_info; | ||
820 | + save_info.json_str = json_str; | ||
821 | + m_save_snapshot_reprocessing->reprocessing_process_wo_locus_async(save_info); | ||
822 | + | ||
823 | + m_total_snapshot_info_multi_object.erase(obj_key); | ||
824 | + } | ||
825 | +} | ||
826 | + | ||
812 | // for snapshot algorithm. 轨迹结束目标 做最后的结果返回(当前返回算法结果+快照保存路径) | 827 | // for snapshot algorithm. 轨迹结束目标 做最后的结果返回(当前返回算法结果+快照保存路径) |
813 | void CMultiSourceProcess::vehicle_snapshot(vector<string>& vpt_interest_task_id, vector<vector<int>> deleteObjectID) { | 828 | void CMultiSourceProcess::vehicle_snapshot(vector<string>& vpt_interest_task_id, vector<vector<int>> deleteObjectID) { |
814 | auto task_iter = vpt_interest_task_id.begin(); | 829 | auto task_iter = vpt_interest_task_id.begin(); |
src/ai_platform/MultiSourceProcess.h
@@ -69,8 +69,12 @@ private: | @@ -69,8 +69,12 @@ private: | ||
69 | bool task_has_vpt_algor(const std::string &task_id); | 69 | bool task_has_vpt_algor(const std::string &task_id); |
70 | void clear_finished_task(); | 70 | void clear_finished_task(); |
71 | bool finish_task(const string taskID, const bool delete_snapshot); | 71 | bool finish_task(const string taskID, const bool delete_snapshot); |
72 | - int algorithm_vehicle_relult(vector<DeviceMemory*> vec_devMem, vector<onelevel_det_result>& vptResult, vector<vector<int>>& delete_object_id); | 72 | + |
73 | + int algorithm_timing_snapshot(vector<DeviceMemory*> vec_devMem, vector<onelevel_det_result>& vptResult, algorithm_type_t algor_type); | ||
74 | + | ||
73 | void send_locus_finished_msg(vector<string>& vpt_interest_task_id, vector<vector<int>> deleteObjectID); | 75 | void send_locus_finished_msg(vector<string>& vpt_interest_task_id, vector<vector<int>> deleteObjectID); |
76 | + void timing_snapshot_finish_msg(ai_engine_module::obj_key_t obj_key, algorithm_type_t algor_type); | ||
77 | + | ||
74 | void vehicle_snapshot(vector<string>& vpt_interest_task_id, vector<vector<int>> deleteObjectID); | 78 | void vehicle_snapshot(vector<string>& vpt_interest_task_id, vector<vector<int>> deleteObjectID); |
75 | void vehicle_locus_finished(const OBJ_KEY obj_key); | 79 | void vehicle_locus_finished(const OBJ_KEY obj_key); |
76 | 80 | ||
@@ -115,7 +119,7 @@ private: | @@ -115,7 +119,7 @@ private: | ||
115 | 119 | ||
116 | int m_batch_size{1}; | 120 | int m_batch_size{1}; |
117 | 121 | ||
118 | - set<OBJ_KEY> m_total_snapshot_info_multi_object; | 122 | + set<ai_engine_module::obj_key_t> m_total_snapshot_info_multi_object; |
119 | mutex m_total_mutex; | 123 | mutex m_total_mutex; |
120 | 124 | ||
121 | mutex m_TotalObjMtx ; | 125 | mutex m_TotalObjMtx ; |
src/ai_platform/header.h
@@ -34,6 +34,7 @@ enum class algorithm_type_t { | @@ -34,6 +34,7 @@ enum class algorithm_type_t { | ||
34 | PEDESTRIAN_TRESPASS = 211, | 34 | PEDESTRIAN_TRESPASS = 211, |
35 | ROAD_WORK_DET = 212, // 221026byzsh施工占道 | 35 | ROAD_WORK_DET = 212, // 221026byzsh施工占道 |
36 | 36 | ||
37 | + HUMAN_TIMING_SNAPSHOT = 213, // 行人轨迹定时抓拍 | ||
37 | HUMAN_LINGER = 214, // 人员徘徊 | 38 | HUMAN_LINGER = 214, // 人员徘徊 |
38 | HUMAN_REGION_GATHER = 215, // 区域人员聚集 | 39 | HUMAN_REGION_GATHER = 215, // 区域人员聚集 |
39 | HUMAN_REGION_DISMISS = 216, // 人员逃散 | 40 | HUMAN_REGION_DISMISS = 216, // 人员逃散 |
@@ -44,6 +45,7 @@ enum class algorithm_type_t { | @@ -44,6 +45,7 @@ enum class algorithm_type_t { | ||
44 | HUMAN_LEAVE_REGION = 222, // 区域离开 | 45 | HUMAN_LEAVE_REGION = 222, // 区域离开 |
45 | 46 | ||
46 | VEHICLE_SNAPSHOT = 301, | 47 | VEHICLE_SNAPSHOT = 301, |
48 | + VEHICLE_TIMING_SNAPSHOT = 302, // 车辆轨迹定时抓拍 | ||
47 | VEHICLE_RETROGRADE = 310, | 49 | VEHICLE_RETROGRADE = 310, |
48 | VEHICLE_TRESPASS = 311, | 50 | VEHICLE_TRESPASS = 311, |
49 | VEHICLE_GATHER = 312, // 车辆聚集 | 51 | VEHICLE_GATHER = 312, // 车辆聚集 |
@@ -53,6 +55,7 @@ enum class algorithm_type_t { | @@ -53,6 +55,7 @@ enum class algorithm_type_t { | ||
53 | 55 | ||
54 | NONMOTOR_VEHICLE_SNAPSHOT = 401, | 56 | NONMOTOR_VEHICLE_SNAPSHOT = 401, |
55 | TAKEAWAY_MEMBER_CLASSIFICATION = 402, | 57 | TAKEAWAY_MEMBER_CLASSIFICATION = 402, |
58 | + NONMOTOR_VEHICLE_TIMING_SNAPSHOT = 403, // 非机动车轨迹定时抓拍 | ||
56 | 59 | ||
57 | FLOW_STATISTICS = 500, // 用于数量统计 | 60 | FLOW_STATISTICS = 500, // 用于数量统计 |
58 | NONMOTOR_VEHICLE_NOHELMET = 501,// 电动/摩托车不戴头盔 | 61 | NONMOTOR_VEHICLE_NOHELMET = 501,// 电动/摩托车不戴头盔 |
src/reprocessing_module/snapshot_reprocessing.cpp
@@ -32,91 +32,6 @@ static void box_expansion(video_object_info& obj_info, float expand_ratio, int f | @@ -32,91 +32,6 @@ static void box_expansion(video_object_info& obj_info, float expand_ratio, int f | ||
32 | obj_info.bottom = min(obj_info.bottom + expansion_height, frame_height - 1); | 32 | obj_info.bottom = min(obj_info.bottom + expansion_height, frame_height - 1); |
33 | } | 33 | } |
34 | 34 | ||
35 | -/* 获取人车物目标快照图 */ | ||
36 | -vector<multi_obj_data_t> snapshot_reprocessing::get_vehicle_snapshot(vector<DeviceMemory*> vec_devMem, vector<onelevel_det_result>& ol_det_result, int skip_frame) | ||
37 | -{ | ||
38 | - // 过滤出车辆 | ||
39 | - filter_vehicle(ol_det_result); | ||
40 | - | ||
41 | - map<string, algor_open_config_param> && algor_config_param = m_task_param_manager->get_task_algor_params(); | ||
42 | - map<string, map<algo_type, task_param_manager::algo_param_type_t_*>> && algor_param = m_task_param_manager->get_task_other_params(); | ||
43 | - | ||
44 | - vector<multi_obj_data_t> results; | ||
45 | - int idx = 0; | ||
46 | - for (auto memPtr : vec_devMem) | ||
47 | - { | ||
48 | - string task_id = memPtr->getId(); | ||
49 | - map<string, std::vector<video_object_info>> taskid_to_obj; | ||
50 | - if (algor_config_param.count(task_id) && algor_config_param[task_id].vehicle_algors.count(algorithm_type_t::VEHICLE_SNAPSHOT)) | ||
51 | - { | ||
52 | - task_param_manager::algo_param_type_t_* cur_task_params = algor_param[task_id][algorithm_type_t::VEHICLE_SNAPSHOT]; | ||
53 | - if (!cur_task_params || !cur_task_params->basic_param || !cur_task_params->basic_param->adapt_param) | ||
54 | - { | ||
55 | - continue; | ||
56 | - } | ||
57 | - | ||
58 | - // 多边形区域 | ||
59 | - auto adapt_param = cur_task_params->basic_param->adapt_param; | ||
60 | - if (adapt_param->points_count <= 0) { | ||
61 | - continue; | ||
62 | - } | ||
63 | - | ||
64 | - // 同一目标间隔多少帧保存 | ||
65 | - int snap_frame_interval = ((algor_config_param_snapshot*)cur_task_params->algor_param)->snap_frame_interval; | ||
66 | - | ||
67 | - onelevel_det_result &cur_task_ol_detres = ol_det_result[idx]; | ||
68 | - | ||
69 | - for (int c = 0; c < cur_task_ol_detres.obj_count; c++) | ||
70 | - { | ||
71 | - det_objinfo det_obj = cur_task_ol_detres.obj[c]; | ||
72 | - if(snap_frame_interval > 0 && det_obj.num % snap_frame_interval >= skip_frame){ | ||
73 | - continue; | ||
74 | - } | ||
75 | - | ||
76 | - sy_point center; | ||
77 | - center.x_ = (det_obj.left + det_obj.right) * 0.5; | ||
78 | - center.y_ = det_obj.bottom; | ||
79 | - | ||
80 | - int type_index = det_obj.index; | ||
81 | - if ((type_index == 4 || type_index == 5 || type_index == 6 || type_index ==7 || type_index ==8) | ||
82 | - && common::isInPolygon(adapt_param->points, adapt_param->points_count, center)) | ||
83 | - { | ||
84 | - video_object_info obj_info; | ||
85 | - obj_info.top = det_obj.top; | ||
86 | - obj_info.left = det_obj.left; | ||
87 | - obj_info.right = det_obj.right; | ||
88 | - obj_info.bottom = det_obj.bottom; | ||
89 | - obj_info.confidence = det_obj.confidence; | ||
90 | - obj_info.index = type_index; | ||
91 | - obj_info.object_id = det_obj.id; | ||
92 | - | ||
93 | - int frame_height = memPtr->getHeight(); | ||
94 | - int frame_width = memPtr->getWidth(); | ||
95 | - box_expansion(obj_info, EXPANSION_PROPORTION, frame_width, frame_height); | ||
96 | - | ||
97 | - taskid_to_obj[task_id].emplace_back(std::move(obj_info)); | ||
98 | - } | ||
99 | - } | ||
100 | - | ||
101 | - if (taskid_to_obj.size() > 0) | ||
102 | - { | ||
103 | - static long long gid_ = 0; | ||
104 | - | ||
105 | - multi_obj_data_t data; | ||
106 | - data.memPtr = memPtr; | ||
107 | - data.task_id = task_id; | ||
108 | - data.objs = std::move(taskid_to_obj[task_id]); | ||
109 | - data.id = gid_++; | ||
110 | - results.emplace_back(std::move(data)); | ||
111 | - LOG_TRACE("{} {} snap_frame_interval:{}", task_id.c_str(), (int)algorithm_type_t::VEHICLE_SNAPSHOT, snap_frame_interval); | ||
112 | - } | ||
113 | - } | ||
114 | - | ||
115 | - idx++; | ||
116 | - } | ||
117 | - return results; | ||
118 | -} | ||
119 | - | ||
120 | void snapshot_reprocessing::screen_effective_snapshot(vector<onelevel_det_result> &_onelevel_det_result){ | 35 | void snapshot_reprocessing::screen_effective_snapshot(vector<onelevel_det_result> &_onelevel_det_result){ |
121 | map<string, algor_open_config_param> algor_param = m_task_param_manager->get_task_algor_params(); | 36 | map<string, algor_open_config_param> algor_param = m_task_param_manager->get_task_algor_params(); |
122 | 37 | ||
@@ -775,6 +690,97 @@ int snapshot_reprocessing::update_face_bestsnapshot(vector<DeviceMemory*> vec_de | @@ -775,6 +690,97 @@ int snapshot_reprocessing::update_face_bestsnapshot(vector<DeviceMemory*> vec_de | ||
775 | return 0; | 690 | return 0; |
776 | } | 691 | } |
777 | 692 | ||
693 | +// algor_type: HUMAN_TIMING_SNAPSHOT、NONMOTOR_VEHICLE_TIMING_SNAPSHOT、VEHICLE_TIMING_SNAPSHOT | ||
694 | +vector<multi_obj_data_t> snapshot_reprocessing::get_timing_snapshot(vector<DeviceMemory*> vec_devMem, vector<onelevel_det_result>& ol_det_result, algorithm_type_t algor_type) | ||
695 | +{ | ||
696 | + map<string, algor_open_config_param> && algor_config_param = m_task_param_manager->get_task_algor_params(); | ||
697 | + map<string, map<algo_type, task_param_manager::algo_param_type_t_*>> && algor_param = m_task_param_manager->get_task_other_params(); | ||
698 | + | ||
699 | + vector<multi_obj_data_t> results; | ||
700 | + for (size_t idx = 0; idx < vec_devMem.size(); idx++) | ||
701 | + { | ||
702 | + DeviceMemory* memPtr = vec_devMem[idx]; | ||
703 | + std::string task_id = memPtr->getId(); | ||
704 | + | ||
705 | + map<string, std::vector<video_object_info>> taskid_to_obj; | ||
706 | + if (algor_config_param.count(task_id) && algor_config_param[task_id].vehicle_algors.count(algor_type)) | ||
707 | + { | ||
708 | + task_param_manager::algo_param_type_t_* cur_task_params = algor_param[task_id][algor_type]; | ||
709 | + if (!cur_task_params || !cur_task_params->basic_param || !cur_task_params->basic_param->adapt_param) | ||
710 | + { | ||
711 | + continue; | ||
712 | + } | ||
713 | + | ||
714 | + // 多边形区域 | ||
715 | + auto adapt_param = cur_task_params->basic_param->adapt_param; | ||
716 | + if (adapt_param->points_count <= 0) { | ||
717 | + continue; | ||
718 | + } | ||
719 | + | ||
720 | + // 同一目标间隔多少帧保存 | ||
721 | + int snap_frame_interval = ((algor_config_param_snapshot*)cur_task_params->algor_param)->snap_frame_interval; | ||
722 | + | ||
723 | + onelevel_det_result &cur_task_ol_detres = ol_det_result[idx]; | ||
724 | + | ||
725 | + for (int c = 0; c < cur_task_ol_detres.obj_count; c++) | ||
726 | + { | ||
727 | + det_objinfo det_obj = cur_task_ol_detres.obj[c]; | ||
728 | + if(snap_frame_interval > 0 && det_obj.num % snap_frame_interval){ | ||
729 | + continue; | ||
730 | + } | ||
731 | + | ||
732 | + int type_index = det_obj.index; | ||
733 | + if (algor_type == algorithm_type_t::HUMAN_TIMING_SNAPSHOT && algor_index_table["human"].find(type_index) == algor_index_table["human"].end()) { | ||
734 | + continue; | ||
735 | + } else if (algor_type == algorithm_type_t::NONMOTOR_VEHICLE_TIMING_SNAPSHOT && algor_index_table["nonmotor_vehicle"].find(type_index) == algor_index_table["nonmotor_vehicle"].end()) { | ||
736 | + continue; | ||
737 | + } else if (algor_type == algorithm_type_t::VEHICLE_TIMING_SNAPSHOT && algor_index_table["vehicle"].find(type_index) == algor_index_table["vehicle"].end()) { | ||
738 | + continue; | ||
739 | + } else { | ||
740 | + continue; | ||
741 | + } | ||
742 | + | ||
743 | + sy_point center; | ||
744 | + center.x_ = (det_obj.left + det_obj.right) * 0.5; | ||
745 | + center.y_ = det_obj.bottom; | ||
746 | + if (!common::isInPolygon(adapt_param->points, adapt_param->points_count, center)) { | ||
747 | + continue; | ||
748 | + } | ||
749 | + | ||
750 | + video_object_info obj_info; | ||
751 | + obj_info.top = det_obj.top; | ||
752 | + obj_info.left = det_obj.left; | ||
753 | + obj_info.right = det_obj.right; | ||
754 | + obj_info.bottom = det_obj.bottom; | ||
755 | + obj_info.confidence = det_obj.confidence; | ||
756 | + obj_info.index = type_index; | ||
757 | + obj_info.object_id = det_obj.id; | ||
758 | + | ||
759 | + int frame_height = memPtr->getHeight(); | ||
760 | + int frame_width = memPtr->getWidth(); | ||
761 | + box_expansion(obj_info, EXPANSION_PROPORTION, frame_width, frame_height); | ||
762 | + | ||
763 | + taskid_to_obj[task_id].emplace_back(std::move(obj_info)); | ||
764 | + } | ||
765 | + | ||
766 | + if (taskid_to_obj.size() > 0) | ||
767 | + { | ||
768 | + static long long gid_ = 0; | ||
769 | + | ||
770 | + multi_obj_data_t data; | ||
771 | + data.memPtr = memPtr; | ||
772 | + data.task_id = task_id; | ||
773 | + data.objs = std::move(taskid_to_obj[task_id]); | ||
774 | + data.id = gid_++; | ||
775 | + results.emplace_back(std::move(data)); | ||
776 | + } | ||
777 | + } | ||
778 | + } | ||
779 | + | ||
780 | + return results; | ||
781 | +} | ||
782 | + | ||
783 | + | ||
778 | map<OBJ_KEY, OBJ_VALUE> snapshot_reprocessing::get_total_snapshot_info(){ | 784 | map<OBJ_KEY, OBJ_VALUE> snapshot_reprocessing::get_total_snapshot_info(){ |
779 | return total_snapshot_info; | 785 | return total_snapshot_info; |
780 | } | 786 | } |
src/reprocessing_module/snapshot_reprocessing.h
@@ -68,7 +68,7 @@ public: | @@ -68,7 +68,7 @@ public: | ||
68 | snapshot_reprocessing(int devId); | 68 | snapshot_reprocessing(int devId); |
69 | ~snapshot_reprocessing(); | 69 | ~snapshot_reprocessing(); |
70 | 70 | ||
71 | - vector<multi_obj_data_t> get_vehicle_snapshot(vector<DeviceMemory*> vec_devMem, vector<onelevel_det_result>& ol_det_result, int skip_frame); | 71 | + vector<multi_obj_data_t> get_timing_snapshot(vector<DeviceMemory*> vec_devMem, vector<onelevel_det_result>& ol_det_result, algorithm_type_t algor_type); |
72 | 72 | ||
73 | void screen_effective_snapshot(vector<onelevel_det_result> &_onelevel_det_result); | 73 | void screen_effective_snapshot(vector<onelevel_det_result> &_onelevel_det_result); |
74 | void filter_vehicle(vector<onelevel_det_result> &_onelevel_det_result); | 74 | void filter_vehicle(vector<onelevel_det_result> &_onelevel_det_result); |
src/tsl_aiplatform_jni/AiEngineNativeInterface.cpp
@@ -404,9 +404,9 @@ JNIEXPORT jint JNICALL Java_com_objecteye_nativeinterface_TSLAiEngineNativeInter | @@ -404,9 +404,9 @@ JNIEXPORT jint JNICALL Java_com_objecteye_nativeinterface_TSLAiEngineNativeInter | ||
404 | case algorithm_type_t::FACE_SNAPSHOT: | 404 | case algorithm_type_t::FACE_SNAPSHOT: |
405 | case algorithm_type_t::HUMAN_SNAPSHOT: | 405 | case algorithm_type_t::HUMAN_SNAPSHOT: |
406 | case algorithm_type_t::VEHICLE_SNAPSHOT: | 406 | case algorithm_type_t::VEHICLE_SNAPSHOT: |
407 | - // case algorithm_type_t::HUMAN_TIMING_SNAPSHOT: | ||
408 | - // case algorithm_type_t::VEHICLE_TIMING_SNAPSHOT: | ||
409 | - // case algorithm_type_t::NONMOTOR_VEHICLE_TIMING_SNAPSHOT: | 407 | + case algorithm_type_t::HUMAN_TIMING_SNAPSHOT: |
408 | + case algorithm_type_t::VEHICLE_TIMING_SNAPSHOT: | ||
409 | + case algorithm_type_t::NONMOTOR_VEHICLE_TIMING_SNAPSHOT: | ||
410 | case algorithm_type_t::NONMOTOR_VEHICLE_SNAPSHOT: { | 410 | case algorithm_type_t::NONMOTOR_VEHICLE_SNAPSHOT: { |
411 | jfieldID fid = env->GetFieldID(cls_AlgorConfigParam, "threshold", "F"); | 411 | jfieldID fid = env->GetFieldID(cls_AlgorConfigParam, "threshold", "F"); |
412 | jfieldID fid_snap_frame_interval = env->GetFieldID(cls_AlgorConfigParam, "snap_frame_interval", "I"); | 412 | jfieldID fid_snap_frame_interval = env->GetFieldID(cls_AlgorConfigParam, "snap_frame_interval", "I"); |