Link: https://code.alibaba-inc.com/Ali-MaaS/MaaS-lib/codereview/10423383master
| @@ -4,7 +4,9 @@ import os | |||||
| import os.path as osp | import os.path as osp | ||||
| from typing import Any | from typing import Any | ||||
| import numpy as np | |||||
| from easycv.utils.ms_utils import EasyCVMeta | from easycv.utils.ms_utils import EasyCVMeta | ||||
| from PIL import ImageFile | |||||
| from modelscope.hub.snapshot_download import snapshot_download | from modelscope.hub.snapshot_download import snapshot_download | ||||
| from modelscope.pipelines.util import is_official_hub_path | from modelscope.pipelines.util import is_official_hub_path | ||||
| @@ -94,5 +96,19 @@ class EasyCVPipeline(object): | |||||
| return easycv_config | return easycv_config | ||||
| def _is_single_inputs(self, inputs): | |||||
| if isinstance(inputs, str) or (isinstance(inputs, list) | |||||
| and len(inputs) == 1) or isinstance( | |||||
| inputs, np.ndarray) or isinstance( | |||||
| inputs, ImageFile.ImageFile): | |||||
| return True | |||||
| return False | |||||
| def __call__(self, inputs) -> Any: | def __call__(self, inputs) -> Any: | ||||
| return self.predict_op(inputs) | |||||
| outputs = self.predict_op(inputs) | |||||
| if self._is_single_inputs(inputs): | |||||
| outputs = outputs[0] | |||||
| return outputs | |||||
| @@ -57,4 +57,7 @@ class EasyCVDetectionPipeline(EasyCVPipeline): | |||||
| OutputKeys.BOXES: boxes | OutputKeys.BOXES: boxes | ||||
| } for output in outputs] | } for output in outputs] | ||||
| if self._is_single_inputs(inputs): | |||||
| results = results[0] | |||||
| return results | return results | ||||
| @@ -40,4 +40,7 @@ class Face2DKeypointsPipeline(EasyCVPipeline): | |||||
| OutputKeys.POSES: output['pose'] | OutputKeys.POSES: output['pose'] | ||||
| } for output in outputs] | } for output in outputs] | ||||
| if self._is_single_inputs(inputs): | |||||
| results = results[0] | |||||
| return results | return results | ||||
| @@ -62,4 +62,7 @@ class HumanWholebodyKeypointsPipeline(EasyCVPipeline): | |||||
| OutputKeys.BOXES: output['boxes'] | OutputKeys.BOXES: output['boxes'] | ||||
| } for output in outputs] | } for output in outputs] | ||||
| if self._is_single_inputs(inputs): | |||||
| results = results[0] | |||||
| return results | return results | ||||
| @@ -18,7 +18,7 @@ class EasyCVFace2DKeypointsPipelineTest(unittest.TestCase): | |||||
| face_2d_keypoints_align = pipeline( | face_2d_keypoints_align = pipeline( | ||||
| task=Tasks.face_2d_keypoints, model=model_id) | task=Tasks.face_2d_keypoints, model=model_id) | ||||
| output = face_2d_keypoints_align(img_path)[0] | |||||
| output = face_2d_keypoints_align(img_path) | |||||
| output_keypoints = output[OutputKeys.KEYPOINTS] | output_keypoints = output[OutputKeys.KEYPOINTS] | ||||
| output_pose = output[OutputKeys.POSES] | output_pose = output[OutputKeys.POSES] | ||||
| @@ -15,10 +15,8 @@ class Hand2DKeypointsPipelineTest(unittest.TestCase): | |||||
| model_id = 'damo/cv_hrnetw18_hand-pose-keypoints_coco-wholebody' | model_id = 'damo/cv_hrnetw18_hand-pose-keypoints_coco-wholebody' | ||||
| hand_keypoint = pipeline(task=Tasks.hand_2d_keypoints, model=model_id) | hand_keypoint = pipeline(task=Tasks.hand_2d_keypoints, model=model_id) | ||||
| outputs = hand_keypoint(img_path) | |||||
| self.assertEqual(len(outputs), 1) | |||||
| results = hand_keypoint(img_path) | |||||
| results = outputs[0] | |||||
| self.assertIn(OutputKeys.KEYPOINTS, results.keys()) | self.assertIn(OutputKeys.KEYPOINTS, results.keys()) | ||||
| self.assertIn(OutputKeys.BOXES, results.keys()) | self.assertIn(OutputKeys.BOXES, results.keys()) | ||||
| self.assertEqual(results[OutputKeys.KEYPOINTS].shape[1], 21) | self.assertEqual(results[OutputKeys.KEYPOINTS].shape[1], 21) | ||||
| @@ -30,10 +28,7 @@ class Hand2DKeypointsPipelineTest(unittest.TestCase): | |||||
| img_path = 'data/test/images/hand_keypoints.jpg' | img_path = 'data/test/images/hand_keypoints.jpg' | ||||
| hand_keypoint = pipeline(task=Tasks.hand_2d_keypoints) | hand_keypoint = pipeline(task=Tasks.hand_2d_keypoints) | ||||
| outputs = hand_keypoint(img_path) | |||||
| self.assertEqual(len(outputs), 1) | |||||
| results = outputs[0] | |||||
| results = hand_keypoint(img_path) | |||||
| self.assertIn(OutputKeys.KEYPOINTS, results.keys()) | self.assertIn(OutputKeys.KEYPOINTS, results.keys()) | ||||
| self.assertIn(OutputKeys.BOXES, results.keys()) | self.assertIn(OutputKeys.BOXES, results.keys()) | ||||
| self.assertEqual(results[OutputKeys.KEYPOINTS].shape[1], 21) | self.assertEqual(results[OutputKeys.KEYPOINTS].shape[1], 21) | ||||
| @@ -18,7 +18,7 @@ class EasyCVFace2DKeypointsPipelineTest(unittest.TestCase): | |||||
| human_wholebody_keypoint_pipeline = pipeline( | human_wholebody_keypoint_pipeline = pipeline( | ||||
| task=Tasks.human_wholebody_keypoint, model=model_id) | task=Tasks.human_wholebody_keypoint, model=model_id) | ||||
| output = human_wholebody_keypoint_pipeline(img_path)[0] | |||||
| output = human_wholebody_keypoint_pipeline(img_path) | |||||
| output_keypoints = output[OutputKeys.KEYPOINTS] | output_keypoints = output[OutputKeys.KEYPOINTS] | ||||
| output_pose = output[OutputKeys.BOXES] | output_pose = output[OutputKeys.BOXES] | ||||
| @@ -55,7 +55,7 @@ class ObjectDetectionTest(unittest.TestCase, DemoCompatibilityCheck): | |||||
| image_object_detection_auto = pipeline( | image_object_detection_auto = pipeline( | ||||
| Tasks.image_object_detection, model=model_id) | Tasks.image_object_detection, model=model_id) | ||||
| result = image_object_detection_auto(test_image)[0] | |||||
| result = image_object_detection_auto(test_image) | |||||
| image_object_detection_auto.show_result(test_image, result, | image_object_detection_auto.show_result(test_image, result, | ||||
| 'auto_demo_ret.jpg') | 'auto_demo_ret.jpg') | ||||