face_emotion_pipeline.py 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243
  1. # Copyright 2021-2022 The Alibaba Fundamental Vision Team Authors. All rights reserved.
  2. from typing import Any, Dict
  3. import numpy as np
  4. from modelscope.metainfo import Pipelines
  5. from modelscope.models.cv.face_emotion import emotion_infer
  6. from modelscope.outputs import OutputKeys
  7. from modelscope.pipelines.base import Input, Pipeline
  8. from modelscope.pipelines.builder import PIPELINES
  9. from modelscope.preprocessors import LoadImage
  10. from modelscope.utils.constant import ModelFile, Tasks
  11. from modelscope.utils.logger import get_logger
  12. logger = get_logger()
  13. @PIPELINES.register_module(
  14. Tasks.face_emotion, module_name=Pipelines.face_emotion)
  15. class FaceEmotionPipeline(Pipeline):
  16. def __init__(self, model: str, **kwargs):
  17. """
  18. use `model` to create face emotion pipeline for prediction
  19. Args:
  20. model: model id on modelscope hub.
  21. """
  22. super().__init__(model=model, **kwargs)
  23. self.face_model = model + '/' + ModelFile.TF_GRAPH_FILE
  24. logger.info('load model done')
  25. def preprocess(self, input: Input) -> Dict[str, Any]:
  26. img = LoadImage.convert_to_ndarray(input)
  27. return img
  28. def forward(self, input: Dict[str, Any]) -> Dict[str, Any]:
  29. result, bbox = emotion_infer.inference(input, self.model,
  30. self.face_model)
  31. return {OutputKeys.OUTPUT: result, OutputKeys.BOXES: bbox}
  32. def postprocess(self, inputs: Dict[str, Any]) -> Dict[str, Any]:
  33. return inputs