From d4109b2cef809daba0f95f244029456613383f01 Mon Sep 17 00:00:00 2001 From: houxiao <houxiao@454eff88-639b-444f-9e54-f578c98de674> Date: 星期五, 06 一月 2017 11:31:42 +0800 Subject: [PATCH] add pm list test --- RtspFace/PL_SensetimeFaceTrack.cpp | 57 ++++++++++++++++++++++++++++++++++++++++++++++++++++----- 1 files changed, 52 insertions(+), 5 deletions(-) diff --git a/RtspFace/PL_SensetimeFaceTrack.cpp b/RtspFace/PL_SensetimeFaceTrack.cpp index 541c79c..7802631 100644 --- a/RtspFace/PL_SensetimeFaceTrack.cpp +++ b/RtspFace/PL_SensetimeFaceTrack.cpp @@ -11,7 +11,9 @@ //size_t buffSize; //size_t buffSizeMax; MB_Frame lastFrame; + PipeMaterial pmList[2]; SensetimeFaceTrackConfig config; + st_ff_vect_t faceFeatures; bool payError; @@ -19,7 +21,7 @@ PL_SensetimeFaceTrack_Internal() : //buffSize(0), buffSizeMax(sizeof(buffer)), - lastFrame(), config(), payError(true), + lastFrame(), pmList(), config(), faceFeatures(), payError(true), handle_track(nullptr) { } @@ -35,6 +37,11 @@ MB_Frame _lastFrame; lastFrame = _lastFrame; + + PipeMaterial _pm; + pmList[0] = _pm; + pmList[1] = _pm; + SensetimeFaceTrackConfig _config; config = _config; @@ -130,6 +137,17 @@ cv::Mat yMat(cv::Size(width,height), CV_8UC1, buffer); for (int i = 0; i < face_count; i++) { + SensetimeFaceFeature faceFeature; + faceFeature.rect.leftTop.x = p_face[i].rect.left; + faceFeature.rect.leftTop.y = p_face[i].rect.top; + faceFeature.rect.rightBottom.x = p_face[i].rect.right; + faceFeature.rect.rightBottom.y = p_face[i].rect.bottom; + faceFeature.id = p_face[i].ID; + faceFeature.yaw = p_face[i].yaw; + faceFeature.pitch = p_face[i].pitch; + faceFeature.roll = p_face[i].roll; + faceFeature.eyeDistance = p_face[i].eye_dist; + LOGP(DEBUG, "face: %d-----[%d, %d, %d, %d]-----id: %d", i, p_face[i].rect.left, p_face[i].rect.top, p_face[i].rect.right, p_face[i].rect.bottom, p_face[i].ID); @@ -156,7 +174,10 @@ for (int j = 0; j < p_face[i].points_count; j++) { - + FacePoint featurePoint; + featurePoint.x = p_face[i].points_array[j].x; + featurePoint.y = p_face[i].points_array[j].y; + faceFeature.featurePoints.push_back(featurePoint); if (in->config.draw_face_feature_point) { @@ -164,6 +185,9 @@ p_face[i].points_array[j].y), 1, cv::Scalar(255, 255, 255)); } } + + if (in->config.generate_face_feature) + in->faceFeatures.push_back(faceFeature); } //if (face_count > 0) @@ -203,6 +227,7 @@ return false; } + in->faceFeatures.clear(); int face_count = doFaceTrack( in, (uint8_t*)frame->buffer, frame->width, frame->height, frame->width, CV_PIX_FMT_YUV420P); if (face_count < 0) @@ -229,13 +254,35 @@ { PL_SensetimeFaceTrack_Internal* in = (PL_SensetimeFaceTrack_Internal*)internal; - if (!in->payError) + if (in->payError) + { + pm.former = this; + return false; + } + + if (!in->config.generate_face_feature) { pm.type = PipeMaterial::PMT_FRAME; pm.buffer = &(in->lastFrame); pm.buffSize = 0; - pm.former = this; } + else + { + in->pmList[0].type = PipeMaterial::PMT_FRAME; + in->pmList[0].buffer = &(in->lastFrame); + in->pmList[0].buffSize = 0; + in->pmList[0].former = this; + + in->pmList[1].type = PipeMaterial::PMT_BYTES; + in->pmList[1].buffer = &(in->faceFeatures); + in->pmList[1].buffSize = 0; + in->pmList[1].former = this; + + pm.type = PipeMaterial::PMT_PM_LIST; + pm.buffer = in->pmList; + pm.buffSize = sizeof(in->pmList) / sizeof(PipeMaterial); + } + pm.former = this; - return !in->payError; + return true; } -- Gitblit v1.8.0