
    vj5                         d dl Z d dlmZmZmZ d dlZd dlZd dlZd dlm	Z	 d dlm
Z
mZ d dlmZ d dlmZ d dlmZ d dlmZ d d	lmZ d
dlmZ d
dlmZ  ej        ej        ej                   G d d                      Zdede
j
        fdZ ej        ej        ej                   G d de                      Z  ej        ej        ej!                   G d de                      Z" ej        ej        ej#                   G d de                      Z$ ej        ej        ej%                   G d de                      Z& ej        ej        ej'                   G d de                      Z( ej        ej        ej)                   G d de                      Z* ej        ej        ej+                   G d d e                      Z, ej        ej        ej-                   G d! d"e                      Z.dS )#    N)AnyDictUnion)ndarray)ImageImageOps)File)Preprocessors)	InputKeys)Fields)type_assert   )Preprocessor)PREPROCESSORSc                       e Zd ZdZddZdeeeeef         f         fdZd Z	e
defd	            Ze
defd
            ZdS )	LoadImagea  Load an image from file or url.
    Added or updated keys are "filename", "img", "img_shape",
    "ori_shape" (same as `img_shape`), "pad_shape" (same as `img_shape`),
    "scale_factor" (1.0) and "img_norm_cfg" (means=0 and stds=1).
    Args:
        mode (str): See :ref:`PIL.Mode<https://pillow.readthedocs.io/en/stable/handbook/concepts.html#modes>`.
        backend (str): Type of loading image. Should be: cv2 or pillow. Default is pillow.
    rgbpillowc                 F    |                                 | _        || _        d S )N)uppermodebackend)selfr   r   s      n/lsinfo/ai/hellotax_ai/data_center/backend/venv/lib/python3.11/site-packages/modelscope/preprocessors/image.py__init__zLoadImage.__init__   s    JJLL	    inputc                    t          |t                    r	|d         }n|}| j        dk    rt          j        |          }|                    |          5 }t          j        |t          j                  }| j	        dk    r t          j
        |t          j        |           |j        d         |j        d         |j        d         }}}|||f}	ddd           n# 1 swxY w Y   n| j        dk    rt          j        |          }
t          j        |
          5 }t!          j        |          }t%          j        |          }|                    | j	                  }ddd           n# 1 swxY w Y   |j        d         |j        d         d	f}	nt-          d
| j                   |||	dd}t          |t                    r+|                                }|                    |           |}|S )zCall functions to load image and get image meta information.
        Args:
            input (str or dict): input image path or input dict with
                a key `filename`.
        Returns:
            dict: The dict contains loaded image.
        filenamecv2RGBr   r      Nr      z/backend should be either cv2 or pillow,but got img)r   r$   	img_shape	img_field)
isinstancedictr   r	   _get_storageas_local_pathr    imreadIMREAD_COLORr   cvtColorCOLOR_BGR2RGBshapereadioBytesIOr   openr   exif_transposeconvertsize	TypeErrorcopyupdate)r   r   image_path_or_urlstorageimg_pathr$   img_himg_wimg_cr%   bytesinfileresults	input_rets                 r   __call__zLoadImage.__call__#   sc    eT"" 	& %j 1 %<5  '(9::G&&'899 2Xj3+;<<9%%Lc&7===&)ilCIaL#)A,eu"E51	2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 \X%%I/00E E"" -fj((-c22kk$),,- - - - - - - - - - - - - - - !chqk15II 6'+|6 6 7 7 7 *"	
 
 eT"" 	 

IW%%%Gs&   A7CCCAE&&E*-E*c                 4    | j         j         d| j         d}|S )Nz(mode=))	__class____name__r   )r   repr_strs     r   __repr__zLoadImage.__repr__R   s$    n-EEEEEr   returnc                    t          | t                    r#t          j        t	          |                     }n#t          | t
          j        j                  r(t          j        |                     d                    }nt          | t          j                  rJt          | j
                  dk    rt          j        | t          j                  } | d d d d d d df         }nxt          | t                    rD|                     t           j        d           }|r!t          j        t	          |                    }nt%          dt'          |                      |S )Nr!   r"   9input should be either str, PIL.Image, np.array, but got )r'   strnparray
load_imagePILr   r5   r   lenr/   r    r-   COLOR_GRAY2BGRr   getr   IMAGEr7   typer   r$   s     r   convert_to_ndarrayzLoadImage.convert_to_ndarrayV   s;   eS!! 	A(:e,,--CCsy// 	A(5==//00CCrz** 
	A5;1$$UC,>??111ddd
#CCt$$ 	A))IOT22C 0hz#// @26u++@ @ A A A
r   c                    t          | t                    rt          |           }n:t          | t          j        j                  r|                     d          }nt          | t          j                  rt          | j	                  dk    rt          j        | t          j                  }| d d d d d d df         }t	          j        |                    d                                        d          }nft          | t                    r2|                     t"          j        d           }|rt          |          }nt'          dt)          |                      |S )Nr!   r"   rM   uint8rN   )r'   rO   rR   rS   r   r5   rP   r   rT   r/   r    r-   rU   	fromarrayastyper   rV   r   rW   r7   rX   rY   s     r   convert_to_imgzLoadImage.convert_to_imgi   sF   eS!! 	AU##CCsy// 	A--&&CCrz** 	A5;1$$l5#*<==111ddd
#C/#**W"5"566>>uEECCt$$ 	A))IOT22C & oo @26u++@ @ A A A
r   N)r   r   )rH   
__module____qualname____doc__r   r   rO   r   rD   rJ   staticmethodr   rZ   r_    r   r   r   r      s            -eCc3h$78 - - - -^   W    \$     \  r   r   r:   rK   c                 @    t                      } ||           d         S )z simple interface to load an image from file or url

    Args:
        image_path_or_url (str): image file path or http url
    r$   )r   )r:   loaders     r   rR   rR   ~   s#     [[F6#$$U++r   )module_namec                   n     e Zd Zd fd	Z eee          dej        dee	ef         fd            Z
 xZS )"ObjectDetectionTinynasPreprocessor    c                 H     t                      j        di | || _        dS )a  Preprocess the image.

        What this preprocessor will do:
        1. Transpose the image matrix to make the channel the first dim.
        2. If the size_divisible is gt than 0, it will be used to pad the image.
        3. Expand an extra image dim as dim 0.

        Args:
            size_divisible (int): The number will be used as a length unit to pad the image.
                Formula: int(math.ceil(shape / size_divisible) * size_divisible)
                Default 32.
        Nrd   )superr   size_divisible)r   rm   kwargsrG   s      r   r   z+ObjectDetectionTinynasPreprocessor.__init__   s0     	""6""",r   datarK   c                    |                     t          j                  }|                    d          }|j        }| j        dk    rddl}| j        }t          |          }t          |	                    |d         |z            |z            |d<   t          |	                    |d         |z            |z            |d<   t          |          }t          j        |                               t          j                  }||ddd|j        d         d|j        d         f<   t          j        |d          }d|iS )zPreprocess the image.

        Args:
            data: The input image with 3 dimensions.

        Returns:
            The processed data in dict.
            {'img': np.ndarray}

        )r"   r   r   r   Nr   r"   r$   )r^   rP   float32	transposer/   rm   mathlistintceiltuplezerosexpand_dims)r   ro   imager/   rs   stridepad_imgs          r   rD   z+ObjectDetectionTinynasPreprocessor.__call__   s    BJ''	**""KKK(FKKE499U1X%677&@AAE!H499U1X%677&@AAE!H%LLE(5//((447<?EKN?OU[^O34.!,,wr   )rj   )rH   r`   ra   r   r   objectrP   r   r   rO   rD   __classcell__rG   s   @r   ri   ri      s        - - - - - -" [   RZ  Dg,>       !          r   ri   c                   x     e Zd Zdef fdZ eee          deeef         deeef         fd            Z	 xZ
S )%ImageColorEnhanceFinetunePreprocessor	model_dirc                 H     t                      j        |i | || _        dS )zmpreprocess the data from the `model_dir` path

        Args:
            model_dir (str): model path
        Nrl   r   r   r   r   argsrn   rG   s       r   r   z.ImageColorEnhanceFinetunePreprocessor.__init__   s,     	$)&)))'r   ro   rK   c                     |S )a  process the raw input data

        Args:
            data (tuple): [sentence1, sentence2]
                sentence1 (str): a sentence
                    Example:
                        'you are so handsome.'
                sentence2 (str): a sentence
                    Example:
                        'you are so beautiful.'
        Returns:
            Dict[str, Any]: the preprocessed data
        rd   r   ro   s     r   rD   z.ImageColorEnhanceFinetunePreprocessor.__call__   s	      r   )rH   r`   ra   rO   r   r   r}   r   r   rD   r~   r   s   @r   r   r      s        (# ( ( ( ( ( ( [  T#s(^ S#X    !     r   r   c                   T     e Zd Zdef fdZdeeef         deeef         fdZ xZS )ImageDenoisePreprocessorr   c                 |     t                      j        |i | || _        ddlm}  |ddg          g| _        dS @

        Args:
            model_dir (str): model path
        r   )Filterr   target)reserved_keysNrl   r   r   commonr   _transformsr   r   r   rn   r   rG   s        r   r   z!ImageDenoisePreprocessor.__init__   _     	$)&)))'"""""" #F'81DEEEFr   ro   rK   c                 0    | j         D ]} ||          }|S zprocess the raw input data

        Args:
            data Dict[str, Any]

        Returns:
            Dict[str, Any]: the preprocessed data
        r   r   ro   ts      r   rD   z!ImageDenoisePreprocessor.__call__   *     ! 	 	A1T77DDr   	rH   r`   ra   rO   r   r   r   rD   r~   r   s   @r   r   r      }        G# G G G G G GT#s(^ S#X        r   r   c                   T     e Zd Zdef fdZdeeef         deeef         fdZ xZS )ImageDeblurPreprocessorr   c                 |     t                      j        |i | || _        ddlm}  |ddg          g| _        dS r   r   r   s        r   r   z ImageDeblurPreprocessor.__init__   r   r   ro   rK   c                 0    | j         D ]} ||          }|S r   r   r   s      r   rD   z ImageDeblurPreprocessor.__call__  r   r   r   r   s   @r   r   r      r   r   r   c                   T     e Zd Zdef fdZdeeef         deeef         fdZ xZS )$ImagePortraitEnhancementPreprocessorr   c                 H     t                      j        |i | || _        dS r   Nr   r   s       r   r   z-ImagePortraitEnhancementPreprocessor.__init__!  ,     	$)&)))'r   ro   rK   c                     |S r   rd   r   s     r   rD   z-ImagePortraitEnhancementPreprocessor.__call__*  	     r   r   r   s   @r   r   r     sv        
(# ( ( ( ( ( (	T#s(^ 	S#X 	 	 	 	 	 	 	 	r   r   c                   j     e Zd Z fdZd Zd Z eee          dee	e
f         fd            Z xZS )%ImageInstanceSegmentationPreprocessorc                 |    t                      j        |i | |                    dd          | _        |                    dd          | _        |                    dd          | _        g | _        g | _        ddlm	} | j        Vt          | j        t                    r| j        g| _        | j        D ]'} ||          }| j                            |           (| j        Vt          | j        t                    r| j        g| _        | j        D ])} ||          }| j                            |           (dS dS )zKimage instance segmentation preprocessor in the fine-tune scenario
        trainingTtrainNvalr   )build_preprocess_transform)rl   r   popr   preprocessor_train_cfgpreprocessor_test_cfgtrain_transformstest_transforms9modelscope.models.cv.image_instance_segmentation.datasetsr   r'   r(   append)r   r   rn   r   cfg	transformrG   s         r   r   z.ImageInstanceSegmentationPreprocessor.__init__;  sv    	$)&)))

:t44&,jj$&?&?#%+ZZt%<%<" "!	' 	' 	' 	' 	' 	' &2$5t<< L/3/J.K+2 8 866s;;	%,,Y7777%1$4d;; J.2.H-I*1 7 766s;;	$++I6666 217 7r   c                     d| _         d S NTr   r   s    r   r   z+ImageInstanceSegmentationPreprocessor.trainY      r   c                     d| _         d S NFr   r   s    r   evalz*ImageInstanceSegmentationPreprocessor.eval]      r   rB   c                 \    | j         r| j        }n| j        }|D ]} ||          }| dS |S zprocess the raw input data

        Args:
            results (dict): Result dict from loading pipeline.

        Returns:
            Dict[str, Any] | None: the preprocessed data
        N)r   r   r   )r   rB   
transformsr   s       r   rD   z.ImageInstanceSegmentationPreprocessor.__call__a  sT     = 	..JJ-J 	 	AajjGtt  r   )rH   r`   ra   r   r   r   r   r}   r   rO   r   rD   r~   r   s   @r   r   r   6  s        
7 7 7 7 7<     [  S#X    !     r   r   c                   T     e Zd Zdef fdZdeeef         deeef         fdZ xZS )VideoSummarizationPreprocessorr   c                 H     t                      j        |i | || _        dS r   r   r   s       r   r   z'VideoSummarizationPreprocessor.__init__  r   r   ro   rK   c                     |S r   rd   r   s     r   rD   z'VideoSummarizationPreprocessor.__call__  r   r   r   r   s   @r   r   r   {  sv        (# ( ( ( ( ( (	T#s(^ 	S#X 	 	 	 	 	 	 	 	r   r   c                   F     e Zd Z fdZd Zd Zdeeef         fdZ	 xZ
S )%ImageClassificationBypassPreprocessorc                      t                      j        |i | |                    dd          | _        |                    dd          | _        |                    dd          | _        dS )zKimage classification bypass preprocessor in the fine-tune scenario
        r   Tr   Nr   )rl   r   r   r   r   preprocessor_val_cfg)r   r   rn   rG   s      r   r   z.ImageClassificationBypassPreprocessor.__init__  sh     	$)&)))

:t44&,jj$&?&?#$*JJud$;$;!!!r   c                     d| _         d S r   r   r   s    r   r   z+ImageClassificationBypassPreprocessor.train  r   r   c                     d| _         d S r   r   r   s    r   r   z*ImageClassificationBypassPreprocessor.eval  r   r   rB   c                     dS r   rd   )r   rB   s     r   rD   z.ImageClassificationBypassPreprocessor.__call__  s	     	r   )rH   r`   ra   r   r   r   r   rO   r   rD   r~   r   s   @r   r   r     sy        
< < < < <    	S#X 	 	 	 	 	 	 	 	r   r   )/r1   typingr   r   r   r    numpyrP   rS   r   r   r   modelscope.fileior	   modelscope.metainfor
   modelscope.pipeline_inputsr   modelscope.utils.constantr   modelscope.utils.type_assertr   baser   builderr   register_modulecvrR   r   rO   %object_detection_tinynas_preprocessorri    image_color_enhance_preprocessorr   image_denoise_preprocessorr   image_deblur_preprocessorr   'image_portrait_enhancement_preprocessorr   (image_instance_segmentation_preprocessorr    video_summarization_preprocessorr   (image_classification_bypass_preprocessorr   rd   r   r   <module>r      sX   				 # # # # # # # # # # 



     



               " " " " " " - - - - - - 0 0 0 0 0 0 , , , , , , 4 4 4 4 4 4       " " " " " " vy-*BCCf f f f f f f DCfR,# ,%+ , , , , 
I=NP P P,  ,  ,  ,  ,  ,  , P P, ^ 
I=IK K K    L  K K> 
I=CE E E    |  E E> 
I=BD D D    l  D D> 
IEG G G    <  G G. 
IFH H H? ? ? ? ?L ? ?H H?D 
I=IK K K    \  K K. 
IFH H H    L  H H  r   