o
    ॵi@                     @   s   d dl mZmZmZmZ d dl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mZ d d	lmZ d d
lmZmZ d dlmZ d dlmZ e ZdgZejeje	j dG dd deZ!dS )    )AnyDictOptionalUnionN)
transforms)	Pipelines)Model)NAFNetForImageDenoise)
OutputKeys)InputPipeline)	PIPELINES)ImageDenoisePreprocessor	LoadImage)Tasks)
get_loggerImageDenoisePipeline)module_namec                       s   e Zd Z	ddeeef dee f fddZde	de
eef fdd	Zd
d Zde
eef de
eef fddZde
eef de
eef fddZ  ZS )r   Nmodelpreprocessorc                    s^   t  jd||d| | j  | jj| _tj r"td| _	ntd| _	t
d dS )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__r   b/home/ubuntu/.local/lib/python3.10/site-packages/modelscope/pipelines/cv/image_denoise_pipeline.pyr      s   	


zImageDenoisePipeline.__init__inputreturnc                 C   s<   t |}tt g}||}d|d| ji}|S )Nimgr   )r   convert_to_imgr   ComposeToTensor	unsqueezetor    )r#   r(   r*   test_transformsresultr   r   r'   
preprocess-   s
   
zImageDenoisePipeline.preprocessc              
   C   s  t |}|jdd  \}}t|d dt|d d}}d}|| || }}	t|D ]}
t|D ]}||
 }|	| }|
|d k rD|n|| }||d k rP|	n|| }|d d d d td|| t|| | |td|| t|| | |f  }td|| dkr|nd}td|| dkr|nd}t|| | ||k r|| n|}t|| | ||k r|| n|}| j|d d d d d ||||f |d d d d ||| ||| f< q2q,|S )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_endr   r   r'   crop_process4   sv   

z!ImageDenoisePipeline.crop_processc                 C   s\   dd }d}|| j | t  | |d }W d    d|iS 1 s%w   Y  d|iS )Nc                 S   s   |r|    d S |   d S N)trainr   )r   is_trainr   r   r'   	set_phaseY   s   z/ImageDenoisePipeline.forward.<locals>.set_phaseFr*   output_tensor)r   r   no_gradrQ   )r#   r(   rU   rT   r>   r   r   r'   forwardW   s   

zImageDenoisePipeline.forwardc                 C   sL   |d  dd  ddd d}tj|d d d d d d df iS )NrV   r      r4      uint8)squeezer   permutenumpyastyper
   
OUTPUT_IMG)r#   r(   
output_imgr   r   r'   postprocessf   s   
"z ImageDenoisePipeline.postprocessrR   )__name__
__module____qualname__r   r	   strr   r   r   r   r   r   r2   rQ   rX   rc   __classcell__r   r   r%   r'   r      s    
"#*)"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   r'   <module>   s$   