diff options
author | Tae-Young Chung <ty83.chung@samsung.com> | 2020-10-05 12:52:12 +0900 |
---|---|---|
committer | Tae-Young Chung <ty83.chung@samsung.com> | 2020-10-07 10:16:03 +0900 |
commit | fb71eab6c97e43e974069c862fb08a1473d85e04 (patch) | |
tree | 1e24258d0bad6728ce11991bb55f812e89e6c543 | |
parent | d0e8db174a43097eaeed4bf21c91fcef88cf52e5 (diff) | |
download | mediavision-submit/tizen/20201007.030722.tar.gz mediavision-submit/tizen/20201007.030722.tar.bz2 mediavision-submit/tizen/20201007.030722.zip |
Fix landmarks to two dimensionstizen_6.0.m2_releasesubmit/tizen_6.0_hotfix/20201103.114802submit/tizen_6.0_hotfix/20201102.192502submit/tizen_6.0/20201029.205102submit/tizen/20201007.030722accepted/tizen/unified/20201007.092257accepted/tizen/6.0/unified/hotfix/20201103.050748accepted/tizen/6.0/unified/hotfix/20201103.003858accepted/tizen/6.0/unified/20201030.121630tizen_6.0_hotfixaccepted/tizen_6.0_unified_hotfix
mv_inference_pose_s composes of number_of_pose and mv_inference_landmark_s.
The mv_inference_landmarks_s should include the pose index as well as landmark index.
So, fix the landmarks from one dimensions to two dimensions.
Change-Id: I68ce167846618487521df5ec92652e944413edf0
Signed-off-by: Tae-Young Chung <ty83.chung@samsung.com>
-rw-r--r-- | include/mv_inference.h | 1 | ||||
-rw-r--r-- | include/mv_inference_private.h | 2 | ||||
-rw-r--r-- | mv_inference/inference/src/Inference.cpp | 32 | ||||
-rw-r--r-- | mv_inference/inference/src/mv_inference_open.cpp | 18 |
4 files changed, 29 insertions, 24 deletions
diff --git a/include/mv_inference.h b/include/mv_inference.h index 3ed5c5a4..69495925 100644 --- a/include/mv_inference.h +++ b/include/mv_inference.h @@ -910,6 +910,7 @@ int mv_pose_set_from_file(mv_pose_h pose, const char *motion_capture_file_path, * Their similarity will be given by the score between 0 ~ 1. * * @since_tizen 6.0 + * @remarks If @a action contains multiple poses, the first pose is used for comparison. * * @param[in] pose The handle to the pose * @param[in] action The action pose diff --git a/include/mv_inference_private.h b/include/mv_inference_private.h index 81252834..95dff317 100644 --- a/include/mv_inference_private.h +++ b/include/mv_inference_private.h @@ -50,7 +50,7 @@ typedef struct { typedef struct { int number_of_poses; int number_of_landmarks_per_pose; /**< The number of landmarks*/ - mv_inference_landmark_s *landmarks; /**< A set of landmarks describing pose */ + mv_inference_landmark_s **landmarks; /**< A set of landmarks describing pose */ } mv_inference_pose_s; /** diff --git a/mv_inference/inference/src/Inference.cpp b/mv_inference/inference/src/Inference.cpp index 771da373..28471900 100644 --- a/mv_inference/inference/src/Inference.cpp +++ b/mv_inference/inference/src/Inference.cpp @@ -138,6 +138,9 @@ namespace inference } if (mPoseResult) { + for (int poseIndex = 0; poseIndex < mPoseResult->number_of_poses; ++poseIndex) { + delete [] mPoseResult->landmarks[poseIndex]; + } delete [] mPoseResult->landmarks; delete mPoseResult; } @@ -1456,14 +1459,17 @@ namespace inference } mPoseResult->number_of_poses= number_of_poses; - mPoseResult->landmarks = new mv_inference_landmark_s[number_of_landmarks]; mPoseResult->number_of_landmarks_per_pose = number_of_landmarks; - for (int index = 0; index < number_of_landmarks; ++index) { - mPoseResult->landmarks[index].isAvailable = false; - mPoseResult->landmarks[index].point.x = -1; - mPoseResult->landmarks[index].point.y = -1; - mPoseResult->landmarks[index].label = -1; - mPoseResult->landmarks[index].score = -1.0f; + mPoseResult->landmarks = new mv_inference_landmark_s*[number_of_poses]; + for (int poseIndex = 0; poseIndex < number_of_poses; ++poseIndex) { + mPoseResult->landmarks[poseIndex] = new mv_inference_landmark_s[number_of_landmarks]; + for (int landmarkIndex = 0; landmarkIndex < number_of_landmarks; ++landmarkIndex) { + mPoseResult->landmarks[poseIndex][landmarkIndex].isAvailable = false; + mPoseResult->landmarks[poseIndex][landmarkIndex].point.x = -1; + mPoseResult->landmarks[poseIndex][landmarkIndex].point.y = -1; + mPoseResult->landmarks[poseIndex][landmarkIndex].label = -1; + mPoseResult->landmarks[poseIndex][landmarkIndex].score = -1.0f; + } } } @@ -1488,15 +1494,13 @@ namespace inference LOGI("landmarkIndex[%2d] - mapping to [%2d]: x[%.3f], y[%.3f], score[%.3f]", landmarkIndex, part, loc2f.x, loc2f.y, score); - mPoseResult->landmarks[landmarkIndex].isAvailable = true; - mPoseResult->landmarks[landmarkIndex].point.x = static_cast<int>(static_cast<float>(width) * loc2f.x); - mPoseResult->landmarks[landmarkIndex].point.y = static_cast<int>(static_cast<float>(height) * loc2f.y); - mPoseResult->landmarks[landmarkIndex].score = score; - mPoseResult->landmarks[landmarkIndex].label = -1; + mPoseResult->landmarks[poseIndex][landmarkIndex].isAvailable = true; + mPoseResult->landmarks[poseIndex][landmarkIndex].point.x = static_cast<int>(static_cast<float>(width) * loc2f.x); + mPoseResult->landmarks[poseIndex][landmarkIndex].point.y = static_cast<int>(static_cast<float>(height) * loc2f.y); + mPoseResult->landmarks[poseIndex][landmarkIndex].score = score; + mPoseResult->landmarks[poseIndex][landmarkIndex].label = -1; } } - mPoseResult->number_of_landmarks_per_pose = number_of_landmarks; - mPoseResult->number_of_poses = number_of_poses; *detectionResults = static_cast<mv_inference_pose_result_h>(mPoseResult); diff --git a/mv_inference/inference/src/mv_inference_open.cpp b/mv_inference/inference/src/mv_inference_open.cpp index 9a645555..c2c7f2bd 100644 --- a/mv_inference/inference/src/mv_inference_open.cpp +++ b/mv_inference/inference/src/mv_inference_open.cpp @@ -833,9 +833,9 @@ int mv_inference_pose_landmark_detect_open( for (int pose = 0; pose < tmp->number_of_poses; ++pose) { for (int index = 0; index < tmp->number_of_landmarks_per_pose; ++index) { LOGI("PoseIdx[%2d]: x[%d], y[%d], score[%.3f]", index, - tmp->landmarks[index].point.x, - tmp->landmarks[index].point.y, - tmp->landmarks[index].score); + tmp->landmarks[pose][index].point.x, + tmp->landmarks[pose][index].point.y, + tmp->landmarks[pose][index].score); } } @@ -885,9 +885,9 @@ int mv_inference_pose_get_landmark_open( if (part_index < 0 || part_index >= handle->number_of_landmarks_per_pose) return MEDIA_VISION_ERROR_INVALID_PARAMETER; - *location = handle->landmarks[part_index].point; + *location = handle->landmarks[pose_index][part_index].point; - *score = handle->landmarks[part_index].score; + *score = handle->landmarks[pose_index][part_index].score; LOGI("[%d]:(%dx%d) - %.4f", pose_index, location->x, location->y, *score); @@ -904,7 +904,7 @@ int mv_inference_pose_get_label_open( if (pose_index < 0 || pose_index >= handle->number_of_poses) return MEDIA_VISION_ERROR_INVALID_PARAMETER; - *label = handle->landmarks[0].label; + *label = handle->landmarks[pose_index][0].label; LOGI("[%d]: label(%d)", pose_index, *label); @@ -981,13 +981,13 @@ int mv_pose_compare_open(mv_pose_h pose, mv_inference_pose_result_h action, int mv_inference_pose_s *pAction = static_cast<mv_inference_pose_s *>(action); for (int k = 0; k < HUMAN_POSE_MAX_LANDMARKS; ++k) { - if (pAction->landmarks[k].point.x == -1 || pAction->landmarks[k].point.y == -1) { + if (pAction->landmarks[0][k].point.x == -1 || pAction->landmarks[0][k].point.y == -1) { actionParts.push_back(std::make_pair(false, cv::Point(-1,-1))); continue; } - actionParts.push_back(std::make_pair(true, cv::Point(pAction->landmarks[k].point.x, - pAction->landmarks[k].point.y))); + actionParts.push_back(std::make_pair(true, cv::Point(pAction->landmarks[0][k].point.x, + pAction->landmarks[0][k].point.y))); } |