
    9i5                     f   S SK r S SKJrJrJr  S SKrS SKrS SKrS SKJ	r	  S SKJ
r
Jr  S SKJr  S SKJr  S SKJr  S SKJr  S S	KJr  S
SKJr  S
SKJr  \R4                  " \R6                  \R8                  5       " S S5      5       rS\S\
R                  4S jr\R4                  " \R6                  \R>                  S9 " S S\5      5       r \R4                  " \R6                  \RB                  S9 " S S\5      5       r"\R4                  " \R6                  \RF                  S9 " S S\5      5       r$\R4                  " \R6                  \RJ                  S9 " S S\5      5       r&\R4                  " \R6                  \RN                  S9 " S S\5      5       r(\R4                  " \R6                  \RR                  S9 " S S\5      5       r*\R4                  " \R6                  \RV                  S9 " S S \5      5       r,\R4                  " \R6                  \RZ                  S9 " S! S"\5      5       r.g)#    N)AnyDictUnion)ndarray)ImageImageOps)File)Preprocessors)	InputKeys)Fields)type_assert   )Preprocessor)PREPROCESSORSc                   z    \ rS rSrSrSS jrS\\\\\4   4   4S jr	S r
\S\4S j5       r\S\4S	 j5       rS
rg)	LoadImage   a  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.
c                 :    UR                  5       U l        X l        g )N)uppermodebackend)selfr   r   s      ^/var/www/html/land-doc-ocr/venv/lib/python3.13/site-packages/modelscope/preprocessors/image.py__init__LoadImage.__init__   s    JJL	    inputc                 "   [        U[        5      (       a  US   nOUnU R                  S:X  a  [        R                  " U5      nUR                  U5       n[        R                  " U[        R                  5      nU R                  S:X  a&  [        R                  " U[        R                  U5        UR                  S   UR                  S   UR                  S   pnXgU4n	SSS5        OU R                  S:X  a  [        R                  " U5      n
[        R                  " U
5       n[         R"                  " U5      n[$        R&                  " U5      nUR)                  U R                  5      nSSS5        WR*                  S   UR*                  S   S	4n	O[-        S
U R                   35      eUWW	SS.n[        U[        5      (       a#  UR/                  5       nUR1                  U5        UnU$ ! , (       d  f       NO= f! , (       d  f       N= f)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      Npillow   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__LoadImage.__call__#   s    eT"" %j 1 %<<5 ''(9:G&&'89Xjj3+;+;<99%LLc&7&7=&)iilCIIaL#))A,e"51	 :9 \\X%II/0E E"fjj(--c2kk$)), # !chhqk15I ''+||n6 7 7 *"	
 eT""

IW%G= :9 #"s   BG/&AH /
G= 
Hc                 R    U R                   R                   SU R                   S3nU$ )Nz(mode=))	__class____name__r   )r   repr_strs     r   __repr__LoadImage.__repr__R   s(    nn--.j1Er   returnc                    [        U [        5      (       a!  [        R                  " [	        U 5      5      nU$ [        U [
        R                  R                  5      (       a'  [        R                  " U R                  S5      5      nU$ [        U [        R                  5      (       aO  [        U R                  5      S:X  a%  [        R                  " U [        R                  5      n U S S 2S S 2S S S24   nU$ [        U [        5      (       aH  U R                  [         R"                  S 5      nU(       a  [        R                  " [	        U5      5      nU$ [%        S['        U 5       35      e)Nr!   r"   9input should be either str, PIL.Image, np.array, but got )r(   strnparray
load_imagePILr   r6   r   lenr0   r    r.   COLOR_GRAY2BGRr   getr   IMAGEr8   typer   r%   s     r   convert_to_ndarrayLoadImage.convert_to_ndarrayV   s   eS!!((:e,-C 
 syy//((5==/0C 
 rzz**5;;1$UC,>,>?1dd
#C 
 t$$))IOOT2Chhz#/ 
  226u+@ A Ar   c                    [        U [        5      (       a  [        U 5      nU$ [        U [        R                  R                  5      (       a  U R                  S5      nU$ [        U [        R                  5      (       a  [        U R                  5      S:X  a%  [        R                  " U [        R                  5      nU S S 2S S 2S S S24   n[        R                  " UR                  S5      5      R                  S5      nU$ [        U [        5      (       a4  U R!                  ["        R$                  S 5      nU(       a  [        U5      nU$ ['        S[)        U 5       35      e)Nr!   r"   rP   uint8rQ   )r(   rR   rU   rV   r   r6   rS   r   rW   r0   r    r.   rX   	fromarrayastyper   rY   r   rZ   r8   r[   r\   s     r   convert_to_imgLoadImage.convert_to_imgi   s   eS!!U#C 
 syy//--&C 
 rzz**5;;1$ll5#*<*<=1dd
#C//#**W"56>>uEC 
 t$$))IOOT2C o 
  226u+@ A Ar   )r   r   N)rgbr#   )rJ   
__module____qualname____firstlineno____doc__r   r   rR   r   rE   rL   staticmethodr   r]   rc   __static_attributes__ r   r   r   r      sf    -eCc3h$78 -^ W  $   r   r   r;   rN   c                 ,    [        5       nU" U 5      S   $ )zssimple 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   rU   rU   ~   s     [F#$U++r   )module_namec                   t   ^  \ rS rSrSU 4S jjr\" \\5      S\R                  S\	\
\4   4S j5       rSrU =r$ )"ObjectDetectionTinynasPreprocessor   c                 2   > [         TU ]  " S0 UD6  Xl        g)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.
Nrl   )superr   size_divisible)r   ru   kwargsrI   s      r   r   +ObjectDetectionTinynasPreprocessor.__init__   s     	"6",r   datarN   c                 h   UR                  [        R                  5      nUR                  S5      nUR                  nU R
                  S:  ar  SSKnU R
                  n[        U5      n[        UR                  US   U-  5      U-  5      US'   [        UR                  US   U-  5      U-  5      US'   [        U5      n[        R                  " U5      R                  [        R                  5      nX&SS2SUR                  S   2SUR                  S   24'   [        R                  " US5      nSU0$ )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%   )rb   rS   float32	transposer0   ru   mathlistintceiltuplezerosexpand_dims)r   rx   imager0   r|   stridepad_imgs          r   rE   +ObjectDetectionTinynasPreprocessor.__call__   s    BJJ'	*"((FKE499U1X%67&@AE!H499U1X%67&@AE!H%LE((5/((47<?EKKN?OU[[^O34..!,wr   )ru   )    )rJ   rf   rg   rh   r   r   objectrS   r   r   rR   rE   rk   __classcell__rI   s   @r   rq   rq      s>    -"   RZZ  Dg,>   ! r   rq   c                   n   ^  \ rS rSrS\4U 4S jjr\" \\5      S\\\	4   S\\\	4   4S j5       r
SrU =r$ )%ImageColorEnhanceFinetunePreprocessor   	model_dirc                 2   > [         TU ]  " U0 UD6  Xl        g)zUpreprocess the data from the `model_dir` path

Args:
    model_dir (str): model path
Nrt   r   r   r   r   argsrv   rI   s       r   r   .ImageColorEnhanceFinetunePreprocessor.__init__   s     	$)&)'r   rx   rN   c                     U$ )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
rl   r   rx   s     r   rE   .ImageColorEnhanceFinetunePreprocessor.__call__   s	      r   r   )rJ   rf   rg   rh   rR   r   r   r   r   r   rE   rk   r   r   s   @r   r   r      sH    (# (  T#s(^ S#X  !r   r   c                   V   ^  \ rS rSrS\4U 4S jjrS\\\4   S\\\4   4S jrSr	U =r
$ )ImageDenoisePreprocessor   r   c                 Z   > [         TU ]  " U0 UD6  Xl        SSKJn  U" SS/S9/U l        g(

Args:
    model_dir (str): model path
r   )Filterr   target)reserved_keysNrt   r   r   commonr   _transformsr   r   r   rv   r   rI   s        r   r   !ImageDenoisePreprocessor.__init__   6     	$)&)'" #'81DEFr   rx   rN   c                 <    U R                    H  nU" U5      nM     U$ znprocess the raw input data

Args:
    data Dict[str, Any]

Returns:
    Dict[str, Any]: the preprocessed data
r   r   rx   ts      r   rE   !ImageDenoisePreprocessor.__call__   $     !!AT7D " r   r   r   rJ   rf   rg   rh   rR   r   r   r   rE   rk   r   r   s   @r   r   r      9    G# GT#s(^ S#X  r   r   c                   V   ^  \ rS rSrS\4U 4S jjrS\\\4   S\\\4   4S jrSr	U =r
$ )ImageDeblurPreprocessor   r   c                 Z   > [         TU ]  " U0 UD6  Xl        SSKJn  U" SS/S9/U l        gr   r   r   s        r   r    ImageDeblurPreprocessor.__init__   r   r   rx   rN   c                 <    U R                    H  nU" U5      nM     U$ r   r   r   s      r   rE    ImageDeblurPreprocessor.__call__  r   r   r   r   r   s   @r   r   r      r   r   r   c                   V   ^  \ rS rSrS\4U 4S jjrS\\\4   S\\\4   4S jrSr	U =r
$ )$ImagePortraitEnhancementPreprocessori  r   c                 2   > [         TU ]  " U0 UD6  Xl        gr   Nr   r   s       r   r   -ImagePortraitEnhancementPreprocessor.__init__!       	$)&)'r   rx   rN   c                     U$ r   rl   r   s     r   rE   -ImagePortraitEnhancementPreprocessor.__call__*  	     r   r   r   r   s   @r   r   r     s7    
(# (	T#s(^ 	S#X 	 	r   r   c                   d   ^  \ rS rSrU 4S jrS rS r\" \\5      S\	\
\4   4S j5       rSrU =r$ )%ImageInstanceSegmentationPreprocessori6  c                   > [         TU ]  " U0 UD6  UR                  SS5      U l        UR                  SS5      U l        UR                  SS5      U l        / U l        / U l        SSKJ	n  U R                  bg  [        U R                  [        5      (       a  U R                  /U l        U R                   H&  nU" U5      nU R                  R                  U5        M(     U R
                  bh  [        U R
                  [        5      (       a  U R
                  /U l        U R
                   H&  nU" U5      nU R                  R                  U5        M(     gg)zKimage instance segmentation preprocessor in the fine-tune scenario
        trainingTtrainNvalr   )build_preprocess_transform)rt   r   popr   preprocessor_train_cfgpreprocessor_test_cfgtrain_transformstest_transforms9modelscope.models.cv.image_instance_segmentation.datasetsr   r(   r)   append)r   r   rv   r   cfg	transformrI   s         r   r   .ImageInstanceSegmentationPreprocessor.__init__;  s)    	$)&)

:t4&,jj$&?#%+ZZt%<" "!	' &&2$55t<</3/J/J.K+226s;	%%,,Y7 3 %%1$44d;;.2.H.H-I*116s;	$$++I6 2 2r   c                     SU l         g NTr   r   s    r   r   +ImageInstanceSegmentationPreprocessor.trainY      r   c                     SU l         g NFr   r   s    r   eval*ImageInstanceSegmentationPreprocessor.eval]      r   rC   c                     U R                   (       a  U R                  nOU R                  nU H  nU" U5      nUb  M    g   U$ 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   rC   
transformsr   s       r   rE   .ImageInstanceSegmentationPreprocessor.__call__a  sC     ==..J--JAjG  r   )r   r   r   r   r   )rJ   rf   rg   rh   r   r   r   r   r   r   rR   r   rE   rk   r   r   s   @r   r   r   6  s<    
7<  S#X  !r   r   c                   V   ^  \ rS rSrS\4U 4S jjrS\\\4   S\\\4   4S jrSr	U =r
$ )VideoSummarizationPreprocessori{  r   c                 2   > [         TU ]  " U0 UD6  Xl        gr   r   r   s       r   r   'VideoSummarizationPreprocessor.__init__  r   r   rx   rN   c                     U$ r   rl   r   s     r   rE   'VideoSummarizationPreprocessor.__call__  r   r   r   r   r   s   @r   r   r   {  s7    (# (	T#s(^ 	S#X 	 	r   r   c                   L   ^  \ rS rSrU 4S jrS rS rS\\\	4   4S jr
SrU =r$ )%ImageClassificationBypassPreprocessori  c                    > [         TU ]  " U0 UD6  UR                  SS5      U l        UR                  SS5      U l        UR                  SS5      U l        g)zKimage classification bypass preprocessor in the fine-tune scenario
        r   Tr   Nr   )rt   r   r   r   r   preprocessor_val_cfg)r   r   rv   rI   s      r   r   .ImageClassificationBypassPreprocessor.__init__  sO     	$)&)

:t4&,jj$&?#$*JJud$;!r   c                     SU l         g r   r   r   s    r   r   +ImageClassificationBypassPreprocessor.train  r   r   c                     SU l         g r   r   r   s    r   r   *ImageClassificationBypassPreprocessor.eval  r   r   rC   c                     gr   rl   )r   rC   s     r   rE   .ImageClassificationBypassPreprocessor.__call__  s     	r   )r   r   r   )rJ   rf   rg   rh   r   r   r   r   rR   r   rE   rk   r   r   s   @r   r   r     s+    
<	S#X 	 	r   r   )/r2   typingr   r   r   r    numpyrS   rV   r   r   r   modelscope.fileior	   modelscope.metainfor
   modelscope.pipeline_inputsr   modelscope.utils.constantr   modelscope.utils.type_assertr   baser   builderr   register_modulecvrU   r   rR   %object_detection_tinynas_preprocessorrq    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   rl   r   r   <module>r     s;   	 # # 
  
   " - 0 , 4  " vyy-*B*BCf f DfR,# ,%++ , 
II=NNP,  , P, ^ 
II=IIKL K> 
II=CCE| E> 
II=BBDl D> 
IIEEG< G. 
IIFFH?L ?H?D 
II=IIK\ K. 
IIFFHL Hr   