o
    ॵiX
                     @   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 d dlmZ d dlmZ e Zejeje	jdG dd deZdS )    )AnyDictOptionalUnionN)
transforms)	Pipelines)Model)RRDBImageDebanding)
OutputKeys)InputPipeline)	PIPELINES)	LoadImage)Tasks)
get_logger)module_namec                       s   e Zd Zdeeef f fddZdedeee	f fddZ
e deee	f deee	f f fdd	Zd
eee	f deee	f fddZ  ZS )ImageDebandingPipelinemodelc                    sJ   t  jdd|i| | j  tj rtd| _dS td| _dS )a  The inference pipeline for image debanding.

        Args:
            model (`str` or `Model` or module instance): A model instance or a model local dir
                or a model id in the model hub.
            preprocessor (`Preprocessor`, `optional`): A Preprocessor instance.
            kwargs (dict, `optional`):
                Extra kwargs passed into the preprocessor's constructor.

        Example:
            >>> import cv2
            >>> from modelscope.outputs import OutputKeys
            >>> from modelscope.pipelines import pipeline
            >>> from modelscope.utils.constant import Tasks
            >>> debanding = pipeline(Tasks.image_debanding, model='damo/cv_rrdb_image-debanding')
                result = debanding(
                    'https://modelscope.oss-cn-beijing.aliyuncs.com/test/images/debanding.png')
            >>> cv2.imwrite('result.png', result[OutputKeys.OUTPUT_IMG])
        r   cudacpuN )	super__init__r   evaltorchr   is_availabledevice_device)selfr   kwargs	__class__r   d/home/ubuntu/.local/lib/python3.10/site-packages/modelscope/pipelines/cv/image_debanding_pipeline.pyr      s
   

zImageDebandingPipeline.__init__inputreturnc                 C   s<   t |}tt g}||}d|d| ji}|S )Nsrcr   )r   convert_to_imgr   ComposeToTensor	unsqueezetor   )r   r#   imgtest_transformsresultr   r   r"   
preprocess4   s
   
z!ImageDebandingPipeline.preprocessc                    s   t  |S )N)r   forward)r   r#   r    r   r"   r/   ;   s   zImageDebandingPipeline.forwardinputsc                 C   sN   |d  dd tj ddd d d d d d d df }tj|iS )Noutputsr   g     o@      )	squeezetyper   uint8r   permutenumpyr
   
OUTPUT_IMG)r   r0   
output_imgr   r   r"   postprocess?   s   (
z"ImageDebandingPipeline.postprocess)__name__
__module____qualname__r   r	   strr   r   r   r   r.   r   no_gradr/   r<   __classcell__r   r   r    r"   r      s    (*r   )typingr   r   r   r   r   torchvisionr   modelscope.metainfor   modelscope.models.baser   $modelscope.models.cv.image_debandingr	   modelscope.outputsr
   modelscope.pipelines.baser   r   modelscope.pipelines.builderr   modelscope.preprocessorsr   modelscope.utils.constantr   modelscope.utils.loggerr   loggerregister_moduleimage_debandingr   r   r   r   r"   <module>   s"   