// // Created by Scheaven on 2020/5/20. // #include "coord_interface.h" #include "switcher_util.h" #include "json_util.h" CoordSwitcher switcher; CoordManager::CoordManager(const char *json_document) { } CoordManager::CoordManager(CamVec *CV_Reg) { this->CV_Reg = CV_Reg; switcher.initHomography(CV_Reg); // this->init_flag = false; // CoordSwitcher switcher(CV_Reg); } CoordManager::~CoordManager() {} float confidence =0.0; char* CoordManager::get_result(MulCam* curr_Human, MulCam* last_Human) { // 创建获取结果的结构体 STarget* target = new STarget(); // stemtarget->temcamResult = (TemCamResult*)malloc(sizeof(TemCamResult)*(mulCam->cam_count-1)); target->camResult = new CamResult[curr_Human->cam_count-1]; group_compare(curr_Human, last_Human , target);// 批量匹配区域中的人 // // //遍历结果 // for (int i = 0; i < curr_Human->cam_count-1; ++i) { // map::iterator iter; // for (iter=target->camResult[i].confidence_map.begin() ;iter!=target->camResult[i].confidence_map.end();iter++) { // std::cout<< iter->first << " confidence " << iter->second << std::endl; // } // } // // std::cout<< " ---------- " << std::endl; // map::iterator direction_iter; // for (direction_iter=target->direction_map.begin();direction_iter!=target->direction_map.end();direction_iter++) { // std::cout<< direction_iter->first << " direction " << direction_iter->second << std::endl; // } string result_json = "{\"confidence\":\n\t{"; for (int i = 0; i < curr_Human->cam_count-1; ++i) { string c_json = map_json(target->camResult[i].confidence_map); result_json += "\t\"" + target->camResult[i].cam_pair + "\":[" + c_json.substr(0,c_json.length()-1) + "],\n"; } result_json = result_json.substr(0,result_json.length()-2)+"\n\t},\n"; result_json += "\"direction\":["; string d_json = map_json(target->direction_map); result_json += d_json.substr(0,d_json.length()-1) + "]\n}\n"; // string json = to_json_string(target); char *result = (char*)result_json.c_str(); // cout << result << endl; return result; } void CoordManager::group_compare(MulCam* curr_Human, MulCam* last_Human, STarget* target) { map global_min_points_map; for (int k = 1; k < curr_Human->cam_count; ++k) { for (int i = 0; i < curr_Human->matchHuman[0].count; ++i) { int curr_direction = -1; float local_min_distance = 100000.0; target->camResult[k-1].cam_pair = to_string(1)+":"+to_string(k+1); for (int j = 0; j < curr_Human->matchHuman[k].count; ++j) { confidence = switcher.compare(curr_Human->matchHuman[0].humanInfo[i].point, curr_Human->matchHuman[k].humanInfo[j].point, k - 1); if(local_min_distance>confidence){ local_min_distance = confidence; } target->camResult[k-1].confidence_map.insert(pair(to_string(curr_Human->matchHuman[0].humanInfo[i].human_id)+ ":" +to_string( curr_Human->matchHuman[k].humanInfo[j].human_id), confidence)); } if(global_min_points_map.count(curr_Human->matchHuman[0].humanInfo[i].human_id)>0) { if (global_min_points_map[curr_Human->matchHuman[0].humanInfo[i].human_id]>local_min_distance) { global_min_points_map[curr_Human->matchHuman[0].humanInfo[i].human_id] = local_min_distance; //更新方向 curr_direction = k+1; } }else { curr_direction = k+1; global_min_points_map.insert(pair(curr_Human->matchHuman[0].humanInfo[i].human_id, local_min_distance)); // 首次添加方向 } if(target->direction_map.count(curr_Human->matchHuman[0].humanInfo[i].human_id)>0) { if (curr_direction!=-1) target->direction_map[curr_Human->matchHuman[0].humanInfo[i].human_id] =curr_direction; //更新方向 }else { target->direction_map.insert(pair(curr_Human->matchHuman[0].humanInfo[i].human_id, curr_direction)); // 首次添加方向 } } } // map confidence_map; // for (int i = 0; i < A_Human->count; ++i) { // for (int j = 0; j < B_Human->count; ++j) { // confidence = switcher.compare(A_Human->humanInfo[i].point, B_Human->humanInfo[j].point); // confidence_map.insert(pair(to_string(A_Human->humanInfo[i].human_id)+ ":" +to_string(B_Human->humanInfo[j].human_id), confidence)); // } // } // return confidence_map; } void CoordManager::init_Target(STarget *target) { target->direction_map[0] = 10000; target->camResult = nullptr; }