diff --git a/modelscope/pipelines/cv/arc_face_recognition_pipeline.py b/modelscope/pipelines/cv/arc_face_recognition_pipeline.py index 72ebffc8..4419cb3b 100644 --- a/modelscope/pipelines/cv/arc_face_recognition_pipeline.py +++ b/modelscope/pipelines/cv/arc_face_recognition_pipeline.py @@ -48,6 +48,10 @@ class ArcFaceRecognitionPipeline(FaceProcessingBasePipeline): def preprocess(self, input: Input) -> Dict[str, Any]: result = super().preprocess(input) + if result is None: + rtn_dict = {} + rtn_dict['img'] = None + return rtn_dict align_img = result['img'] face_img = align_img[:, :, ::-1] # to rgb face_img = np.transpose(face_img, axes=(2, 0, 1)) @@ -57,6 +61,8 @@ class ArcFaceRecognitionPipeline(FaceProcessingBasePipeline): return result def forward(self, input: Dict[str, Any]) -> Dict[str, Any]: + if input['img'] is None: + return {OutputKeys.IMG_EMBEDDING: None} img = input['img'].unsqueeze(0) emb = self.face_model(img).detach().cpu().numpy() emb /= np.sqrt(np.sum(emb**2, -1, keepdims=True)) # l2 norm diff --git a/modelscope/pipelines/cv/face_attribute_recognition_pipeline.py b/modelscope/pipelines/cv/face_attribute_recognition_pipeline.py index f7645aa5..4cb8585c 100644 --- a/modelscope/pipelines/cv/face_attribute_recognition_pipeline.py +++ b/modelscope/pipelines/cv/face_attribute_recognition_pipeline.py @@ -54,9 +54,15 @@ class FaceAttributeRecognitionPipeline(FaceProcessingBasePipeline): def preprocess(self, input: Input) -> Dict[str, Any]: result = super().preprocess(input) + if result is None: + rtn_dict = {} + rtn_dict['img'] = None + return rtn_dict return result def forward(self, input: Dict[str, Any]) -> Dict[str, Any]: + if input['img'] is None: + return {OutputKeys.SCORES: None, OutputKeys.LABELS: None} scores = self.fairface(input['img']) assert scores is not None return {OutputKeys.SCORES: scores, OutputKeys.LABELS: self.map_list} diff --git a/modelscope/pipelines/cv/face_liveness_ir_pipeline.py b/modelscope/pipelines/cv/face_liveness_ir_pipeline.py index a54d4577..efc9d9d5 100644 --- a/modelscope/pipelines/cv/face_liveness_ir_pipeline.py +++ b/modelscope/pipelines/cv/face_liveness_ir_pipeline.py @@ -57,6 +57,10 @@ class FaceLivenessIrPipeline(FaceProcessingBasePipeline): def preprocess(self, input: Input) -> Dict[str, Any]: result = super().preprocess(input) + if result is None: + rtn_dict = {} + rtn_dict['input_tensor'] = None + return rtn_dict orig_img = LoadImage.convert_to_ndarray(input) orig_img = orig_img[:, :, ::-1] img = super(FaceLivenessIrPipeline, @@ -70,6 +74,8 @@ class FaceLivenessIrPipeline(FaceProcessingBasePipeline): return result def forward(self, input: Dict[str, Any]) -> Dict[str, Any]: + if input['input_tensor'] is None: + return {OutputKeys.SCORES: None, OutputKeys.BOXES: None} input_feed = {} input_feed[ self.input_node_name[0]] = input['input_tensor'].cpu().numpy() diff --git a/modelscope/pipelines/cv/face_liveness_xc_pipeline.py b/modelscope/pipelines/cv/face_liveness_xc_pipeline.py index dbe19be1..3a50d91f 100644 --- a/modelscope/pipelines/cv/face_liveness_xc_pipeline.py +++ b/modelscope/pipelines/cv/face_liveness_xc_pipeline.py @@ -64,6 +64,10 @@ class FaceLivenessXcPipeline(FaceProcessingBasePipeline): def preprocess(self, input: Input) -> Dict[str, Any]: result = super().preprocess(input) + if result is None: + rtn_dict = {} + rtn_dict['input_tensor'] = None + return rtn_dict img = result['img'] img = (img - 127.5) * 0.0078125 img = np.expand_dims(img, 0).copy() @@ -74,6 +78,8 @@ class FaceLivenessXcPipeline(FaceProcessingBasePipeline): return result def forward(self, input: Dict[str, Any]) -> Dict[str, Any]: + if input['input_tensor'] is None: + return {OutputKeys.SCORES: None, OutputKeys.BOXES: None} input_feed = {} input_feed[ self.input_node_name[0]] = input['input_tensor'].cpu().numpy() diff --git a/modelscope/pipelines/cv/face_processing_base_pipeline.py b/modelscope/pipelines/cv/face_processing_base_pipeline.py index bb6f0397..ca0a7c71 100644 --- a/modelscope/pipelines/cv/face_processing_base_pipeline.py +++ b/modelscope/pipelines/cv/face_processing_base_pipeline.py @@ -101,12 +101,14 @@ class FaceProcessingBasePipeline(Pipeline): face_lmks = face_lmks.reshape(5, 2) align_img, _ = align_face(img, (112, 112), face_lmks) - result = {} - result['img'] = np.ascontiguousarray(align_img) - result['scores'] = [scores] - result['bbox'] = bboxes - result['lmks'] = face_lmks - return result + result = {} + result['img'] = np.ascontiguousarray(align_img) + result['scores'] = [scores] + result['bbox'] = bboxes + result['lmks'] = face_lmks + return result + else: + return None def align_face_padding(self, img, rect, padding_size=16, pad_pixel=127): rect = np.reshape(rect, (-1, 4)) diff --git a/modelscope/pipelines/cv/face_quality_assessment_pipeline.py b/modelscope/pipelines/cv/face_quality_assessment_pipeline.py index 4969696f..58fab659 100644 --- a/modelscope/pipelines/cv/face_quality_assessment_pipeline.py +++ b/modelscope/pipelines/cv/face_quality_assessment_pipeline.py @@ -73,6 +73,10 @@ class FaceQualityAssessmentPipeline(FaceProcessingBasePipeline): def preprocess(self, input: Input) -> Dict[str, Any]: result = super().preprocess(input) + if result is None: + rtn_dict = {} + rtn_dict['input_tensor'] = None + return rtn_dict align_img = result['img'] face_img = align_img[:, :, ::-1] # to rgb face_img = (face_img / 255. - 0.5) / 0.5 @@ -83,12 +87,14 @@ class FaceQualityAssessmentPipeline(FaceProcessingBasePipeline): return result def forward(self, input: Dict[str, Any]) -> Dict[str, Any]: + if input['input_tensor'] is None: + return {OutputKeys.SCORES: None, OutputKeys.BOXES: None} input_feed = {} input_feed[ self.input_node_name[0]] = input['input_tensor'].cpu().numpy() result = self.sess.run(self.out_node_name, input_feed=input_feed) assert result is not None - scores = [result[0][0][0]] + scores = [np.mean(result[0][0])] boxes = input['bbox'].cpu().numpy()[np.newaxis, :].tolist() return {OutputKeys.SCORES: scores, OutputKeys.BOXES: boxes} diff --git a/modelscope/pipelines/cv/face_recognition_onnx_fm_pipeline.py b/modelscope/pipelines/cv/face_recognition_onnx_fm_pipeline.py index 910bab29..7577c82d 100644 --- a/modelscope/pipelines/cv/face_recognition_onnx_fm_pipeline.py +++ b/modelscope/pipelines/cv/face_recognition_onnx_fm_pipeline.py @@ -66,6 +66,10 @@ class FaceRecognitionOnnxFmPipeline(FaceProcessingBasePipeline): def preprocess(self, input: Input) -> Dict[str, Any]: result = super().preprocess(input) + if result is None: + rtn_dict = {} + rtn_dict['input_tensor'] = None + return rtn_dict align_img = result['img'] face_img = align_img[:, :, ::-1] # to rgb face_img = (face_img / 255. - 0.5) / 0.5 @@ -76,6 +80,8 @@ class FaceRecognitionOnnxFmPipeline(FaceProcessingBasePipeline): return result def forward(self, input: Dict[str, Any]) -> Dict[str, Any]: + if input['input_tensor'] is None: + return {OutputKeys.IMG_EMBEDDING: None} input_feed = {} input_feed[ self.input_node_name[0]] = input['input_tensor'].cpu().numpy() diff --git a/modelscope/pipelines/cv/face_recognition_onnx_ir_pipeline.py b/modelscope/pipelines/cv/face_recognition_onnx_ir_pipeline.py index 8c44f65d..ced9b2c6 100644 --- a/modelscope/pipelines/cv/face_recognition_onnx_ir_pipeline.py +++ b/modelscope/pipelines/cv/face_recognition_onnx_ir_pipeline.py @@ -63,6 +63,10 @@ class FaceRecognitionOnnxIrPipeline(FaceProcessingBasePipeline): def preprocess(self, input: Input) -> Dict[str, Any]: result = super().preprocess(input) + if result is None: + rtn_dict = {} + rtn_dict['input_tensor'] = None + return rtn_dict align_img = result['img'] face_img = align_img[:, :, ::-1] # to rgb face_img = (face_img / 255. - 0.5) / 0.5 @@ -73,6 +77,8 @@ class FaceRecognitionOnnxIrPipeline(FaceProcessingBasePipeline): return result def forward(self, input: Dict[str, Any]) -> Dict[str, Any]: + if input['input_tensor'] is None: + return {OutputKeys.IMG_EMBEDDING: None} input_feed = {} input_feed[ self.input_node_name[0]] = input['input_tensor'].cpu().numpy() diff --git a/modelscope/pipelines/cv/face_recognition_ood_pipeline.py b/modelscope/pipelines/cv/face_recognition_ood_pipeline.py index b2e75619..039f8899 100644 --- a/modelscope/pipelines/cv/face_recognition_ood_pipeline.py +++ b/modelscope/pipelines/cv/face_recognition_ood_pipeline.py @@ -51,6 +51,10 @@ class FaceRecognitionOodPipeline(FaceProcessingBasePipeline): def preprocess(self, input: Input) -> Dict[str, Any]: result = super().preprocess(input) + if result is None: + rtn_dict = {} + rtn_dict['img'] = None + return rtn_dict align_img = result['img'] face_img = align_img[:, :, ::-1] # to rgb face_img = np.transpose(face_img, axes=(2, 0, 1)) @@ -60,7 +64,8 @@ class FaceRecognitionOodPipeline(FaceProcessingBasePipeline): return result def forward(self, input: Dict[str, Any]) -> Dict[str, Any]: - assert input['img'] is not None + if input['img'] is None: + return {OutputKeys.IMG_EMBEDDING: None, OutputKeys.SCORES: None} img = input['img'].unsqueeze(0) output = self.face_model(img) emb = output[0].detach().cpu().numpy() diff --git a/modelscope/pipelines/cv/facial_expression_recognition_pipeline.py b/modelscope/pipelines/cv/facial_expression_recognition_pipeline.py index d7e617f8..b3f491e7 100644 --- a/modelscope/pipelines/cv/facial_expression_recognition_pipeline.py +++ b/modelscope/pipelines/cv/facial_expression_recognition_pipeline.py @@ -49,11 +49,16 @@ class FacialExpressionRecognitionPipeline(FaceProcessingBasePipeline): ] def preprocess(self, input: Input) -> Dict[str, Any]: - result = super(FacialExpressionRecognitionPipeline, - self).preprocess(input) + result = super().preprocess(input) + if result is None: + rtn_dict = {} + rtn_dict['img'] = None + return rtn_dict return result def forward(self, input: Dict[str, Any]) -> Dict[str, Any]: + if input['img'] is None: + return {OutputKeys.SCORES: None, OutputKeys.LABELS: None} result = self.fer(input) assert result is not None scores = result[0].tolist() diff --git a/modelscope/pipelines/cv/facial_landmark_confidence_pipeline.py b/modelscope/pipelines/cv/facial_landmark_confidence_pipeline.py index 8f26b286..c5952f94 100644 --- a/modelscope/pipelines/cv/facial_landmark_confidence_pipeline.py +++ b/modelscope/pipelines/cv/facial_landmark_confidence_pipeline.py @@ -44,12 +44,23 @@ class FacialLandmarkConfidencePipeline(FaceProcessingBasePipeline): def preprocess(self, input: Input) -> Dict[str, Any]: result = super().preprocess(input) + if result is None: + rtn_dict = {} + rtn_dict['img'] = None + return rtn_dict img = LoadImage.convert_to_ndarray(input) img = img[:, :, ::-1] result['orig_img'] = img.astype(np.float32) return result def forward(self, input: Dict[str, Any]) -> Dict[str, Any]: + if input['img'] is None: + return { + OutputKeys.SCORES: None, + OutputKeys.POSES: None, + OutputKeys.KEYPOINTS: None, + OutputKeys.BOXES: None + } result = self.flcm(input) assert result is not None lms = result[0].reshape(-1, 10).tolist() diff --git a/tests/pipelines/test_arc_face_recognition.py b/tests/pipelines/test_arc_face_recognition.py index 2d2b74bc..fa17dd91 100644 --- a/tests/pipelines/test_arc_face_recognition.py +++ b/tests/pipelines/test_arc_face_recognition.py @@ -25,8 +25,11 @@ class FaceRecognitionTest(unittest.TestCase, DemoCompatibilityCheck): Tasks.face_recognition, model=self.model_id) emb1 = face_recognition(img1)[OutputKeys.IMG_EMBEDDING] emb2 = face_recognition(img2)[OutputKeys.IMG_EMBEDDING] - sim = np.dot(emb1[0], emb2[0]) - print(f'Cos similarity={sim:.3f}, img1:{img1} img2:{img2}') + if emb1 is None or emb2 is None: + print('No Detected Face.') + else: + sim = np.dot(emb1[0], emb2[0]) + print(f'Cos similarity={sim:.3f}, img1:{img1} img2:{img2}') @unittest.skipUnless(test_level() >= 0, 'skip test in current test level') def test_demo_compatibility(self): diff --git a/tests/pipelines/test_face_attribute_recognition.py b/tests/pipelines/test_face_attribute_recognition.py index c3c0d771..ae2a4f90 100644 --- a/tests/pipelines/test_face_attribute_recognition.py +++ b/tests/pipelines/test_face_attribute_recognition.py @@ -29,7 +29,10 @@ class FaceAttributeRecognitionTest(unittest.TestCase): Tasks.face_attribute_recognition, model=self.model_id) img_path = 'data/test/images/face_recognition_1.png' result = fair_face(img_path) - self.show_result(img_path, result) + if result[OutputKeys.SCORES] is None: + print('No Detected Face.') + else: + self.show_result(img_path, result) if __name__ == '__main__': diff --git a/tests/pipelines/test_face_liveness_ir.py b/tests/pipelines/test_face_liveness_ir.py index f307440c..576f879e 100644 --- a/tests/pipelines/test_face_liveness_ir.py +++ b/tests/pipelines/test_face_liveness_ir.py @@ -4,6 +4,7 @@ import unittest import cv2 +from modelscope.outputs import OutputKeys from modelscope.pipelines import pipeline from modelscope.utils.constant import Tasks from modelscope.utils.cv.image_utils import draw_face_detection_no_lm_result @@ -25,13 +26,19 @@ class FaceLivenessIrTest(unittest.TestCase): def test_run_modelhub(self): face_detection = pipeline(Tasks.face_liveness, model=self.model_id) result = face_detection(self.img_path) - self.show_result(self.img_path, result) + if result[OutputKeys.SCORES] is None: + print('No Detected Face.') + else: + self.show_result(self.img_path, result) @unittest.skipUnless(test_level() >= 0, 'skip test in current test level') def test_run_default_model(self): face_detection = pipeline(Tasks.face_liveness) result = face_detection(self.img_path) - self.show_result(self.img_path, result) + if result[OutputKeys.SCORES] is None: + print('No Detected Face.') + else: + self.show_result(self.img_path, result) if __name__ == '__main__': diff --git a/tests/pipelines/test_face_liveness_rgb.py b/tests/pipelines/test_face_liveness_rgb.py index 40e39e9e..2c114667 100644 --- a/tests/pipelines/test_face_liveness_rgb.py +++ b/tests/pipelines/test_face_liveness_rgb.py @@ -4,6 +4,7 @@ import unittest import cv2 +from modelscope.outputs import OutputKeys from modelscope.pipelines import pipeline from modelscope.utils.constant import Tasks from modelscope.utils.cv.image_utils import draw_face_detection_no_lm_result @@ -25,13 +26,19 @@ class FaceLivenessRgbTest(unittest.TestCase): def test_run_modelhub(self): face_detection = pipeline(Tasks.face_liveness, model=self.model_id) result = face_detection(self.img_path) - self.show_result(self.img_path, result) + if result[OutputKeys.SCORES] is None: + print('No Detected Face.') + else: + self.show_result(self.img_path, result) @unittest.skipUnless(test_level() >= 1, 'skip test in current test level') def test_run_default_model(self): face_detection = pipeline(Tasks.face_liveness) result = face_detection(self.img_path) - self.show_result(self.img_path, result) + if result[OutputKeys.SCORES] is None: + print('No Detected Face.') + else: + self.show_result(self.img_path, result) if __name__ == '__main__': diff --git a/tests/pipelines/test_face_liveness_xc.py b/tests/pipelines/test_face_liveness_xc.py index 91b46e01..6981ea5c 100644 --- a/tests/pipelines/test_face_liveness_xc.py +++ b/tests/pipelines/test_face_liveness_xc.py @@ -4,6 +4,7 @@ import unittest import cv2 +from modelscope.outputs import OutputKeys from modelscope.pipelines import pipeline from modelscope.utils.constant import Tasks from modelscope.utils.cv.image_utils import draw_face_detection_no_lm_result @@ -25,13 +26,19 @@ class FaceLivenessXcTest(unittest.TestCase): def test_run_modelhub(self): face_detection = pipeline(Tasks.face_liveness, model=self.model_id) result = face_detection(self.img_path) - self.show_result(self.img_path, result) + if result[OutputKeys.SCORES] is None: + print('No Detected Face.') + else: + self.show_result(self.img_path, result) @unittest.skipUnless(test_level() >= 0, 'skip test in current test level') def test_run_default_model(self): face_detection = pipeline(Tasks.face_liveness) result = face_detection(self.img_path) - self.show_result(self.img_path, result) + if result[OutputKeys.SCORES] is None: + print('No Detected Face.') + else: + self.show_result(self.img_path, result) if __name__ == '__main__': diff --git a/tests/pipelines/test_face_quality_assessment.py b/tests/pipelines/test_face_quality_assessment.py index 33938b37..0ae728b1 100644 --- a/tests/pipelines/test_face_quality_assessment.py +++ b/tests/pipelines/test_face_quality_assessment.py @@ -4,6 +4,7 @@ import unittest import cv2 +from modelscope.outputs import OutputKeys from modelscope.pipelines import pipeline from modelscope.utils.constant import Tasks from modelscope.utils.cv.image_utils import draw_face_detection_no_lm_result @@ -14,6 +15,7 @@ class FaceQualityAssessmentTest(unittest.TestCase): def setUp(self) -> None: self.model_id = 'damo/cv_manual_face-quality-assessment_fqa' + self.img_path = 'data/test/images/vision_efficient_tuning_test_sunflower.jpg' self.img_path = 'data/test/images/face_recognition_1.png' def show_result(self, img_path, detection_result): @@ -23,16 +25,22 @@ class FaceQualityAssessmentTest(unittest.TestCase): @unittest.skipUnless(test_level() >= 0, 'skip test in current test level') def test_run_modelhub(self): - face_detection = pipeline( + face_quality_assessment = pipeline( Tasks.face_quality_assessment, model=self.model_id) - result = face_detection(self.img_path) - self.show_result(self.img_path, result) + result = face_quality_assessment(self.img_path) + if result[OutputKeys.SCORES] is None: + print('No Detected Face.') + else: + self.show_result(self.img_path, result) @unittest.skipUnless(test_level() >= 0, 'skip test in current test level') def test_run_default_model(self): - face_detection = pipeline(Tasks.face_quality_assessment) - result = face_detection(self.img_path) - self.show_result(self.img_path, result) + face_quality_assessment = pipeline(Tasks.face_quality_assessment) + result = face_quality_assessment(self.img_path) + if result[OutputKeys.SCORES] is None: + print('No Detected Face.') + else: + self.show_result(self.img_path, result) if __name__ == '__main__': diff --git a/tests/pipelines/test_face_recognition_onnx_fm.py b/tests/pipelines/test_face_recognition_onnx_fm.py index 4fd6565c..8478b3bf 100644 --- a/tests/pipelines/test_face_recognition_onnx_fm.py +++ b/tests/pipelines/test_face_recognition_onnx_fm.py @@ -25,8 +25,11 @@ class FmFaceRecognitionTest(unittest.TestCase, DemoCompatibilityCheck): Tasks.face_recognition, model=self.model_id) emb1 = face_recognition(img1)[OutputKeys.IMG_EMBEDDING] emb2 = face_recognition(img2)[OutputKeys.IMG_EMBEDDING] - sim = np.dot(emb1[0], emb2[0]) - print(f'Cos similarity={sim:.3f}, img1:{img1} img2:{img2}') + if emb1 is None or emb2 is None: + print('No Detected Face.') + else: + sim = np.dot(emb1[0], emb2[0]) + print(f'Cos similarity={sim:.3f}, img1:{img1} img2:{img2}') @unittest.skipUnless(test_level() >= 0, 'skip test in current test level') def test_demo_compatibility(self): diff --git a/tests/pipelines/test_face_recognition_onnx_ir.py b/tests/pipelines/test_face_recognition_onnx_ir.py index 12f82aa3..c45042be 100644 --- a/tests/pipelines/test_face_recognition_onnx_ir.py +++ b/tests/pipelines/test_face_recognition_onnx_ir.py @@ -25,8 +25,11 @@ class IrFaceRecognitionTest(unittest.TestCase, DemoCompatibilityCheck): Tasks.face_recognition, model=self.model_id) emb1 = face_recognition(img1)[OutputKeys.IMG_EMBEDDING] emb2 = face_recognition(img2)[OutputKeys.IMG_EMBEDDING] - sim = np.dot(emb1[0], emb2[0]) - print(f'Cos similarity={sim:.3f}, img1:{img1} img2:{img2}') + if emb1 is None or emb2 is None: + print('No Detected Face.') + else: + sim = np.dot(emb1[0], emb2[0]) + print(f'Cos similarity={sim:.3f}, img1:{img1} img2:{img2}') @unittest.skipUnless(test_level() >= 0, 'skip test in current test level') def test_demo_compatibility(self): diff --git a/tests/pipelines/test_face_recognition_ood.py b/tests/pipelines/test_face_recognition_ood.py index 041fd352..8a6fb444 100644 --- a/tests/pipelines/test_face_recognition_ood.py +++ b/tests/pipelines/test_face_recognition_ood.py @@ -24,15 +24,20 @@ class FaceRecognitionOodTest(unittest.TestCase, DemoCompatibilityCheck): face_recognition = pipeline(self.task, model=self.model_id) result1 = face_recognition(img1) emb1 = result1[OutputKeys.IMG_EMBEDDING] - score1 = result1[OutputKeys.SCORES][0][0] result2 = face_recognition(img2) emb2 = result2[OutputKeys.IMG_EMBEDDING] - score2 = result2[OutputKeys.SCORES][0][0] - sim = np.dot(emb1[0], emb2[0]) - print(f'Cos similarity={sim:.3f}, img1:{img1} img2:{img2}') - print(f'OOD score: img1:{score1:.3f} img2:{score2:.3f}') + if emb1 is None or emb2 is None: + print('No Detected Face.') + else: + sim = np.dot(emb1[0], emb2[0]) + + score1 = result1[OutputKeys.SCORES][0][0] + score2 = result2[OutputKeys.SCORES][0][0] + + print(f'Cos similarity={sim:.3f}, img1:{img1} img2:{img2}') + print(f'OOD score: img1:{score1:.3f} img2:{score2:.3f}') @unittest.skipUnless(test_level() >= 0, 'skip test in current test level') def test_demo_compatibility(self): diff --git a/tests/pipelines/test_facial_expression_recognition.py b/tests/pipelines/test_facial_expression_recognition.py index f5151bef..175cbe18 100644 --- a/tests/pipelines/test_facial_expression_recognition.py +++ b/tests/pipelines/test_facial_expression_recognition.py @@ -29,7 +29,10 @@ class FacialExpressionRecognitionTest(unittest.TestCase): Tasks.facial_expression_recognition, model=self.model_id) img_path = 'data/test/images/facial_expression_recognition.jpg' result = fer(img_path) - self.show_result(img_path, result) + if result[OutputKeys.SCORES] is None: + print('No Detected Face.') + else: + self.show_result(img_path, result) if __name__ == '__main__': diff --git a/tests/pipelines/test_facial_landmark_confidence.py b/tests/pipelines/test_facial_landmark_confidence.py index dde1fcf0..f67c7cfa 100644 --- a/tests/pipelines/test_facial_landmark_confidence.py +++ b/tests/pipelines/test_facial_landmark_confidence.py @@ -28,7 +28,10 @@ class FacialLandmarkConfidenceTest(unittest.TestCase): flcm = pipeline(Tasks.face_2d_keypoints, model=self.model_id) img_path = 'data/test/images/face_recognition_1.png' result = flcm(img_path) - self.show_result(img_path, result) + if result[OutputKeys.SCORES] is None: + print('No Detected Face.') + else: + self.show_result(img_path, result) if __name__ == '__main__':