diff --git a/src/ai_engine_module/ai_engine_header.h b/src/ai_engine_module/ai_engine_header.h index a21779c..aafc7a8 100755 --- a/src/ai_engine_module/ai_engine_header.h +++ b/src/ai_engine_module/ai_engine_header.h @@ -83,4 +83,12 @@ typedef struct result_data_t { acldvppPicDesc* roi_img_desc{nullptr}; } result_data_t; + +typedef struct Alarm_Snapshot { + vpc_img_info snapShot; + vpc_img_info snapShotLittle; + int algor_type; + box_t box; +} Alarm_Snapshot; + } // namespace ai_engine_module diff --git a/src/ai_engine_module/motocycle_hs_process.cpp b/src/ai_engine_module/motocycle_hs_process.cpp index c125367..903eeab 100644 --- a/src/ai_engine_module/motocycle_hs_process.cpp +++ b/src/ai_engine_module/motocycle_hs_process.cpp @@ -238,6 +238,7 @@ namespace ai_engine_module data.box.right = right; data.box.bottom = bottom; data.box.score = box.confidence; + data.box.cls = box.index; data.taskId = taskId; data.objId = box.id; // data.id = obj_key_t{ box.id, taskId, algorithm_type_t::TRUCK_MANNED }; diff --git a/src/ai_engine_module/motocycle_phone_process.cpp b/src/ai_engine_module/motocycle_phone_process.cpp index 5955511..c77acc6 100644 --- a/src/ai_engine_module/motocycle_phone_process.cpp +++ b/src/ai_engine_module/motocycle_phone_process.cpp @@ -241,6 +241,7 @@ namespace ai_engine_module data.box.right = right; data.box.bottom = bottom; data.box.score = box.confidence; + data.box.cls = box.index; data.taskId = taskId; data.objId = box.id; // data.id = obj_key_t{ box.id, taskId, algorithm_type_t::TRUCK_MANNED }; diff --git a/src/ai_engine_module/motocycle_refit_phone_process.cpp b/src/ai_engine_module/motocycle_refit_phone_process.cpp index 58c7b1b..144c8fb 100644 --- a/src/ai_engine_module/motocycle_refit_phone_process.cpp +++ b/src/ai_engine_module/motocycle_refit_phone_process.cpp @@ -258,6 +258,7 @@ namespace ai_engine_module data.box.right = right; data.box.bottom = bottom; data.box.score = box.confidence; + data.box.cls = box.index; data.taskId = taskId; data.objId = box.id; diff --git a/src/ai_engine_module/motocycle_refit_process.cpp b/src/ai_engine_module/motocycle_refit_process.cpp index d1fa7a2..1cc5699 100644 --- a/src/ai_engine_module/motocycle_refit_process.cpp +++ b/src/ai_engine_module/motocycle_refit_process.cpp @@ -243,6 +243,7 @@ namespace ai_engine_module data.box.right = right; data.box.bottom = bottom; data.box.score = box.confidence; + data.box.cls = box.index; data.taskId = taskId; data.objId = box.id; // data.id = obj_key_t{ box.id, taskId, algorithm_type_t::TRUCK_MANNED }; diff --git a/src/ai_engine_module/road_seg_correlation_algor.cpp b/src/ai_engine_module/road_seg_correlation_algor.cpp index f2ba2f9..19c8b4e 100644 --- a/src/ai_engine_module/road_seg_correlation_algor.cpp +++ b/src/ai_engine_module/road_seg_correlation_algor.cpp @@ -634,7 +634,7 @@ namespace ai_engine_module std::vector flattened_imgs(0); std::vector flattened_vpc_imgs(0); std::vector flattened_interest_data(0); // - vector>> vehiclelanes_regions, crosswalk_regions, solidlines, roadseg_fence_regions, road_fence_regions; + vector>> vehiclelanes_regions, nonvehicle_regions, crosswalk_regions, solidlines, roadseg_fence_regions, road_fence_regions; vector>> processed_roadseg_fences; VPCUtil* pVpcUtil = VPCUtil::getInstance(); for (int n = 0; n < n_images; ++n) @@ -645,6 +645,7 @@ namespace ai_engine_module int src_img_h = src_img->getHeight(); vector> vehiclelanes_region; //机动车区域 + vector> nonvehicle_region; //非机动车区域 vector> crosswalk_region; //人行道+十字路口区域 vector> solidline; //黄实线+白实线 for (unsigned i = 0; i < labels[n].size(); ++i) { @@ -652,6 +653,10 @@ namespace ai_engine_module if ((label == label_t::vehicle_lanes)) { vector cur_region(traffic_region[n][i].begin(),traffic_region[n][i].end()); vehiclelanes_region.push_back(cur_region); + } + if ((label == label_t::nonvehicle_lanes)) { + vector cur_region(traffic_region[n][i].begin(),traffic_region[n][i].end()); + nonvehicle_region.push_back(cur_region); } if ((label == label_t::crosswalk || label == label_t::interestion_area)) { vector cur_region(traffic_region[n][i].begin(),traffic_region[n][i].end()); @@ -663,6 +668,7 @@ namespace ai_engine_module } } vehiclelanes_regions.push_back(vehiclelanes_region); + nonvehicle_regions.push_back(nonvehicle_region); crosswalk_regions.push_back(crosswalk_region); solidlines.push_back(solidline); @@ -733,7 +739,7 @@ namespace ai_engine_module data.box.right = right; data.box.bottom = bottom; data.box.score = box.confidence; data.box.cls = box.index; data.taskId = taskId; data.objId = box.id; - +#if 0 // 抠图 video_object_info obj; strcpy(obj.task_id, taskId.c_str()); @@ -742,12 +748,12 @@ namespace ai_engine_module obj.right = right; obj.bottom = bottom; vpc_img_info img_info = pVpcUtil->crop(src_img, obj); - +#endif sy_img img; img.w_ = width; img.h_ = height; img.c_ = src_img->getChannel(); - +#if 0 if (img_info.pic_desc != nullptr) { void *outputDataDev = acldvppGetPicDescData(img_info.pic_desc); img.data_ = reinterpret_cast(outputDataDev); @@ -757,12 +763,10 @@ namespace ai_engine_module src_img_w, src_img_h, data.box.left, data.box.top, data.box.right, data.box.bottom); continue; } - - - - flattened_imgs.emplace_back(std::move(img)); flattened_vpc_imgs.emplace_back(std::move(img_info)); +#endif + flattened_imgs.emplace_back(std::move(img)); flattened_interest_data.emplace_back(std::move(data)); flattened_idx_to_algor_seq[flattened_idx] = std::move(stream_idx_and_algor_seq); flattened_idx_to_batch_idx[flattened_idx++] = n; @@ -813,6 +817,7 @@ namespace ai_engine_module // auto &model_result = model_results[flattened_idx_to_batch_idx[n]]; vector> vehiclelanes_region = vehiclelanes_regions[flattened_idx_to_batch_idx[n]]; //机动车区域 + vector> nonvehicle_region = nonvehicle_regions[flattened_idx_to_batch_idx[n]]; //非机动车区域 vector> crosswalk_region = crosswalk_regions[flattened_idx_to_batch_idx[n]]; //人行道+十字路口区域 vector> solidline = solidlines[flattened_idx_to_batch_idx[n]]; //黄实线+白实线 vector> roadseg_fence_region = roadseg_fence_regions[flattened_idx_to_batch_idx[n]];//车道分割护栏区域 @@ -856,6 +861,7 @@ namespace ai_engine_module int src_w = src_img->getWidth(), src_h = src_img->getHeight(); // 行人/非机动车占用机动车道 if (algor_type == algorithm_type_t::PERSON_IN_VEHICLELANE || algor_type == algorithm_type_t::NONMOTOR_IN_VEHICLELANE) { + if (nonvehicle_region.empty()) continue; //没有非机动车道的不判占用机动车道 bool isalarm = false; float res_max_dist = 0; int check_frames = m_total_obj_info[trace_obj_key].center_points.size(); @@ -1062,10 +1068,12 @@ namespace ai_engine_module result.taskId = det_result.taskId; result.objId = det_result.objId; result.algor_type = algor_type; -#if 0 /*暂不保存报警时刻的抓拍图,有需要再启用*/ +#if 1 /*抓拍大图*/ // 原图 vpc_img_info src_img_info = VPCUtil::vpc_devMem2vpcImg(src_img); result.origin_img_desc = src_img_info.pic_desc; +#endif +#if 0 /*暂不保存报警时刻的抓拍小图,有需要再启用*/ // 抠图--拷贝后赋值 void *outputDataDev = acldvppGetPicDescData(flattened_vpc_imgs[n].pic_desc); int nBufferSize = acldvppGetPicDescSize(flattened_vpc_imgs[n].pic_desc); @@ -1098,9 +1106,9 @@ namespace ai_engine_module e.reset(); } - +#if 0 VPCUtil::vpc_img_release(flattened_vpc_imgs[n]); //flattened_imgs[n].data_ - +#endif } /* for (int n = 0; n < n_input_image; ++n) diff --git a/src/ai_engine_module/traffic_light_process.cpp b/src/ai_engine_module/traffic_light_process.cpp index 303d50d..eb5ba2d 100644 --- a/src/ai_engine_module/traffic_light_process.cpp +++ b/src/ai_engine_module/traffic_light_process.cpp @@ -470,7 +470,7 @@ namespace ai_engine_module data.box.right = right; data.box.bottom = bottom; data.box.score = box.confidence; data.box.cls = box.index; data.taskId = taskId; data.objId = box.id; - +#if 0 // 抠图 video_object_info obj; strcpy(obj.task_id, taskId.c_str()); @@ -479,12 +479,12 @@ namespace ai_engine_module obj.right = right; obj.bottom = bottom; vpc_img_info img_info = pVpcUtil->crop(src_img, obj); - +#endif sy_img img; img.w_ = width; img.h_ = height; img.c_ = src_img->getChannel(); - +#if 0 if (img_info.pic_desc != nullptr) { void *outputDataDev = acldvppGetPicDescData(img_info.pic_desc); img.data_ = reinterpret_cast(outputDataDev); @@ -495,8 +495,9 @@ namespace ai_engine_module continue; } - flattened_imgs.emplace_back(std::move(img)); flattened_vpc_imgs.emplace_back(std::move(img_info)); +#endif + flattened_imgs.emplace_back(std::move(img)); flattened_interest_data.emplace_back(std::move(data)); flattened_idx_to_algor_seq[flattened_idx] = std::move(stream_idx_and_algor_seq); flattened_idx_to_batch_idx[flattened_idx++] = n; @@ -544,7 +545,7 @@ namespace ai_engine_module const label_t label = static_cast(box.index); if (!is_valid_label(label)) continue; - // if (box.left < 1200 || box.top < 159 || box.right > 1307 || box.bottom > 212) continue; // 限制红绿灯的出现位置(泰兴黄桥锦润福府路口) + if (box.left < 1200 || box.top < 159 || box.right > 1307 || box.bottom > 212) continue; // 限制红绿灯的出现位置(泰兴黄桥锦润福府路口)==================24.1.3 LOG_TRACE("task id is {} obj_id {} label {} index {} score {}", task_id, objId, label, box.index, box.confidence); red_cnt ++; } @@ -622,10 +623,12 @@ namespace ai_engine_module result.taskId = det_result.taskId; result.objId = det_result.objId; result.algor_type = algor_type; -#if 0 /*暂不保存报警时刻的抓拍图,有需要再启用*/ +#if 1 /*抓拍大图*/ // 原图 vpc_img_info src_img_info = VPCUtil::vpc_devMem2vpcImg(src_img); result.origin_img_desc = src_img_info.pic_desc; +#endif +#if 0 /*暂不保存报警时刻的抓拍图,有需要再启用*/ // 抠图--拷贝后赋值 void *outputDataDev = acldvppGetPicDescData(flattened_vpc_imgs[n].pic_desc); int nBufferSize = acldvppGetPicDescSize(flattened_vpc_imgs[n].pic_desc); @@ -658,9 +661,9 @@ namespace ai_engine_module e.reset(); } - +#if 0 VPCUtil::vpc_img_release(flattened_vpc_imgs[n]); //flattened_imgs[n].data_ - +#endif } } diff --git a/src/ai_engine_module/tricycle_manned_process.cpp b/src/ai_engine_module/tricycle_manned_process.cpp index a75f3cc..3763dba 100644 --- a/src/ai_engine_module/tricycle_manned_process.cpp +++ b/src/ai_engine_module/tricycle_manned_process.cpp @@ -168,6 +168,7 @@ namespace ai_engine_module data.box.left = left; data.box.right = right; data.box.bottom = bottom; + data.box.cls = box.index; data.box.score = box.confidence; data.taskId = taskId; data.objId = box.id; diff --git a/src/ai_engine_module/truck_manned_process.cpp b/src/ai_engine_module/truck_manned_process.cpp index 2eb6bc7..8e802bc 100644 --- a/src/ai_engine_module/truck_manned_process.cpp +++ b/src/ai_engine_module/truck_manned_process.cpp @@ -302,7 +302,7 @@ namespace ai_engine_module data.box.top = top; data.box.left = left; data.box.right = right; data.box.bottom = bottom; - data.box.score = box.confidence; + data.box.score = box.confidence; data.box.cls = box.index; data.taskId = taskId; data.objId = box.id; data.id = obj_key_t{ box.id, taskId, algorithm_type_t::TRUCK_MANNED }; data.person_motocycle_cnt = person_motocycle_inarea; diff --git a/src/ai_platform/MultiSourceProcess.cpp b/src/ai_platform/MultiSourceProcess.cpp index 2229f33..0fdf903 100755 --- a/src/ai_platform/MultiSourceProcess.cpp +++ b/src/ai_platform/MultiSourceProcess.cpp @@ -1658,7 +1658,8 @@ void CMultiSourceProcess::village_snapshot(vector& vpt_interest_task_id, std::string video_folder = "", result_folder = "", result_folder_little = ""; //要求各事件使用同一个视频保存地址,否则会被最后一个事件的地址覆盖 auto task_other_params = m_task_param_manager->get_task_other_param(task_id); std::vector algorithm_types; - bool save_single_algor_pic = false; // 是否保存单算法的报警图片(若设置为true需先去掉算法内部注释!!!) + std::vector alarm_snapshots; + bool save_single_algor_pic = true; // 是否保存单算法的报警图片(若设置为true需先去掉算法内部注释!!!) if (task_param_ptr->nonmotor_vehicle_algors.find(algorithm_type_t::TRICYCLE_MANNED) != task_param_ptr->nonmotor_vehicle_algors.end()) { const auto &algor_other_params = task_other_params->find(algorithm_type_t::TRICYCLE_MANNED); @@ -1673,9 +1674,11 @@ void CMultiSourceProcess::village_snapshot(vector& vpt_interest_task_id, 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 (save_single_algor_pic) { - auto json_str = helpers::gen_json::gen_manned_json(obj_key.video_id, obj_key.obj_id, result->box, algorithm_type_t::TRICYCLE_MANNED); - save_snapshot_process(obj_key, algorithm_type_t::TRICYCLE_MANNED, src_img, roi_img, 0, json_str); + // if (save_single_algor_pic) { + if (0) { + ai_engine_module::Alarm_Snapshot alarm_snapshot; alarm_snapshot.algor_type = (int)algorithm_type_t::TRICYCLE_MANNED; + alarm_snapshot.snapShot = src_img; alarm_snapshot.snapShotLittle = roi_img; alarm_snapshot.box = result->box; + alarm_snapshots.push_back(alarm_snapshot); } else { VPCUtil::vpc_img_release(src_img); VPCUtil::vpc_img_release(roi_img); } @@ -1696,9 +1699,11 @@ void CMultiSourceProcess::village_snapshot(vector& vpt_interest_task_id, 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 (save_single_algor_pic) { - auto json_str = helpers::gen_json::gen_manned_json(obj_key.video_id, obj_key.obj_id, result->box, algorithm_type_t::TRUCK_MANNED); - save_snapshot_process(obj_key, algorithm_type_t::TRUCK_MANNED, src_img, roi_img, 0, json_str); + // if (save_single_algor_pic) { + if (0) { + ai_engine_module::Alarm_Snapshot alarm_snapshot; alarm_snapshot.algor_type = (int)algorithm_type_t::TRUCK_MANNED; + alarm_snapshot.snapShot = src_img; alarm_snapshot.snapShotLittle = roi_img; alarm_snapshot.box = result->box; + alarm_snapshots.push_back(alarm_snapshot); } else { VPCUtil::vpc_img_release(src_img); VPCUtil::vpc_img_release(roi_img); } @@ -1721,9 +1726,11 @@ void CMultiSourceProcess::village_snapshot(vector& vpt_interest_task_id, 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 (save_single_algor_pic) { - auto json_str = helpers::gen_json::gen_manned_json(obj_key.video_id, obj_key.obj_id, result->box, motorhs_algor.at(idx)); - save_snapshot_process(obj_key, motorhs_algor.at(idx), src_img, roi_img, 0, json_str); + // if (save_single_algor_pic) { + if (0) { + ai_engine_module::Alarm_Snapshot alarm_snapshot; alarm_snapshot.algor_type = (int)motorhs_algor.at(idx); + alarm_snapshot.snapShot = src_img; alarm_snapshot.snapShotLittle = roi_img; alarm_snapshot.box = result->box; + alarm_snapshots.push_back(alarm_snapshot); } else { VPCUtil::vpc_img_release(src_img); VPCUtil::vpc_img_release(roi_img); } @@ -1746,9 +1753,11 @@ void CMultiSourceProcess::village_snapshot(vector& vpt_interest_task_id, 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 (save_single_algor_pic) { - auto json_str = helpers::gen_json::gen_manned_json(obj_key.video_id, obj_key.obj_id, result->box, algorithm_type_t::NONMOTOR_VEHICLE_USEPHONE); - save_snapshot_process(obj_key, algorithm_type_t::NONMOTOR_VEHICLE_USEPHONE, src_img, roi_img, 0, json_str); + // if (save_single_algor_pic) { + if (0) { + ai_engine_module::Alarm_Snapshot alarm_snapshot; alarm_snapshot.algor_type = (int)algorithm_type_t::NONMOTOR_VEHICLE_USEPHONE; + alarm_snapshot.snapShot = src_img; alarm_snapshot.snapShotLittle = roi_img; alarm_snapshot.box = result->box; + alarm_snapshots.push_back(alarm_snapshot); } else { VPCUtil::vpc_img_release(src_img); VPCUtil::vpc_img_release(roi_img); } @@ -1770,9 +1779,11 @@ void CMultiSourceProcess::village_snapshot(vector& vpt_interest_task_id, 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 (save_single_algor_pic) { - auto json_str = helpers::gen_json::gen_manned_json(obj_key.video_id, obj_key.obj_id, result->box, algorithm_type_t::NONMOTOR_VEHICLE_REFIT); - save_snapshot_process(obj_key, algorithm_type_t::NONMOTOR_VEHICLE_REFIT, src_img, roi_img, 0, json_str); + // if (save_single_algor_pic) { + if (0) { + ai_engine_module::Alarm_Snapshot alarm_snapshot; alarm_snapshot.algor_type = (int)algorithm_type_t::NONMOTOR_VEHICLE_REFIT; + alarm_snapshot.snapShot = src_img; alarm_snapshot.snapShotLittle = roi_img; alarm_snapshot.box = result->box; + alarm_snapshots.push_back(alarm_snapshot); } else { VPCUtil::vpc_img_release(src_img); VPCUtil::vpc_img_release(roi_img); } @@ -1796,8 +1807,11 @@ void CMultiSourceProcess::village_snapshot(vector& vpt_interest_task_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 (save_single_algor_pic) { - auto json_str = helpers::gen_json::gen_manned_json(obj_key.video_id, obj_key.obj_id, result->box, trafficlight_algor.at(idx)); - save_snapshot_process(obj_key, trafficlight_algor.at(idx), src_img, roi_img, 0, json_str); + // auto json_str = helpers::gen_json::gen_manned_json(obj_key.video_id, obj_key.obj_id, result->box, trafficlight_algor.at(idx)); + // save_snapshot_process(obj_key, trafficlight_algor.at(idx), src_img, roi_img, 0, json_str); + ai_engine_module::Alarm_Snapshot alarm_snapshot; alarm_snapshot.algor_type = (int)trafficlight_algor.at(idx); + alarm_snapshot.snapShot = src_img; alarm_snapshot.snapShotLittle = roi_img; alarm_snapshot.box = result->box; + alarm_snapshots.push_back(alarm_snapshot); } else { VPCUtil::vpc_img_release(src_img); VPCUtil::vpc_img_release(roi_img); } @@ -1822,9 +1836,11 @@ void CMultiSourceProcess::village_snapshot(vector& vpt_interest_task_id, 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 (save_single_algor_pic) { - auto json_str = helpers::gen_json::gen_manned_json(obj_key.video_id, obj_key.obj_id, result->box, roadseg_algor.at(idx)); - save_snapshot_process(obj_key, roadseg_algor.at(idx), src_img, roi_img, 0, json_str); + if (save_single_algor_pic && (roadseg_algor.at(idx) == algorithm_type_t::PERSON_CROSS || roadseg_algor.at(idx) == algorithm_type_t::NONMOTOR_CEOSSPARKLINE || + roadseg_algor.at(idx) == algorithm_type_t::VEHICLE_NOTGIVEWAY || roadseg_algor.at(idx) == algorithm_type_t::VEHICLE_SOLIDLINETURNAROUND)) { + ai_engine_module::Alarm_Snapshot alarm_snapshot; alarm_snapshot.algor_type = (int)roadseg_algor.at(idx); + alarm_snapshot.snapShot = src_img; alarm_snapshot.snapShotLittle = roi_img; alarm_snapshot.box = result->box; + alarm_snapshots.push_back(alarm_snapshot); } else { VPCUtil::vpc_img_release(src_img); VPCUtil::vpc_img_release(roi_img); } @@ -1842,13 +1858,21 @@ void CMultiSourceProcess::village_snapshot(vector& vpt_interest_task_id, map _total_snapshot_info = m_snapshot_reprocessing->get_total_village_snapshot_info(); - if(_total_snapshot_info.size() <= 0){ + if(_total_snapshot_info.size() <= 0) { + for (int sp_idx = 0; sp_idx < alarm_snapshots.size(); sp_idx ++) { + VPCUtil::vpc_img_release(alarm_snapshots[sp_idx].snapShot); + VPCUtil::vpc_img_release(alarm_snapshots[sp_idx].snapShotLittle); + } continue; } LOG_DEBUG("_total_snapshot_info size: {}", _total_snapshot_info.size()); auto it = _total_snapshot_info.find(obj_key); if (it == _total_snapshot_info.end()) { + for (int sp_idx = 0; sp_idx < alarm_snapshots.size(); sp_idx ++) { + VPCUtil::vpc_img_release(alarm_snapshots[sp_idx].snapShot); + VPCUtil::vpc_img_release(alarm_snapshots[sp_idx].snapShotLittle); + } continue; } @@ -1883,6 +1907,7 @@ void CMultiSourceProcess::village_snapshot(vector& vpt_interest_task_id, string json_str = ""; std::vector algo_results; + // 存轨迹抓拍图 for (int sp_idx = 0; sp_idx < 3; sp_idx ++) { int num = sp_idx + 1; // 原图 @@ -1899,12 +1924,15 @@ void CMultiSourceProcess::village_snapshot(vector& vpt_interest_task_id, LOG_DEBUG("抠图"); // 抠图 - string object_file_name = result_folder_little + helpers::os::sep + obj_key.video_id + "_" + - std::to_string(obj_key.obj_id) + "_" + cur_timestamp_ms + "_picnum_" + std::to_string(num) + ".jpg"; - ImgSaveInfo obj_save_info; - obj_save_info.file_path = object_file_name; - obj_save_info.img_info = obj_value.snapShots[sp_idx].snapShotLittle; - m_save_snapshot_reprocessing->reprocessing_process_wo_locus_async(obj_save_info); + string object_file_name = ""; + if (num == 2) { //暂不存最佳抓拍之外的小图,注意和update_village_bestsnapshot对应 + object_file_name = result_folder_little + helpers::os::sep + obj_key.video_id + "_" + + std::to_string(obj_key.obj_id) + "_" + cur_timestamp_ms + "_picnum_" + std::to_string(num) + ".jpg"; + ImgSaveInfo obj_save_info; + obj_save_info.file_path = object_file_name; + obj_save_info.img_info = obj_value.snapShots[sp_idx].snapShotLittle; + m_save_snapshot_reprocessing->reprocessing_process_wo_locus_async(obj_save_info); + } #ifdef POST_USE_RABBITMQ video_object_snapshot new_obj_ss_info; @@ -1920,6 +1948,44 @@ void CMultiSourceProcess::village_snapshot(vector& vpt_interest_task_id, #endif } + // 存报警抓拍图 + for (int sp_idx = 0; sp_idx < alarm_snapshots.size(); sp_idx ++) { + int num = sp_idx + 4; + // 原图 + std::string fpath_origin = result_folder + helpers::os::sep + obj_key.video_id + "_" + std::to_string(obj_key.obj_id) + "_" + + cur_timestamp_ms + "_picnum_" + std::to_string(num) + "_" + std::to_string(alarm_snapshots[sp_idx].algor_type) + ".jpg"; + + ImgSaveInfo origin_save_info; + origin_save_info.file_path = fpath_origin; + origin_save_info.img_info = alarm_snapshots[sp_idx].snapShot; + m_save_snapshot_reprocessing->reprocessing_process_wo_locus_async(origin_save_info); + +#if 1 /*不保存抠图*/ + string object_file_name = ""; +#else + // 抠图 + string object_file_name = result_folder_little + helpers::os::sep + obj_key.video_id + "_" + std::to_string(obj_key.obj_id) + "_" + + cur_timestamp_ms + "_picnum_" + std::to_string(num) + "_" + std::to_string(alarm_snapshots[sp_idx].algor_type) + ".jpg"; + ImgSaveInfo obj_save_info; + obj_save_info.file_path = object_file_name; + obj_save_info.img_info = alarm_snapshots[sp_idx].snapShotLittle; + m_save_snapshot_reprocessing->reprocessing_process_wo_locus_async(obj_save_info); +#endif + +#ifdef POST_USE_RABBITMQ + video_object_snapshot new_obj_ss_info; + new_obj_ss_info.analysisRes = nullptr; + new_obj_ss_info.object_id = obj_key.obj_id; + new_obj_ss_info.obj_info.set_data(alarm_snapshots[sp_idx].box.cls, alarm_snapshots[sp_idx].box.score, alarm_snapshots[sp_idx].box.left, + alarm_snapshots[sp_idx].box.top, alarm_snapshots[sp_idx].box.right, alarm_snapshots[sp_idx].box.bottom); + strcpy(new_obj_ss_info.task_id, obj_key.video_id.c_str()); + strcpy(new_obj_ss_info.video_image_path, fpath_origin.c_str()); + strcpy(new_obj_ss_info.snapshot_image_path, object_file_name.c_str()); + algo_results.push_back(new_obj_ss_info); +#endif + } + std::vector().swap(alarm_snapshots); + #ifdef POST_USE_RABBITMQ json_str = helpers::gen_json::gen_village_json(task_id, obj_key.obj_id, algorithm_types, algo_results, video_file_name); #endif diff --git a/src/demo/demo.cpp b/src/demo/demo.cpp index 118975b..74dc31e 100755 --- a/src/demo/demo.cpp +++ b/src/demo/demo.cpp @@ -12,23 +12,23 @@ using namespace std; void init_mq_conn(void *handle) { for (auto key : {mq_type_t::ALARM_MQ, mq_type_t::GET_TASK_MQ, mq_type_t::HEART_BEAT_MQ, mq_type_t::SCREENSHORT_TASK_MQ, mq_type_t::TIMING_SCREENSHORT_TASK_MQ}) { rabbitmq_conn_params_t mq_conn_params; - mq_conn_params.port = 5672; - strcpy(mq_conn_params.ip, "192.168.60.126"); - strcpy(mq_conn_params.uname, "admin"); - strcpy(mq_conn_params.passwd, "123456"); - strcpy(mq_conn_params.vhost, "/"); - strcpy(mq_conn_params.exchange, "topExchange"); - strcpy(mq_conn_params.exchange_type, "topic"); - - // mq_conn_params.port = 5673; - // strcpy(mq_conn_params.ip, "192.168.10.187"); + // mq_conn_params.port = 5672; + // strcpy(mq_conn_params.ip, "192.168.60.126"); // strcpy(mq_conn_params.uname, "admin"); - // strcpy(mq_conn_params.passwd, "admin123456"); + // strcpy(mq_conn_params.passwd, "123456"); // strcpy(mq_conn_params.vhost, "/"); // strcpy(mq_conn_params.exchange, "topExchange"); // strcpy(mq_conn_params.exchange_type, "topic"); + mq_conn_params.port = 5673; + strcpy(mq_conn_params.ip, "192.168.10.187"); + strcpy(mq_conn_params.uname, "admin"); + strcpy(mq_conn_params.passwd, "admin123456"); + strcpy(mq_conn_params.vhost, "/"); + strcpy(mq_conn_params.exchange, "topExchange"); + strcpy(mq_conn_params.exchange_type, "topic"); + switch (key) { case mq_type_t::ALARM_MQ: { strcpy(mq_conn_params.queue, "topic.queue.alarm"); @@ -1121,7 +1121,7 @@ void test_gpu(int gpuID){ std::vector algor_vec3 = {algorithm_type_t::PERSON_CROSS, algorithm_type_t::NONMOTOR_WRONGDIRECTION, algorithm_type_t::VEHICLE_WRONGDIRECTION, algorithm_type_t::VEHICLE_NOTGIVEWAY, algorithm_type_t::VEHICLE_SOLIDLINETURNAROUND}; - +/* int repeat_num = 1000; createTask(handle, algor_vec2, 0, false); createTask(handle, algor_vec2, 2, false); @@ -1141,9 +1141,9 @@ void test_gpu(int gpuID){ sleep(5); } - } + }*/ - /* + char ch = 'a'; while (ch != 'q') { ch = getchar(); @@ -1153,10 +1153,10 @@ void test_gpu(int gpuID){ createTask(handle, algor_vec2, 4, false); createTask(handle, algor_vec2, 5, false); createTask(handle, algor_vec2, 6, false); - createTask(handle, algor_vec2, 7, false); + // createTask(handle, algor_vec2, 7, false); createTask(handle, algor_vec2, 8, false); createTask(handle, algor_vec2, 9, false); - createTask(handle, algor_vec2, 10, false); + // createTask(handle, algor_vec2, 10, false); // createTask(handle, algor_vec2, 11, false); // createTask(handle, algor_vec2, 12, false); // createTask(handle, algor_vec2, 13, false); @@ -1173,7 +1173,7 @@ void test_gpu(int gpuID){ break; } - }*/ + } // finish_task(handle, (char*)task_id.data(), 0); diff --git a/src/reprocessing_module/snapshot_reprocessing.cpp b/src/reprocessing_module/snapshot_reprocessing.cpp index 3a6ed9b..8485dfd 100755 --- a/src/reprocessing_module/snapshot_reprocessing.cpp +++ b/src/reprocessing_module/snapshot_reprocessing.cpp @@ -435,20 +435,25 @@ void snapshot_reprocessing::update_village_bestsnapshot(vector ve vec_obj_info.push_back(info);//用于最佳抓拍图 // 首张抓拍图:切图+信息存储 - vpc_img_info crop_img = pVpcUtil->crop(memPtr, info); total_village_snapshot_info[new_obj].exists[0] = true; total_village_snapshot_info[new_obj].snapShots[0].index.index = cur_real_index; total_village_snapshot_info[new_obj].snapShots[0].confidence = obj_info.confidence; total_village_snapshot_info[new_obj].snapShots[0].obj_pos = { cur_left, cur_top, cur_right - cur_left, cur_bottom - cur_top }; total_village_snapshot_info[new_obj].snapShots[0].snapShot = VPCUtil::vpc_devMem2vpcImg(memPtr); +#if 0 /*暂不存最佳抓拍之外的小图*/ + vpc_img_info crop_img = pVpcUtil->crop(memPtr, info); total_village_snapshot_info[new_obj].snapShots[0].snapShotLittle = crop_img; - +#endif // 缓存末张抓拍图 total_village_snapshot_info[new_obj].exists[2] = true; total_village_snapshot_info[new_obj].snapShots[2].index.index = cur_real_index; total_village_snapshot_info[new_obj].snapShots[2].confidence = obj_info.confidence; total_village_snapshot_info[new_obj].snapShots[2].obj_pos = { cur_left, cur_top, cur_right - cur_left, cur_bottom - cur_top }; +#if 0 /*暂不存最佳抓拍之外的小图*/ last_vec_obj_info.push_back(info); +#else + total_village_snapshot_info[new_obj].snapShots[2].snapShot = VPCUtil::vpc_devMem2vpcImg(memPtr); +#endif } else { total_village_snapshot_info[new_obj].snapShots[1].last_area = (obj_info.right - obj_info.left) * (obj_info.bottom - obj_info.top); @@ -490,7 +495,12 @@ void snapshot_reprocessing::update_village_bestsnapshot(vector ve total_village_snapshot_info[new_obj].snapShots[2].index.index = cur_real_index; total_village_snapshot_info[new_obj].snapShots[2].confidence = obj_info.confidence; total_village_snapshot_info[new_obj].snapShots[2].obj_pos = { cur_left, cur_top, cur_right - cur_left, cur_bottom - cur_top }; +#if 0 /*暂不存最佳抓拍之外的小图*/ last_vec_obj_info.push_back(info); +#else + VPCUtil::vpc_img_release(total_village_snapshot_info[new_obj].snapShots[2].snapShot); + total_village_snapshot_info[new_obj].snapShots[2].snapShot = VPCUtil::vpc_devMem2vpcImg(memPtr); +#endif //--------------------------------------------------------------- if (!best_snapshot_judge_algor(new_obj, total_village_snapshot_info[new_obj].snapShots[1], obj_info.left, obj_info.top, cur_real_width, cur_real_height, frame_width, frame_height)) @@ -530,7 +540,7 @@ void snapshot_reprocessing::update_village_bestsnapshot(vector ve total_village_snapshot_info[objKey].snapShots[1].snapShotLittle = obj_info; } imgList.clear(); - +#if 0 /*暂不存最佳抓拍之外的小图*/ vector last_imgList = pVpcUtil->crop_batch(memPtr, last_vec_obj_info); last_vec_obj_info.clear(); for (size_t i = 0; i < last_imgList.size(); i++) { @@ -542,6 +552,7 @@ void snapshot_reprocessing::update_village_bestsnapshot(vector ve total_village_snapshot_info[objKey].snapShots[2].snapShotLittle = obj_info; } last_imgList.clear(); +#endif } }