Commit ed1887dfb0c7c85107635f7bf1257c267945b18a

Authored by Hu Chunming
1 parent 60108b8b

修复限制目标结果数量导致漏目标情形保存图片报错的问题

src/ai_platform/MultiSourceProcess.cpp
@@ -28,7 +28,7 @@ @@ -28,7 +28,7 @@
28 28
29 #define WITH_FACE_DET_SS 29 #define WITH_FACE_DET_SS
30 30
31 -#define AUTHORIZATION 31 +// #define AUTHORIZATION
32 #define productSN "51C4B28135604F649671727185949A91" //linux 通途抓拍引擎产品序列号 32 #define productSN "51C4B28135604F649671727185949A91" //linux 通途抓拍引擎产品序列号
33 33
34 using namespace std; 34 using namespace std;
@@ -507,7 +507,10 @@ int CMultiSourceProcess::snapshot_task(std::string& uri_or_name, const std::stri @@ -507,7 +507,10 @@ int CMultiSourceProcess::snapshot_task(std::string& uri_or_name, const std::stri
507 acldvppSetPicDescHeightStride(vpcDesc, devMem->getHeightStride()); 507 acldvppSetPicDescHeightStride(vpcDesc, devMem->getHeightStride());
508 acldvppSetPicDescSize(vpcDesc, devMem->getSize()); 508 acldvppSetPicDescSize(vpcDesc, devMem->getSize());
509 509
510 - jpegUtil.jpeg_encode(vpcDesc, file_name); 510 + bool bSaved = jpegUtil.jpeg_encode(vpcDesc, file_name);
  511 + if(!bSaved){
  512 + LOG_ERROR("jpeg_encode failed");
  513 + }
511 514
512 acldvppDestroyPicDesc(vpcDesc); 515 acldvppDestroyPicDesc(vpcDesc);
513 516
@@ -1220,7 +1223,10 @@ void CMultiSourceProcess::timing_snapshot_thread(){ @@ -1220,7 +1223,10 @@ void CMultiSourceProcess::timing_snapshot_thread(){
1220 acldvppSetPicDescHeightStride(vpcDesc, devMem->getHeightStride()); 1223 acldvppSetPicDescHeightStride(vpcDesc, devMem->getHeightStride());
1221 acldvppSetPicDescSize(vpcDesc, devMem->getSize()); 1224 acldvppSetPicDescSize(vpcDesc, devMem->getSize());
1222 1225
1223 - jpegUtil.jpeg_encode(vpcDesc, fpath_ori); 1226 + bool bSaved = jpegUtil.jpeg_encode(vpcDesc, fpath_ori);
  1227 + if(!bSaved){
  1228 + LOG_ERROR("jpeg_encode failed");
  1229 + }
1224 1230
1225 acldvppDestroyPicDesc(vpcDesc); 1231 acldvppDestroyPicDesc(vpcDesc);
1226 vpcDesc = nullptr; 1232 vpcDesc = nullptr;
@@ -1856,6 +1862,9 @@ void CMultiSourceProcess::village_snapshot(vector<string>& vpt_interest_task_id, @@ -1856,6 +1862,9 @@ void CMultiSourceProcess::village_snapshot(vector<string>& vpt_interest_task_id,
1856 std::vector<video_object_snapshot> algo_results; 1862 std::vector<video_object_snapshot> algo_results;
1857 for (int sp_idx = 0; sp_idx < 3; sp_idx ++) { 1863 for (int sp_idx = 0; sp_idx < 3; sp_idx ++) {
1858 int num = sp_idx + 1; 1864 int num = sp_idx + 1;
  1865 +
  1866 + bool bData = false;
  1867 +
1859 // 原图 1868 // 原图
1860 // LOG_DEBUG("原图"); 1869 // LOG_DEBUG("原图");
1861 std::string fpath_origin = result_folder + helpers::os::sep + obj_key.video_id + "_" + 1870 std::string fpath_origin = result_folder + helpers::os::sep + obj_key.video_id + "_" +
@@ -1865,9 +1874,12 @@ void CMultiSourceProcess::village_snapshot(vector&lt;string&gt;&amp; vpt_interest_task_id, @@ -1865,9 +1874,12 @@ void CMultiSourceProcess::village_snapshot(vector&lt;string&gt;&amp; vpt_interest_task_id,
1865 origin_save_info.file_path = fpath_origin; 1874 origin_save_info.file_path = fpath_origin;
1866 origin_save_info.img_info = obj_value.snapShots[sp_idx].snapShot; 1875 origin_save_info.img_info = obj_value.snapShots[sp_idx].snapShot;
1867 origin_save_info.obj_rect = obj_value.snapShots[sp_idx].obj_pos; 1876 origin_save_info.obj_rect = obj_value.snapShots[sp_idx].obj_pos;
1868 - m_save_snapshot_reprocessing->reprocessing_process_wo_locus_async(origin_save_info); 1877 + if(origin_save_info.img_info.pic_desc) {
  1878 + // 限制长度导致漏目标的情况会没有图片数据信息
  1879 + m_save_snapshot_reprocessing->reprocessing_process_wo_locus_async(origin_save_info);
  1880 + bData = true;
  1881 + }
1869 1882
1870 -  
1871 // LOG_DEBUG("抠图"); 1883 // LOG_DEBUG("抠图");
1872 // 抠图 1884 // 抠图
1873 string object_file_name = result_folder_little + helpers::os::sep + obj_key.video_id + "_" + 1885 string object_file_name = result_folder_little + helpers::os::sep + obj_key.video_id + "_" +
@@ -1875,19 +1887,26 @@ void CMultiSourceProcess::village_snapshot(vector&lt;string&gt;&amp; vpt_interest_task_id, @@ -1875,19 +1887,26 @@ void CMultiSourceProcess::village_snapshot(vector&lt;string&gt;&amp; vpt_interest_task_id,
1875 ImgSaveInfo obj_save_info; 1887 ImgSaveInfo obj_save_info;
1876 obj_save_info.file_path = object_file_name; 1888 obj_save_info.file_path = object_file_name;
1877 obj_save_info.img_info = obj_value.snapShots[sp_idx].snapShotLittle; 1889 obj_save_info.img_info = obj_value.snapShots[sp_idx].snapShotLittle;
1878 - m_save_snapshot_reprocessing->reprocessing_process_wo_locus_async(obj_save_info); 1890 + if(obj_save_info.img_info.pic_desc){
  1891 + // 限制长度导致漏目标的情况会没有图片数据信息
  1892 + m_save_snapshot_reprocessing->reprocessing_process_wo_locus_async(obj_save_info);
  1893 + bData = true;
  1894 + }
  1895 +
1879 1896
1880 #ifdef POST_USE_RABBITMQ 1897 #ifdef POST_USE_RABBITMQ
1881 - video_object_snapshot new_obj_ss_info;  
1882 - new_obj_ss_info.analysisRes = nullptr;  
1883 - new_obj_ss_info.object_id = obj_key.obj_id;  
1884 - 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_,  
1885 - obj_value.snapShots[sp_idx].obj_pos.top_, obj_value.snapShots[sp_idx].obj_pos.left_ + obj_value.snapShots[sp_idx].obj_pos.width_,  
1886 - obj_value.snapShots[sp_idx].obj_pos.top_ + obj_value.snapShots[sp_idx].obj_pos.height_);  
1887 - strcpy(new_obj_ss_info.task_id, obj_key.video_id.c_str());  
1888 - strcpy(new_obj_ss_info.video_image_path, fpath_origin.c_str());  
1889 - strcpy(new_obj_ss_info.snapshot_image_path, object_file_name.c_str());  
1890 - algo_results.push_back(new_obj_ss_info); 1898 + if(bData) {
  1899 + video_object_snapshot new_obj_ss_info;
  1900 + new_obj_ss_info.analysisRes = nullptr;
  1901 + new_obj_ss_info.object_id = obj_key.obj_id;
  1902 + 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_,
  1903 + obj_value.snapShots[sp_idx].obj_pos.top_, obj_value.snapShots[sp_idx].obj_pos.left_ + obj_value.snapShots[sp_idx].obj_pos.width_,
  1904 + obj_value.snapShots[sp_idx].obj_pos.top_ + obj_value.snapShots[sp_idx].obj_pos.height_);
  1905 + strcpy(new_obj_ss_info.task_id, obj_key.video_id.c_str());
  1906 + strcpy(new_obj_ss_info.video_image_path, fpath_origin.c_str());
  1907 + strcpy(new_obj_ss_info.snapshot_image_path, object_file_name.c_str());
  1908 + algo_results.push_back(new_obj_ss_info);
  1909 + }
1891 #endif 1910 #endif
1892 } 1911 }
1893 1912
src/reprocessing_module/save_snapshot_reprocessing.cpp
@@ -96,6 +96,9 @@ void save_snapshot_reprocessing::save_img_process() { @@ -96,6 +96,9 @@ void save_snapshot_reprocessing::save_img_process() {
96 bool bSaved = false; 96 bool bSaved = false;
97 if(!cur_image.file_path.empty()){ 97 if(!cur_image.file_path.empty()){
98 bSaved = jpegUtil.jpeg_encode(cur_image.img_info.pic_desc, cur_image.file_path); 98 bSaved = jpegUtil.jpeg_encode(cur_image.img_info.pic_desc, cur_image.file_path);
  99 + if(!bSaved){
  100 + LOG_ERROR("jpeg_encode failed");
  101 + }
99 } 102 }
100 VPCUtil::vpc_img_release(cur_image.img_info); 103 VPCUtil::vpc_img_release(cur_image.img_info);
101 104
src/reprocessing_module/snapshot_reprocessing.cpp
@@ -383,6 +383,11 @@ void snapshot_reprocessing::update_village_bestsnapshot(vector&lt;DeviceMemory*&gt; ve @@ -383,6 +383,11 @@ void snapshot_reprocessing::update_village_bestsnapshot(vector&lt;DeviceMemory*&gt; ve
383 /* 若该目标第一次出现 */ 383 /* 若该目标第一次出现 */
384 if (total_village_snapshot_info.find(new_obj) == total_village_snapshot_info.end()) 384 if (total_village_snapshot_info.find(new_obj) == total_village_snapshot_info.end())
385 { 385 {
  386 + if (total_village_snapshot_info.size() > 400)
  387 + {//确保显存不会无限增长
  388 + return;
  389 + }
  390 +
386 /* manager insert new object. */ 391 /* manager insert new object. */
387 /* 判断目标合法 */ 392 /* 判断目标合法 */
388 if (!(algor_config_param.count(task_id) && algor_param.count(task_id))) 393 if (!(algor_config_param.count(task_id) && algor_param.count(task_id)))
src/util/JpegUtil.cpp
@@ -68,6 +68,11 @@ int32_t JpegUtil::jpege_save(char* pcData , uint32_t dataLen, string out_file_na @@ -68,6 +68,11 @@ int32_t JpegUtil::jpege_save(char* pcData , uint32_t dataLen, string out_file_na
68 68
69 bool JpegUtil::jpeg_encode(acldvppPicDesc *encodeInputDesc_, string out_file_name) { 69 bool JpegUtil::jpeg_encode(acldvppPicDesc *encodeInputDesc_, string out_file_name) {
70 70
  71 + if (nullptr == encodeInputDesc_) {
  72 + LOG_ERROR("encodeInputDesc_ is nullptr!");
  73 + return false;
  74 + }
  75 +
71 aclError aclRet ; 76 aclError aclRet ;
72 aclRet = aclrtSetDevice(deviceId_); 77 aclRet = aclrtSetDevice(deviceId_);
73 aclrtSetCurrentContext(context_); 78 aclrtSetCurrentContext(context_);