Commit bab9a6c39958899dd220bf7372901307a11cc808
1 parent
5e907174
代码优化,改动较大,可能有逻辑被修改
Showing
8 changed files
with
190 additions
and
220 deletions
vehicle_structure_platform.git0708-3080-trt-face/src/VPT/MutliSourceVideoProcess.cpp
@@ -167,7 +167,6 @@ int CMutliSourceVideoProcess::FinishProcessThread() | @@ -167,7 +167,6 @@ int CMutliSourceVideoProcess::FinishProcessThread() | ||
167 | ProcessThread.join(); //waiting thread finish | 167 | ProcessThread.join(); //waiting thread finish |
168 | 168 | ||
169 | VPT_Release(VPT_Handle); | 169 | VPT_Release(VPT_Handle); |
170 | - m_face_det_module->face_det_module_release(); | ||
171 | 170 | ||
172 | m_snaphot_helper.snapshot_helper_release(); | 171 | m_snaphot_helper.snapshot_helper_release(); |
173 | 172 | ||
@@ -262,14 +261,6 @@ int CMutliSourceVideoProcess::InitAlgorthim(mvpt_param vptParam, VIDEO_OBJECT_IN | @@ -262,14 +261,6 @@ int CMutliSourceVideoProcess::InitAlgorthim(mvpt_param vptParam, VIDEO_OBJECT_IN | ||
262 | if (0 != ret) | 261 | if (0 != ret) |
263 | return ret; | 262 | return ret; |
264 | 263 | ||
265 | - m_face_det_module = nullptr; | ||
266 | - if (vptParam.face_det_config == SY_CONFIG_OPEN) | ||
267 | - { | ||
268 | - m_face_det_module = new face_det_module(); | ||
269 | - printf("begin init face det\n"); | ||
270 | - m_face_det_module->face_det_module_init(vptParam.gpuid, vptParam.auth_license); | ||
271 | - } | ||
272 | - | ||
273 | viewTaskID = -1; | 264 | viewTaskID = -1; |
274 | TaskinPlay = 0; | 265 | TaskinPlay = 0; |
275 | TotalTask = 0; | 266 | TotalTask = 0; |
@@ -1014,46 +1005,47 @@ void CMutliSourceVideoProcess::algorthim_process() | @@ -1014,46 +1005,47 @@ void CMutliSourceVideoProcess::algorthim_process() | ||
1014 | iter = TaskinPlayID.begin(); | 1005 | iter = TaskinPlayID.begin(); |
1015 | for (int i = 0; i < curPlayTaskCount; i++) | 1006 | for (int i = 0; i < curPlayTaskCount; i++) |
1016 | { | 1007 | { |
1017 | - tasks[*iter].taskFrameCount = tasks[*iter].task_algorithm_data.timestamp; | 1008 | + Task task = tasks[*iter]; |
1009 | + task.taskFrameCount = task.task_algorithm_data.timestamp; | ||
1018 | //若该路任务当前帧未检测到目标,返回ID为-1的目标表明未检测到目标 | 1010 | //若该路任务当前帧未检测到目标,返回ID为-1的目标表明未检测到目标 |
1019 | if (VPTResult[i].objCount == 0) | 1011 | if (VPTResult[i].objCount == 0) |
1020 | { | 1012 | { |
1021 | - callTaskObjInfoCallbackFunc(0, nullptr, tasks[*iter].taskFrameCount, *iter); | 1013 | + callTaskObjInfoCallbackFunc(0, nullptr, task.taskFrameCount, *iter); |
1022 | } | 1014 | } |
1023 | 1015 | ||
1024 | //实时查看模块,若存在实时查看,把当前视频画面cp回内存 | 1016 | //实时查看模块,若存在实时查看,把当前视频画面cp回内存 |
1025 | bool view = false; | 1017 | bool view = false; |
1026 | - int frameHeight = tasks[*iter].task_algorithm_data.height; | ||
1027 | - int frameWidth = tasks[*iter].task_algorithm_data.width; | 1018 | + int frameHeight = task.task_algorithm_data.height; |
1019 | + int frameWidth = task.task_algorithm_data.width; | ||
1028 | 1020 | ||
1029 | if (*iter == viewTaskID) | 1021 | if (*iter == viewTaskID) |
1030 | { | 1022 | { |
1031 | - cudaMemcpy(tasks[*iter].frameImage.data, tasks[*iter].task_algorithm_data.frame, 3 * tasks[*iter].task_algorithm_data.width * tasks[*iter].task_algorithm_data.height * sizeof(unsigned char), cudaMemcpyDeviceToHost); | 1023 | + cudaMemcpy(task.frameImage.data, task.task_algorithm_data.frame, 3 * task.task_algorithm_data.width * task.task_algorithm_data.height * sizeof(unsigned char), cudaMemcpyDeviceToHost); |
1032 | view = true; | 1024 | view = true; |
1033 | } | 1025 | } |
1034 | 1026 | ||
1035 | //跟踪帧也需要返回跟踪的结果 | 1027 | //跟踪帧也需要返回跟踪的结果 |
1036 | - if (tasks[*iter].taskLastFrameCount > 0) | 1028 | + if (task.taskLastFrameCount > 0) |
1037 | { | 1029 | { |
1038 | vector<VPT_Result> OneUnUsedResult = unUsedResult[i]; | 1030 | vector<VPT_Result> OneUnUsedResult = unUsedResult[i]; |
1039 | if (OneUnUsedResult.size() == 0) | 1031 | if (OneUnUsedResult.size() == 0) |
1040 | { | 1032 | { |
1041 | - callTaskObjInfoCallbackFunc(0, nullptr, tasks[*iter].taskLastFrameCount + 1, *iter); | 1033 | + callTaskObjInfoCallbackFunc(0, nullptr, task.taskLastFrameCount + 1, *iter); |
1042 | } | 1034 | } |
1043 | for (int k = 0; k < OneUnUsedResult.size(); ++k) | 1035 | for (int k = 0; k < OneUnUsedResult.size(); ++k) |
1044 | { | 1036 | { |
1045 | if (OneUnUsedResult[k].objCount == 0) | 1037 | if (OneUnUsedResult[k].objCount == 0) |
1046 | { | 1038 | { |
1047 | - callTaskObjInfoCallbackFunc(0, nullptr, tasks[*iter].taskLastFrameCount + k + 1, *iter); | 1039 | + callTaskObjInfoCallbackFunc(0, nullptr, task.taskLastFrameCount + k + 1, *iter); |
1048 | } | 1040 | } |
1049 | else | 1041 | else |
1050 | { | 1042 | { |
1051 | //cout << "OneUnUsedResult.size = " << OneUnUsedResult.size() << " k=" << k << " OneUnUsedResult[k].objCount = " << OneUnUsedResult[k].objCount << endl; | 1043 | //cout << "OneUnUsedResult.size = " << OneUnUsedResult.size() << " k=" << k << " OneUnUsedResult[k].objCount = " << OneUnUsedResult[k].objCount << endl; |
1052 | - callTaskObjInfoCallbackFunc(OneUnUsedResult[k].objCount, OneUnUsedResult[k].obj, tasks[*iter].taskLastFrameCount + k + 1, *iter); | 1044 | + callTaskObjInfoCallbackFunc(OneUnUsedResult[k].objCount, OneUnUsedResult[k].obj, task.taskLastFrameCount + k + 1, *iter); |
1053 | } | 1045 | } |
1054 | } | 1046 | } |
1055 | } | 1047 | } |
1056 | - tasks[*iter].taskLastFrameCount = tasks[*iter].taskFrameCount; | 1048 | + task.taskLastFrameCount = task.taskFrameCount; |
1057 | 1049 | ||
1058 | unsigned char* snapshot_image_data[MAX_OBJ_COUNT]{};// = new unsigned char*[VPTResult[i].objCount]; | 1050 | unsigned char* snapshot_image_data[MAX_OBJ_COUNT]{};// = new unsigned char*[VPTResult[i].objCount]; |
1059 | int snapshot_left[MAX_OBJ_COUNT]{};// = new int[VPTResult[i].objCount]; | 1051 | int snapshot_left[MAX_OBJ_COUNT]{};// = new int[VPTResult[i].objCount]; |
@@ -1067,7 +1059,7 @@ void CMutliSourceVideoProcess::algorthim_process() | @@ -1067,7 +1059,7 @@ void CMutliSourceVideoProcess::algorthim_process() | ||
1067 | vector<int> human_idx; //用于记录快照数组中那些是人脸 | 1059 | vector<int> human_idx; //用于记录快照数组中那些是人脸 |
1068 | vector<OBJ_KEY> human_obj_keys; | 1060 | vector<OBJ_KEY> human_obj_keys; |
1069 | 1061 | ||
1070 | - callTaskObjInfoCallbackFunc(VPTResult[i].objCount, VPTResult[i].obj, tasks[*iter].taskFrameCount, *iter); | 1062 | + callTaskObjInfoCallbackFunc(VPTResult[i].objCount, VPTResult[i].obj, task.taskFrameCount, *iter); |
1071 | for (int c = 0; c < VPTResult[i].objCount; c++) | 1063 | for (int c = 0; c < VPTResult[i].objCount; c++) |
1072 | { | 1064 | { |
1073 | OBJ_KEY newObj = { (*iter), VPTResult[i].obj[c].id }; | 1065 | OBJ_KEY newObj = { (*iter), VPTResult[i].obj[c].id }; |
@@ -1085,19 +1077,19 @@ void CMutliSourceVideoProcess::algorthim_process() | @@ -1085,19 +1077,19 @@ void CMutliSourceVideoProcess::algorthim_process() | ||
1085 | int p1 = VPTResult[i].obj[c].left - 10 > 0 ? VPTResult[i].obj[c].left - 10 : 0; | 1077 | int p1 = VPTResult[i].obj[c].left - 10 > 0 ? VPTResult[i].obj[c].left - 10 : 0; |
1086 | int p2 = VPTResult[i].obj[c].top - 15 > 0 ? VPTResult[i].obj[c].top - 15 : 0; | 1078 | int p2 = VPTResult[i].obj[c].top - 15 > 0 ? VPTResult[i].obj[c].top - 15 : 0; |
1087 | 1079 | ||
1088 | - cv::rectangle(tasks[*iter].frameImage, Rect(VPTResult[i].obj[c].left, VPTResult[i].obj[c].top, | 1080 | + cv::rectangle(task.frameImage, Rect(VPTResult[i].obj[c].left, VPTResult[i].obj[c].top, |
1089 | VPTResult[i].obj[c].right - VPTResult[i].obj[c].left, | 1081 | VPTResult[i].obj[c].right - VPTResult[i].obj[c].left, |
1090 | VPTResult[i].obj[c].bottom - VPTResult[i].obj[c].top), Scalar(158, 52, 254), 3, 1, 0); | 1082 | VPTResult[i].obj[c].bottom - VPTResult[i].obj[c].top), Scalar(158, 52, 254), 3, 1, 0); |
1091 | #ifdef _MSC_VER | 1083 | #ifdef _MSC_VER |
1092 | string resss = "" + to_string(index) + " " + ObjTypes[index]; | 1084 | string resss = "" + to_string(index) + " " + ObjTypes[index]; |
1093 | - putTextZH(tasks[*iter].frameImage, resss.c_str(), { p1, p2 }, Scalar(20, 255, 20), 14, "Arial"); | 1085 | + putTextZH(task.frameImage, resss.c_str(), { p1, p2 }, Scalar(20, 255, 20), 14, "Arial"); |
1094 | #else | 1086 | #else |
1095 | string resss = "" + to_string(VPTResult[i].obj[c].id) + " " + ObjTypesEnglish[VPTResult[i].obj[c].index]; | 1087 | string resss = "" + to_string(VPTResult[i].obj[c].id) + " " + ObjTypesEnglish[VPTResult[i].obj[c].index]; |
1096 | - cv::putText(tasks[*iter].frameImage, resss.c_str(), cv::Point(p1, p2), cv::FONT_HERSHEY_COMPLEX, 2, Scalar(20, 255, 20), 2, 8, 0); | 1088 | + cv::putText(task.frameImage, resss.c_str(), cv::Point(p1, p2), cv::FONT_HERSHEY_COMPLEX, 2, Scalar(20, 255, 20), 2, 8, 0); |
1097 | #endif | 1089 | #endif |
1098 | } | 1090 | } |
1099 | 1091 | ||
1100 | - CropInfo crop_info = m_snaphot_helper.cacheSnapShotInfo(newObj, VPTResult[i].obj[c], tasks[*iter]); | 1092 | + CropInfo crop_info = m_snaphot_helper.cacheSnapShotInfo(newObj, VPTResult[i].obj[c], task); |
1101 | if(crop_info.bCrop){ | 1093 | if(crop_info.bCrop){ |
1102 | snapshot_image_data[copy_obj_count] = crop_info.snapshot_image_data; | 1094 | snapshot_image_data[copy_obj_count] = crop_info.snapshot_image_data; |
1103 | snapshot_left[copy_obj_count] = crop_info.snapshot_left; | 1095 | snapshot_left[copy_obj_count] = crop_info.snapshot_left; |
@@ -1122,7 +1114,7 @@ void CMutliSourceVideoProcess::algorthim_process() | @@ -1122,7 +1114,7 @@ void CMutliSourceVideoProcess::algorthim_process() | ||
1122 | { | 1114 | { |
1123 | cudaSetDevice(mgpuid); | 1115 | cudaSetDevice(mgpuid); |
1124 | cuCtxPushCurrent(context); | 1116 | cuCtxPushCurrent(context); |
1125 | - PartMemResizeBatch((unsigned char*)tasks[*iter].task_algorithm_data.frame, frameWidth, frameHeight, | 1117 | + PartMemResizeBatch((unsigned char*)task.task_algorithm_data.frame, frameWidth, frameHeight, |
1126 | snapshot_image_data, copy_obj_count, snapshot_left, snapshot_top, snapshot_right, snapshot_bottom, snapshot_dst_width, snapshot_dst_height, 0, 0, 0, 1, 1, 1); | 1118 | snapshot_image_data, copy_obj_count, snapshot_left, snapshot_top, snapshot_right, snapshot_bottom, snapshot_dst_width, snapshot_dst_height, 0, 0, 0, 1, 1, 1); |
1127 | cuCtxPopCurrent(&context); | 1119 | cuCtxPopCurrent(&context); |
1128 | 1120 | ||
@@ -1131,9 +1123,8 @@ void CMutliSourceVideoProcess::algorthim_process() | @@ -1131,9 +1123,8 @@ void CMutliSourceVideoProcess::algorthim_process() | ||
1131 | { | 1123 | { |
1132 | //需要做人脸检测 | 1124 | //需要做人脸检测 |
1133 | int human_count = human_idx.size(); | 1125 | int human_count = human_idx.size(); |
1134 | - sy_img *human_img = new sy_img[human_count]; | ||
1135 | - | ||
1136 | - sy_point* ori_points = new sy_point[human_count]; | 1126 | + sy_img human_img[human_count]; |
1127 | + sy_point ori_points[human_count]; | ||
1137 | for (int idx = 0; idx < human_count; idx++) | 1128 | for (int idx = 0; idx < human_count; idx++) |
1138 | { | 1129 | { |
1139 | int ii = human_idx[idx]; | 1130 | int ii = human_idx[idx]; |
@@ -1142,167 +1133,16 @@ void CMutliSourceVideoProcess::algorthim_process() | @@ -1142,167 +1133,16 @@ void CMutliSourceVideoProcess::algorthim_process() | ||
1142 | ori_points[idx].y_ = (snapshot_bottom[ii] - snapshot_top[ii]); | 1133 | ori_points[idx].y_ = (snapshot_bottom[ii] - snapshot_top[ii]); |
1143 | } | 1134 | } |
1144 | 1135 | ||
1145 | - fd_result *face_det_result = new fd_result[human_count]; | ||
1146 | - for (int fd_i = 0; fd_i < human_count; fd_i++) | ||
1147 | - { | ||
1148 | - face_det_result[fd_i].info = new fd_info[10]; //内存由外部申请 | ||
1149 | - } | ||
1150 | - | ||
1151 | - if (m_face_det_module->face_det_module_process(human_img, human_count, face_det_result, ori_points) == SUCCESS) | ||
1152 | - { | ||
1153 | - //printf("finish face_det_module_process: %d\n", human_count); | ||
1154 | - for (int idx = 0; idx < human_count; idx++) | ||
1155 | - { | ||
1156 | - OBJ_KEY cur_obj_key = human_obj_keys[idx]; | ||
1157 | - fd_result &cur_det_res = face_det_result[idx]; | ||
1158 | - int face_count = cur_det_res.count; | ||
1159 | - int face_idx = 0; | ||
1160 | - int ii = human_idx[idx]; | ||
1161 | - | ||
1162 | - if (face_count == 0) continue; | ||
1163 | - | ||
1164 | - if (face_count > 1) //检测到多余一个人脸 选最佳 | ||
1165 | - { | ||
1166 | - sy_point center_human = { human_img[idx].w_/2, human_img [idx].h_/2}; | ||
1167 | - float min_distance = INT_MAX; | ||
1168 | - | ||
1169 | - for (int c = 0; c < face_count; c++) | ||
1170 | - { | ||
1171 | - sy_point face_center = { cur_det_res.info[c].face_position.width_/2, cur_det_res.info[c].face_position.height_/2}; | ||
1172 | - float distance = fabs(center_human.x_ - face_center.x_) + fabs(center_human.y_ - face_center.y_); | ||
1173 | - | ||
1174 | - if (distance < min_distance) | ||
1175 | - { | ||
1176 | - min_distance = distance; | ||
1177 | - face_idx = c; | ||
1178 | - } | ||
1179 | - } | ||
1180 | - } | ||
1181 | - | ||
1182 | - fd_info& cur_det_info = cur_det_res.info[face_idx]; | ||
1183 | - if (m_snaphot_helper.snapShotInfo[cur_obj_key].snapShotFace.frame == nullptr) | ||
1184 | - { | ||
1185 | - sy_rect face_ori_rect = { (int)(snapshot_left[ii] + cur_det_info.face_position.left_ ), | ||
1186 | - (int)(snapshot_top[ii] + cur_det_info.face_position.top_), | ||
1187 | - (int)(cur_det_info.face_position.width_), (int)(cur_det_info.face_position.height_) }; | ||
1188 | - | ||
1189 | - int new_left = max(0, face_ori_rect.left_ - face_ori_rect.width_); | ||
1190 | - int new_top = max(0, face_ori_rect.top_ - face_ori_rect.height_); | ||
1191 | - int new_right = min((int)tasks[*iter].task_algorithm_data.width - 1, (face_ori_rect.left_ + 2 * face_ori_rect.width_)); | ||
1192 | - int new_bottom = min((int)tasks[*iter].task_algorithm_data.height - 1, (face_ori_rect.top_ + 2 * face_ori_rect.height_)); | ||
1193 | - int new_width = new_right - new_left; | ||
1194 | - int new_height = new_bottom - new_top; | ||
1195 | - | ||
1196 | - sy_rect face_expand_rect = { new_left, new_top, new_width, new_height }; | ||
1197 | - | ||
1198 | - int face_img_length = 3 * face_expand_rect.width_ * face_expand_rect.height_; | ||
1199 | - | ||
1200 | - cudaError_t cudaStatus = cudaMalloc((void**)&m_snaphot_helper.snapShotInfo[cur_obj_key].snapShotFace.frame, face_img_length * sizeof(unsigned char)); | ||
1201 | - if (cudaStatus != cudaSuccess) { | ||
1202 | - fprintf(stderr, "here cudaMalloc frame[0] failed! error: %s\n", cudaGetErrorString(cudaStatus)); | ||
1203 | - break; | ||
1204 | - } | ||
1205 | - | ||
1206 | - m_snaphot_helper.snapShotInfo[cur_obj_key].snapShotFace.width = face_expand_rect.width_; | ||
1207 | - m_snaphot_helper.snapShotInfo[cur_obj_key].snapShotFace.height = face_expand_rect.height_; | ||
1208 | - memcpy((void*)&m_snaphot_helper.snapShotInfo[cur_obj_key].face_info, (void*)&cur_det_info, sizeof(fd_info)); | ||
1209 | - | ||
1210 | - //矫正坐标 从行人抠图检测结果 -> 人脸外扩抠图坐标 | ||
1211 | - fd_info& tmp_info = m_snaphot_helper.snapShotInfo[cur_obj_key].face_info; | ||
1212 | - | ||
1213 | - for (int p = 0; p < FACIALFEAPOINTSIZE; p++) | ||
1214 | - { | ||
1215 | - tmp_info.facial_fea_point[p].x_ = | ||
1216 | - tmp_info.facial_fea_point[p].x_ - tmp_info.face_position.left_ + (face_ori_rect.left_ - face_expand_rect.left_); | ||
1217 | - tmp_info.facial_fea_point[p].y_ = | ||
1218 | - tmp_info.facial_fea_point[p].y_ - tmp_info.face_position.top_ + (face_ori_rect.top_ - face_expand_rect.top_); | ||
1219 | - } | ||
1220 | - | ||
1221 | - m_snaphot_helper.snapShotInfo[cur_obj_key].face_info.face_position = | ||
1222 | - { (face_ori_rect.left_ - face_expand_rect.left_), (face_ori_rect.top_ - face_expand_rect.top_), face_ori_rect.width_, face_ori_rect.height_ }; | ||
1223 | - | ||
1224 | - | ||
1225 | - cudacommon::CropImgGpu((unsigned char*)tasks[*iter].task_algorithm_data.frame, tasks[*iter].task_algorithm_data.width, tasks[*iter].task_algorithm_data.height, | ||
1226 | - (unsigned char*)m_snaphot_helper.snapShotInfo[cur_obj_key].snapShotFace.frame, face_expand_rect.left_, face_expand_rect.top_, face_expand_rect.width_, face_expand_rect.height_); | ||
1227 | - | ||
1228 | - //show_gpu_img_func(m_snaphot_helper.snapShotInfo[cur_obj_key].snapShotFace); | ||
1229 | - } | ||
1230 | - else | ||
1231 | - { | ||
1232 | - sy_rect face_ori_rect = { (int)(snapshot_left[ii] + cur_det_info.face_position.left_), | ||
1233 | - (int)(snapshot_top[ii] + cur_det_info.face_position.top_), | ||
1234 | - (int)(cur_det_info.face_position.width_), (int)(cur_det_info.face_position.height_) }; | ||
1235 | - | ||
1236 | - //更新人脸快照条件:① 角度满足条件 ② 面积比之前人脸面积大 | ||
1237 | - if (validAngle(cur_det_res.info[face_idx].roll, cur_det_res.info[face_idx].yaw, cur_det_res.info[face_idx].pitch, 15.0, 20.0) | ||
1238 | - && betterArea(face_ori_rect, m_snaphot_helper.snapShotInfo[cur_obj_key].face_info.face_position)) | ||
1239 | - { | ||
1240 | - int new_left = max(0, face_ori_rect.left_ - face_ori_rect.width_); | ||
1241 | - int new_top = max(0, face_ori_rect.top_ - face_ori_rect.height_); | ||
1242 | - int new_right = min((int)tasks[*iter].task_algorithm_data.width - 1, (face_ori_rect.left_ + 2 * face_ori_rect.width_)); | ||
1243 | - int new_bottom = min((int)tasks[*iter].task_algorithm_data.height - 1, (face_ori_rect.top_ + 2 * face_ori_rect.height_)); | ||
1244 | - int new_width = new_right - new_left; | ||
1245 | - int new_height = new_bottom - new_top; | ||
1246 | - | ||
1247 | - sy_rect face_expand_rect = { new_left, new_top, new_width, new_height }; | ||
1248 | - | ||
1249 | - //更新快照 | ||
1250 | - int face_img_length = 3 * face_expand_rect.width_ * face_expand_rect.height_; | ||
1251 | - | ||
1252 | - cudaFree(m_snaphot_helper.snapShotInfo[cur_obj_key].snapShotFace.frame); | ||
1253 | - cudaError_t cudaStatus = cudaMalloc((void**)&m_snaphot_helper.snapShotInfo[cur_obj_key].snapShotFace.frame, face_img_length * sizeof(unsigned char)); | ||
1254 | - if (cudaStatus != cudaSuccess) { | ||
1255 | - fprintf(stderr, "here cudaMalloc frame[0] failed! error: %s\n", cudaGetErrorString(cudaStatus)); | ||
1256 | - break; | ||
1257 | - } | ||
1258 | - | ||
1259 | - m_snaphot_helper.snapShotInfo[cur_obj_key].snapShotFace.width = face_expand_rect.width_; | ||
1260 | - m_snaphot_helper.snapShotInfo[cur_obj_key].snapShotFace.height = face_expand_rect.height_; | ||
1261 | - memcpy((void*)&m_snaphot_helper.snapShotInfo[cur_obj_key].face_info, (void*)&cur_det_info, sizeof(fd_info)); | ||
1262 | - | ||
1263 | - //矫正坐标 从行人抠图检测结果 -> 人脸外扩抠图坐标 | ||
1264 | - fd_info& tmp_info = m_snaphot_helper.snapShotInfo[cur_obj_key].face_info; | ||
1265 | - | ||
1266 | - for (int p = 0; p < FACIALFEAPOINTSIZE; p++) | ||
1267 | - { | ||
1268 | - tmp_info.facial_fea_point[p].x_ = | ||
1269 | - tmp_info.facial_fea_point[p].x_ - tmp_info.face_position.left_ + (face_ori_rect.left_ - face_expand_rect.left_); | ||
1270 | - tmp_info.facial_fea_point[p].y_ = | ||
1271 | - tmp_info.facial_fea_point[p].y_ - tmp_info.face_position.top_ + (face_ori_rect.top_ - face_expand_rect.top_); | ||
1272 | - } | ||
1273 | - | ||
1274 | - m_snaphot_helper.snapShotInfo[cur_obj_key].face_info.face_position = | ||
1275 | - {(face_ori_rect.left_ - face_expand_rect.left_), (face_ori_rect.top_ - face_expand_rect.top_), face_ori_rect.width_, face_ori_rect.height_}; | ||
1276 | - | ||
1277 | - cudacommon::CropImgGpu((unsigned char*)tasks[*iter].task_algorithm_data.frame, tasks[*iter].task_algorithm_data.width, tasks[*iter].task_algorithm_data.height, | ||
1278 | - (unsigned char*)m_snaphot_helper.snapShotInfo[cur_obj_key].snapShotFace.frame, face_expand_rect.left_, face_expand_rect.top_, face_expand_rect.width_, face_expand_rect.height_); | ||
1279 | - | ||
1280 | - //show_gpu_image_withfdinfo_(m_snaphot_helper.snapShotInfo[cur_obj_key].snapShotFace, cur_det_info); | ||
1281 | - | ||
1282 | - //show_gpu_image_withfdinfo_(m_snaphot_helper.snapShotInfo[cur_obj_key].snapShotFace, m_snaphot_helper.snapShotInfo[cur_obj_key].face_info); | ||
1283 | - } | ||
1284 | - } | ||
1285 | - } | ||
1286 | - } | ||
1287 | - | ||
1288 | - if (face_det_result) | ||
1289 | - { | ||
1290 | - for (int fd_i = 0; fd_i < human_count; fd_i++) | ||
1291 | - delete[] face_det_result[fd_i].info; | ||
1292 | - delete face_det_result; | ||
1293 | - } | ||
1294 | - | ||
1295 | - if (human_img) delete[] human_img; | ||
1296 | - if (ori_points) delete[] ori_points; | 1136 | + m_snaphot_helper.cacheFaceSnapshotInfo(human_img, human_count, ori_points, human_idx, human_obj_keys, snapshot_left, snapshot_top, task); |
1297 | } | 1137 | } |
1298 | } | 1138 | } |
1299 | 1139 | ||
1300 | //实时查看 绘制目标轨迹 回调函数返回 | 1140 | //实时查看 绘制目标轨迹 回调函数返回 |
1301 | if (view) | 1141 | if (view) |
1302 | { | 1142 | { |
1303 | - DrawTracker(VPT_Handle, *iter, &tasks[*iter].frameImage); | ||
1304 | - if (tasks[*iter].taskRealTimeCallbackFunc != nullptr) | ||
1305 | - tasks[*iter].taskRealTimeCallbackFunc(tasks[*iter].frameImage.data, tasks[*iter].frameImage.rows, tasks[*iter].frameImage.cols); | 1143 | + DrawTracker(VPT_Handle, *iter, &task.frameImage); |
1144 | + if (task.taskRealTimeCallbackFunc != nullptr) | ||
1145 | + task.taskRealTimeCallbackFunc(task.frameImage.data, task.frameImage.rows, task.frameImage.cols); | ||
1306 | } | 1146 | } |
1307 | // tasks[*iter].taskFrameCount += skip_frame_; | 1147 | // tasks[*iter].taskFrameCount += skip_frame_; |
1308 | iter++; | 1148 | iter++; |
vehicle_structure_platform.git0708-3080-trt-face/src/VPT/MutliSourceVideoProcess.h
@@ -18,7 +18,6 @@ | @@ -18,7 +18,6 @@ | ||
18 | 18 | ||
19 | #include "mvpt_process_assist.h" | 19 | #include "mvpt_process_assist.h" |
20 | #include "snapshot_helper.h" | 20 | #include "snapshot_helper.h" |
21 | -#include "FaceDetModule.h" | ||
22 | 21 | ||
23 | #include <atomic> | 22 | #include <atomic> |
24 | //#include "DxLogInterface.h" | 23 | //#include "DxLogInterface.h" |
@@ -156,7 +155,6 @@ private: | @@ -156,7 +155,6 @@ private: | ||
156 | public: /*��������Ӧ����public�� �������̺߳����л��õ����µ����� ÿ����дһ��get����̫������*/ | 155 | public: /*��������Ӧ����public�� �������̺߳����л��õ����µ����� ÿ����дһ��get����̫������*/ |
157 | //fstream fout[THREAD_COUNT]; //���������� | 156 | //fstream fout[THREAD_COUNT]; //���������� |
158 | void * VPT_Handle; | 157 | void * VPT_Handle; |
159 | - face_det_module* m_face_det_module; | ||
160 | int section_batch_size; | 158 | int section_batch_size; |
161 | int licence_status; | 159 | int licence_status; |
162 | int thrd_status; | 160 | int thrd_status; |
vehicle_structure_platform.git0708-3080-trt-face/src/VPT/snapshot_analysis/HumanCarParsing.cpp
@@ -71,7 +71,7 @@ int HumanCarParsing::init(int gpuid, char* auth_license) | @@ -71,7 +71,7 @@ int HumanCarParsing::init(int gpuid, char* auth_license) | ||
71 | return SUCCESS; | 71 | return SUCCESS; |
72 | } | 72 | } |
73 | 73 | ||
74 | -int HumanCarParsing::process(sy_img * batch_img, int batch_size, hcp_analysis_result *&result) | 74 | +int HumanCarParsing::process(sy_img * batch_img, int batch_size, hcp_analysis_result *result) |
75 | { | 75 | { |
76 | LOG_DEBUG("batch_size: {}", batch_size); | 76 | LOG_DEBUG("batch_size: {}", batch_size); |
77 | hcp_batch(handle, batch_img, batch_size, result); | 77 | hcp_batch(handle, batch_img, batch_size, result); |
vehicle_structure_platform.git0708-3080-trt-face/src/VPT/snapshot_analysis/HumanCarParsing.h
@@ -12,7 +12,7 @@ public: | @@ -12,7 +12,7 @@ public: | ||
12 | ~HumanCarParsing(); | 12 | ~HumanCarParsing(); |
13 | 13 | ||
14 | int init(int gpuid, char* auth_license); | 14 | int init(int gpuid, char* auth_license); |
15 | - int process(sy_img * batch_img,int batchsize, hcp_analysis_result *&result); | 15 | + int process(sy_img * batch_img,int batchsize, hcp_analysis_result *result); |
16 | int release(); | 16 | int release(); |
17 | 17 | ||
18 | private: | 18 | private: |
vehicle_structure_platform.git0708-3080-trt-face/src/VPT/snapshot_analysis/HumanFea.cpp
@@ -36,7 +36,7 @@ int HumanFea::init(int gpuid, char* auth_license) | @@ -36,7 +36,7 @@ int HumanFea::init(int gpuid, char* auth_license) | ||
36 | return SUCCESS; | 36 | return SUCCESS; |
37 | } | 37 | } |
38 | 38 | ||
39 | -int HumanFea::process(sy_img * batch_img, int batch_size, human_fea_result*& result) | 39 | +int HumanFea::process(sy_img * batch_img, int batch_size, human_fea_result* result) |
40 | { | 40 | { |
41 | for (int i = 0; i < batch_size; i++) { | 41 | for (int i = 0; i < batch_size; i++) { |
42 | if (batch_img[i].data_ == NULL) { | 42 | if (batch_img[i].data_ == NULL) { |
vehicle_structure_platform.git0708-3080-trt-face/src/VPT/snapshot_analysis/HumanFea.h
@@ -9,7 +9,7 @@ public: | @@ -9,7 +9,7 @@ public: | ||
9 | ~HumanFea(); | 9 | ~HumanFea(); |
10 | 10 | ||
11 | int init(int gpuid, char* auth_license); | 11 | int init(int gpuid, char* auth_license); |
12 | - int process(sy_img * batch_img, int batch_size, human_fea_result*& result); | 12 | + int process(sy_img * batch_img, int batch_size, human_fea_result* result); |
13 | int release(); | 13 | int release(); |
14 | 14 | ||
15 | private: | 15 | private: |
vehicle_structure_platform.git0708-3080-trt-face/src/VPT/snapshot_analysis/snapshot_helper.cpp
@@ -140,6 +140,9 @@ void snapshot_helper::snapshot_helper_init(int gpuid, double gpu_total_memory, c | @@ -140,6 +140,9 @@ void snapshot_helper::snapshot_helper_init(int gpuid, double gpu_total_memory, c | ||
140 | m_vehicle_feature.init_vf(dbpath_utf8, gpuid, auth_license); | 140 | m_vehicle_feature.init_vf(dbpath_utf8, gpuid, auth_license); |
141 | } | 141 | } |
142 | 142 | ||
143 | + if(face_detect_cf == SY_CONFIG_OPEN) { | ||
144 | + m_face_det_module.face_det_module_init(gpuid, auth_license); | ||
145 | + } | ||
143 | 146 | ||
144 | OBJ_BATCH_COUNT = 20; | 147 | OBJ_BATCH_COUNT = 20; |
145 | if (gpu_total_memory < 9000) //8G显存,小内存方案 | 148 | if (gpu_total_memory < 9000) //8G显存,小内存方案 |
@@ -153,7 +156,6 @@ void snapshot_helper::snapshot_helper_init(int gpuid, double gpu_total_memory, c | @@ -153,7 +156,6 @@ void snapshot_helper::snapshot_helper_init(int gpuid, double gpu_total_memory, c | ||
153 | v_analysis = V_ANALYSIS_TYPE::VC_ANALYSIS; | 156 | v_analysis = V_ANALYSIS_TYPE::VC_ANALYSIS; |
154 | 157 | ||
155 | batch_hp = new sy_img[OBJ_BATCH_COUNT]{}; | 158 | batch_hp = new sy_img[OBJ_BATCH_COUNT]{}; |
156 | - batch_hcp = new sy_img[OBJ_BATCH_COUNT]{}; | ||
157 | batch_vehicle = new sy_img[OBJ_BATCH_COUNT_VEHICLE]{}; | 159 | batch_vehicle = new sy_img[OBJ_BATCH_COUNT_VEHICLE]{}; |
158 | batch_vehicle_vf = new sy_img[OBJ_BATCH_COUNT_VEHICLE]{}; | 160 | batch_vehicle_vf = new sy_img[OBJ_BATCH_COUNT_VEHICLE]{}; |
159 | 161 | ||
@@ -178,17 +180,14 @@ void snapshot_helper::snapshot_helper_release() | @@ -178,17 +180,14 @@ void snapshot_helper::snapshot_helper_release() | ||
178 | m_vehicle_feature.release_vpd(); | 180 | m_vehicle_feature.release_vpd(); |
179 | m_vehicle_feature.release_vf(); | 181 | m_vehicle_feature.release_vf(); |
180 | m_human_fea.release(); | 182 | m_human_fea.release(); |
183 | + m_face_det_module.face_det_module_release(); | ||
181 | 184 | ||
182 | if (batch_hp != NULL) | 185 | if (batch_hp != NULL) |
183 | { | 186 | { |
184 | delete[] batch_hp; | 187 | delete[] batch_hp; |
185 | batch_hp = NULL; | 188 | batch_hp = NULL; |
186 | } | 189 | } |
187 | - if (batch_hcp != NULL) | ||
188 | - { | ||
189 | - delete[] batch_hcp; | ||
190 | - batch_hcp = NULL; | ||
191 | - } | 190 | + |
192 | if (batch_vehicle != NULL) | 191 | if (batch_vehicle != NULL) |
193 | { | 192 | { |
194 | delete[] batch_vehicle; | 193 | delete[] batch_vehicle; |
@@ -585,21 +584,20 @@ void snapshot_helper::finish_task_ss_analysis(int task_id) //是 | @@ -585,21 +584,20 @@ void snapshot_helper::finish_task_ss_analysis(int task_id) //是 | ||
585 | 584 | ||
586 | if (!hcp_keys.empty()) | 585 | if (!hcp_keys.empty()) |
587 | { | 586 | { |
587 | + LOG_DEBUG("hcp_keys size: {}", hcp_keys.size()); | ||
588 | + | ||
588 | const int obj_batch_count = OBJ_BATCH_COUNT / OBJ_SCALE; | 589 | const int obj_batch_count = OBJ_BATCH_COUNT / OBJ_SCALE; |
589 | const int hcp_batch_size = hcp_keys.size(); | 590 | const int hcp_batch_size = hcp_keys.size(); |
590 | int hcp_batch_count = obj_batch_count; | 591 | int hcp_batch_count = obj_batch_count; |
591 | 592 | ||
592 | for (int i = 0; i <= (hcp_batch_size / obj_batch_count); ++i) | 593 | for (int i = 0; i <= (hcp_batch_size / obj_batch_count); ++i) |
593 | { | 594 | { |
594 | - hcp_analysis_result *result = nullptr; | ||
595 | - human_fea_result * result_f = nullptr; | ||
596 | if (i == (hcp_batch_size / obj_batch_count)) | 595 | if (i == (hcp_batch_size / obj_batch_count)) |
597 | hcp_batch_count = hcp_batch_size % obj_batch_count; | 596 | hcp_batch_count = hcp_batch_size % obj_batch_count; |
598 | 597 | ||
599 | if (hcp_batch_count == 0) continue; | 598 | if (hcp_batch_count == 0) continue; |
600 | 599 | ||
601 | - sy_img* finish_hcp_img = new sy_img[hcp_batch_count]{}; | ||
602 | - | 600 | + sy_img finish_hcp_img[hcp_batch_count]; |
603 | for (int j = 0; j < hcp_batch_count; j++) | 601 | for (int j = 0; j < hcp_batch_count; j++) |
604 | { | 602 | { |
605 | OBJ_KEY cur_obj_key = hcp_keys[j]; | 603 | OBJ_KEY cur_obj_key = hcp_keys[j]; |
@@ -607,13 +605,13 @@ void snapshot_helper::finish_task_ss_analysis(int task_id) //是 | @@ -607,13 +605,13 @@ void snapshot_helper::finish_task_ss_analysis(int task_id) //是 | ||
607 | finish_hcp_img[j].set_data(HCP_WIDTH, HCP_HEIGHT, IMG_CHANNELS, (unsigned char*)snapShotInfo[cur_obj_key].snapShotLittle.frame); | 605 | finish_hcp_img[j].set_data(HCP_WIDTH, HCP_HEIGHT, IMG_CHANNELS, (unsigned char*)snapShotInfo[cur_obj_key].snapShotLittle.frame); |
608 | } | 606 | } |
609 | 607 | ||
608 | + hcp_analysis_result result[hcp_batch_count]; | ||
610 | if (hcp_analysis_cf == SY_CONFIG_OPEN) { | 609 | if (hcp_analysis_cf == SY_CONFIG_OPEN) { |
611 | - result = new hcp_analysis_result[hcp_batch_count]{}; | ||
612 | m_human_car_parsing.process(finish_hcp_img, hcp_batch_count, result); | 610 | m_human_car_parsing.process(finish_hcp_img, hcp_batch_count, result); |
613 | } | 611 | } |
614 | 612 | ||
613 | + human_fea_result result_f[hcp_batch_count]; | ||
615 | if (hcf_recg_cf == SY_CONFIG_OPEN) { | 614 | if (hcf_recg_cf == SY_CONFIG_OPEN) { |
616 | - result_f = new human_fea_result[hcp_batch_count]{}; | ||
617 | m_human_fea.process(finish_hcp_img, hcp_batch_count, result_f); | 615 | m_human_fea.process(finish_hcp_img, hcp_batch_count, result_f); |
618 | } | 616 | } |
619 | int resIndex = 0; | 617 | int resIndex = 0; |
@@ -665,22 +663,6 @@ void snapshot_helper::finish_task_ss_analysis(int task_id) //是 | @@ -665,22 +663,6 @@ void snapshot_helper::finish_task_ss_analysis(int task_id) //是 | ||
665 | } | 663 | } |
666 | 664 | ||
667 | hcp_keys.erase(hcp_keys.begin(), hcp_keys.begin() + hcp_batch_count); | 665 | hcp_keys.erase(hcp_keys.begin(), hcp_keys.begin() + hcp_batch_count); |
668 | - | ||
669 | - if (result != nullptr) | ||
670 | - { | ||
671 | - delete[] result; | ||
672 | - result = nullptr; | ||
673 | - } | ||
674 | - if (result_f != nullptr) | ||
675 | - { | ||
676 | - delete[] result_f; | ||
677 | - result_f = nullptr; | ||
678 | - } | ||
679 | - if (finish_hcp_img != NULL) | ||
680 | - { | ||
681 | - delete[] finish_hcp_img; | ||
682 | - finish_hcp_img = NULL; | ||
683 | - } | ||
684 | } | 666 | } |
685 | } | 667 | } |
686 | 668 | ||
@@ -952,8 +934,8 @@ void snapshot_helper::hcp_analysis() | @@ -952,8 +934,8 @@ void snapshot_helper::hcp_analysis() | ||
952 | human_fea_result * result_f = nullptr; | 934 | human_fea_result * result_f = nullptr; |
953 | 935 | ||
954 | int cur_batchsize = index == 0 ? per_batchsize : OBJ_BATCH_COUNT - per_batchsize; | 936 | int cur_batchsize = index == 0 ? per_batchsize : OBJ_BATCH_COUNT - per_batchsize; |
955 | - for (int i = 0; i < cur_batchsize/*OBJ_BATCH_COUNT / OBJ_SCALE*/; i++) | ||
956 | - //for (int i = 0; i < OBJ_BATCH_COUNT/ OBJ_SCALE; i++) | 937 | + sy_img batch_hcp[cur_batchsize]; |
938 | + for (int i = 0; i < cur_batchsize; i++) | ||
957 | { | 939 | { |
958 | OBJ_KEY cur_obj_key = count_bike.front(); | 940 | OBJ_KEY cur_obj_key = count_bike.front(); |
959 | count_bike.pop(); | 941 | count_bike.pop(); |
@@ -2132,6 +2114,7 @@ CropInfo snapshot_helper::cacheSnapShotInfo(OBJ_KEY newObj, VPT_ObjInfo obj, Tas | @@ -2132,6 +2114,7 @@ CropInfo snapshot_helper::cacheSnapShotInfo(OBJ_KEY newObj, VPT_ObjInfo obj, Tas | ||
2132 | { | 2114 | { |
2133 | cur_width = HCP_WIDTH; | 2115 | cur_width = HCP_WIDTH; |
2134 | cur_height = HCP_HEIGHT; | 2116 | cur_height = HCP_HEIGHT; |
2117 | + LOG_DEBUG("task_id:{} obj_id:{} index = 0、1", newObj.videoID, newObj.objID); | ||
2135 | } | 2118 | } |
2136 | else if (8 == snapShotInfo[newObj].index.index || (snapShotInfo[newObj].index.index >= 4 && snapShotInfo[newObj].index.index <= 6)) | 2119 | else if (8 == snapShotInfo[newObj].index.index || (snapShotInfo[newObj].index.index >= 4 && snapShotInfo[newObj].index.index <= 6)) |
2137 | { | 2120 | { |
@@ -2319,4 +2302,150 @@ int snapshot_helper::getIndexByKey(OBJ_KEY newObj) { | @@ -2319,4 +2302,150 @@ int snapshot_helper::getIndexByKey(OBJ_KEY newObj) { | ||
2319 | } | 2302 | } |
2320 | 2303 | ||
2321 | return -1; | 2304 | return -1; |
2305 | +} | ||
2306 | + | ||
2307 | +void snapshot_helper::cacheFaceSnapshotInfo(sy_img *human_img, int human_count, sy_point* ori_points, vector<int> human_idx, vector<OBJ_KEY> human_obj_keys, int snapshot_left[], int snapshot_top[], Task task) { | ||
2308 | + fd_result *face_det_result = new fd_result[human_count]; | ||
2309 | + for (int fd_i = 0; fd_i < human_count; fd_i++) | ||
2310 | + { | ||
2311 | + face_det_result[fd_i].info = new fd_info[10]; //内存由外部申请 | ||
2312 | + } | ||
2313 | + | ||
2314 | + int ret = m_face_det_module.face_det_module_process(human_img, human_count, face_det_result, ori_points); | ||
2315 | + if (SUCCESS == ret) | ||
2316 | + { | ||
2317 | + for (int idx = 0; idx < human_count; idx++) | ||
2318 | + { | ||
2319 | + OBJ_KEY cur_obj_key = human_obj_keys[idx]; | ||
2320 | + fd_result &cur_det_res = face_det_result[idx]; | ||
2321 | + int face_count = cur_det_res.count; | ||
2322 | + int face_idx = 0; | ||
2323 | + int ii = human_idx[idx]; | ||
2324 | + | ||
2325 | + if (face_count == 0) continue; | ||
2326 | + | ||
2327 | + if (face_count > 1) //检测到多余一个人脸 选最佳 | ||
2328 | + { | ||
2329 | + sy_point center_human = { human_img[idx].w_/2, human_img [idx].h_/2}; | ||
2330 | + float min_distance = INT_MAX; | ||
2331 | + | ||
2332 | + for (int c = 0; c < face_count; c++) | ||
2333 | + { | ||
2334 | + sy_point face_center = { cur_det_res.info[c].face_position.width_/2, cur_det_res.info[c].face_position.height_/2}; | ||
2335 | + float distance = fabs(center_human.x_ - face_center.x_) + fabs(center_human.y_ - face_center.y_); | ||
2336 | + | ||
2337 | + if (distance < min_distance) | ||
2338 | + { | ||
2339 | + min_distance = distance; | ||
2340 | + face_idx = c; | ||
2341 | + } | ||
2342 | + } | ||
2343 | + } | ||
2344 | + | ||
2345 | + fd_info& cur_det_info = cur_det_res.info[face_idx]; | ||
2346 | + if (snapShotInfo[cur_obj_key].snapShotFace.frame == nullptr) | ||
2347 | + { | ||
2348 | + sy_rect face_ori_rect = { (int)(snapshot_left[ii] + cur_det_info.face_position.left_ ), | ||
2349 | + (int)(snapshot_top[ii] + cur_det_info.face_position.top_), | ||
2350 | + (int)(cur_det_info.face_position.width_), (int)(cur_det_info.face_position.height_) }; | ||
2351 | + | ||
2352 | + int new_left = max(0, face_ori_rect.left_ - face_ori_rect.width_); | ||
2353 | + int new_top = max(0, face_ori_rect.top_ - face_ori_rect.height_); | ||
2354 | + int new_right = min((int)task.task_algorithm_data.width - 1, (face_ori_rect.left_ + 2 * face_ori_rect.width_)); | ||
2355 | + int new_bottom = min((int)task.task_algorithm_data.height - 1, (face_ori_rect.top_ + 2 * face_ori_rect.height_)); | ||
2356 | + int new_width = new_right - new_left; | ||
2357 | + int new_height = new_bottom - new_top; | ||
2358 | + | ||
2359 | + sy_rect face_expand_rect = { new_left, new_top, new_width, new_height }; | ||
2360 | + | ||
2361 | + int face_img_length = 3 * face_expand_rect.width_ * face_expand_rect.height_; | ||
2362 | + | ||
2363 | + cudaError_t cudaStatus = cudaMalloc((void**)&snapShotInfo[cur_obj_key].snapShotFace.frame, face_img_length * sizeof(unsigned char)); | ||
2364 | + if (cudaStatus != cudaSuccess) { | ||
2365 | + fprintf(stderr, "here cudaMalloc frame[0] failed! error: %s\n", cudaGetErrorString(cudaStatus)); | ||
2366 | + break; | ||
2367 | + } | ||
2368 | + | ||
2369 | + snapShotInfo[cur_obj_key].snapShotFace.width = face_expand_rect.width_; | ||
2370 | + snapShotInfo[cur_obj_key].snapShotFace.height = face_expand_rect.height_; | ||
2371 | + memcpy((void*)&snapShotInfo[cur_obj_key].face_info, (void*)&cur_det_info, sizeof(fd_info)); | ||
2372 | + | ||
2373 | + //矫正坐标 从行人抠图检测结果 -> 人脸外扩抠图坐标 | ||
2374 | + fd_info& tmp_info = snapShotInfo[cur_obj_key].face_info; | ||
2375 | + | ||
2376 | + for (int p = 0; p < FACIALFEAPOINTSIZE; p++) | ||
2377 | + { | ||
2378 | + tmp_info.facial_fea_point[p].x_ = | ||
2379 | + tmp_info.facial_fea_point[p].x_ - tmp_info.face_position.left_ + (face_ori_rect.left_ - face_expand_rect.left_); | ||
2380 | + tmp_info.facial_fea_point[p].y_ = | ||
2381 | + tmp_info.facial_fea_point[p].y_ - tmp_info.face_position.top_ + (face_ori_rect.top_ - face_expand_rect.top_); | ||
2382 | + } | ||
2383 | + | ||
2384 | + snapShotInfo[cur_obj_key].face_info.face_position = | ||
2385 | + { (face_ori_rect.left_ - face_expand_rect.left_), (face_ori_rect.top_ - face_expand_rect.top_), face_ori_rect.width_, face_ori_rect.height_ }; | ||
2386 | + | ||
2387 | + | ||
2388 | + cudacommon::CropImgGpu((unsigned char*)task.task_algorithm_data.frame, task.task_algorithm_data.width, task.task_algorithm_data.height, | ||
2389 | + (unsigned char*)snapShotInfo[cur_obj_key].snapShotFace.frame, face_expand_rect.left_, face_expand_rect.top_, face_expand_rect.width_, face_expand_rect.height_); | ||
2390 | + } | ||
2391 | + else | ||
2392 | + { | ||
2393 | + sy_rect face_ori_rect = { (int)(snapshot_left[ii] + cur_det_info.face_position.left_), | ||
2394 | + (int)(snapshot_top[ii] + cur_det_info.face_position.top_), | ||
2395 | + (int)(cur_det_info.face_position.width_), (int)(cur_det_info.face_position.height_) }; | ||
2396 | + | ||
2397 | + //更新人脸快照条件:① 角度满足条件 ② 面积比之前人脸面积大 | ||
2398 | + if (validAngle(cur_det_res.info[face_idx].roll, cur_det_res.info[face_idx].yaw, cur_det_res.info[face_idx].pitch, 15.0, 20.0) | ||
2399 | + && betterArea(face_ori_rect, snapShotInfo[cur_obj_key].face_info.face_position)) | ||
2400 | + { | ||
2401 | + int new_left = max(0, face_ori_rect.left_ - face_ori_rect.width_); | ||
2402 | + int new_top = max(0, face_ori_rect.top_ - face_ori_rect.height_); | ||
2403 | + int new_right = min((int)task.task_algorithm_data.width - 1, (face_ori_rect.left_ + 2 * face_ori_rect.width_)); | ||
2404 | + int new_bottom = min((int)task.task_algorithm_data.height - 1, (face_ori_rect.top_ + 2 * face_ori_rect.height_)); | ||
2405 | + int new_width = new_right - new_left; | ||
2406 | + int new_height = new_bottom - new_top; | ||
2407 | + | ||
2408 | + sy_rect face_expand_rect = { new_left, new_top, new_width, new_height }; | ||
2409 | + | ||
2410 | + //更新快照 | ||
2411 | + int face_img_length = 3 * face_expand_rect.width_ * face_expand_rect.height_; | ||
2412 | + | ||
2413 | + cudaFree(snapShotInfo[cur_obj_key].snapShotFace.frame); | ||
2414 | + cudaError_t cudaStatus = cudaMalloc((void**)&snapShotInfo[cur_obj_key].snapShotFace.frame, face_img_length * sizeof(unsigned char)); | ||
2415 | + if (cudaStatus != cudaSuccess) { | ||
2416 | + fprintf(stderr, "here cudaMalloc frame[0] failed! error: %s\n", cudaGetErrorString(cudaStatus)); | ||
2417 | + break; | ||
2418 | + } | ||
2419 | + | ||
2420 | + snapShotInfo[cur_obj_key].snapShotFace.width = face_expand_rect.width_; | ||
2421 | + snapShotInfo[cur_obj_key].snapShotFace.height = face_expand_rect.height_; | ||
2422 | + memcpy((void*)&snapShotInfo[cur_obj_key].face_info, (void*)&cur_det_info, sizeof(fd_info)); | ||
2423 | + | ||
2424 | + //矫正坐标 从行人抠图检测结果 -> 人脸外扩抠图坐标 | ||
2425 | + fd_info& tmp_info = snapShotInfo[cur_obj_key].face_info; | ||
2426 | + | ||
2427 | + for (int p = 0; p < FACIALFEAPOINTSIZE; p++) | ||
2428 | + { | ||
2429 | + tmp_info.facial_fea_point[p].x_ = | ||
2430 | + tmp_info.facial_fea_point[p].x_ - tmp_info.face_position.left_ + (face_ori_rect.left_ - face_expand_rect.left_); | ||
2431 | + tmp_info.facial_fea_point[p].y_ = | ||
2432 | + tmp_info.facial_fea_point[p].y_ - tmp_info.face_position.top_ + (face_ori_rect.top_ - face_expand_rect.top_); | ||
2433 | + } | ||
2434 | + | ||
2435 | + snapShotInfo[cur_obj_key].face_info.face_position = | ||
2436 | + {(face_ori_rect.left_ - face_expand_rect.left_), (face_ori_rect.top_ - face_expand_rect.top_), face_ori_rect.width_, face_ori_rect.height_}; | ||
2437 | + | ||
2438 | + cudacommon::CropImgGpu((unsigned char*)task.task_algorithm_data.frame, task.task_algorithm_data.width, task.task_algorithm_data.height, | ||
2439 | + (unsigned char*)snapShotInfo[cur_obj_key].snapShotFace.frame, face_expand_rect.left_, face_expand_rect.top_, face_expand_rect.width_, face_expand_rect.height_); | ||
2440 | + } | ||
2441 | + } | ||
2442 | + } | ||
2443 | + } | ||
2444 | + | ||
2445 | + if (face_det_result) | ||
2446 | + { | ||
2447 | + for (int fd_i = 0; fd_i < human_count; fd_i++) | ||
2448 | + delete[] face_det_result[fd_i].info; | ||
2449 | + delete face_det_result; | ||
2450 | + } | ||
2322 | } | 2451 | } |
2323 | \ No newline at end of file | 2452 | \ No newline at end of file |
vehicle_structure_platform.git0708-3080-trt-face/src/VPT/snapshot_analysis/snapshot_helper.h
@@ -18,6 +18,7 @@ | @@ -18,6 +18,7 @@ | ||
18 | #include "VehicleColor.h" | 18 | #include "VehicleColor.h" |
19 | #include "VehicleRearRecg.h" | 19 | #include "VehicleRearRecg.h" |
20 | #include "VehicleRecognition.h" | 20 | #include "VehicleRecognition.h" |
21 | +#include "FaceDetModule.h" | ||
21 | 22 | ||
22 | using namespace std; | 23 | using namespace std; |
23 | 24 | ||
@@ -195,6 +196,8 @@ public: | @@ -195,6 +196,8 @@ public: | ||
195 | 196 | ||
196 | CropInfo cacheSnapShotInfo(OBJ_KEY newObj, VPT_ObjInfo obj, Task task); | 197 | CropInfo cacheSnapShotInfo(OBJ_KEY newObj, VPT_ObjInfo obj, Task task); |
197 | 198 | ||
199 | + void cacheFaceSnapshotInfo(sy_img *human_img, int human_count, sy_point* ori_points, vector<int> human_idx, vector<OBJ_KEY> human_obj_keys, int snapshot_left[], int snapshot_top[], Task task); | ||
200 | + | ||
198 | int getIndexByKey(OBJ_KEY newObj); | 201 | int getIndexByKey(OBJ_KEY newObj); |
199 | 202 | ||
200 | private: | 203 | private: |
@@ -216,6 +219,7 @@ private: | @@ -216,6 +219,7 @@ private: | ||
216 | VehiclePlate m_vehicle_plate; | 219 | VehiclePlate m_vehicle_plate; |
217 | VehicleRearRecg m_vehicle_rear_recog; | 220 | VehicleRearRecg m_vehicle_rear_recog; |
218 | VehicleRecognition m_vehicle_recognition; | 221 | VehicleRecognition m_vehicle_recognition; |
222 | + face_det_module m_face_det_module; | ||
219 | 223 | ||
220 | queue<OBJ_KEY> count_person; | 224 | queue<OBJ_KEY> count_person; |
221 | queue<OBJ_KEY> count_bike; | 225 | queue<OBJ_KEY> count_bike; |
@@ -226,7 +230,6 @@ private: | @@ -226,7 +230,6 @@ private: | ||
226 | vector<vehicle_result> vehicle_result_v; | 230 | vector<vehicle_result> vehicle_result_v; |
227 | 231 | ||
228 | sy_img * batch_hp = nullptr; | 232 | sy_img * batch_hp = nullptr; |
229 | - sy_img * batch_hcp = nullptr; | ||
230 | sy_img * batch_vehicle = nullptr; | 233 | sy_img * batch_vehicle = nullptr; |
231 | sy_img * batch_vehicle_vf = nullptr; | 234 | sy_img * batch_vehicle_vf = nullptr; |
232 | 235 |