38def update_annotation_pose_data(model, data_manager, save_pose_img_folder=None):
39 """
40 어노테이션 파일에 포즈모델로 예측한 스켈레톤을 업데이트하는 기능
41 args:
42 model: smpose로 빌드한 포즈 모델
43 data_manager: AnnotationDataManager 객체, 어노테이션 데이터파일로 초기화까지 진행
44 save_pose_img_folder: 스켈레톤 시각화 이미지를 저장할 폴더, 설정하지 않으면 시각화하지 않음
45 """
46
47
48 if save_pose_img_folder is not None:
49 create_directory(save_pose_img_folder)
50
51
52 img_num = data_manager.get_number_of_image()
53 for i in tqdm(range(img_num)):
54
55 anno_data = data_manager.get_anno_data_in_image()
56
57 img_path = data_manager.get_image_path()
58
59
60 bbox_in_image = []
61 for anno in anno_data:
62 bbox_tmp = copy.deepcopy(anno['bbox'])
63 bbox_tmp[2] += bbox_tmp[0]
64 bbox_tmp[3] += bbox_tmp[1]
65 bbox_tmp[0] = max(bbox_tmp[0], 0)
66 bbox_tmp[1] = max(bbox_tmp[1], 0)
67
68 bbox_in_image.append(bbox_tmp)
69
70
71 if len(bbox_in_image) == 0:
72 data_manager.move_image_right()
73 continue
74
75 bboxes = np.array(bbox_in_image)
76 image = cv2.imread(img_path)
77 key_points, pose_result = pose_inference_one_frame(model, image, bboxes)
78
79
80 for anno, kp in zip(anno_data, key_points):
81 kp = kp.tolist()
82 data_manager.update_annotation_data_by_anno_id(anno['id'], 'keypoints', kp)
83
84
85 if save_pose_img_folder is not None:
86
87 image = vis_pose_coco_skeleton(image, pose_result)
88
89
90 file_name = img_path.split('/')[-1]
91 save_path = os.path.join(save_pose_img_folder, file_name)
92
93
94 cv2.imwrite(save_path, image)
95
96
97 data_manager.move_image_right()
98
99
100 data_manager.save_annotation()
101
102