From ed1887dfb0c7c85107635f7bf1257c267945b18a Mon Sep 17 00:00:00 2001 From: cmhu <2657262686@qq.com> Date: Mon, 2 Dec 2024 17:32:11 +0800 Subject: [PATCH] 修复限制目标结果数量导致漏目标情形保存图片报错的问题 --- src/ai_platform/MultiSourceProcess.cpp | 51 +++++++++++++++++++++++++++++++++++---------------- src/reprocessing_module/save_snapshot_reprocessing.cpp | 3 +++ src/reprocessing_module/snapshot_reprocessing.cpp | 5 +++++ src/util/JpegUtil.cpp | 5 +++++ 4 files changed, 48 insertions(+), 16 deletions(-) diff --git a/src/ai_platform/MultiSourceProcess.cpp b/src/ai_platform/MultiSourceProcess.cpp index f8292eb..48cf7bc 100755 --- a/src/ai_platform/MultiSourceProcess.cpp +++ b/src/ai_platform/MultiSourceProcess.cpp @@ -28,7 +28,7 @@ #define WITH_FACE_DET_SS -#define AUTHORIZATION +// #define AUTHORIZATION #define productSN "51C4B28135604F649671727185949A91" //linux 通途抓拍引擎产品序列号 using namespace std; @@ -507,7 +507,10 @@ int CMultiSourceProcess::snapshot_task(std::string& uri_or_name, const std::stri acldvppSetPicDescHeightStride(vpcDesc, devMem->getHeightStride()); acldvppSetPicDescSize(vpcDesc, devMem->getSize()); - jpegUtil.jpeg_encode(vpcDesc, file_name); + bool bSaved = jpegUtil.jpeg_encode(vpcDesc, file_name); + if(!bSaved){ + LOG_ERROR("jpeg_encode failed"); + } acldvppDestroyPicDesc(vpcDesc); @@ -1220,7 +1223,10 @@ void CMultiSourceProcess::timing_snapshot_thread(){ acldvppSetPicDescHeightStride(vpcDesc, devMem->getHeightStride()); acldvppSetPicDescSize(vpcDesc, devMem->getSize()); - jpegUtil.jpeg_encode(vpcDesc, fpath_ori); + bool bSaved = jpegUtil.jpeg_encode(vpcDesc, fpath_ori); + if(!bSaved){ + LOG_ERROR("jpeg_encode failed"); + } acldvppDestroyPicDesc(vpcDesc); vpcDesc = nullptr; @@ -1856,6 +1862,9 @@ void CMultiSourceProcess::village_snapshot(vector& vpt_interest_task_id, std::vector algo_results; for (int sp_idx = 0; sp_idx < 3; sp_idx ++) { int num = sp_idx + 1; + + bool bData = false; + // 原图 // LOG_DEBUG("原图"); std::string fpath_origin = result_folder + helpers::os::sep + obj_key.video_id + "_" + @@ -1865,9 +1874,12 @@ void CMultiSourceProcess::village_snapshot(vector& vpt_interest_task_id, origin_save_info.file_path = fpath_origin; origin_save_info.img_info = obj_value.snapShots[sp_idx].snapShot; origin_save_info.obj_rect = obj_value.snapShots[sp_idx].obj_pos; - m_save_snapshot_reprocessing->reprocessing_process_wo_locus_async(origin_save_info); + if(origin_save_info.img_info.pic_desc) { + // 限制长度导致漏目标的情况会没有图片数据信息 + m_save_snapshot_reprocessing->reprocessing_process_wo_locus_async(origin_save_info); + bData = true; + } - // LOG_DEBUG("抠图"); // 抠图 string object_file_name = result_folder_little + helpers::os::sep + obj_key.video_id + "_" + @@ -1875,19 +1887,26 @@ void CMultiSourceProcess::village_snapshot(vector& vpt_interest_task_id, 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); + if(obj_save_info.img_info.pic_desc){ + // 限制长度导致漏目标的情况会没有图片数据信息 + m_save_snapshot_reprocessing->reprocessing_process_wo_locus_async(obj_save_info); + bData = true; + } + #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(obj_value.snapShots[sp_idx].index.index, obj_value.snapShots[sp_idx].confidence, obj_value.snapShots[sp_idx].obj_pos.left_, - obj_value.snapShots[sp_idx].obj_pos.top_, obj_value.snapShots[sp_idx].obj_pos.left_ + obj_value.snapShots[sp_idx].obj_pos.width_, - obj_value.snapShots[sp_idx].obj_pos.top_ + obj_value.snapShots[sp_idx].obj_pos.height_); - 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); + if(bData) { + 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(obj_value.snapShots[sp_idx].index.index, obj_value.snapShots[sp_idx].confidence, obj_value.snapShots[sp_idx].obj_pos.left_, + obj_value.snapShots[sp_idx].obj_pos.top_, obj_value.snapShots[sp_idx].obj_pos.left_ + obj_value.snapShots[sp_idx].obj_pos.width_, + obj_value.snapShots[sp_idx].obj_pos.top_ + obj_value.snapShots[sp_idx].obj_pos.height_); + 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 } diff --git a/src/reprocessing_module/save_snapshot_reprocessing.cpp b/src/reprocessing_module/save_snapshot_reprocessing.cpp index e3ea0a4..b783c52 100755 --- a/src/reprocessing_module/save_snapshot_reprocessing.cpp +++ b/src/reprocessing_module/save_snapshot_reprocessing.cpp @@ -96,6 +96,9 @@ void save_snapshot_reprocessing::save_img_process() { bool bSaved = false; if(!cur_image.file_path.empty()){ bSaved = jpegUtil.jpeg_encode(cur_image.img_info.pic_desc, cur_image.file_path); + if(!bSaved){ + LOG_ERROR("jpeg_encode failed"); + } } VPCUtil::vpc_img_release(cur_image.img_info); diff --git a/src/reprocessing_module/snapshot_reprocessing.cpp b/src/reprocessing_module/snapshot_reprocessing.cpp index 3a6ed9b..1fa4708 100755 --- a/src/reprocessing_module/snapshot_reprocessing.cpp +++ b/src/reprocessing_module/snapshot_reprocessing.cpp @@ -383,6 +383,11 @@ void snapshot_reprocessing::update_village_bestsnapshot(vector ve /* 若该目标第一次出现 */ if (total_village_snapshot_info.find(new_obj) == total_village_snapshot_info.end()) { + if (total_village_snapshot_info.size() > 400) + {//确保显存不会无限增长 + return; + } + /* manager insert new object. */ /* 判断目标合法 */ if (!(algor_config_param.count(task_id) && algor_param.count(task_id))) diff --git a/src/util/JpegUtil.cpp b/src/util/JpegUtil.cpp index 2fcc63a..82ff987 100755 --- a/src/util/JpegUtil.cpp +++ b/src/util/JpegUtil.cpp @@ -68,6 +68,11 @@ int32_t JpegUtil::jpege_save(char* pcData , uint32_t dataLen, string out_file_na bool JpegUtil::jpeg_encode(acldvppPicDesc *encodeInputDesc_, string out_file_name) { + if (nullptr == encodeInputDesc_) { + LOG_ERROR("encodeInputDesc_ is nullptr!"); + return false; + } + aclError aclRet ; aclRet = aclrtSetDevice(deviceId_); aclrtSetCurrentContext(context_); -- libgit2 0.21.4