
    9i@                        S SK JrJrJrJr  S SK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Jr  S S	KJr  S S
KJrJr  S SKJr  S SKJr  \" 5       rS/r\R<                  " \R>                  \	R@                  S9 " S S\5      5       r!g)    )AnyDictOptionalUnionN)
transforms)	Pipelines)Model)NAFNetForImageDenoise)
OutputKeys)InputPipeline)	PIPELINES)ImageDenoisePreprocessor	LoadImage)Tasks)
get_loggerImageDenoisePipeline)module_namec                      ^  \ rS rSr SS\\\4   S\\   4U 4S jjjr	S\
S\\\4   4S jrS rS\\\4   S\\\4   4S	 jrS\\\4   S\\\4   4S
 jrSrU =r$ )r      modelpreprocessorc                 r  > [         TU ]  " SXS.UD6  U R                  R                  5         U R                  R                  U l        [
        R                  R                  5       (       a  [
        R                  " S5      U l	        O[
        R                  " S5      U l	        [        R                  S5        g)z
use `model` and `preprocessor` to create a cv image denoise pipeline for prediction
Args:
    model: model id on modelscope hub.
)r   r   cudacpuzload image denoise model doneN )super__init__r   evalconfigtorchr   is_availabledevice_deviceloggerinfo)selfr   r   kwargs	__class__s       n/var/www/html/land-doc-ocr/venv/lib/python3.13/site-packages/modelscope/pipelines/cv/image_denoise_pipeline.pyr   ImageDenoisePipeline.__init__   sy     	JuJ6J

jj''::""$$ <</DL <<.DL34    inputreturnc                     [         R                  " U5      n[        R                  " [        R                  " 5       /5      nU" U5      nSUR                  S5      R                  U R                  5      0nU$ )Nimgr   )r   convert_to_imgr   ComposeToTensor	unsqueezetor$   )r'   r-   r0   test_transformsresults        r*   
preprocessImageDenoisePipeline.preprocess-   s_    &&u-$,,j.A.A.C-DEc"q),,T\\:;r,   c                 *   [         R                  " U5      nUR                  SS  u  p4[        US-  S5      [        US-  S5      peSnX5-  XF-  p[	        U5       GH5  n
[	        U5       GH!  nX-  nX-  nXS-
  :  a  UOX<-
  nXS-
  :  a  U	OXM-
  nUS S 2S S 2[        SX-
  5      [        X-   U-   U5      2[        SX-
  5      [        X-   U-   U5      24   R                  5       n[        SX-
  5      S:  a  UOSn[        SX-
  5      S:  a  UOSn[        X-   U-   U5      U:  a  UU-   OUn[        X-   U-   U5      U:  a  UU-   OUnU R                  R                  U5      S   S S 2S S 2UU2UU24   US S 2S S 2XU-   2XU-   24'   GM$     GM8     U$ )Ni         r   outputs)	r!   
zeros_likeshapemaxrangemin
contiguousr   _inference_forward)r'   r-   outputihiw	crop_rows	crop_colsoverlapstep_hstep_wyxcrop_ycrop_xcrop_hcrop_wcrop_framesh_startw_starth_endw_ends                        r*   crop_process!ImageDenoisePipeline.crop_process4   s   !!%(RS!"29a0#bCi2C9"/y!A9%#$1}#4"+#$1}#4"+#Aq$'6+; %**-fo.G*L%M$'6+; %**-fo07/89;+=%=%= >
 ?Ijl  &)F,<%=%A'q%(F,<%=%A'q,/291:;=-?AC-D&(IK ,/291:;=-?AC-D&(IK  261N1N&2((12334a3:5=4A2B q!VVO3vo-. /) & "2 r,   c                     S nSnU" U R                   U5        [        R                  " 5          U R                  US   5      nS S S 5        SU0$ ! , (       d  f       SW0$ = f)Nc                 T    U(       a  U R                  5         g U R                  5         g N)trainr   )r   is_trains     r*   	set_phase/ImageDenoisePipeline.forward.<locals>.set_phaseY   s    

r,   Fr0   output_tensor)r   r!   no_gradrY   )r'   r-   r`   r_   rF   s        r*   forwardImageDenoisePipeline.forwardW   s`    	 $**h']]_&&uU|4F   (( _  ((s   A
A c                     US   R                  S5      S-  R                  5       R                  SSS5      R                  5       R	                  S5      n[
        R                  US S 2S S 2S S S24   0$ )Nrb   r      r<      uint8)squeezer   permutenumpyastyper   
OUTPUT_IMG)r'   r-   
output_imgs      r*   postprocess ImageDenoisePipeline.postprocessf   si    O,44Q7#=BBDLLq!UWVVG_ 	%%z!Q"*'=>>r,   )r$   r    r]   )__name__
__module____qualname____firstlineno__r   r
   strr   r   r   r   r   r   r8   rY   rd   rq   __static_attributes____classcell__)r)   s   @r*   r   r      s     EI53S895'(@A5 5& $sCx. !F)T#s(^ )S#X )?c3h ?DcN ? ?r,   )"typingr   r   r   r   r!   torchvisionr   modelscope.metainfor   modelscope.modelsr	   "modelscope.models.cv.image_denoiser
   modelscope.outputsr   modelscope.pipelines.baser   r   modelscope.pipelines.builderr   modelscope.preprocessorsr   r   modelscope.utils.constantr   modelscope.utils.loggerr   r%   __all__register_moduleimage_denoisingimage_denoiser   r   r,   r*   <module>r      sw    - -  " ) # D ) 5 2 H + .	!
" 	y'>'>@Q?8 Q?@Q?r,   