ocr_recognition_pipeline.py 2.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  1. # Copyright (c) Alibaba, Inc. and its affiliates.
  2. from modelscope.metainfo import Pipelines
  3. from modelscope.models.cv.ocr_recognition import OCRRecognition
  4. from modelscope.outputs import OutputKeys
  5. from modelscope.pipelines.base import Input, Pipeline
  6. from modelscope.pipelines.builder import PIPELINES
  7. from modelscope.utils.constant import Tasks
  8. from modelscope.utils.logger import get_logger
  9. logger = get_logger()
  10. @PIPELINES.register_module(
  11. Tasks.ocr_recognition, module_name=Pipelines.ocr_recognition)
  12. class OCRRecognitionPipeline(Pipeline):
  13. """ OCR Recognition Pipeline.
  14. Example:
  15. ```python
  16. >>> from modelscope.pipelines import pipeline
  17. >>> ocr_recognition = pipeline('ocr-recognition', 'damo/cv_crnn_ocr-recognition-general_damo')
  18. >>> ocr_recognition("http://duguang-labelling.oss-cn-shanghai.aliyuncs.com"
  19. "/mass_img_tmp_20220922/ocr_recognition_handwritten.jpg")
  20. {'text': '电子元器件提供BOM配单'}
  21. ```
  22. """
  23. def __init__(self, model: str, **kwargs):
  24. """
  25. use `model` to create a ocr recognition pipeline for prediction
  26. Args:
  27. model: model id on modelscope hub or `OCRRecognition` Model.
  28. preprocessor: `OCRRecognitionPreprocessor`.
  29. """
  30. assert isinstance(model, str), 'model must be a single str'
  31. super().__init__(model=model, **kwargs)
  32. logger.info(f'loading model from dir {model}')
  33. self.ocr_recognizer = self.model.to(self.device)
  34. self.ocr_recognizer.eval()
  35. logger.info('loading model done')
  36. def __call__(self, input, **kwargs):
  37. """
  38. Recognize text sequence in the text image.
  39. Args:
  40. input (`Image`):
  41. The pipeline handles three types of images:
  42. - A string containing an HTTP link pointing to an image
  43. - A string containing a local path to an image
  44. - An image loaded in PIL or opencv directly
  45. The pipeline currently supports single image input.
  46. Return:
  47. A text sequence (string) of the input text image.
  48. """
  49. return super().__call__(input, **kwargs)
  50. def preprocess(self, inputs):
  51. outputs = self.preprocessor(inputs)
  52. return outputs
  53. def forward(self, inputs):
  54. outputs = self.ocr_recognizer(inputs['image'])
  55. return outputs
  56. def postprocess(self, inputs):
  57. outputs = {OutputKeys.TEXT: inputs['preds']}
  58. return outputs