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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)	Pipelines)MaskDINOSwinModelget_maskdino_ins_seg_result)InputPipeline)	PIPELINES)	LoadImage)Tasks)
get_logger)module_namec                       s   e Zd Z	ddeeef def fddZdd Zde	d	e
eef f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 )$MaskDINOInstanceSegmentationPipelineNmodelpreprocessorc                    s&   t  jd||d| | j  dS )zuse `model` and `preprocessor` to create a MaskDINO instance segmentation
        pipeline for prediction

        Args:
            model (MaskDINOSwinModel | str): a model instance
            preprocessor (None): a preprocessor instance
        )r   r   N )super__init__r   eval)selfr   r   kwargs	__class__r   s/home/ubuntu/.local/lib/python3.10/site-packages/modelscope/pipelines/cv/maskdino_instance_segmentation_pipeline.pyr      s   z-MaskDINOInstanceSegmentationPipeline.__init__c                 C   s   ||}}|d }|t || }||k r||| }	}
n|| |}	}
t|	|
|kr;|d t|	|
 }|	| }	|
| }
t|
d }
t|	d }	|	|
fS )Ng      ?g      ?)minmaxint)r   oldholdwshort_edge_lengthmax_sizehwsizescalenewhnewwr   r   r   get_preprocess_shape&   s   
z9MaskDINOInstanceSegmentationPipeline.get_preprocess_shapeinputreturnc           
      C   s~   t |}|jd d \}}| ||dd\}}tt||ft g}||}i }||d< ||d< ||d< d|gi}	|	S )N   i   i5  heightwidthimagebatched_inputs)r   convert_to_imgr%   r)   TComposeResizeToTensor)
r   r*   r/   r$   r#   new_hnew_wtest_transformsdataset_dictresultr   r   r   
preprocess6   s   

z/MaskDINOInstanceSegmentationPipeline.preprocessc                 K   s8   t   | |}W d    |S 1 sw   Y  |S N)torchno_gradr   )r   r*   forward_paramsoutputr   r   r   forwardF   s   

z,MaskDINOInstanceSegmentationPipeline.forwardinputsc                 C   s"   t |d d d | jjjd}|S )Neval_resultr   	instances)class_names)r   r   classes)r   rB   r:   r   r   r   postprocessL   s
   z0MaskDINOInstanceSegmentationPipeline.postprocessr<   )__name__
__module____qualname__r   r   strr   r   r)   r	   r   r   r;   rA   rG   __classcell__r   r   r   r   r      s    


*r   )typingr   r   r   r   r=   torchvision.transforms
transformsr2   modelscope.metainfor   0modelscope.models.cv.image_instance_segmentationr   r   modelscope.pipelines.baser	   r
   modelscope.pipelines.builderr   modelscope.preprocessorsr   modelscope.utils.constantr   modelscope.utils.loggerr   loggerregister_moduleimage_segmentationmaskdino_instance_segmentationr   r   r   r   r   <module>   s    