o
    ॵi?                     @   s   d dl Z d dlmZmZmZmZ d dlZd dl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mZ d dlmZmZ d dlmZ d d	lmZmZmZ d d
lmZ d dlmZm Z m!Z! d dl"m#Z# e# Z$ej%e!j&ej'dG dd deZ(dS )    N)AnyDictOptionalUnion)Image)	Pipelines)Model)CascadeMaskRCNNSwinModelget_img_ins_seg_result)InputPipeline)	PIPELINES)%ImageInstanceSegmentationPreprocessorbuild_preprocessor
load_image)Config)Fields	ModelFileTasks)
get_logger)module_namec                       s   e Zd Z	ddeeef de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 )!ImageInstanceSegmentationPipelineNmodelpreprocessorc                    s   t  jd||d| |du r6t| jtsJ dtj tj	| jj
tj}t|}t|jtj| _n|| _| j  | j  dS )a  use `model` and `preprocessor` to create a image instance segmentation pipeline for prediction

        Args:
            model (CascadeMaskRCNNSwinModel | str): a model instance
            preprocessor (CascadeMaskRCNNSwinPreprocessor | None): a preprocessor instance
        )r   r   Nz,please check whether model config exists in  )super__init__
isinstancer   r   r   CONFIGURATIONospathjoin	model_dirr   	from_filer   r   r   cveval)selfr   r   kwargsconfig_pathcfg	__class__r   p/home/ubuntu/.local/lib/python3.10/site-packages/modelscope/pipelines/cv/image_instance_segmentation_pipeline.pyr      s   


z*ImageInstanceSegmentationPipeline.__init__c                 C   s   |S Nr   )r&   datar   r   r,   _collate_fn8   s   z-ImageInstanceSegmentationPipeline._collate_fninputreturnc              	   K   s  d }d }t |tr!|}tt|}|d d d d d d df }n;t |tjr>t|d}|d d d d d d df }nt |tjrSt|j	dkrRt
|t
j}n	tdt| ||j	|j	dgd|d d dd}| |}tj|d gd	d
|d< |d jg|d< |S )NRGB   z9input should be either str, PIL.Image, np.array, but got img )filenameann_fileclasses)r5   	img_shape	ori_shape
img_fields
img_prefiximg_infor   )dim	img_metas)r   strnparrayr   r   convertndarraylenshapecv2cvtColorCOLOR_GRAY2BGR	TypeErrortyper   torchstackr.   )r&   r0   preprocess_paramsr7   r5   resultr   r   r,   
preprocess<   s<   

z,ImageInstanceSegmentationPipeline.preprocessc                 K   s8   t   | |}W d    |S 1 sw   Y  |S r-   )rM   no_gradr   )r&   r0   forward_paramsoutputr   r   r,   forwarda   s   

z)ImageInstanceSegmentationPipeline.forwardinputsc                 C   s   t |d d | jjjd}|S )Neval_resultr   )img_seg_resultclass_names)r
   r   r9   )r&   rV   rP   r   r   r,   postprocessg   s
   
z-ImageInstanceSegmentationPipeline.postprocessr-   )__name__
__module____qualname__r   r	   rA   r   r   r   r/   r   r   r   rQ   rU   rZ   __classcell__r   r   r*   r,   r      s    
%

*r   ))r   typingr   r   r   r   rH   numpyrB   rM   PILr   modelscope.metainfor   !modelscope.models.base.base_modelr   0modelscope.models.cv.image_instance_segmentationr	   r
   modelscope.pipelines.baser   r   modelscope.pipelines.builderr   modelscope.preprocessorsr   r   r   modelscope.utils.configr   modelscope.utils.constantr   r   r   modelscope.utils.loggerr   loggerregister_moduleimage_segmentationimage_instance_segmentationr   r   r   r   r,   <module>   s*   