[UTC][capi-media-vision][ACR-1574][Add mv_inference_pose_landmark_detection() and... 83/241283/2
authorTae-Young Chung <ty83.chung@samsung.com>
Wed, 19 Aug 2020 04:45:21 +0000 (13:45 +0900)
committerTae-Young Chung <ty83.chung@samsung.com>
Thu, 20 Aug 2020 01:52:33 +0000 (10:52 +0900)
Change-Id: I22379c871d13b4948000881387c504fd47b00a88
Signed-off-by: Tae-Young Chung <ty83.chung@samsung.com>
src/utc/capi-media-vision/public.list
src/utc/capi-media-vision/res/inference/images/poseLandmark.jpg [new file with mode: 0644]
src/utc/capi-media-vision/res/inference/models/pld_mocap.bvh [new file with mode: 0644]
src/utc/capi-media-vision/res/inference/models/pld_mocap_mapping.txt [new file with mode: 0644]
src/utc/capi-media-vision/res/inference/models/pld_pose_mapping.txt [new file with mode: 0644]
src/utc/capi-media-vision/res/inference/models/pld_tflite_model.tflite [new file with mode: 0644]
src/utc/capi-media-vision/tct-capi-media-vision-core_mobile.h
src/utc/capi-media-vision/tct-capi-media-vision-core_tizeniot.h
src/utc/capi-media-vision/tct-capi-media-vision-core_wearable.h
src/utc/capi-media-vision/utc-mv_inference.c

index bdf511f96655196540bf1a4b216a9624bed944d9..bd360a67203b66f8ceece7f31ddef6a66c937b94 100755 (executable)
@@ -78,3 +78,11 @@ mv_inference_image_classify
 mv_inference_object_detect
 mv_inference_face_detect
 mv_inference_facial_landmark_detect
+mv_inference_pose_landmark_detect
+mv_inference_pose_get_number_of_poses
+mv_inference_pose_get_number_of_landmarks
+mv_inference_pose_get_landmark
+mv_pose_create
+mv_pose_destroy
+mv_pose_set_from_file
+mv_pose_compare
diff --git a/src/utc/capi-media-vision/res/inference/images/poseLandmark.jpg b/src/utc/capi-media-vision/res/inference/images/poseLandmark.jpg
new file mode 100644 (file)
index 0000000..4bead08
Binary files /dev/null and b/src/utc/capi-media-vision/res/inference/images/poseLandmark.jpg differ
diff --git a/src/utc/capi-media-vision/res/inference/models/pld_mocap.bvh b/src/utc/capi-media-vision/res/inference/models/pld_mocap.bvh
new file mode 100644 (file)
index 0000000..f93d086
--- /dev/null
@@ -0,0 +1,116 @@
+HIERARCHY
+ROOT Hips
+{
+       OFFSET 0.000000 0.000000 0.000000
+       CHANNELS 6 Xposition Yposition Zposition Zrotation Xrotation Yrotation
+       JOINT Chest
+       {
+               OFFSET 0.000000 5.210000 0.000000
+               CHANNELS 3 Zrotation Xrotation Yrotation
+               JOINT Neck
+               {
+                       OFFSET 0.000000 18.650002 0.000000
+                       CHANNELS 3 Zrotation Xrotation Yrotation
+                       JOINT Head
+                       {
+                               OFFSET 0.000000 5.450001 0.000000
+                               CHANNELS 3 Zrotation Xrotation Yrotation
+                               End Site
+                               {
+                                       OFFSET 0.000000 3.869999 0.000000
+                               }
+                       }
+               }
+               JOINT RightCollar
+               {
+                       OFFSET 1.120000 16.230000 1.870000
+                       CHANNELS 3 Zrotation Xrotation Yrotation
+                       JOINT RightUpArm
+                       {
+                               OFFSET 5.540000 0.000000 0.000000
+                               CHANNELS 3 Zrotation Xrotation Yrotation
+                               JOINT RightLowArm
+                               {
+                                       OFFSET 0.000000 -11.960000 0.000000
+                                       CHANNELS 3 Zrotation Xrotation Yrotation
+                                       JOINT RightHand
+                                       {
+                                               OFFSET 0.000000 -9.930000 0.000000
+                                               CHANNELS 3 Zrotation Xrotation Yrotation
+                                               End Site
+                                               {
+                                                       OFFSET 0.000000 -7.000000 0.000000
+                                               }
+                                       }
+                               }
+                       }
+               }
+               JOINT LeftCollar
+               {
+                       OFFSET -1.120000 16.230000 1.870000
+                       CHANNELS 3 Zrotation Xrotation Yrotation
+                       JOINT LeftUpArm
+                       {
+                               OFFSET -6.070000 0.000000 0.000000
+                               CHANNELS 3 Zrotation Xrotation Yrotation
+                               JOINT LeftLowArm
+                               {
+                                       OFFSET 0.000000 -11.820000 0.000000
+                                       CHANNELS 3 Zrotation Xrotation Yrotation
+                                       JOINT LeftHand
+                                       {
+                                               OFFSET 0.000000 -10.650000 0.000000
+                                               CHANNELS 3 Zrotation Xrotation Yrotation
+                                               End Site
+                                               {
+                                                       OFFSET 0.000000 -7.000000 0.000000
+                                               }
+                                       }
+                               }
+                       }
+               }
+       }
+       JOINT RightUpLeg
+       {
+               OFFSET 3.910000 0.000000 0.000000
+               CHANNELS 3 Zrotation Xrotation Yrotation
+               JOINT RightLowLeg
+               {
+                       OFFSET 0.000000 -18.340000 0.000000
+                       CHANNELS 3 Zrotation Xrotation Yrotation
+                       JOINT RightFoot
+                       {
+                               OFFSET 0.000000 -17.369999 0.000000
+                               CHANNELS 3 Zrotation Xrotation Yrotation
+                               End Site
+                               {
+                                       OFFSET 0.000000 -3.459999 0.000000
+                               }
+                       }
+               }
+       }
+       JOINT LeftUpLeg
+       {
+               OFFSET -3.910000 0.000000 0.000000
+               CHANNELS 3 Zrotation Xrotation Yrotation
+               JOINT LeftLowLeg
+               {
+                       OFFSET 0.000000 -17.629999 0.000000
+                       CHANNELS 3 Zrotation Xrotation Yrotation
+                       JOINT LeftFoot
+                       {
+                               OFFSET 0.000000 -17.139997 0.000000
+                               CHANNELS 3 Zrotation Xrotation Yrotation
+                               End Site
+                               {
+                                       OFFSET 0.000000 -3.750000 0.000000
+                               }
+                       }
+               }
+       }
+}
+MOTION
+Frames: 2
+Frame Time: 0.041667
+8.030000 35.009998 88.360001 -3.410002 14.780000 -164.349993 13.089996 40.299994 -24.599999 7.879999 43.799988 0.000001 -3.610007 -41.450000 5.819997 10.080001 -0.000003 10.209998 97.950001 -23.530003 -2.139997 60.275566 -2.764629 54.273831 0.689997 0.029999 -0.000000 -14.040001 -0.000001 -10.499999 -85.519999 -13.719994 -102.930001 61.910009 -61.179999 65.179997 -1.570001 0.690000 0.020000 43.262770 -10.754126 140.039587 36.023886 12.970090 151.073785 0.000001 -1.140000 -0.000001 -56.152423 -7.908401 12.931058 43.240302 1.483285 -31.399612 0.000000 -23.949997 -0.000000 
+7.810000 35.099998 86.470001 -3.780000 12.940000 -166.969998 12.639998 42.569994 -22.340000 7.669998 43.609993 -0.000001 -4.230008 -41.410003 4.889995 19.099999 0.000004 4.159999 93.119992 -9.689997 -9.429998 132.670182 -81.860029 136.800124 0.699997 0.370000 0.000001 -8.619999 0.000001 -21.819997 -87.310001 -27.569989 -100.089995 56.170000 -61.560003 58.719997 -1.630005 0.950000 0.030000 13.160001 15.440001 -3.560000 7.970004 59.290004 4.969998 0.000000 1.640002 -0.000001 -17.180000 -10.019999 -3.080000 13.560003 53.380005 -18.070000 0.000000 -25.929999 0.000000 
diff --git a/src/utc/capi-media-vision/res/inference/models/pld_mocap_mapping.txt b/src/utc/capi-media-vision/res/inference/models/pld_mocap_mapping.txt
new file mode 100644 (file)
index 0000000..c6b27f6
--- /dev/null
@@ -0,0 +1,15 @@
+Hips,9
+Neck,1
+Head,0
+LeftUpArm,6
+LeftLowArm,7
+LeftHand,8
+RightUpArm,3
+RightLowArm,4
+RightHand,5
+LeftUpLeg,13
+LeftLowLeg,14
+LeftFoot,15
+RightUpLeg,10
+RightLowLeg,11
+RightFoot,12
diff --git a/src/utc/capi-media-vision/res/inference/models/pld_pose_mapping.txt b/src/utc/capi-media-vision/res/inference/models/pld_pose_mapping.txt
new file mode 100644 (file)
index 0000000..0a66dce
--- /dev/null
@@ -0,0 +1,16 @@
+1
+2
+-1
+3
+4
+5
+6
+7
+8
+-1
+9
+10
+11
+12
+13
+14
diff --git a/src/utc/capi-media-vision/res/inference/models/pld_tflite_model.tflite b/src/utc/capi-media-vision/res/inference/models/pld_tflite_model.tflite
new file mode 100644 (file)
index 0000000..ff6044d
Binary files /dev/null and b/src/utc/capi-media-vision/res/inference/models/pld_tflite_model.tflite differ
index 79493c28200c18739da0cc3776f90ac5ff456ee6..44c047b47dd40a74159ee49cf649bef529dc684d 100755 (executable)
@@ -36,6 +36,10 @@ extern void utc_capi_media_vision_inference_startup1(void);
 extern void utc_capi_media_vision_inference_cleanup1(void);
 extern void utc_capi_media_vision_inference_startup2(void);
 extern void utc_capi_media_vision_inference_cleanup2(void);
+extern void utc_capi_media_vision_inference_pose_landmark_detect_cb1_startup(void);
+extern void utc_capi_media_vision_inference_pose_landmark_detect_cb2_startup(void);
+extern void utc_capi_media_vision_inference_pose_landmark_detect_cb3_startup(void);
+extern void utc_capi_media_vision_inference_pose_landmark_detect_cb4_startup(void);
 
 extern int utc_mediavision_mv_create_source_p(void);
 extern int utc_mediavision_mv_create_source_n(void);
@@ -221,6 +225,24 @@ extern int utc_mediavision_mv_inference_face_detect_n2(void);
 extern int utc_mediavision_mv_inference_facial_landmark_detect_p(void);
 extern int utc_mediavision_mv_inference_facial_landmark_detect_n1(void);
 extern int utc_mediavision_mv_inference_facial_landmark_detect_n2(void);
+extern int utc_mediavision_mv_inference_pose_landmark_detect_p(void);
+extern int utc_mediavision_mv_inference_pose_landmark_detect_n1(void);
+extern int utc_mediavision_mv_inference_pose_landmark_detect_n2(void);
+extern int utc_mediavision_mv_inference_get_number_of_poses_p(void);
+extern int utc_mediavision_mv_inference_get_number_of_poses_n(void);
+extern int utc_mediavision_mv_inference_get_number_of_landmarks_p(void);
+extern int utc_mediavision_mv_inference_get_number_of_landmarks_n(void);
+extern int utc_mediavision_mv_inference_get_landmark_p(void);
+extern int utc_mediavision_mv_inference_get_landmark_n(void);
+extern int utc_mediavision_mv_pose_create_p(void);
+extern int utc_mediavision_mv_pose_create_n(void);
+extern int utc_mediavision_mv_pose_destroy_p(void);
+extern int utc_mediavision_mv_pose_destroy_n(void);
+extern int utc_mediavision_mv_pose_set_from_file_p(void);
+extern int utc_mediavision_mv_pose_set_from_file_n1(void);
+extern int utc_mediavision_mv_pose_set_from_file_n2(void);
+extern int utc_mediavision_mv_pose_compare_p(void);
+extern int utc_mediavision_mv_pose_compare_n(void);
 
 testcase tc_array[] = {
        {"utc_mediavision_mv_create_source_p",utc_mediavision_mv_create_source_p,utc_capi_media_vision_common_startup,utc_capi_media_vision_common_cleanup},
@@ -407,6 +429,24 @@ testcase tc_array[] = {
        {"utc_mediavision_mv_inference_facial_landmark_detect_p",utc_mediavision_mv_inference_facial_landmark_detect_p,utc_capi_media_vision_inference_startup2,utc_capi_media_vision_inference_cleanup2},
        {"utc_mediavision_mv_inference_facial_landmark_detect_n1",utc_mediavision_mv_inference_facial_landmark_detect_n1,utc_capi_media_vision_inference_startup2,utc_capi_media_vision_inference_cleanup2},
        {"utc_mediavision_mv_inference_facial_landmark_detect_n2",utc_mediavision_mv_inference_facial_landmark_detect_n2,utc_capi_media_vision_inference_startup2,utc_capi_media_vision_inference_cleanup2},
+       {"utc_mediavision_mv_inference_pose_landmark_detect_p", utc_mediavision_mv_inference_pose_landmark_detect_p,utc_capi_media_vision_inference_startup2,utc_capi_media_vision_inference_cleanup2},
+       {"utc_mediavision_mv_inference_pose_landmark_detect_n1", utc_mediavision_mv_inference_pose_landmark_detect_n1,utc_capi_media_vision_inference_startup2,utc_capi_media_vision_inference_cleanup2},
+       {"utc_mediavision_mv_inference_pose_landmark_detect_n2", utc_mediavision_mv_inference_pose_landmark_detect_n2,utc_capi_media_vision_inference_startup2,utc_capi_media_vision_inference_cleanup2},
+       {"utc_mediavision_mv_inference_get_number_of_poses_p", utc_mediavision_mv_inference_get_number_of_poses_p,utc_capi_media_vision_inference_pose_landmark_detect_cb1_startup,utc_capi_media_vision_inference_cleanup2},
+       {"utc_mediavision_mv_inference_get_number_of_poses_n", utc_mediavision_mv_inference_get_number_of_poses_n,utc_capi_media_vision_inference_pose_landmark_detect_cb1_startup,utc_capi_media_vision_inference_cleanup2},
+       {"utc_mediavision_mv_inference_get_number_of_landmarks_p", utc_mediavision_mv_inference_get_number_of_landmarks_p,utc_capi_media_vision_inference_pose_landmark_detect_cb2_startup,utc_capi_media_vision_inference_cleanup2},
+       {"utc_mediavision_mv_inference_get_number_of_landmarks_n", utc_mediavision_mv_inference_get_number_of_landmarks_n,utc_capi_media_vision_inference_pose_landmark_detect_cb2_startup,utc_capi_media_vision_inference_cleanup2},
+       {"utc_mediavision_mv_inference_get_landmark_p", utc_mediavision_mv_inference_get_landmark_p,utc_capi_media_vision_inference_pose_landmark_detect_cb3_startup,utc_capi_media_vision_inference_cleanup2},
+       {"utc_mediavision_mv_inference_get_landmark_n", utc_mediavision_mv_inference_get_landmark_n,utc_capi_media_vision_inference_pose_landmark_detect_cb3_startup,utc_capi_media_vision_inference_cleanup2},
+       {"utc_mediavision_mv_pose_create_p", utc_mediavision_mv_pose_create_p,utc_capi_media_vision_inference_startup2,utc_capi_media_vision_inference_cleanup2},
+       {"utc_mediavision_mv_pose_create_n", utc_mediavision_mv_pose_create_n,utc_capi_media_vision_inference_startup2,utc_capi_media_vision_inference_cleanup2},
+       {"utc_mediavision_mv_pose_destroy_p", utc_mediavision_mv_pose_destroy_p,utc_capi_media_vision_inference_startup2,utc_capi_media_vision_inference_cleanup2},
+       {"utc_mediavision_mv_pose_destroy_n", utc_mediavision_mv_pose_destroy_n,utc_capi_media_vision_inference_startup2,utc_capi_media_vision_inference_cleanup2},
+       {"utc_mediavision_mv_pose_set_from_file_p", utc_mediavision_mv_pose_set_from_file_p,utc_capi_media_vision_inference_startup2,utc_capi_media_vision_inference_cleanup2},
+       {"utc_mediavision_mv_pose_set_from_file_n1", utc_mediavision_mv_pose_set_from_file_n1,utc_capi_media_vision_inference_startup2,utc_capi_media_vision_inference_cleanup2},
+       {"utc_mediavision_mv_pose_set_from_file_n2", utc_mediavision_mv_pose_set_from_file_n2,utc_capi_media_vision_inference_startup2,utc_capi_media_vision_inference_cleanup2},
+       {"utc_mediavision_mv_pose_compare_p", utc_mediavision_mv_pose_compare_p,utc_capi_media_vision_inference_pose_landmark_detect_cb4_startup,utc_capi_media_vision_inference_cleanup2},
+       {"utc_mediavision_mv_pose_compare_n", utc_mediavision_mv_pose_compare_n,utc_capi_media_vision_inference_startup2,utc_capi_media_vision_inference_cleanup2},
        {NULL, NULL}
 };
 
index 79493c28200c18739da0cc3776f90ac5ff456ee6..44c047b47dd40a74159ee49cf649bef529dc684d 100755 (executable)
@@ -36,6 +36,10 @@ extern void utc_capi_media_vision_inference_startup1(void);
 extern void utc_capi_media_vision_inference_cleanup1(void);
 extern void utc_capi_media_vision_inference_startup2(void);
 extern void utc_capi_media_vision_inference_cleanup2(void);
+extern void utc_capi_media_vision_inference_pose_landmark_detect_cb1_startup(void);
+extern void utc_capi_media_vision_inference_pose_landmark_detect_cb2_startup(void);
+extern void utc_capi_media_vision_inference_pose_landmark_detect_cb3_startup(void);
+extern void utc_capi_media_vision_inference_pose_landmark_detect_cb4_startup(void);
 
 extern int utc_mediavision_mv_create_source_p(void);
 extern int utc_mediavision_mv_create_source_n(void);
@@ -221,6 +225,24 @@ extern int utc_mediavision_mv_inference_face_detect_n2(void);
 extern int utc_mediavision_mv_inference_facial_landmark_detect_p(void);
 extern int utc_mediavision_mv_inference_facial_landmark_detect_n1(void);
 extern int utc_mediavision_mv_inference_facial_landmark_detect_n2(void);
+extern int utc_mediavision_mv_inference_pose_landmark_detect_p(void);
+extern int utc_mediavision_mv_inference_pose_landmark_detect_n1(void);
+extern int utc_mediavision_mv_inference_pose_landmark_detect_n2(void);
+extern int utc_mediavision_mv_inference_get_number_of_poses_p(void);
+extern int utc_mediavision_mv_inference_get_number_of_poses_n(void);
+extern int utc_mediavision_mv_inference_get_number_of_landmarks_p(void);
+extern int utc_mediavision_mv_inference_get_number_of_landmarks_n(void);
+extern int utc_mediavision_mv_inference_get_landmark_p(void);
+extern int utc_mediavision_mv_inference_get_landmark_n(void);
+extern int utc_mediavision_mv_pose_create_p(void);
+extern int utc_mediavision_mv_pose_create_n(void);
+extern int utc_mediavision_mv_pose_destroy_p(void);
+extern int utc_mediavision_mv_pose_destroy_n(void);
+extern int utc_mediavision_mv_pose_set_from_file_p(void);
+extern int utc_mediavision_mv_pose_set_from_file_n1(void);
+extern int utc_mediavision_mv_pose_set_from_file_n2(void);
+extern int utc_mediavision_mv_pose_compare_p(void);
+extern int utc_mediavision_mv_pose_compare_n(void);
 
 testcase tc_array[] = {
        {"utc_mediavision_mv_create_source_p",utc_mediavision_mv_create_source_p,utc_capi_media_vision_common_startup,utc_capi_media_vision_common_cleanup},
@@ -407,6 +429,24 @@ testcase tc_array[] = {
        {"utc_mediavision_mv_inference_facial_landmark_detect_p",utc_mediavision_mv_inference_facial_landmark_detect_p,utc_capi_media_vision_inference_startup2,utc_capi_media_vision_inference_cleanup2},
        {"utc_mediavision_mv_inference_facial_landmark_detect_n1",utc_mediavision_mv_inference_facial_landmark_detect_n1,utc_capi_media_vision_inference_startup2,utc_capi_media_vision_inference_cleanup2},
        {"utc_mediavision_mv_inference_facial_landmark_detect_n2",utc_mediavision_mv_inference_facial_landmark_detect_n2,utc_capi_media_vision_inference_startup2,utc_capi_media_vision_inference_cleanup2},
+       {"utc_mediavision_mv_inference_pose_landmark_detect_p", utc_mediavision_mv_inference_pose_landmark_detect_p,utc_capi_media_vision_inference_startup2,utc_capi_media_vision_inference_cleanup2},
+       {"utc_mediavision_mv_inference_pose_landmark_detect_n1", utc_mediavision_mv_inference_pose_landmark_detect_n1,utc_capi_media_vision_inference_startup2,utc_capi_media_vision_inference_cleanup2},
+       {"utc_mediavision_mv_inference_pose_landmark_detect_n2", utc_mediavision_mv_inference_pose_landmark_detect_n2,utc_capi_media_vision_inference_startup2,utc_capi_media_vision_inference_cleanup2},
+       {"utc_mediavision_mv_inference_get_number_of_poses_p", utc_mediavision_mv_inference_get_number_of_poses_p,utc_capi_media_vision_inference_pose_landmark_detect_cb1_startup,utc_capi_media_vision_inference_cleanup2},
+       {"utc_mediavision_mv_inference_get_number_of_poses_n", utc_mediavision_mv_inference_get_number_of_poses_n,utc_capi_media_vision_inference_pose_landmark_detect_cb1_startup,utc_capi_media_vision_inference_cleanup2},
+       {"utc_mediavision_mv_inference_get_number_of_landmarks_p", utc_mediavision_mv_inference_get_number_of_landmarks_p,utc_capi_media_vision_inference_pose_landmark_detect_cb2_startup,utc_capi_media_vision_inference_cleanup2},
+       {"utc_mediavision_mv_inference_get_number_of_landmarks_n", utc_mediavision_mv_inference_get_number_of_landmarks_n,utc_capi_media_vision_inference_pose_landmark_detect_cb2_startup,utc_capi_media_vision_inference_cleanup2},
+       {"utc_mediavision_mv_inference_get_landmark_p", utc_mediavision_mv_inference_get_landmark_p,utc_capi_media_vision_inference_pose_landmark_detect_cb3_startup,utc_capi_media_vision_inference_cleanup2},
+       {"utc_mediavision_mv_inference_get_landmark_n", utc_mediavision_mv_inference_get_landmark_n,utc_capi_media_vision_inference_pose_landmark_detect_cb3_startup,utc_capi_media_vision_inference_cleanup2},
+       {"utc_mediavision_mv_pose_create_p", utc_mediavision_mv_pose_create_p,utc_capi_media_vision_inference_startup2,utc_capi_media_vision_inference_cleanup2},
+       {"utc_mediavision_mv_pose_create_n", utc_mediavision_mv_pose_create_n,utc_capi_media_vision_inference_startup2,utc_capi_media_vision_inference_cleanup2},
+       {"utc_mediavision_mv_pose_destroy_p", utc_mediavision_mv_pose_destroy_p,utc_capi_media_vision_inference_startup2,utc_capi_media_vision_inference_cleanup2},
+       {"utc_mediavision_mv_pose_destroy_n", utc_mediavision_mv_pose_destroy_n,utc_capi_media_vision_inference_startup2,utc_capi_media_vision_inference_cleanup2},
+       {"utc_mediavision_mv_pose_set_from_file_p", utc_mediavision_mv_pose_set_from_file_p,utc_capi_media_vision_inference_startup2,utc_capi_media_vision_inference_cleanup2},
+       {"utc_mediavision_mv_pose_set_from_file_n1", utc_mediavision_mv_pose_set_from_file_n1,utc_capi_media_vision_inference_startup2,utc_capi_media_vision_inference_cleanup2},
+       {"utc_mediavision_mv_pose_set_from_file_n2", utc_mediavision_mv_pose_set_from_file_n2,utc_capi_media_vision_inference_startup2,utc_capi_media_vision_inference_cleanup2},
+       {"utc_mediavision_mv_pose_compare_p", utc_mediavision_mv_pose_compare_p,utc_capi_media_vision_inference_pose_landmark_detect_cb4_startup,utc_capi_media_vision_inference_cleanup2},
+       {"utc_mediavision_mv_pose_compare_n", utc_mediavision_mv_pose_compare_n,utc_capi_media_vision_inference_startup2,utc_capi_media_vision_inference_cleanup2},
        {NULL, NULL}
 };
 
index 79493c28200c18739da0cc3776f90ac5ff456ee6..44c047b47dd40a74159ee49cf649bef529dc684d 100755 (executable)
@@ -36,6 +36,10 @@ extern void utc_capi_media_vision_inference_startup1(void);
 extern void utc_capi_media_vision_inference_cleanup1(void);
 extern void utc_capi_media_vision_inference_startup2(void);
 extern void utc_capi_media_vision_inference_cleanup2(void);
+extern void utc_capi_media_vision_inference_pose_landmark_detect_cb1_startup(void);
+extern void utc_capi_media_vision_inference_pose_landmark_detect_cb2_startup(void);
+extern void utc_capi_media_vision_inference_pose_landmark_detect_cb3_startup(void);
+extern void utc_capi_media_vision_inference_pose_landmark_detect_cb4_startup(void);
 
 extern int utc_mediavision_mv_create_source_p(void);
 extern int utc_mediavision_mv_create_source_n(void);
@@ -221,6 +225,24 @@ extern int utc_mediavision_mv_inference_face_detect_n2(void);
 extern int utc_mediavision_mv_inference_facial_landmark_detect_p(void);
 extern int utc_mediavision_mv_inference_facial_landmark_detect_n1(void);
 extern int utc_mediavision_mv_inference_facial_landmark_detect_n2(void);
+extern int utc_mediavision_mv_inference_pose_landmark_detect_p(void);
+extern int utc_mediavision_mv_inference_pose_landmark_detect_n1(void);
+extern int utc_mediavision_mv_inference_pose_landmark_detect_n2(void);
+extern int utc_mediavision_mv_inference_get_number_of_poses_p(void);
+extern int utc_mediavision_mv_inference_get_number_of_poses_n(void);
+extern int utc_mediavision_mv_inference_get_number_of_landmarks_p(void);
+extern int utc_mediavision_mv_inference_get_number_of_landmarks_n(void);
+extern int utc_mediavision_mv_inference_get_landmark_p(void);
+extern int utc_mediavision_mv_inference_get_landmark_n(void);
+extern int utc_mediavision_mv_pose_create_p(void);
+extern int utc_mediavision_mv_pose_create_n(void);
+extern int utc_mediavision_mv_pose_destroy_p(void);
+extern int utc_mediavision_mv_pose_destroy_n(void);
+extern int utc_mediavision_mv_pose_set_from_file_p(void);
+extern int utc_mediavision_mv_pose_set_from_file_n1(void);
+extern int utc_mediavision_mv_pose_set_from_file_n2(void);
+extern int utc_mediavision_mv_pose_compare_p(void);
+extern int utc_mediavision_mv_pose_compare_n(void);
 
 testcase tc_array[] = {
        {"utc_mediavision_mv_create_source_p",utc_mediavision_mv_create_source_p,utc_capi_media_vision_common_startup,utc_capi_media_vision_common_cleanup},
@@ -407,6 +429,24 @@ testcase tc_array[] = {
        {"utc_mediavision_mv_inference_facial_landmark_detect_p",utc_mediavision_mv_inference_facial_landmark_detect_p,utc_capi_media_vision_inference_startup2,utc_capi_media_vision_inference_cleanup2},
        {"utc_mediavision_mv_inference_facial_landmark_detect_n1",utc_mediavision_mv_inference_facial_landmark_detect_n1,utc_capi_media_vision_inference_startup2,utc_capi_media_vision_inference_cleanup2},
        {"utc_mediavision_mv_inference_facial_landmark_detect_n2",utc_mediavision_mv_inference_facial_landmark_detect_n2,utc_capi_media_vision_inference_startup2,utc_capi_media_vision_inference_cleanup2},
+       {"utc_mediavision_mv_inference_pose_landmark_detect_p", utc_mediavision_mv_inference_pose_landmark_detect_p,utc_capi_media_vision_inference_startup2,utc_capi_media_vision_inference_cleanup2},
+       {"utc_mediavision_mv_inference_pose_landmark_detect_n1", utc_mediavision_mv_inference_pose_landmark_detect_n1,utc_capi_media_vision_inference_startup2,utc_capi_media_vision_inference_cleanup2},
+       {"utc_mediavision_mv_inference_pose_landmark_detect_n2", utc_mediavision_mv_inference_pose_landmark_detect_n2,utc_capi_media_vision_inference_startup2,utc_capi_media_vision_inference_cleanup2},
+       {"utc_mediavision_mv_inference_get_number_of_poses_p", utc_mediavision_mv_inference_get_number_of_poses_p,utc_capi_media_vision_inference_pose_landmark_detect_cb1_startup,utc_capi_media_vision_inference_cleanup2},
+       {"utc_mediavision_mv_inference_get_number_of_poses_n", utc_mediavision_mv_inference_get_number_of_poses_n,utc_capi_media_vision_inference_pose_landmark_detect_cb1_startup,utc_capi_media_vision_inference_cleanup2},
+       {"utc_mediavision_mv_inference_get_number_of_landmarks_p", utc_mediavision_mv_inference_get_number_of_landmarks_p,utc_capi_media_vision_inference_pose_landmark_detect_cb2_startup,utc_capi_media_vision_inference_cleanup2},
+       {"utc_mediavision_mv_inference_get_number_of_landmarks_n", utc_mediavision_mv_inference_get_number_of_landmarks_n,utc_capi_media_vision_inference_pose_landmark_detect_cb2_startup,utc_capi_media_vision_inference_cleanup2},
+       {"utc_mediavision_mv_inference_get_landmark_p", utc_mediavision_mv_inference_get_landmark_p,utc_capi_media_vision_inference_pose_landmark_detect_cb3_startup,utc_capi_media_vision_inference_cleanup2},
+       {"utc_mediavision_mv_inference_get_landmark_n", utc_mediavision_mv_inference_get_landmark_n,utc_capi_media_vision_inference_pose_landmark_detect_cb3_startup,utc_capi_media_vision_inference_cleanup2},
+       {"utc_mediavision_mv_pose_create_p", utc_mediavision_mv_pose_create_p,utc_capi_media_vision_inference_startup2,utc_capi_media_vision_inference_cleanup2},
+       {"utc_mediavision_mv_pose_create_n", utc_mediavision_mv_pose_create_n,utc_capi_media_vision_inference_startup2,utc_capi_media_vision_inference_cleanup2},
+       {"utc_mediavision_mv_pose_destroy_p", utc_mediavision_mv_pose_destroy_p,utc_capi_media_vision_inference_startup2,utc_capi_media_vision_inference_cleanup2},
+       {"utc_mediavision_mv_pose_destroy_n", utc_mediavision_mv_pose_destroy_n,utc_capi_media_vision_inference_startup2,utc_capi_media_vision_inference_cleanup2},
+       {"utc_mediavision_mv_pose_set_from_file_p", utc_mediavision_mv_pose_set_from_file_p,utc_capi_media_vision_inference_startup2,utc_capi_media_vision_inference_cleanup2},
+       {"utc_mediavision_mv_pose_set_from_file_n1", utc_mediavision_mv_pose_set_from_file_n1,utc_capi_media_vision_inference_startup2,utc_capi_media_vision_inference_cleanup2},
+       {"utc_mediavision_mv_pose_set_from_file_n2", utc_mediavision_mv_pose_set_from_file_n2,utc_capi_media_vision_inference_startup2,utc_capi_media_vision_inference_cleanup2},
+       {"utc_mediavision_mv_pose_compare_p", utc_mediavision_mv_pose_compare_p,utc_capi_media_vision_inference_pose_landmark_detect_cb4_startup,utc_capi_media_vision_inference_cleanup2},
+       {"utc_mediavision_mv_pose_compare_n", utc_mediavision_mv_pose_compare_n,utc_capi_media_vision_inference_startup2,utc_capi_media_vision_inference_cleanup2},
        {NULL, NULL}
 };
 
index 59829cd3ce4669bba59dee45c5cbc44806a22b0f..37ea609d82c1f0e1c17378a7b8ad2b7f82b9c7d9 100755 (executable)
@@ -37,13 +37,22 @@ static mv_inference_h gInferenceHandle = NULL;
 static mv_engine_config_h gEngineConfigHandle = NULL;
 static mv_source_h gSourceHandle = NULL;
 const char *gInferenceExampleDir = NULL;
+static mv_point_s** gPldResultLandmarks = NULL;
+static float** gPldResultScore = NULL;
+static mv_pose_h gPoseHandle = NULL;
 
 static bool gIsForeachSupportedCallBackInvoked = false;
 static bool gIsImageClassifyCallBackInvoked = false;
 static bool gIsObjectDetectCallBackInvoked = false;
 static bool gIsFaceDetectCallBackInvoked = false;
 static bool gIsFacialLandmarkDetectCallBackInvoked = false;
+static bool gIsPoseLandmarkDetectCallBackInvoked = false;
+static bool gIsGetPoseLandmark = false;
 
+static int gPldResultErr;
+static int gPldResultNumberOfPoses;
+static int gPldResultNumberOfLandmarks;
+static float gPoseCompareScore;
 
 #define IC_MODEL_FILENAME "ic_tflite_model.tflite"
 #define IC_LABEL_FILENAME "ic_label.txt"
@@ -55,6 +64,11 @@ static bool gIsFacialLandmarkDetectCallBackInvoked = false;
 
 #define FLD_MODEL_FILENAME "fld_tflite_model1.tflite"
 
+#define PLD_MODEL_FILENAME "pld_tflite_model.tflite"
+#define PLD_POSE_MAPPING_FILENAME "pld_pose_mapping.txt"
+#define PLD_MOCAP_FILEAME "pld_mocap.bvh"
+#define PLD_MOCAP_MAPPING_FILENAME "pld_mocap_mapping.txt"
+
 static int set_image_classification_engine_config(mv_engine_config_h engineCfg)
 {
     int ret = MEDIA_VISION_ERROR_NONE;
@@ -361,6 +375,83 @@ static int set_facial_landmark_detection_engine_config(mv_engine_config_h engine
     return ret;
 }
 
+static int set_pose_landmark_detection_engine_config(mv_engine_config_h engineCfg)
+{
+    int ret = MEDIA_VISION_ERROR_NONE;
+
+    char modelFilename[FILE_PATH_SIZE];
+    char poseMappingFilename[FILE_PATH_SIZE];
+    char *inputNodeName = "image";
+    char *outputNodeName[1] = { "Convolution_Pose_Machine/stage_5_out" };
+    snprintf(modelFilename, FILE_PATH_SIZE, "%s/models/%s",
+                            gInferenceExampleDir, PLD_MODEL_FILENAME);
+    snprintf(poseMappingFilename, FILE_PATH_SIZE, "%s/models/%s",
+                            gInferenceExampleDir, PLD_POSE_MAPPING_FILENAME);
+
+    ret = mv_engine_config_set_string_attribute(engineCfg,
+                        MV_INFERENCE_MODEL_WEIGHT_FILE_PATH,
+                        modelFilename);
+    assert_eq(MEDIA_VISION_ERROR_NONE, ret);
+
+       ret = mv_engine_config_set_int_attribute(engineCfg,
+                        MV_INFERENCE_INPUT_DATA_TYPE,
+                        MV_INFERENCE_DATA_FLOAT32);
+    assert_eq(MEDIA_VISION_ERROR_NONE, ret);
+
+    ret = mv_engine_config_set_string_attribute(engineCfg,
+                        MV_INFERENCE_MODEL_USER_FILE_PATH,
+                        poseMappingFilename);
+    assert_eq(MEDIA_VISION_ERROR_NONE, ret);
+
+    ret = mv_engine_config_set_double_attribute(engineCfg,
+                        MV_INFERENCE_MODEL_MEAN_VALUE,
+                        0.0);
+    assert_eq(MEDIA_VISION_ERROR_NONE, ret);
+
+    ret = mv_engine_config_set_double_attribute(engineCfg,
+                        MV_INFERENCE_MODEL_STD_VALUE,
+                        1.0);
+    assert_eq(MEDIA_VISION_ERROR_NONE, ret);
+
+    ret = mv_engine_config_set_int_attribute(engineCfg,
+                        MV_INFERENCE_BACKEND_TYPE,
+                        MV_INFERENCE_BACKEND_TFLITE);
+    assert_eq(MEDIA_VISION_ERROR_NONE, ret);
+
+    ret = mv_engine_config_set_int_attribute(engineCfg,
+                        MV_INFERENCE_TARGET_DEVICE_TYPE,
+                        MV_INFERENCE_TARGET_DEVICE_CPU);
+    assert_eq(MEDIA_VISION_ERROR_NONE, ret);
+
+    ret = mv_engine_config_set_int_attribute(engineCfg,
+                        MV_INFERENCE_INPUT_TENSOR_WIDTH,
+                        192);
+    assert_eq(MEDIA_VISION_ERROR_NONE, ret);
+
+    ret = mv_engine_config_set_int_attribute(engineCfg,
+                        MV_INFERENCE_INPUT_TENSOR_HEIGHT,
+                        192);
+    assert_eq(MEDIA_VISION_ERROR_NONE, ret);
+
+    ret = mv_engine_config_set_int_attribute(engineCfg,
+                        MV_INFERENCE_INPUT_TENSOR_CHANNELS,
+                        3);
+    assert_eq(MEDIA_VISION_ERROR_NONE, ret);
+
+    ret = mv_engine_config_set_string_attribute(engineCfg,
+                        MV_INFERENCE_INPUT_NODE_NAME,
+                        inputNodeName);
+    assert_eq(MEDIA_VISION_ERROR_NONE, ret);
+
+    ret = mv_engine_config_set_array_string_attribute(engineCfg,
+                        MV_INFERENCE_OUTPUT_NODE_NAMES,
+                        outputNodeName,
+                        1);
+    assert_eq(MEDIA_VISION_ERROR_NONE, ret);
+
+    return ret;
+}
+
 static int load_image_to_media_source(
         const char *file_path,
         mv_source_h source)
@@ -530,6 +621,25 @@ void utc_capi_media_vision_inference_cleanup2(void)
         gInferenceExampleDir = NULL;
     }
 
+    if (gPldResultLandmarks){
+        for (int pose = 0; pose < gPldResultNumberOfPoses; ++pose)
+            free(gPldResultLandmarks[pose]);
+        free(gPldResultLandmarks);
+        gPldResultLandmarks = NULL;
+    }
+
+    if (gPldResultScore){
+        for (int pose = 0; pose < gPldResultNumberOfPoses; ++pose)
+            free(gPldResultScore[pose]);
+        free(gPldResultScore);
+        gPldResultScore = NULL;
+    }
+
+    if (gPoseHandle) {
+        mv_pose_destroy(gPoseHandle);
+        gPoseHandle = NULL;
+    }
+
     printf("capi-media-vision mv_image tests CLEANUP is completed\n");
 }
 
@@ -1374,3 +1484,879 @@ int utc_mediavision_mv_inference_facial_landmark_detect_n2(void)
     printf("Before return mv_inference_facial_landmark_detect_n2\n");
     return 0;
 }
+
+static void _pld_detected_cb(mv_source_h source,
+                        mv_inference_pose_result_h locations,
+                        int label,
+                        void *user_data)
+{
+    gIsPoseLandmarkDetectCallBackInvoked = true;
+}
+
+/**
+ * @brief Positive test case of mv_inference_pose_landmark_detect()
+ * @testcase        utc_mediavision_mv_inference_pose_landmark_detect_p
+ * @since_tizen     6.0
+ * @description     Detect pose landmark on a human body
+ */
+int utc_mediavision_mv_inference_pose_landmark_detect_p(void)
+{
+    printf("Inside mv_inference_pose_landmark_detect_p\n");
+
+    if (!isVisionSupported) {
+        assert_eq(gStartupError, MEDIA_VISION_ERROR_NOT_SUPPORTED);
+        return 0;
+    }
+
+    char imageFilename[FILE_PATH_SIZE];
+    assert_eq(set_pose_landmark_detection_engine_config(gEngineConfigHandle), MEDIA_VISION_ERROR_NONE);
+
+    int ret = mv_inference_configure(gInferenceHandle, gEngineConfigHandle);
+    assert_eq(MEDIA_VISION_ERROR_NONE, ret);
+
+    ret = mv_inference_prepare(gInferenceHandle);
+    assert_eq(MEDIA_VISION_ERROR_NONE, ret);
+
+    snprintf(imageFilename, FILE_PATH_SIZE, "%s/images/%s", gInferenceExampleDir, "poseLandmark.jpg");
+    ret = load_image_to_media_source(imageFilename, gSourceHandle);
+    assert_eq(MEDIA_VISION_ERROR_NONE, ret);
+
+    ret = mv_inference_pose_landmark_detect(gSourceHandle,
+                                    gInferenceHandle,
+                                    NULL,
+                                    _pld_detected_cb,
+                                    NULL);
+    assert_eq(MEDIA_VISION_ERROR_NONE, ret);
+    assert_eq(true, gIsPoseLandmarkDetectCallBackInvoked);
+
+    printf("Before return mv_inference_pose_landmark_detect_p\n");
+    return 0;
+}
+
+/**
+ * @brief Negative test case of mv_inference_pose_landmark_detect()
+ * @testcase        utc_mediavision_mv_inference_pose_landmark_detect_n1
+ * @since_tizen     6.0
+ * @description     Detect pose landmark on a human body,
+ *                  but fail because an input parameter is NULL
+ */
+int utc_mediavision_mv_inference_pose_landmark_detect_n1(void)
+{
+    printf("Inside mv_inference_pose_landmark_detect_n1\n");
+    if (!isVisionSupported) {
+        assert_eq(gStartupError, MEDIA_VISION_ERROR_NOT_SUPPORTED);
+        return 0;
+    }
+
+    char imageFilename[FILE_PATH_SIZE];
+    assert_eq(set_pose_landmark_detection_engine_config(gEngineConfigHandle), MEDIA_VISION_ERROR_NONE);
+
+    int ret = mv_inference_configure(gInferenceHandle, gEngineConfigHandle);
+    assert_eq(MEDIA_VISION_ERROR_NONE, ret);
+
+    ret = mv_inference_prepare(gInferenceHandle);
+    assert_eq(MEDIA_VISION_ERROR_NONE, ret);
+
+    snprintf(imageFilename, FILE_PATH_SIZE, "%s/images/%s", gInferenceExampleDir, "poseLandmark.jpg");
+    ret = load_image_to_media_source(imageFilename, gSourceHandle);
+    assert_eq(MEDIA_VISION_ERROR_NONE, ret);
+
+    // source is NULL
+    ret = mv_inference_pose_landmark_detect(NULL,
+                                    gInferenceHandle,
+                                    NULL,
+                                    _pld_detected_cb,
+                                    NULL);
+    assert_eq(MEDIA_VISION_ERROR_INVALID_PARAMETER, ret);
+
+    // inference handle is NULL
+    ret = mv_inference_pose_landmark_detect(gSourceHandle,
+                                    NULL,
+                                    NULL,
+                                    _pld_detected_cb,
+                                    NULL);
+    assert_eq(MEDIA_VISION_ERROR_INVALID_PARAMETER, ret);
+
+    // callback is NULL
+     ret = mv_inference_pose_landmark_detect(gSourceHandle,
+                                    gInferenceHandle,
+                                    NULL,
+                                    NULL,
+                                    NULL);
+    assert_eq(MEDIA_VISION_ERROR_INVALID_PARAMETER, ret);
+
+    printf("Before return mv_inference_pose_landmark_detect_n1\n");
+    return 0;
+}
+
+/**
+ * @brief Negative test case of mv_inference_pose_landmark_detect()
+ * @testcase        utc_mediavision_mv_inference_pose_landmark_detect_n2
+ * @since_tizen     6.0
+ * @description     Detect pose landmark on a human body,
+ *                  but fail because mv_inference_prepare() isn't called
+ */
+int utc_mediavision_mv_inference_pose_landmark_detect_n2(void)
+{
+    printf("Inside mv_inference_pose_landmark_detect_n2\n");
+    if (!isVisionSupported) {
+        assert_eq(gStartupError, MEDIA_VISION_ERROR_NOT_SUPPORTED);
+        return 0;
+    }
+
+    char imageFilename[FILE_PATH_SIZE];
+    assert_eq(set_pose_landmark_detection_engine_config(gEngineConfigHandle), MEDIA_VISION_ERROR_NONE);
+
+    int ret = mv_inference_configure(gInferenceHandle, gEngineConfigHandle);
+    assert_eq(MEDIA_VISION_ERROR_NONE, ret);
+
+    snprintf(imageFilename, FILE_PATH_SIZE, "%s/images/%s", gInferenceExampleDir, "poseLandmark.jpg");
+    ret = load_image_to_media_source(imageFilename, gSourceHandle);
+    assert_eq(MEDIA_VISION_ERROR_NONE, ret);
+
+    ret = mv_inference_pose_landmark_detect(gSourceHandle,
+                                    gInferenceHandle,
+                                    NULL,
+                                    _pld_detected_cb,
+                                    NULL);
+    assert_eq(MEDIA_VISION_ERROR_INVALID_OPERATION, ret);
+
+    printf("Before return mv_inference_pose_landmark_detect_n2\n");
+    return 0;
+}
+
+static void get_pose_landmark_detection_result_cb1(mv_source_h source,
+                                    mv_inference_pose_result_h result,
+                                    int label,
+                                    void *user_data)
+{
+    printf("Inside get_pose_landmark_detection_result_cb1\n");
+    gIsPoseLandmarkDetectCallBackInvoked = true;
+
+    gPldResultErr = mv_inference_pose_get_number_of_poses(result, &gPldResultNumberOfPoses);
+    printf("Before retrun get_pose_landmark_detection_result_cb1\n");
+}
+
+/**
+ * @function   utc_mediavision_mv_inference_pose_landmark_detect_cb1_startup
+ * @description        Inference module UTC startup code for mv_inference_pose_get_number_of_poses()
+ * @parameter  NA
+ * @return             NA
+ */
+void utc_capi_media_vision_inference_pose_landmark_detect_cb1_startup(void)
+{
+    printf("Inside utc_mediavision_mv_inference_pose_landmark_detect_cb1_startup\n");
+    utc_capi_media_vision_inference_startup2();
+
+    if (gStartupError != MEDIA_VISION_ERROR_NONE)
+        return;
+
+    char imageFilename[FILE_PATH_SIZE];
+    int ret = set_pose_landmark_detection_engine_config(gEngineConfigHandle);
+    if (ret != MEDIA_VISION_ERROR_NONE) {
+        printf("set_pose_landmark_detection_engine_config is failed\n");
+        return;
+    }
+
+    ret = mv_inference_configure(gInferenceHandle, gEngineConfigHandle);
+    if (ret != MEDIA_VISION_ERROR_NONE) {
+        printf("mv_inference_configure is failed\n");
+        return;
+    }
+
+    ret = mv_inference_prepare(gInferenceHandle);
+    if (ret != MEDIA_VISION_ERROR_NONE) {
+        printf("mv_inference_prepare is failed\n");
+        return;
+    }
+
+    snprintf(imageFilename, FILE_PATH_SIZE, "%s/images/%s", gInferenceExampleDir, "poseLandmark.jpg");
+    ret = load_image_to_media_source(imageFilename, gSourceHandle);
+    if (ret != MEDIA_VISION_ERROR_NONE) {
+        printf("load_image_to_media_source is failed\n");
+        return;
+    }
+
+    ret = mv_inference_pose_landmark_detect(gSourceHandle,
+                                    gInferenceHandle,
+                                    NULL,
+                                    get_pose_landmark_detection_result_cb1,
+                                    NULL);
+    if (ret != MEDIA_VISION_ERROR_NONE) {
+        printf("mv_inference_pose_landmark_detect is failed\n");
+        return;
+    }
+
+    printf("Before return utc_mediavision_mv_inference_pose_landmark_detect_cb1_startup\n");
+}
+
+/**
+ * @brief Positive test case of mv_inference_get_number_of_poses()
+ * @testcase        utc_mediavision_mv_inference_get_number_of_poses_p
+ * @since_tizen     6.0
+ * @description     Get the number of poses from a detected result
+ */
+int utc_mediavision_mv_inference_get_number_of_poses_p(void)
+{
+    printf("Inside mv_inference_get_number_of_poses_p\n");
+
+    if (!isVisionSupported) {
+        assert_eq(gStartupError, MEDIA_VISION_ERROR_NOT_SUPPORTED);
+        return 0;
+    }
+
+    assert_eq(true, gIsPoseLandmarkDetectCallBackInvoked);
+    assert_eq(MEDIA_VISION_ERROR_NONE, gPldResultErr);
+    assert_gt(gPldResultNumberOfPoses, 0);
+
+    printf("Before return mv_inference_get_number_of_poses_p\n");
+    return 0;
+}
+
+/**
+ * @brief Negative test case of mv_inference_get_number_of_poses()
+ * @testcase        utc_mediavision_mv_inference_get_number_of_poses_n
+ * @since_tizen     6.0
+ * @description     Get the number of poses from a detected result,
+ *                  but fail because handle is NULL
+ */
+int utc_mediavision_mv_inference_get_number_of_poses_n(void)
+{
+    printf("Inside mv_inference_get_number_of_poses_n\n");
+
+    if (!isVisionSupported) {
+        assert_eq(gStartupError, MEDIA_VISION_ERROR_NOT_SUPPORTED);
+        return 0;
+    }
+
+    // handle is NULL
+    int ret = mv_inference_pose_get_number_of_poses(NULL, &gPldResultNumberOfPoses);
+    assert_eq(MEDIA_VISION_ERROR_INVALID_PARAMETER, ret);
+
+    printf("Before return mv_inference_get_number_of_poses_n\n");
+    return 0;
+}
+
+static void get_pose_landmark_detection_result_cb2(mv_source_h source,
+                                    mv_inference_pose_result_h result,
+                                    int label,
+                                    void *user_data)
+{
+    printf("Inside get_pose_landmark_detection_result_cb2\n");
+    gIsPoseLandmarkDetectCallBackInvoked = true;
+
+    gPldResultErr = mv_inference_pose_get_number_of_landmarks(result, &gPldResultNumberOfLandmarks);
+    printf("Before retrun get_pose_landmark_detection_result_cb2\n");
+}
+
+/**
+ * @function   utc_mediavision_mv_inference_pose_landmark_detect_cb2_startup
+ * @description        Inference module UTC startup code for mv_inference_pose_get_number_of_landmarks()
+ * @parameter  NA
+ * @return             NA
+ */
+void utc_capi_media_vision_inference_pose_landmark_detect_cb2_startup(void)
+{
+    printf("Inside utc_mediavision_mv_inference_pose_landmark_detect_cb2_startup\n");
+    utc_capi_media_vision_inference_startup2();
+
+    if (gStartupError != MEDIA_VISION_ERROR_NONE)
+        return;
+
+    char imageFilename[FILE_PATH_SIZE];
+    int ret = set_pose_landmark_detection_engine_config(gEngineConfigHandle);
+    if (ret != MEDIA_VISION_ERROR_NONE) {
+        printf("set_pose_landmark_detection_engine_config is failed\n");
+        return;
+    }
+
+    ret = mv_inference_configure(gInferenceHandle, gEngineConfigHandle);
+    if (ret != MEDIA_VISION_ERROR_NONE) {
+        printf("mv_inference_configure is failed\n");
+        return;
+    }
+
+    ret = mv_inference_prepare(gInferenceHandle);
+    if (ret != MEDIA_VISION_ERROR_NONE) {
+        printf("mv_inference_prepare is failed\n");
+        return;
+    }
+
+    snprintf(imageFilename, FILE_PATH_SIZE, "%s/images/%s", gInferenceExampleDir, "poseLandmark.jpg");
+    ret = load_image_to_media_source(imageFilename, gSourceHandle);
+    if (ret != MEDIA_VISION_ERROR_NONE) {
+        printf("load_image_to_media_source is failed\n");
+        return;
+    }
+
+    ret = mv_inference_pose_landmark_detect(gSourceHandle,
+                                    gInferenceHandle,
+                                    NULL,
+                                    get_pose_landmark_detection_result_cb2,
+                                    NULL);
+    if (ret != MEDIA_VISION_ERROR_NONE) {
+        printf("mv_inference_pose_landmark_detect is failed\n");
+        return;
+    }
+
+    printf("Before return utc_mediavision_mv_inference_pose_landmark_detect_cb2_startup\n");
+}
+
+/**
+ * @brief Positive test case of mv_inference_get_number_of_landmarks()
+ * @testcase        utc_mediavision_mv_inference_get_number_of_landmarks_p
+ * @since_tizen     6.0
+ * @description     Get the number of landmarks from a detected result
+ */
+int utc_mediavision_mv_inference_get_number_of_landmarks_p(void)
+{
+    printf("Inside mv_inference_get_number_of_landmarks_p\n");
+
+    if (!isVisionSupported) {
+        assert_eq(gStartupError, MEDIA_VISION_ERROR_NOT_SUPPORTED);
+        return 0;
+    }
+
+    assert_eq(true, gIsPoseLandmarkDetectCallBackInvoked);
+    assert_eq(MEDIA_VISION_ERROR_NONE, gPldResultErr);
+    assert_gt(gPldResultNumberOfLandmarks, 0);
+
+    printf("Before return mv_inference_get_number_of_landmarks_p\n");
+    return 0;
+}
+
+/**
+ * @brief Negative test case of mv_inference_get_number_of_landmarks()
+ * @testcase        utc_mediavision_mv_inference_get_number_of_landmarks_n
+ * @since_tizen     6.0
+ * @description     Get the number of landmarks from a detected result,
+ *                  but fail because handle is NULL
+ */
+int utc_mediavision_mv_inference_get_number_of_landmarks_n(void)
+{
+    printf("Inside mv_inference_get_number_of_landmarks_n\n");
+
+    if (!isVisionSupported) {
+        assert_eq(gStartupError, MEDIA_VISION_ERROR_NOT_SUPPORTED);
+        return 0;
+    }
+
+    // handle is NULL
+    int ret = mv_inference_pose_get_number_of_landmarks(NULL, &gPldResultNumberOfLandmarks);
+    assert_eq(MEDIA_VISION_ERROR_INVALID_PARAMETER, ret);
+
+    printf("Before return mv_inference_get_number_of_landmarks_n\n");
+    return 0;
+}
+
+static void get_pose_landmark_detection_result_cb3(mv_source_h source,
+                                    mv_inference_pose_result_h result,
+                                    int label,
+                                    void *user_data)
+{
+    printf("Inside get_pose_landmark_detection_result_cb3\n");
+    gIsPoseLandmarkDetectCallBackInvoked = true;
+
+    // get the number of poses
+    gPldResultErr = mv_inference_pose_get_number_of_poses(result, &gPldResultNumberOfPoses);
+    if (gPldResultErr != MEDIA_VISION_ERROR_NONE)
+        return;
+
+    // get the number of landmarks
+    gPldResultErr = mv_inference_pose_get_number_of_landmarks(result, &gPldResultNumberOfLandmarks);
+    if (gPldResultErr != MEDIA_VISION_ERROR_NONE)
+        return;
+
+    // allocate memory with the number of poses
+    gPldResultLandmarks = (mv_point_s **)malloc(gPldResultNumberOfPoses * sizeof(mv_point_s *));
+    gPldResultScore = (float **)malloc(gPldResultNumberOfPoses * sizeof(float *));
+    for (int pose = 0; pose < gPldResultNumberOfPoses; ++pose) {
+        // allocate memory with the number of landmarks
+        gPldResultLandmarks[pose] = (mv_point_s *)malloc(gPldResultNumberOfLandmarks * sizeof(mv_point_s));
+        gPldResultScore[pose] = (float *)malloc(gPldResultNumberOfLandmarks * sizeof(float));
+        for (int part = 0; part < gPldResultNumberOfLandmarks; ++part) {
+            gPldResultErr = mv_inference_pose_get_landmark(result, pose, part,
+                                                            &(gPldResultLandmarks[pose][part]),
+                                                            &(gPldResultScore[pose][part]));
+            if (gPldResultErr != MEDIA_VISION_ERROR_NONE)
+                return;
+        }
+    }
+
+    gIsGetPoseLandmark = true;
+    printf("Before retrun get_pose_landmark_detection_result_cb3\n");
+}
+
+/**
+ * @function   utc_mediavision_mv_inference_pose_landmark_detect_cb3_startup
+ * @description        Inference module UTC startup code for mv_inference_pose_get_landmark()
+ * @parameter  NA
+ * @return             NA
+ */
+void utc_capi_media_vision_inference_pose_landmark_detect_cb3_startup(void)
+{
+    printf("Inside utc_mediavision_mv_inference_pose_landmark_detect_cb3_startup\n");
+    utc_capi_media_vision_inference_startup2();
+
+    if (gStartupError != MEDIA_VISION_ERROR_NONE)
+        return;
+
+    char imageFilename[FILE_PATH_SIZE];
+    int ret =  set_pose_landmark_detection_engine_config(gEngineConfigHandle);
+    if (ret != MEDIA_VISION_ERROR_NONE) {
+        printf("set_pose_landmark_detection_engine_config is failed\n");
+        return;
+    }
+
+    ret = mv_inference_configure(gInferenceHandle, gEngineConfigHandle);
+    if (ret != MEDIA_VISION_ERROR_NONE) {
+        printf("mv_inference_configure is failed\n");
+        return;
+    }
+
+    ret = mv_inference_prepare(gInferenceHandle);
+    if (ret != MEDIA_VISION_ERROR_NONE) {
+        printf("mv_inference_prepare is failed\n");
+        return;
+    }
+
+    snprintf(imageFilename, FILE_PATH_SIZE, "%s/images/%s", gInferenceExampleDir, "poseLandmark.jpg");
+    ret = load_image_to_media_source(imageFilename, gSourceHandle);
+    if (ret != MEDIA_VISION_ERROR_NONE) {
+        printf("load_image_to_media_source is failed\n");
+        return;
+    }
+
+    ret = mv_inference_pose_landmark_detect(gSourceHandle,
+                                    gInferenceHandle,
+                                    NULL,
+                                    get_pose_landmark_detection_result_cb3,
+                                    NULL);
+    if (ret != MEDIA_VISION_ERROR_NONE) {
+        printf("mv_inference_pose_landmark_detect is failed\n");
+        return;
+    }
+
+    printf("Before return utc_mediavision_mv_inference_pose_landmark_detect_cb3_startup\n");
+}
+
+/**
+ * @brief Positive test case of mv_inference_get_landmark()
+ * @testcase        utc_mediavision_mv_inference_get_landmark_p
+ * @since_tizen     6.0
+ * @description     Get landmarks from a detected result
+ */
+int utc_mediavision_mv_inference_get_landmark_p(void)
+{
+    printf("Inside mv_inference_get_landmark_p\n");
+
+    if (!isVisionSupported) {
+        assert_eq(gStartupError, MEDIA_VISION_ERROR_NOT_SUPPORTED);
+        return 0;
+    }
+
+    assert_eq(true, gIsPoseLandmarkDetectCallBackInvoked);
+    assert_eq(MEDIA_VISION_ERROR_NONE, gPldResultErr);
+    assert_gt(gPldResultNumberOfPoses, 0);
+    assert_gt(gPldResultNumberOfLandmarks, 0);
+    assert_eq(true, gIsGetPoseLandmark);
+
+    printf("Before return mv_inference_get_landmark_p\n");
+    return 0;
+}
+
+/**
+ * @brief Negative test case of mv_inference_get_landmark()
+ * @testcase        utc_mediavision_mv_inference_get_landmark_n
+ * @since_tizen     6.0
+ * @description     Get landmarks from a detected result,
+ *                  but fail because handle is NULL
+ */
+int utc_mediavision_mv_inference_get_landmark_n(void)
+{
+    printf("Inside mv_inference_get_landmark_n\n");
+
+    if (!isVisionSupported) {
+        assert_eq(gStartupError, MEDIA_VISION_ERROR_NOT_SUPPORTED);
+        return 0;
+    }
+
+    // handle is NULL
+    mv_point_s landmark;
+    float score;
+    int ret = mv_inference_pose_get_landmark(NULL, 0, 0, &landmark, &score);
+
+    assert_eq(MEDIA_VISION_ERROR_INVALID_PARAMETER, ret);
+
+    printf("Before return mv_inference_get_landmark_n\n");
+    return 0;
+}
+
+/**
+ * @brief Positive test case of mv_pose_create_p()
+ * @testcase        utc_mediavision_mv_pose_create_p
+ * @since_tizen     6.0
+ * @description     Create pose handle
+ */
+int utc_mediavision_mv_pose_create_p(void)
+{
+    printf("Inside mv_pose_create_p\n");
+
+    mv_pose_h poseHandle = NULL;
+    int ret = mv_pose_create(&poseHandle);
+    if (!isVisionSupported) {
+        assert_eq(ret, MEDIA_VISION_ERROR_NOT_SUPPORTED);
+        return 0;
+    }
+    assert_eq(MEDIA_VISION_ERROR_NONE, ret);
+
+    ret = mv_pose_destroy(poseHandle);
+    assert_eq(MEDIA_VISION_ERROR_NONE, ret);
+
+    printf("Before return mv_pose_create_p\n");
+
+    return 0;
+}
+
+/**
+ * @brief Negative test case of mv_pose_create()
+ * @testcase        utc_mediavision_mv_pose_create_n
+ * @since_tizen     6.0
+ * @description     Create pose handle,
+ *                  but fail because input parameter is NULL
+ */
+int utc_mediavision_mv_pose_create_n(void)
+{
+    printf("Inside mv_pose_create_n\n");
+
+    int ret = mv_pose_create(NULL);
+    if (!isVisionSupported) {
+        assert_eq(ret, MEDIA_VISION_ERROR_NOT_SUPPORTED);
+        return 0;
+    }
+
+    assert_eq(MEDIA_VISION_ERROR_INVALID_PARAMETER, ret);
+
+    printf("Before return mv_pose_create_n\n");
+
+    return 0;
+}
+
+/**
+ * @brief Positive test case of mv_pose_destroy_p()
+ * @testcase        utc_mediavision_mv_pose_destroy_p
+ * @since_tizen     6.0
+ * @description     Destroy pose handle
+ */
+int utc_mediavision_mv_pose_destroy_p(void)
+{
+    printf("Inside mv_pose_destroy_p\n");
+
+    mv_pose_h poseHandle = NULL;
+    int ret = mv_pose_create(&poseHandle);
+    if (!isVisionSupported) {
+        assert_eq(ret, MEDIA_VISION_ERROR_NOT_SUPPORTED);
+        return 0;
+    }
+    assert_eq(MEDIA_VISION_ERROR_NONE, ret);
+
+    ret = mv_pose_destroy(poseHandle);
+    assert_eq(MEDIA_VISION_ERROR_NONE, ret);
+
+    printf("Before return mv_pose_destroy_p\n");
+
+    return 0;
+}
+
+/**
+ * @brief Negative test case of mv_pose_destroy_n()
+ * @testcase        utc_mediavision_mv_pose_destroy_n
+ * @since_tizen     6.0
+ * @description     Destroy pose handle,
+ *                  but fail because input parameter is NULL
+ */
+int utc_mediavision_mv_pose_destroy_n(void)
+{
+    printf("Inside mv_pose_destroy_n\n");
+
+    int ret = mv_pose_destroy(NULL);
+    if (!isVisionSupported) {
+        assert_eq(ret, MEDIA_VISION_ERROR_NOT_SUPPORTED);
+        return 0;
+    }
+    assert_eq(MEDIA_VISION_ERROR_INVALID_PARAMETER, ret);
+
+    printf("Before return mv_pose_destroy_n\n");
+
+    return 0;
+}
+
+/**
+ * @brief Positive test case of mv_pose_set_from_file()
+ * @testcase        utc_mediavision_mv_pose_set_from_file_p
+ * @since_tizen     6.0
+ * @description     Set pose mocap file and its mapping file
+ */
+int utc_mediavision_mv_pose_set_from_file_p(void)
+{
+    printf("Inside mv_pose_set_from_file_p\n");
+
+    mv_pose_h poseHandle = NULL;
+    int ret = mv_pose_create(&poseHandle);
+    if (!isVisionSupported) {
+        assert_eq(ret, MEDIA_VISION_ERROR_NOT_SUPPORTED);
+        return 0;
+    }
+    assert_eq(MEDIA_VISION_ERROR_NONE, ret);
+
+    char poseMocapFilename[FILE_PATH_SIZE];
+    char poseMocapMappingFilename[FILE_PATH_SIZE];
+    snprintf(poseMocapFilename, FILE_PATH_SIZE, "%s/models/%s", gInferenceExampleDir, "pld_mocap.bvh");
+    snprintf(poseMocapMappingFilename, FILE_PATH_SIZE, "%s/models/%s", gInferenceExampleDir, "pld_mocap_mapping.txt");
+
+    ret = mv_pose_set_from_file(poseHandle, poseMocapFilename, poseMocapMappingFilename);
+    assert_eq(MEDIA_VISION_ERROR_NONE, ret);
+
+    ret = mv_pose_destroy(poseHandle);
+    assert_eq(MEDIA_VISION_ERROR_NONE, ret);
+
+    printf("Before return mv_pose_set_from_file_p\n");
+
+    return 0;
+}
+
+/**
+ * @brief Negative test case of mv_pose_set_from_file()
+ * @testcase        utc_mediavision_mv_pose_set_from_file_n1
+ * @since_tizen     6.0
+ * @description     Set pose mocap file and its mapping file,
+ *                  but fail because file paths are NULL
+ */
+int utc_mediavision_mv_pose_set_from_file_n1(void)
+{
+    printf("Inside mv_pose_set_from_file_n1\n");
+
+    mv_pose_h poseHandle = NULL;
+    int ret = mv_pose_create(&poseHandle);
+    if (!isVisionSupported) {
+        assert_eq(ret, MEDIA_VISION_ERROR_NOT_SUPPORTED);
+        return 0;
+    }
+    assert_eq(MEDIA_VISION_ERROR_NONE, ret);
+
+    char poseMocapFilename[FILE_PATH_SIZE];
+    char poseMocapMappingFilename[FILE_PATH_SIZE];
+    snprintf(poseMocapFilename, FILE_PATH_SIZE, "%s/models/%s", gInferenceExampleDir, "pld_mocap.bvh");
+    snprintf(poseMocapMappingFilename, FILE_PATH_SIZE, "%s/models/%s", gInferenceExampleDir, "pld_mocap_mapping.txt");
+
+    // hand is NULL
+    ret = mv_pose_set_from_file(NULL, poseMocapFilename, poseMocapMappingFilename);
+    assert_eq(MEDIA_VISION_ERROR_INVALID_PARAMETER, ret);
+
+    // motion capture file path is NULL
+    ret = mv_pose_set_from_file(poseHandle, NULL, poseMocapMappingFilename);
+    assert_eq(MEDIA_VISION_ERROR_INVALID_PARAMETER, ret);
+
+    // motion mapping file path is NULL
+    ret = mv_pose_set_from_file(poseHandle, poseMocapFilename, NULL);
+    assert_eq(MEDIA_VISION_ERROR_INVALID_PARAMETER, ret);
+
+    ret = mv_pose_destroy(poseHandle);
+    assert_eq(MEDIA_VISION_ERROR_NONE, ret);
+
+    printf("Before return mv_pose_set_from_file_n1\n");
+
+    return 0;
+}
+
+/**
+ * @brief Negative test case of mv_pose_set_from_file()
+ * @testcase        utc_mediavision_mv_pose_set_from_file_n2
+ * @since_tizen     6.0
+ * @description     Set pose mocap file and its mapping file,
+ *                  but fail because file paths are fake (invalid)
+ */
+int utc_mediavision_mv_pose_set_from_file_n2(void)
+{
+    printf("Inside mv_pose_set_from_file_n2\n");
+
+    mv_pose_h poseHandle = NULL;
+    int ret = mv_pose_create(&poseHandle);
+    if (!isVisionSupported) {
+        assert_eq(ret, MEDIA_VISION_ERROR_NOT_SUPPORTED);
+        return 0;
+    }
+    assert_eq(MEDIA_VISION_ERROR_NONE, ret);
+
+    char poseMocapFilename[FILE_PATH_SIZE];
+    char poseMocapMappingFilename[FILE_PATH_SIZE];
+    snprintf(poseMocapFilename, FILE_PATH_SIZE, "%s/models/%s", gInferenceExampleDir, "pld_mocap.bvh");
+    snprintf(poseMocapMappingFilename, FILE_PATH_SIZE, "%s/models/%s", gInferenceExampleDir, "pld_mocap_mapping.txt");
+
+    // fakefile doesn't exist
+    char fakeFilename[FILE_PATH_SIZE];
+    snprintf(fakeFilename, FILE_PATH_SIZE, "%s/models/%s", gInferenceExampleDir, "fakefile");
+
+    // motion capture file path is invalid
+    ret = mv_pose_set_from_file(poseHandle, fakeFilename, poseMocapMappingFilename);
+    assert_eq(MEDIA_VISION_ERROR_INVALID_PATH, ret);
+
+    // motion mapping file path is invalid
+    ret = mv_pose_set_from_file(poseHandle, poseMocapFilename, fakeFilename);
+    assert_eq(MEDIA_VISION_ERROR_INVALID_PATH, ret);
+
+    ret = mv_pose_destroy(poseHandle);
+    assert_eq(MEDIA_VISION_ERROR_NONE, ret);
+
+    printf("Before return mv_pose_set_from_file_n2\n");
+
+    return 0;
+}
+
+static void get_pose_landmark_detection_result_cb4(mv_source_h source,
+                                    mv_inference_pose_result_h result,
+                                    int label,
+                                    void *user_data)
+{
+    printf("Inside get_pose_landmark_detection_result_cb4\n");
+    gIsPoseLandmarkDetectCallBackInvoked = true;
+
+    mv_pose_h *pose = (mv_pose_h *)user_data;
+    int part = MV_INFERENCE_HUMAN_BODY_PART_LEG_RIGHT | MV_INFERENCE_HUMAN_BODY_PART_LEG_LEFT;
+    gPldResultErr = mv_pose_compare(*pose, result, part, &gPoseCompareScore);
+    if (gPldResultErr != MEDIA_VISION_ERROR_NONE)
+        return;
+
+    printf("Before retrun get_pose_landmark_detection_result_cb4\n");
+}
+
+/**
+ * @function   utc_mediavision_mv_inference_pose_landmark_detect_cb4_startup
+ * @description        Inference module UTC startup code for mv_pose_compare()
+ * @parameter  NA
+ * @return             NA
+ */
+void utc_capi_media_vision_inference_pose_landmark_detect_cb4_startup(void)
+{
+    printf("Inside utc_mediavision_mv_inference_pose_landmark_detect_cb4_startup\n");
+    utc_capi_media_vision_inference_startup2();
+
+    if (gStartupError != MEDIA_VISION_ERROR_NONE)
+        return;
+
+    char imageFilename[FILE_PATH_SIZE];
+    int ret = set_pose_landmark_detection_engine_config(gEngineConfigHandle);
+    if (ret != MEDIA_VISION_ERROR_NONE) {
+        printf("set_pose_landmark_detection_engine_config is failed\n");
+        return;
+    }
+
+    ret = mv_inference_configure(gInferenceHandle, gEngineConfigHandle);
+    if (ret != MEDIA_VISION_ERROR_NONE) {
+        printf("mv_inference_configure is failed\n");
+        return;
+    }
+
+    ret = mv_inference_prepare(gInferenceHandle);
+    if (ret != MEDIA_VISION_ERROR_NONE) {
+        printf("mv_inference_prepare is failed\n");
+        return;
+    }
+
+    snprintf(imageFilename, FILE_PATH_SIZE, "%s/images/%s", gInferenceExampleDir, "poseLandmark.jpg");
+    ret = load_image_to_media_source(imageFilename, gSourceHandle);
+    if (ret != MEDIA_VISION_ERROR_NONE) {
+        printf("load_image_to_media_source is failed\n");
+        return;
+    }
+
+    ret = mv_pose_create(&gPoseHandle);
+    if (ret != MEDIA_VISION_ERROR_NONE) {
+        printf("mv_pose_create is failed\n");
+        return;
+    }
+
+    char poseMocapFilename[FILE_PATH_SIZE];
+    char poseMocapMappingFilename[FILE_PATH_SIZE];
+    snprintf(poseMocapFilename, FILE_PATH_SIZE, "%s/models/%s", gInferenceExampleDir, "pld_mocap.bvh");
+    snprintf(poseMocapMappingFilename, FILE_PATH_SIZE, "%s/models/%s", gInferenceExampleDir, "pld_mocap_mapping.txt");
+
+    ret = mv_pose_set_from_file(gPoseHandle, poseMocapFilename, poseMocapMappingFilename);
+    if (ret != MEDIA_VISION_ERROR_NONE) {
+        printf("mv_pose_set_from_file is failed\n");
+        return;
+    }
+
+    ret = mv_inference_pose_landmark_detect(gSourceHandle,
+                                    gInferenceHandle,
+                                    NULL,
+                                    get_pose_landmark_detection_result_cb4,
+                                    &gPoseHandle);
+    if (ret != MEDIA_VISION_ERROR_NONE) {
+        printf("mv_inference_pose_landmark_detect is failed\n");
+        return;
+    }
+
+    printf("Before return utc_mediavision_mv_inference_pose_landmark_detect_cb4_startup\n");
+}
+
+/**
+ * @brief Positive test case of mv_pose_compare()
+ * @testcase        utc_mediavision_mv_pose_compare_p
+ * @since_tizen     6.0
+ * @description     Compare a result which is detected by mv_inference_pose_landmark_detect()
+ *                  with a pose which is set by mv_pose_set_from_file()
+ */
+int utc_mediavision_mv_pose_compare_p(void)
+{
+    printf("Inside mv_inference_get_landmark_p\n");
+
+    if (!isVisionSupported) {
+        assert_eq(gStartupError, MEDIA_VISION_ERROR_NOT_SUPPORTED);
+        return 0;
+    }
+
+    assert_eq(true, gIsPoseLandmarkDetectCallBackInvoked);
+    assert_eq(MEDIA_VISION_ERROR_NONE, gPldResultErr);
+    assert_gt(gPoseCompareScore, 0.5);
+
+    printf("Before return mv_inference_get_landmark_p\n");
+    return 0;
+}
+
+/**
+ * @brief Negative test case of mv_pose_compare()
+ * @testcase        utc_mediavision_mv_pose_compare_n
+ * @since_tizen     6.0
+ * @description     Compare a result which is detected by mv_inference_pose_landmark_detect()
+ *                  with a pose which is set by mv_pose_set_from_file(),
+ *                  but fail because hanlde is NULL
+ */
+int utc_mediavision_mv_pose_compare_n(void)
+{
+    printf("Inside mv_pose_compare_n\n");
+
+    mv_pose_h poseHandle = NULL;
+    int ret = mv_pose_create(&poseHandle);
+    if (!isVisionSupported) {
+        assert_eq(gStartupError, MEDIA_VISION_ERROR_NOT_SUPPORTED);
+        return 0;
+    }
+    assert_eq(MEDIA_VISION_ERROR_NONE, ret);
+
+    char poseMocapFilename[FILE_PATH_SIZE];
+    char poseMocapMappingFilename[FILE_PATH_SIZE];
+    snprintf(poseMocapFilename, FILE_PATH_SIZE, "%s/models/%s", gInferenceExampleDir, "pld_mocap.bvh");
+    snprintf(poseMocapMappingFilename, FILE_PATH_SIZE, "%s/models/%s", gInferenceExampleDir, "pld_mocap_mapping.txt");
+
+    ret = mv_pose_set_from_file(poseHandle, poseMocapFilename, poseMocapMappingFilename);
+    assert_eq(MEDIA_VISION_ERROR_NONE, ret);
+
+    int part = MV_INFERENCE_HUMAN_BODY_PART_LEG_RIGHT | MV_INFERENCE_HUMAN_BODY_PART_LEG_LEFT;
+    // handle is NULL
+    ret = mv_pose_compare(poseHandle, NULL, part, &gPoseCompareScore);
+    assert_eq(MEDIA_VISION_ERROR_INVALID_PARAMETER, ret);
+
+    printf("Before return mv_pose_compare_n\n");
+    return 0;
+}