o
    *j@                     @   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   Zis_availableZdevice_deviceloggerinfo)selfr   r   kwargs	__class__r   o/var/www/html/Deteccion_Ine/venv/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   Zconvert_to_imgr   ZComposeZToTensorZ	unsqueezetor   )r!   r&   r(   Z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   Zoutputs)	r   Z
zeros_likeshapemaxrangemin
contiguousr   Z_inference_forward)r!   r&   outputZihiwZ	crop_rowsZ	crop_colsZoverlapZstep_hZstep_wyxZcrop_yZcrop_xZcrop_hZcrop_wZcrop_framesZh_startZw_startZh_endZ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   Zno_gradr8   )r!   r&   r<   r;   r4   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 )Nr=   r      r-      Zuint8)Zsqueezer   ZpermutenumpyZastyper
   Z
OUTPUT_IMG)r!   r&   Z
output_imgr   r   r%   postprocessf   s   
"z ImageDenoisePipeline.postprocessr9   )__name__
__module____qualname__r   r	   strr   r   r   r   r   r   r+   r8   r>   rC   __classcell__r   r   r#   r%   r      s    
"#*)"typingr   r   r   r   r   Ztorchvisionr   Zmodelscope.metainfor   Zmodelscope.modelsr   Z"modelscope.models.cv.image_denoiser	   Zmodelscope.outputsr
   Zmodelscope.pipelines.baser   r   Zmodelscope.pipelines.builderr   Zmodelscope.preprocessorsr   r   Zmodelscope.utils.constantr   Zmodelscope.utils.loggerr   r   __all__Zregister_moduleZimage_denoisingZimage_denoiser   r   r   r   r%   <module>   s$   