import json import unittest import numpy as np import importlib utils = importlib.import_module('extensions.sd-webui-controlnet.tests.utils', 'utils') utils.setup_test_env() from annotator.openpose import encode_poses_as_json, PoseResult, Keypoint from annotator.openpose.body import BodyResult class TestEncodePosesAsJson(unittest.TestCase): def test_empty_list(self): poses = [] canvas_height = 1080 canvas_width = 1920 result = encode_poses_as_json(poses, canvas_height, canvas_width) expected = json.dumps({ 'people': [], 'canvas_height': canvas_height, 'canvas_width': canvas_width, }, indent=4) self.assertEqual(result, expected) def test_single_pose_no_keypoints(self): poses = [PoseResult(BodyResult(None, 0, 0), None, None, None)] canvas_height = 1080 canvas_width = 1920 result = encode_poses_as_json(poses, canvas_height, canvas_width) expected = json.dumps({ 'people': [ { 'pose_keypoints_2d': None, 'face_keypoints_2d': None, 'hand_left_keypoints_2d': None, 'hand_right_keypoints_2d': None, }, ], 'canvas_height': canvas_height, 'canvas_width': canvas_width, }, indent=4) self.assertEqual(result, expected) def test_single_pose_with_keypoints(self): keypoints = [Keypoint(np.float32(0.5), np.float32(0.5)), None, Keypoint(0.6, 0.6)] poses = [PoseResult(BodyResult(keypoints, 0, 0), keypoints, keypoints, keypoints)] canvas_height = 1080 canvas_width = 1920 result = encode_poses_as_json(poses, canvas_height, canvas_width) expected = json.dumps({ 'people': [ { 'pose_keypoints_2d': [ 0.5, 0.5, 1.0, 0.0, 0.0, 0.0, 0.6, 0.6, 1.0, ], 'face_keypoints_2d': [ 0.5, 0.5, 1.0, 0.0, 0.0, 0.0, 0.6, 0.6, 1.0, ], 'hand_left_keypoints_2d': [ 0.5, 0.5, 1.0, 0.0, 0.0, 0.0, 0.6, 0.6, 1.0, ], 'hand_right_keypoints_2d': [ 0.5, 0.5, 1.0, 0.0, 0.0, 0.0, 0.6, 0.6, 1.0, ], }, ], 'canvas_height': canvas_height, 'canvas_width': canvas_width, }, indent=4) self.assertEqual(result, expected) if __name__ == '__main__': unittest.main()