Commit e9099e17a8e5237c8399cddb2e43650e75c55553
Merge branch 'dev-shzhao' into dev-cmhu
Showing
8 changed files
with
418 additions
and
22 deletions
.gitignore
src/ai_platform/MultiSourceProcess.cpp
@@ -736,6 +736,8 @@ int CMultiSourceProcess::algorthim_vpt(vector<DeviceMemory*> vec_gpuMem){ | @@ -736,6 +736,8 @@ int CMultiSourceProcess::algorthim_vpt(vector<DeviceMemory*> vec_gpuMem){ | ||
736 | /* for pedestrian safety det. 行人安全分析算法模块 */ | 736 | /* for pedestrian safety det. 行人安全分析算法模块 */ |
737 | // algorthim_pedestrian_safety(vpt_interest_task_id, vpt_interest_imgs,vptResult); | 737 | // algorthim_pedestrian_safety(vpt_interest_task_id, vpt_interest_imgs,vptResult); |
738 | 738 | ||
739 | + // 农村违法分析的快照缓存 | ||
740 | + m_snapshot_reprocessing->update_village_bestsnapshot(vec_vptMem, vptResult, deleteObjectID); | ||
739 | // 逆行 | 741 | // 逆行 |
740 | algorthim_retrograde(vpt_interest_task_id, vec_vptMem, vptResult); | 742 | algorthim_retrograde(vpt_interest_task_id, vec_vptMem, vptResult); |
741 | retrograde_snapshot(vpt_interest_task_id, deleteObjectID); | 743 | retrograde_snapshot(vpt_interest_task_id, deleteObjectID); |
@@ -1222,12 +1224,22 @@ void CMultiSourceProcess::manned_snapshot(vector<string>& vpt_interest_task_id, | @@ -1222,12 +1224,22 @@ void CMultiSourceProcess::manned_snapshot(vector<string>& vpt_interest_task_id, | ||
1222 | OBJ_KEY obj_key = {*task_iter, j}; | 1224 | OBJ_KEY obj_key = {*task_iter, j}; |
1223 | auto task_param_ptr = m_task_param_manager->get_task_algor_param(obj_key.video_id); | 1225 | auto task_param_ptr = m_task_param_manager->get_task_algor_param(obj_key.video_id); |
1224 | bool tricycle_manned_alarm = false, truck_manned_alarm = false, motor_overman_alarm = false, motor_nohelmet_alarm = false; | 1226 | bool tricycle_manned_alarm = false, truck_manned_alarm = false, motor_overman_alarm = false, motor_nohelmet_alarm = false; |
1227 | + std::string video_folder = "", result_folder = "", result_folder_little = ""; //要求各事件使用同一个视频保存地址,否则会被最后一个事件的地址覆盖 | ||
1228 | + auto task_other_params = m_task_param_manager->get_task_other_param(task_id); | ||
1229 | + std::vector<int> algorithm_types; | ||
1230 | + bool save_single_algor_pic = false; // 是否保存单算法的报警图片 | ||
1225 | 1231 | ||
1226 | if (task_param_ptr->nonmotor_vehicle_algors.find(algorithm_type_t::TRICYCLE_MANNED) != task_param_ptr->nonmotor_vehicle_algors.end()) { | 1232 | if (task_param_ptr->nonmotor_vehicle_algors.find(algorithm_type_t::TRICYCLE_MANNED) != task_param_ptr->nonmotor_vehicle_algors.end()) { |
1233 | + const auto &algor_other_params = task_other_params->find(algorithm_type_t::TRICYCLE_MANNED); | ||
1234 | + const algor_basic_config_param_t *basic_param = algor_other_params->second->basic_param; | ||
1235 | + | ||
1227 | auto result = tricycle_manned_.get_result_by_objectid(ai_engine_module::obj_key_t{obj_key.obj_id, obj_key.video_id, algorithm_type_t::TRICYCLE_MANNED}); | 1236 | auto result = tricycle_manned_.get_result_by_objectid(ai_engine_module::obj_key_t{obj_key.obj_id, obj_key.video_id, algorithm_type_t::TRICYCLE_MANNED}); |
1228 | if (result.get()) { | 1237 | if (result.get()) { |
1229 | tricycle_manned_alarm = true; | 1238 | tricycle_manned_alarm = true; |
1230 | - auto json_str = helpers::gen_json::gen_manned_json(obj_key.video_id, obj_key.obj_id, result->box, algorithm_type_t::TRICYCLE_MANNED); | 1239 | + algorithm_types.push_back((int)algorithm_type_t::TRICYCLE_MANNED); |
1240 | + video_folder = basic_param->video_folder; result_folder = basic_param->result_folder; | ||
1241 | + result_folder_little = basic_param->result_folder_little; | ||
1242 | + | ||
1231 | vpc_img_info src_img; | 1243 | vpc_img_info src_img; |
1232 | src_img.pic_desc = result->origin_img_desc; | 1244 | src_img.pic_desc = result->origin_img_desc; |
1233 | src_img.task_id = obj_key.video_id; | 1245 | src_img.task_id = obj_key.video_id; |
@@ -1237,15 +1249,28 @@ void CMultiSourceProcess::manned_snapshot(vector<string>& vpt_interest_task_id, | @@ -1237,15 +1249,28 @@ void CMultiSourceProcess::manned_snapshot(vector<string>& vpt_interest_task_id, | ||
1237 | roi_img.task_id = obj_key.video_id; | 1249 | roi_img.task_id = obj_key.video_id; |
1238 | roi_img.object_id = obj_key.obj_id; | 1250 | roi_img.object_id = obj_key.obj_id; |
1239 | 1251 | ||
1240 | - save_snapshot_process(obj_key, algorithm_type_t::TRICYCLE_MANNED, src_img, roi_img, 0, json_str); | 1252 | + if (save_single_algor_pic) { |
1253 | + auto json_str = helpers::gen_json::gen_manned_json(obj_key.video_id, obj_key.obj_id, result->box, algorithm_type_t::TRICYCLE_MANNED); | ||
1254 | + save_snapshot_process(obj_key, algorithm_type_t::TRICYCLE_MANNED, src_img, roi_img, 0, json_str); | ||
1255 | + } else { | ||
1256 | + VPCUtil::vpc_img_release(src_img); | ||
1257 | + VPCUtil::vpc_img_release(roi_img); | ||
1258 | + } | ||
1259 | + | ||
1241 | } | 1260 | } |
1242 | } | 1261 | } |
1243 | 1262 | ||
1244 | if (task_param_ptr->vehicle_algors.find(algorithm_type_t::TRUCK_MANNED) != task_param_ptr->vehicle_algors.end()) { | 1263 | if (task_param_ptr->vehicle_algors.find(algorithm_type_t::TRUCK_MANNED) != task_param_ptr->vehicle_algors.end()) { |
1264 | + const auto &algor_other_params = task_other_params->find(algorithm_type_t::TRUCK_MANNED); | ||
1265 | + const algor_basic_config_param_t *basic_param = algor_other_params->second->basic_param; | ||
1266 | + | ||
1245 | auto result = truck_manned_.get_result_by_objectid(ai_engine_module::obj_key_t{obj_key.obj_id, obj_key.video_id, algorithm_type_t::TRUCK_MANNED}); | 1267 | auto result = truck_manned_.get_result_by_objectid(ai_engine_module::obj_key_t{obj_key.obj_id, obj_key.video_id, algorithm_type_t::TRUCK_MANNED}); |
1246 | if (result.get()) { | 1268 | if (result.get()) { |
1247 | truck_manned_alarm = true; | 1269 | truck_manned_alarm = true; |
1248 | - auto json_str = helpers::gen_json::gen_manned_json(obj_key.video_id, obj_key.obj_id, result->box, algorithm_type_t::TRUCK_MANNED); | 1270 | + algorithm_types.push_back((int)algorithm_type_t::TRUCK_MANNED); |
1271 | + video_folder = basic_param->video_folder; result_folder = basic_param->result_folder; | ||
1272 | + result_folder_little = basic_param->result_folder_little; | ||
1273 | + | ||
1249 | vpc_img_info src_img; | 1274 | vpc_img_info src_img; |
1250 | src_img.pic_desc = result->origin_img_desc; | 1275 | src_img.pic_desc = result->origin_img_desc; |
1251 | src_img.task_id = obj_key.video_id; | 1276 | src_img.task_id = obj_key.video_id; |
@@ -1255,15 +1280,28 @@ void CMultiSourceProcess::manned_snapshot(vector<string>& vpt_interest_task_id, | @@ -1255,15 +1280,28 @@ void CMultiSourceProcess::manned_snapshot(vector<string>& vpt_interest_task_id, | ||
1255 | roi_img.task_id = obj_key.video_id; | 1280 | roi_img.task_id = obj_key.video_id; |
1256 | roi_img.object_id = obj_key.obj_id; | 1281 | roi_img.object_id = obj_key.obj_id; |
1257 | 1282 | ||
1258 | - save_snapshot_process(obj_key, algorithm_type_t::TRUCK_MANNED, src_img, roi_img, 0, json_str); | 1283 | + if (save_single_algor_pic) { |
1284 | + auto json_str = helpers::gen_json::gen_manned_json(obj_key.video_id, obj_key.obj_id, result->box, algorithm_type_t::TRUCK_MANNED); | ||
1285 | + save_snapshot_process(obj_key, algorithm_type_t::TRUCK_MANNED, src_img, roi_img, 0, json_str); | ||
1286 | + } else { | ||
1287 | + VPCUtil::vpc_img_release(src_img); | ||
1288 | + VPCUtil::vpc_img_release(roi_img); | ||
1289 | + } | ||
1290 | + | ||
1259 | } | 1291 | } |
1260 | } | 1292 | } |
1261 | 1293 | ||
1262 | if (task_param_ptr->nonmotor_vehicle_algors.find(algorithm_type_t::NONMOTOR_VEHICLE_NOHELMET) != task_param_ptr->nonmotor_vehicle_algors.end()) { | 1294 | if (task_param_ptr->nonmotor_vehicle_algors.find(algorithm_type_t::NONMOTOR_VEHICLE_NOHELMET) != task_param_ptr->nonmotor_vehicle_algors.end()) { |
1295 | + const auto &algor_other_params = task_other_params->find(algorithm_type_t::NONMOTOR_VEHICLE_NOHELMET); | ||
1296 | + const algor_basic_config_param_t *basic_param = algor_other_params->second->basic_param; | ||
1297 | + | ||
1263 | auto result = motor_hsprocess_.get_result_by_objectid(ai_engine_module::obj_key_t{obj_key.obj_id, obj_key.video_id, algorithm_type_t::NONMOTOR_VEHICLE_NOHELMET}); | 1298 | auto result = motor_hsprocess_.get_result_by_objectid(ai_engine_module::obj_key_t{obj_key.obj_id, obj_key.video_id, algorithm_type_t::NONMOTOR_VEHICLE_NOHELMET}); |
1264 | if (result.get()) { | 1299 | if (result.get()) { |
1265 | motor_nohelmet_alarm = true; | 1300 | motor_nohelmet_alarm = true; |
1266 | - auto json_str = helpers::gen_json::gen_manned_json(obj_key.video_id, obj_key.obj_id, result->box, algorithm_type_t::NONMOTOR_VEHICLE_NOHELMET); | 1301 | + algorithm_types.push_back((int)algorithm_type_t::NONMOTOR_VEHICLE_NOHELMET); |
1302 | + video_folder = basic_param->video_folder; result_folder = basic_param->result_folder; | ||
1303 | + result_folder_little = basic_param->result_folder_little; | ||
1304 | + | ||
1267 | vpc_img_info src_img; | 1305 | vpc_img_info src_img; |
1268 | src_img.pic_desc = result->origin_img_desc; | 1306 | src_img.pic_desc = result->origin_img_desc; |
1269 | src_img.task_id = obj_key.video_id; | 1307 | src_img.task_id = obj_key.video_id; |
@@ -1273,15 +1311,28 @@ void CMultiSourceProcess::manned_snapshot(vector<string>& vpt_interest_task_id, | @@ -1273,15 +1311,28 @@ void CMultiSourceProcess::manned_snapshot(vector<string>& vpt_interest_task_id, | ||
1273 | roi_img.task_id = obj_key.video_id; | 1311 | roi_img.task_id = obj_key.video_id; |
1274 | roi_img.object_id = obj_key.obj_id; | 1312 | roi_img.object_id = obj_key.obj_id; |
1275 | 1313 | ||
1276 | - save_snapshot_process(obj_key, algorithm_type_t::NONMOTOR_VEHICLE_NOHELMET, src_img, roi_img, 0, json_str); | 1314 | + if (save_single_algor_pic) { |
1315 | + auto json_str = helpers::gen_json::gen_manned_json(obj_key.video_id, obj_key.obj_id, result->box, algorithm_type_t::NONMOTOR_VEHICLE_NOHELMET); | ||
1316 | + save_snapshot_process(obj_key, algorithm_type_t::NONMOTOR_VEHICLE_NOHELMET, src_img, roi_img, 0, json_str); | ||
1317 | + } else { | ||
1318 | + VPCUtil::vpc_img_release(src_img); | ||
1319 | + VPCUtil::vpc_img_release(roi_img); | ||
1320 | + } | ||
1321 | + | ||
1277 | } | 1322 | } |
1278 | } | 1323 | } |
1279 | 1324 | ||
1280 | if (task_param_ptr->nonmotor_vehicle_algors.find(algorithm_type_t::NONMOTOR_VEHICLE_OVERMAN) != task_param_ptr->nonmotor_vehicle_algors.end()) { | 1325 | if (task_param_ptr->nonmotor_vehicle_algors.find(algorithm_type_t::NONMOTOR_VEHICLE_OVERMAN) != task_param_ptr->nonmotor_vehicle_algors.end()) { |
1326 | + const auto &algor_other_params = task_other_params->find(algorithm_type_t::NONMOTOR_VEHICLE_OVERMAN); | ||
1327 | + const algor_basic_config_param_t *basic_param = algor_other_params->second->basic_param; | ||
1328 | + | ||
1281 | auto result = motor_hsprocess_.get_result_by_objectid(ai_engine_module::obj_key_t{obj_key.obj_id, obj_key.video_id, algorithm_type_t::NONMOTOR_VEHICLE_OVERMAN}); | 1329 | auto result = motor_hsprocess_.get_result_by_objectid(ai_engine_module::obj_key_t{obj_key.obj_id, obj_key.video_id, algorithm_type_t::NONMOTOR_VEHICLE_OVERMAN}); |
1282 | if (result.get()) { | 1330 | if (result.get()) { |
1283 | motor_overman_alarm = true; | 1331 | motor_overman_alarm = true; |
1284 | - auto json_str = helpers::gen_json::gen_manned_json(obj_key.video_id, obj_key.obj_id, result->box, algorithm_type_t::NONMOTOR_VEHICLE_OVERMAN); | 1332 | + algorithm_types.push_back((int)algorithm_type_t::NONMOTOR_VEHICLE_OVERMAN); |
1333 | + video_folder = basic_param->video_folder; result_folder = basic_param->result_folder; | ||
1334 | + result_folder_little = basic_param->result_folder_little; | ||
1335 | + | ||
1285 | vpc_img_info src_img; | 1336 | vpc_img_info src_img; |
1286 | src_img.pic_desc = result->origin_img_desc; | 1337 | src_img.pic_desc = result->origin_img_desc; |
1287 | src_img.task_id = obj_key.video_id; | 1338 | src_img.task_id = obj_key.video_id; |
@@ -1291,24 +1342,98 @@ void CMultiSourceProcess::manned_snapshot(vector<string>& vpt_interest_task_id, | @@ -1291,24 +1342,98 @@ void CMultiSourceProcess::manned_snapshot(vector<string>& vpt_interest_task_id, | ||
1291 | roi_img.task_id = obj_key.video_id; | 1342 | roi_img.task_id = obj_key.video_id; |
1292 | roi_img.object_id = obj_key.obj_id; | 1343 | roi_img.object_id = obj_key.obj_id; |
1293 | 1344 | ||
1294 | - save_snapshot_process(obj_key, algorithm_type_t::NONMOTOR_VEHICLE_OVERMAN, src_img, roi_img, 0, json_str); | 1345 | + if (save_single_algor_pic) { |
1346 | + auto json_str = helpers::gen_json::gen_manned_json(obj_key.video_id, obj_key.obj_id, result->box, algorithm_type_t::NONMOTOR_VEHICLE_OVERMAN); | ||
1347 | + save_snapshot_process(obj_key, algorithm_type_t::NONMOTOR_VEHICLE_OVERMAN, src_img, roi_img, 0, json_str); | ||
1348 | + } else { | ||
1349 | + VPCUtil::vpc_img_release(src_img); | ||
1350 | + VPCUtil::vpc_img_release(roi_img); | ||
1351 | + } | ||
1352 | + | ||
1295 | } | 1353 | } |
1296 | } | 1354 | } |
1297 | 1355 | ||
1356 | + | ||
1357 | + map<OBJ_KEY, OBJ_VALUE> _total_snapshot_info = m_snapshot_reprocessing->get_total_village_snapshot_info(); | ||
1358 | + if(_total_snapshot_info.size() <= 0){ | ||
1359 | + return; | ||
1360 | + } | ||
1361 | + | ||
1362 | + LOG_DEBUG("_total_snapshot_info size: {}", _total_snapshot_info.size()); | ||
1363 | + auto it = _total_snapshot_info.find(obj_key); | ||
1364 | + if (it == _total_snapshot_info.end()) { | ||
1365 | + return; | ||
1366 | + } | ||
1367 | + | ||
1368 | + | ||
1298 | if (tricycle_manned_alarm || truck_manned_alarm || motor_overman_alarm || motor_nohelmet_alarm) { | 1369 | if (tricycle_manned_alarm || truck_manned_alarm || motor_overman_alarm || motor_nohelmet_alarm) { |
1299 | 1370 | ||
1371 | + const OBJ_VALUE obj_value = it->second; | ||
1372 | + // 原图 | ||
1373 | + LOG_DEBUG("原图"); | ||
1374 | + std::string cur_timestamp_ms = std::to_string(helpers::timer::get_cur_time_ms()); | ||
1375 | + std::string fpath_origin = result_folder + helpers::os::sep + obj_key.video_id + "_" + | ||
1376 | + std::to_string(obj_key.obj_id) + "_" + cur_timestamp_ms + ".jpg"; | ||
1377 | + | ||
1378 | + ImgSaveInfo origin_save_info; | ||
1379 | + origin_save_info.file_path = fpath_origin; | ||
1380 | + origin_save_info.img_info = obj_value.snapShot; | ||
1381 | + origin_save_info.obj_rect = obj_value.obj_pos; | ||
1382 | + m_save_snapshot_reprocessing->reprocessing_process_wo_locus_async(origin_save_info); | ||
1383 | + | ||
1384 | + | ||
1385 | + LOG_DEBUG("抠图"); | ||
1386 | + // 抠图 | ||
1387 | + string object_file_name = result_folder_little + helpers::os::sep + obj_key.video_id + "_" + | ||
1388 | + std::to_string(obj_key.obj_id) + "_" + cur_timestamp_ms + ".jpg"; | ||
1389 | + ImgSaveInfo obj_save_info; | ||
1390 | + obj_save_info.file_path = object_file_name; | ||
1391 | + obj_save_info.img_info = obj_value.snapShotLittle; | ||
1392 | + m_save_snapshot_reprocessing->reprocessing_process_wo_locus_async(obj_save_info); | ||
1393 | + | ||
1394 | + | ||
1395 | + // 视频 | ||
1396 | + string video_file_name = video_folder + helpers::os::sep + obj_key.video_id + "_" + | ||
1397 | + std::to_string(obj_key.obj_id) + "_" + cur_timestamp_ms + ".mp4"; | ||
1398 | + | ||
1399 | + | ||
1400 | + string json_str = ""; | ||
1401 | +#ifdef POST_USE_RABBITMQ | ||
1402 | + std::vector<video_object_snapshot> algo_results; | ||
1403 | + video_object_snapshot new_obj_ss_info; | ||
1404 | + new_obj_ss_info.analysisRes = nullptr; | ||
1405 | + new_obj_ss_info.object_id = obj_key.obj_id; | ||
1406 | + new_obj_ss_info.obj_info.set_data(obj_value.index.index, obj_value.confidence, obj_value.obj_pos.left_, | ||
1407 | + obj_value.obj_pos.top_, obj_value.obj_pos.left_ + obj_value.obj_pos.width_, | ||
1408 | + obj_value.obj_pos.top_ + obj_value.obj_pos.height_); | ||
1409 | + strcpy(new_obj_ss_info.task_id, obj_key.video_id.c_str()); | ||
1410 | + strcpy(new_obj_ss_info.video_image_path, fpath_origin.c_str()); | ||
1411 | + strcpy(new_obj_ss_info.snapshot_image_path, object_file_name.c_str()); | ||
1412 | + algo_results.push_back(new_obj_ss_info); | ||
1413 | + json_str = helpers::gen_json::gen_village_json(task_id, obj_key.obj_id, algorithm_types, algo_results, video_file_name); | ||
1414 | +#endif | ||
1415 | + | ||
1300 | DeviceMemory* mem = vec_vptMem[i]; | 1416 | DeviceMemory* mem = vec_vptMem[i]; |
1301 | // string task_id = mem->getId(); | 1417 | // string task_id = mem->getId(); |
1302 | - // cout << "mem->getId():" << mem->getId() << " cur_task_id:" << task_id << endl; | ||
1303 | RecoderInfo recoderInfo; | 1418 | RecoderInfo recoderInfo; |
1304 | recoderInfo.task_id = task_id; | 1419 | recoderInfo.task_id = task_id; |
1305 | recoderInfo.object_id = std::to_string(j); | 1420 | recoderInfo.object_id = std::to_string(j); |
1306 | - recoderInfo.recoderPath = "./res/recode"; | 1421 | + recoderInfo.recoderPath = video_file_name; |
1307 | recoderInfo.frame_nb = mem->getFrameNb(); | 1422 | recoderInfo.frame_nb = mem->getFrameNb(); |
1423 | + recoderInfo.mq_info = json_str; | ||
1308 | 1424 | ||
1309 | m_recoderinfo_queue_mtx.lock(); | 1425 | m_recoderinfo_queue_mtx.lock(); |
1310 | m_recoderinfo_queue.push_back(recoderInfo); | 1426 | m_recoderinfo_queue.push_back(recoderInfo); |
1311 | m_recoderinfo_queue_mtx.unlock(); | 1427 | m_recoderinfo_queue_mtx.unlock(); |
1428 | + | ||
1429 | + LOG_DEBUG("仅删除记录,显存会在保存线程中删除"); | ||
1430 | + // 仅删除记录,显存会在保存线程中删除 | ||
1431 | + m_snapshot_reprocessing->release_village_finished_locus_snapshot(obj_key.video_id, obj_key.obj_id, false); | ||
1432 | + } | ||
1433 | + else { | ||
1434 | + // 删除记录,同时释放显存 | ||
1435 | + m_snapshot_reprocessing->release_village_finished_locus_snapshot(obj_key.video_id, obj_key.obj_id, true); | ||
1436 | + return; | ||
1312 | } | 1437 | } |
1313 | 1438 | ||
1314 | 1439 | ||
@@ -1542,7 +1667,7 @@ void CMultiSourceProcess::face_locus_finished(const OBJ_KEY obj_key) { | @@ -1542,7 +1667,7 @@ void CMultiSourceProcess::face_locus_finished(const OBJ_KEY obj_key) { | ||
1542 | 1667 | ||
1543 | #ifdef POST_USE_RABBITMQ | 1668 | #ifdef POST_USE_RABBITMQ |
1544 | json_str = helpers::gen_json::gen_face_detection_json( obj_key.video_id, obj_key.obj_id, fpath_snapShotLittle, fpath_src, | 1669 | json_str = helpers::gen_json::gen_face_detection_json( obj_key.video_id, obj_key.obj_id, fpath_snapShotLittle, fpath_src, |
1545 | - obj_value.position, obj_value.confidence, obj_value.landmark_point, 25); | 1670 | + obj_value.position, obj_value.confidence, obj_value.landmark_point, 25); |
1546 | #endif | 1671 | #endif |
1547 | 1672 | ||
1548 | ImgSaveInfo roi_save_info; | 1673 | ImgSaveInfo roi_save_info; |
src/ai_platform/header.h
@@ -441,8 +441,9 @@ typedef struct algor_basic_config_param_t { | @@ -441,8 +441,9 @@ typedef struct algor_basic_config_param_t { | ||
441 | sy_rect algor_valid_rect; | 441 | sy_rect algor_valid_rect; |
442 | char *result_folder_little; //目标快照抠图保存地址 | 442 | char *result_folder_little; //目标快照抠图保存地址 |
443 | char *result_folder; //目标快照大图保存地址 | 443 | char *result_folder; //目标快照大图保存地址 |
444 | + char *video_folder; //目标视频保存地址 | ||
444 | explicit algor_basic_config_param_t() | 445 | explicit algor_basic_config_param_t() |
445 | - : result_folder_little(nullptr), result_folder(nullptr) {} | 446 | + : result_folder_little(nullptr), result_folder(nullptr), video_folder(nullptr) {} |
446 | } algor_basic_config_param_t; | 447 | } algor_basic_config_param_t; |
447 | #endif // #ifndef __ALGOR_CONFIG_PARAM__BASIC__ | 448 | #endif // #ifndef __ALGOR_CONFIG_PARAM__BASIC__ |
448 | 449 |
src/ai_platform/task_param_manager.cpp
@@ -237,6 +237,13 @@ void task_param_manager::add_task_param(string task_id, task_param task_param) { | @@ -237,6 +237,13 @@ void task_param_manager::add_task_param(string task_id, task_param task_param) { | ||
237 | } else | 237 | } else |
238 | dst_basic_param->result_folder = nullptr; | 238 | dst_basic_param->result_folder = nullptr; |
239 | 239 | ||
240 | + if (src_basic_param->video_folder) { | ||
241 | + dst_basic_param->video_folder = new char[strlen(src_basic_param->video_folder) + 1]; | ||
242 | + strcpy(dst_basic_param->video_folder, src_basic_param->video_folder); | ||
243 | + CreateResultFolder(dst_basic_param->video_folder, ""); | ||
244 | + } else | ||
245 | + dst_basic_param->video_folder = nullptr; | ||
246 | + | ||
240 | dst_basic_param->algor_valid_rect.left_ = src_basic_param->algor_valid_rect.left_; | 247 | dst_basic_param->algor_valid_rect.left_ = src_basic_param->algor_valid_rect.left_; |
241 | dst_basic_param->algor_valid_rect.top_ = src_basic_param->algor_valid_rect.top_; | 248 | dst_basic_param->algor_valid_rect.top_ = src_basic_param->algor_valid_rect.top_; |
242 | dst_basic_param->algor_valid_rect.width_ = src_basic_param->algor_valid_rect.width_; | 249 | dst_basic_param->algor_valid_rect.width_ = src_basic_param->algor_valid_rect.width_; |
@@ -266,6 +273,10 @@ void task_param_manager::delete_task_param(string task_id) { | @@ -266,6 +273,10 @@ void task_param_manager::delete_task_param(string task_id) { | ||
266 | delete[] cur_param->result_folder; | 273 | delete[] cur_param->result_folder; |
267 | cur_param->result_folder = nullptr; | 274 | cur_param->result_folder = nullptr; |
268 | } | 275 | } |
276 | + if (cur_param->video_folder) { | ||
277 | + delete[] cur_param->video_folder; | ||
278 | + cur_param->video_folder = nullptr; | ||
279 | + } | ||
269 | if (cur_param) { | 280 | if (cur_param) { |
270 | delete ((algor_init_config_param_t *)m_task_params[task_id][iter.first])->basic_param; | 281 | delete ((algor_init_config_param_t *)m_task_params[task_id][iter.first])->basic_param; |
271 | ((algor_init_config_param_t *)m_task_params[task_id][iter.first])->basic_param = nullptr; | 282 | ((algor_init_config_param_t *)m_task_params[task_id][iter.first])->basic_param = nullptr; |
src/demo/demo.cpp
@@ -81,6 +81,7 @@ void set_task_params(task_param &tparam, const unsigned &idx, const algorithm_ty | @@ -81,6 +81,7 @@ void set_task_params(task_param &tparam, const unsigned &idx, const algorithm_ty | ||
81 | basic_params->algor_valid_rect.left_ = 0; | 81 | basic_params->algor_valid_rect.left_ = 0; |
82 | basic_params->algor_valid_rect.width_ = 1920; | 82 | basic_params->algor_valid_rect.width_ = 1920; |
83 | basic_params->algor_valid_rect.height_ = 1080; | 83 | basic_params->algor_valid_rect.height_ = 1080; |
84 | + basic_params->video_folder = "res/video_recode"; | ||
84 | basic_params->result_folder = "res/motor_nohelmet"; | 85 | basic_params->result_folder = "res/motor_nohelmet"; |
85 | basic_params->result_folder_little = "res/motor_nohelmet_little"; | 86 | basic_params->result_folder_little = "res/motor_nohelmet_little"; |
86 | } | 87 | } |
@@ -106,6 +107,7 @@ void set_task_params(task_param &tparam, const unsigned &idx, const algorithm_ty | @@ -106,6 +107,7 @@ void set_task_params(task_param &tparam, const unsigned &idx, const algorithm_ty | ||
106 | basic_params->algor_valid_rect.left_ = 0; | 107 | basic_params->algor_valid_rect.left_ = 0; |
107 | basic_params->algor_valid_rect.width_ = 1920; | 108 | basic_params->algor_valid_rect.width_ = 1920; |
108 | basic_params->algor_valid_rect.height_ = 1080; | 109 | basic_params->algor_valid_rect.height_ = 1080; |
110 | + basic_params->video_folder = "res/video_recode"; | ||
109 | basic_params->result_folder = "res/motor_overman"; | 111 | basic_params->result_folder = "res/motor_overman"; |
110 | basic_params->result_folder_little = "res/motor_overman_little"; | 112 | basic_params->result_folder_little = "res/motor_overman_little"; |
111 | } | 113 | } |
@@ -131,6 +133,7 @@ void set_task_params(task_param &tparam, const unsigned &idx, const algorithm_ty | @@ -131,6 +133,7 @@ void set_task_params(task_param &tparam, const unsigned &idx, const algorithm_ty | ||
131 | basic_params->algor_valid_rect.left_ = 0; | 133 | basic_params->algor_valid_rect.left_ = 0; |
132 | basic_params->algor_valid_rect.width_ = 1920; | 134 | basic_params->algor_valid_rect.width_ = 1920; |
133 | basic_params->algor_valid_rect.height_ = 1080; | 135 | basic_params->algor_valid_rect.height_ = 1080; |
136 | + basic_params->video_folder = "res/video_recode"; | ||
134 | basic_params->result_folder = "res/tricycle_manned"; | 137 | basic_params->result_folder = "res/tricycle_manned"; |
135 | basic_params->result_folder_little = "res/tricycle_manned_little"; | 138 | basic_params->result_folder_little = "res/tricycle_manned_little"; |
136 | } | 139 | } |
@@ -156,6 +159,7 @@ void set_task_params(task_param &tparam, const unsigned &idx, const algorithm_ty | @@ -156,6 +159,7 @@ void set_task_params(task_param &tparam, const unsigned &idx, const algorithm_ty | ||
156 | basic_params->algor_valid_rect.left_ = 0; | 159 | basic_params->algor_valid_rect.left_ = 0; |
157 | basic_params->algor_valid_rect.width_ = 1920; | 160 | basic_params->algor_valid_rect.width_ = 1920; |
158 | basic_params->algor_valid_rect.height_ = 1080; | 161 | basic_params->algor_valid_rect.height_ = 1080; |
162 | + basic_params->video_folder = "res/video_recode"; | ||
159 | basic_params->result_folder = "res/truck_manned"; | 163 | basic_params->result_folder = "res/truck_manned"; |
160 | basic_params->result_folder_little = "res/truck_manned_little"; | 164 | basic_params->result_folder_little = "res/truck_manned_little"; |
161 | } | 165 | } |
src/helpers/gen_json.hpp
@@ -236,16 +236,6 @@ namespace helpers | @@ -236,16 +236,6 @@ namespace helpers | ||
236 | return gen_generic_json(taskId, object_id, box, algor_type, image_path); | 236 | return gen_generic_json(taskId, object_id, box, algor_type, image_path); |
237 | } | 237 | } |
238 | 238 | ||
239 | - | ||
240 | - static std::string gen_manned_json(const std::string& taskId, int object_id, | ||
241 | - const box_t &box, | ||
242 | - const algorithm_type_t &algor_type, | ||
243 | - const std::string &image_path = "") | ||
244 | - { | ||
245 | - return gen_generic_json(taskId, object_id, box, algor_type, image_path); | ||
246 | - } | ||
247 | - | ||
248 | - | ||
249 | static std::string gen_takeaway_member_cls_json(const std::string& taskId, int object_id, | 239 | static std::string gen_takeaway_member_cls_json(const std::string& taskId, int object_id, |
250 | const box_t &box, const int &category, | 240 | const box_t &box, const int &category, |
251 | const std::string &image_path = "") | 241 | const std::string &image_path = "") |
@@ -340,6 +330,60 @@ namespace helpers | @@ -340,6 +330,60 @@ namespace helpers | ||
340 | return Json::writeString(get_builder(), root); | 330 | return Json::writeString(get_builder(), root); |
341 | }; | 331 | }; |
342 | 332 | ||
333 | + | ||
334 | + static std::string gen_village_json(const std::string& taskId, long object_id, std::vector<int> algorithm_types, std::vector<video_object_snapshot> const &algo_results, const std::string &video_path) { | ||
335 | + Json::Value root; | ||
336 | + root["task_id"] = taskId; | ||
337 | + root["object_id"] = int(object_id); | ||
338 | + root["timestamp_ms"] = std::to_string(timer::get_timestamp<std::chrono::milliseconds>()); | ||
339 | + root["video_recode_path"] = video_path; | ||
340 | + Json::Value algorNodes; | ||
341 | + for (auto &algorithm_type: algorithm_types) { | ||
342 | + Json::Value algorNode; | ||
343 | + // algorNode["algor_type"] = algorithm_type; | ||
344 | + // algorNodes.append(algorNode); | ||
345 | + auto algor_type = std::to_string(algorithm_type); | ||
346 | + algorNodes.append(algor_type); | ||
347 | + } | ||
348 | + root["algor_types"] = algorNodes; | ||
349 | + { | ||
350 | + Json::Value picNode; | ||
351 | + Json::Value dataNode; | ||
352 | + for (int i = 0; i < algo_results.size(); i++) { | ||
353 | + int num = i + 1; | ||
354 | + dataNode["picnum"] = num; | ||
355 | + dataNode["video_image_path"] = algo_results[i].video_image_path; | ||
356 | + dataNode["snapshot_image_path"] = algo_results[i].snapshot_image_path; | ||
357 | + Json::Value boxNode; | ||
358 | + { | ||
359 | + Json::Value boxNodeItem; | ||
360 | + boxNodeItem["top"] = algo_results[i].obj_info.res_top; | ||
361 | + boxNodeItem["left"] = algo_results[i].obj_info.res_left; | ||
362 | + boxNodeItem["right"] = algo_results[i].obj_info.res_right; | ||
363 | + boxNodeItem["bottom"] = algo_results[i].obj_info.res_bottom; | ||
364 | + boxNodeItem["score"] = algo_results[i].obj_info.res_prob; | ||
365 | + boxNodeItem["index"] = algo_results[i].obj_info.res_index; //221212byzsh | ||
366 | + boxNode.append(boxNodeItem); | ||
367 | + dataNode["box"] = boxNode; | ||
368 | + } | ||
369 | + picNode.append(dataNode); | ||
370 | + } | ||
371 | + | ||
372 | + root["data"] = picNode; | ||
373 | + } | ||
374 | + return Json::writeString(get_builder(), root); | ||
375 | + } | ||
376 | + | ||
377 | + | ||
378 | + static std::string gen_manned_json(const std::string& taskId, int object_id, | ||
379 | + const box_t &box, | ||
380 | + const algorithm_type_t &algor_type, | ||
381 | + const std::string &image_path = "") | ||
382 | + { | ||
383 | + return gen_generic_json(taskId, object_id, box, algor_type, image_path); | ||
384 | + } | ||
385 | + | ||
386 | + | ||
343 | } // namespace gen_json | 387 | } // namespace gen_json |
344 | 388 | ||
345 | } // namespace helpers | 389 | } // namespace helpers |
src/reprocessing_module/snapshot_reprocessing.cpp
@@ -330,6 +330,174 @@ void snapshot_reprocessing::update_bestsnapshot(vector<DeviceMemory*> vec_devMem | @@ -330,6 +330,174 @@ void snapshot_reprocessing::update_bestsnapshot(vector<DeviceMemory*> vec_devMem | ||
330 | } | 330 | } |
331 | } | 331 | } |
332 | 332 | ||
333 | + | ||
334 | +/* 获取农村违法分析要求的目标快照图--轨迹起始 最佳 轨迹结束 */ | ||
335 | +void snapshot_reprocessing::update_village_bestsnapshot(vector<DeviceMemory*> vec_devMem, vector<onelevel_det_result> &ol_det_result, vector<vector<int>>& delete_object_id){ | ||
336 | + map<string, algor_open_config_param> && algor_config_param = m_task_param_manager->get_task_algor_params(); | ||
337 | + map<string, map<algo_type, task_param_manager::algo_param_type_t_*>> && algor_param = m_task_param_manager->get_task_other_params(); | ||
338 | + | ||
339 | + VPCUtil* pVpcUtil = VPCUtil::getInstance(); | ||
340 | + | ||
341 | + for (size_t i = 0; i < vec_devMem.size(); i++){ | ||
342 | + | ||
343 | + onelevel_det_result det_result = ol_det_result[i]; | ||
344 | + if (0 == det_result.obj_count){ | ||
345 | + continue; | ||
346 | + } | ||
347 | + | ||
348 | + DeviceMemory* memPtr = vec_devMem[i]; | ||
349 | + | ||
350 | + string task_id = memPtr->getId(); | ||
351 | + int frame_height = memPtr->getHeight(); | ||
352 | + int frame_width = memPtr->getWidth(); | ||
353 | + | ||
354 | + vector<video_object_info> vec_obj_info; | ||
355 | + for (int c = 0; c < det_result.obj_count; c++){ | ||
356 | + | ||
357 | + det_objinfo obj_info = det_result.obj[c]; | ||
358 | + OBJ_KEY new_obj = { task_id, obj_info.id }; | ||
359 | + | ||
360 | + int index = 0; | ||
361 | + | ||
362 | + /* 投票确定目标index */ | ||
363 | + if (total_village_snapshot_info.find(new_obj) == total_village_snapshot_info.end()){ | ||
364 | + index = obj_info.index; | ||
365 | + } else { | ||
366 | + index = total_village_snapshot_info[new_obj].index.index; | ||
367 | + } | ||
368 | + | ||
369 | + int cur_real_width = (obj_info.right - obj_info.left); | ||
370 | + int cur_real_height = (obj_info.bottom - obj_info.top); | ||
371 | + int cur_real_index = obj_info.index; | ||
372 | + | ||
373 | + int expansion_width = cur_real_width * EXPANSION_PROPORTION; | ||
374 | + int expansion_height = cur_real_height * EXPANSION_PROPORTION; | ||
375 | + // DEBUG----------------------------------------------------------------- | ||
376 | + // 0-行人 1-自行车 2-摩托车 3-三轮车 4-小型车 5-大车 6-卡车 7-拖拉机 8-中巴 | ||
377 | + if(index ==0 || index ==1 || index ==2 || index ==3) { //行人和非机动车外扩指定像素即可 | ||
378 | + expansion_width = 10; | ||
379 | + expansion_height = 10; | ||
380 | + } | ||
381 | + | ||
382 | + /* 若该目标第一次出现 */ | ||
383 | + if (total_village_snapshot_info.find(new_obj) == total_village_snapshot_info.end()) | ||
384 | + { | ||
385 | + /* manager insert new object. */ | ||
386 | + /* 判断目标合法 */ | ||
387 | + // algorithm_type_t algor_type; | ||
388 | + // if (index ==0) algor_type = algorithm_type_t::HUMAN_SNAPSHOT; | ||
389 | + // if (index ==1 || index ==2 || index ==3) algor_type = algorithm_type_t::NONMOTOR_VEHICLE_SNAPSHOT; | ||
390 | + // if (index ==4 || index ==5 || index ==6 || index ==7 || index ==8) algor_type = algorithm_type_t::VEHICLE_SNAPSHOT; | ||
391 | + // if (!(algor_config_param.count(task_id) && algor_param.count(task_id) && algor_param[task_id].count(algor_type))) | ||
392 | + // continue; | ||
393 | + // task_param_manager::algo_param_type_t_* cur_task_params = algor_param[task_id][algor_type]; | ||
394 | + // if (!snapshot_legal_inarea(cur_task_params->basic_param->algor_valid_rect,obj_info.left, obj_info.top, obj_info.right, obj_info.bottom)){ | ||
395 | + // continue; | ||
396 | + // } | ||
397 | + | ||
398 | + if(!snapshot_legal_minarea(index, cur_real_width, cur_real_height)){ | ||
399 | + continue; | ||
400 | + } | ||
401 | + | ||
402 | + /* 存入当前抠图目标参数 flags用于判断目标从画面什么位置出现 方便之后排除出画面边缘的快照图 */ | ||
403 | + total_village_snapshot_info[new_obj].index.count++; | ||
404 | + total_village_snapshot_info[new_obj].index.index = cur_real_index; | ||
405 | + total_village_snapshot_info[new_obj].confidence = obj_info.confidence; | ||
406 | + total_village_snapshot_info[new_obj].flags[0] = obj_info.left < minDistance[0] + SCALE_OUT ? 0 : 1; //left | ||
407 | + total_village_snapshot_info[new_obj].flags[1] = obj_info.top < minDistance[1] + SCALE_OUT ? 0 : 1; //top | ||
408 | + total_village_snapshot_info[new_obj].flags[2] = obj_info.right > frame_width - minDistance[2] - SCALE_OUT ? 0 : 1; //right | ||
409 | + total_village_snapshot_info[new_obj].flags[3] = obj_info.bottom > frame_height - minDistance[3] - SCALE_OUT ? 0 : 1; //bottom | ||
410 | + | ||
411 | + int cur_left = max(obj_info.left - 10, 0); | ||
412 | + int cur_top = max(obj_info.top - 10, 0); | ||
413 | + int cur_right = min(obj_info.right + 10, frame_width - 1); | ||
414 | + int cur_bottom = min(obj_info.bottom + 10, frame_height - 1); | ||
415 | + total_village_snapshot_info[new_obj].obj_pos = { cur_left, cur_top, cur_right - cur_left, cur_bottom - cur_top }; //debug by zsh 推出的坐标外扩10像素 | ||
416 | + total_village_snapshot_info[new_obj].last_area = total_village_snapshot_info[new_obj].max_area = (cur_right - cur_left) * (cur_bottom - cur_top); | ||
417 | + | ||
418 | + video_object_info info; | ||
419 | + info.left = max(obj_info.left - expansion_width, 0); | ||
420 | + info.top = max(obj_info.top - expansion_height, 0); | ||
421 | + info.right = min(obj_info.right + expansion_width, frame_width - 1); | ||
422 | + info.bottom = min(obj_info.bottom + expansion_height, frame_height - 1); | ||
423 | + strcpy(info.task_id, task_id.c_str()); | ||
424 | + info.object_id = obj_info.id; | ||
425 | + info.confidence = obj_info.confidence; | ||
426 | + info.index = index; | ||
427 | + | ||
428 | + vec_obj_info.push_back(info); | ||
429 | + } else { | ||
430 | + total_village_snapshot_info[new_obj].last_area = (obj_info.right - obj_info.left) * (obj_info.bottom - obj_info.top); | ||
431 | + | ||
432 | + // algorithm_type_t algor_type; | ||
433 | + // if (index ==0) algor_type = algorithm_type_t::HUMAN_SNAPSHOT; | ||
434 | + // if (index ==1 || index ==2 || index ==3) algor_type = algorithm_type_t::NONMOTOR_VEHICLE_SNAPSHOT; | ||
435 | + // if (index ==4 || index ==5 || index ==6 || index ==7 || index ==8) algor_type = algorithm_type_t::VEHICLE_SNAPSHOT; | ||
436 | + // if (!(algor_config_param.count(task_id) && algor_param.count(task_id) && algor_param[task_id].count(algor_type))) | ||
437 | + // continue; | ||
438 | + // task_param_manager::algo_param_type_t_* cur_task_params = algor_param[task_id][algor_type]; | ||
439 | + // if (!snapshot_legal_inarea(cur_task_params->basic_param->algor_valid_rect,obj_info.left, obj_info.top, obj_info.right, obj_info.bottom)) | ||
440 | + // continue; | ||
441 | + //--------------------------------------------------------------- | ||
442 | + if (!best_snapshot_judge_algor(new_obj, total_village_snapshot_info[new_obj], obj_info.left, obj_info.top, | ||
443 | + cur_real_width, cur_real_height, frame_width, frame_height)) | ||
444 | + { | ||
445 | + continue; | ||
446 | + } | ||
447 | + /* 若更优于之前的快照 做快照的更新 */ | ||
448 | + if (total_village_snapshot_info[new_obj].index.count == 0) | ||
449 | + { | ||
450 | + total_village_snapshot_info[new_obj].index.count++; | ||
451 | + total_village_snapshot_info[new_obj].index.index = cur_real_index; | ||
452 | + } | ||
453 | + else | ||
454 | + { | ||
455 | + if (total_village_snapshot_info[new_obj].index.index == cur_real_index) | ||
456 | + total_village_snapshot_info[new_obj].index.count++; | ||
457 | + else | ||
458 | + total_village_snapshot_info[new_obj].index.count--; | ||
459 | + } | ||
460 | + | ||
461 | + int cur_left = max(obj_info.left - 10, 0); | ||
462 | + int cur_top = max(obj_info.top - 10, 0); | ||
463 | + int cur_right = min(obj_info.right + 10, frame_width - 1); | ||
464 | + int cur_bottom = min(obj_info.bottom + 10, frame_height - 1); | ||
465 | + total_village_snapshot_info[new_obj].obj_pos = { cur_left, cur_top, cur_right - cur_left, cur_bottom - cur_top }; //debug by zsh 推出的坐标外扩10像素 | ||
466 | + total_village_snapshot_info[new_obj].last_area = total_village_snapshot_info[new_obj].max_area = (cur_right - cur_left) * (cur_bottom - cur_top); | ||
467 | + | ||
468 | + video_object_info info; | ||
469 | + info.left = max(obj_info.left - expansion_width, 0); | ||
470 | + info.top = max(obj_info.top - expansion_height, 0); | ||
471 | + info.right = min(obj_info.right + expansion_width, frame_width - 1); | ||
472 | + info.bottom = min(obj_info.bottom + expansion_height, frame_height - 1); | ||
473 | + strcpy(info.task_id, task_id.c_str()); | ||
474 | + info.object_id = obj_info.id; | ||
475 | + info.confidence = obj_info.confidence; | ||
476 | + info.index = index; | ||
477 | + | ||
478 | + vec_obj_info.push_back(info); | ||
479 | + } | ||
480 | + } | ||
481 | + | ||
482 | + vector<vpc_img_info> imgList = pVpcUtil->crop_batch(memPtr, vec_obj_info); | ||
483 | + vec_obj_info.clear(); | ||
484 | + | ||
485 | + for (size_t i = 0; i < imgList.size(); i++) { | ||
486 | + vpc_img_info obj_info = imgList[i]; | ||
487 | + OBJ_KEY objKey = { obj_info.task_id, obj_info.object_id }; | ||
488 | + VPCUtil::vpc_img_release(total_village_snapshot_info[objKey].snapShot); | ||
489 | + total_village_snapshot_info[objKey].snapShot = VPCUtil::vpc_devMem2vpcImg(memPtr); | ||
490 | + VPCUtil::vpc_img_release(total_village_snapshot_info[objKey].snapShotLittle); | ||
491 | + total_village_snapshot_info[objKey].snapShotLittle = obj_info; | ||
492 | + } | ||
493 | + imgList.clear(); | ||
494 | + } | ||
495 | +} | ||
496 | + | ||
497 | +map<OBJ_KEY, OBJ_VALUE> snapshot_reprocessing::get_total_village_snapshot_info(){ | ||
498 | + return total_village_snapshot_info; | ||
499 | +} | ||
500 | + | ||
333 | bool snapshot_reprocessing::best_face_snapshot_judge_algor_v2(const OBJ_KEY& obj_key, const OBJ_VALUE& obj_value, int left, int top, int width, int height, int image_width, int image_height, float roll, float yaw, float pitch) | 501 | bool snapshot_reprocessing::best_face_snapshot_judge_algor_v2(const OBJ_KEY& obj_key, const OBJ_VALUE& obj_value, int left, int top, int width, int height, int image_width, int image_height, float roll, float yaw, float pitch) |
334 | { | 502 | { |
335 | return snapshot_legal_pos(obj_value.flags, left, top, left + width, top + height, image_width, image_height) | 503 | return snapshot_legal_pos(obj_value.flags, left, top, left + width, top + height, image_width, image_height) |
@@ -575,6 +743,43 @@ void snapshot_reprocessing::release_finished_locus_snapshot(const string taskid, | @@ -575,6 +743,43 @@ void snapshot_reprocessing::release_finished_locus_snapshot(const string taskid, | ||
575 | } | 743 | } |
576 | } | 744 | } |
577 | 745 | ||
746 | + | ||
747 | +void snapshot_reprocessing::release_village_finished_locus_snapshot(const string taskid, const int obj_id, bool bRelease) | ||
748 | +{ | ||
749 | + LOG_DEBUG("[info] task_id {} delete obj_id {}", taskid, obj_id); //221026 | ||
750 | + if (obj_id != -1) | ||
751 | + { | ||
752 | + OBJ_KEY cur_key = { taskid , obj_id }; | ||
753 | + auto it = total_village_snapshot_info.find(cur_key); | ||
754 | + if (it == total_village_snapshot_info.end()){ | ||
755 | + return; | ||
756 | + } | ||
757 | + | ||
758 | + if (bRelease){ | ||
759 | + OBJ_VALUE ss = total_village_snapshot_info[cur_key]; | ||
760 | + | ||
761 | + VPCUtil::vpc_img_release(ss.snapShot); | ||
762 | + VPCUtil::vpc_img_release(ss.snapShotLittle); | ||
763 | + } | ||
764 | + | ||
765 | + total_village_snapshot_info.erase(cur_key); | ||
766 | + return; | ||
767 | + } | ||
768 | + | ||
769 | + for(auto ss = total_village_snapshot_info.begin(); ss != total_village_snapshot_info.end(); ss++) | ||
770 | + { | ||
771 | + if (strcmp(ss->first.video_id.c_str(), taskid.c_str()) == 0) | ||
772 | + { | ||
773 | + if (bRelease){ | ||
774 | + VPCUtil::vpc_img_release(ss->second.snapShot); | ||
775 | + VPCUtil::vpc_img_release(ss->second.snapShotLittle); | ||
776 | + } | ||
777 | + total_village_snapshot_info.erase(ss); | ||
778 | + } | ||
779 | + } | ||
780 | +} | ||
781 | + | ||
782 | + | ||
578 | map<OBJ_KEY, OBJ_VALUE> snapshot_reprocessing::get_total_face_snapshot_info(){ | 783 | map<OBJ_KEY, OBJ_VALUE> snapshot_reprocessing::get_total_face_snapshot_info(){ |
579 | return total_face_snapshot_info; | 784 | return total_face_snapshot_info; |
580 | } | 785 | } |
581 | \ No newline at end of file | 786 | \ No newline at end of file |
src/reprocessing_module/snapshot_reprocessing.h
@@ -75,7 +75,11 @@ public: | @@ -75,7 +75,11 @@ public: | ||
75 | int update_face_bestsnapshot(vector<DeviceMemory*> vec_devMem, vector<onelevel_det_result> &ol_det_result, vector<vector<int>>& delete_object_id); | 75 | int update_face_bestsnapshot(vector<DeviceMemory*> vec_devMem, vector<onelevel_det_result> &ol_det_result, vector<vector<int>>& delete_object_id); |
76 | map<OBJ_KEY, OBJ_VALUE> get_total_face_snapshot_info(); | 76 | map<OBJ_KEY, OBJ_VALUE> get_total_face_snapshot_info(); |
77 | 77 | ||
78 | + void update_village_bestsnapshot(vector<DeviceMemory*> vec_devMem, vector<onelevel_det_result> &ol_det_result, vector<vector<int>>& delete_object_id); | ||
79 | + map<OBJ_KEY, OBJ_VALUE> get_total_village_snapshot_info(); | ||
80 | + | ||
78 | void release_finished_locus_snapshot(const string taskid, const int obj_id, bool bRelease); | 81 | void release_finished_locus_snapshot(const string taskid, const int obj_id, bool bRelease); |
82 | + void release_village_finished_locus_snapshot(const string taskid, const int obj_id, bool bRelease); | ||
79 | 83 | ||
80 | private: | 84 | private: |
81 | bool best_snapshot_judge_algor(const OBJ_KEY& obj_key, const OBJ_VALUE& obj_value, int left, int top, int width, int height, int image_width, int image_height); | 85 | bool best_snapshot_judge_algor(const OBJ_KEY& obj_key, const OBJ_VALUE& obj_value, int left, int top, int width, int height, int image_width, int image_height); |
@@ -84,6 +88,7 @@ private: | @@ -84,6 +88,7 @@ private: | ||
84 | private: | 88 | private: |
85 | map<OBJ_KEY, OBJ_VALUE> total_snapshot_info; | 89 | map<OBJ_KEY, OBJ_VALUE> total_snapshot_info; |
86 | map<OBJ_KEY, OBJ_VALUE> total_face_snapshot_info; | 90 | map<OBJ_KEY, OBJ_VALUE> total_face_snapshot_info; |
91 | + map<OBJ_KEY, OBJ_VALUE> total_village_snapshot_info; | ||
87 | 92 | ||
88 | map<string, set<int>> algor_index_table; | 93 | map<string, set<int>> algor_index_table; |
89 | task_param_manager *m_task_param_manager; | 94 | task_param_manager *m_task_param_manager; |