o
    ॵiK                     @   s   d dl Z d dlmZ d dlmZmZ d dl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 d dlmZmZ d dlmZ d d	lmZ d d
l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)tqdm)	Pipelines)	VideoKNet)
OutputKeys)InputPipeline)	PIPELINES)Config)	ModelFileTasks)
get_logger)module_namec                       s   e Zd Zdef f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 )!VideoPanopticSegmentationPipelinemodelc                    s   t  jd|dd| td|  t|tj}t|tj}td|  t	
|| _|dd| _t|| _tj|t| jd}| j|d  | j| j | _td	 d
| _tg dtj| _tg dtj| _d| _dS )z
        use `model` to create a video panoptic segmentation pipeline for prediction
        Args:
            model: model id on modelscope hub.
        F)r   auto_collatezloading model from zloading config from max_video_framesi  )map_location
state_dictzload model done    )g33333^@gR]@gRY@)g(\2M@g(\L@g     L@N )super__init__loggerinfoospjoinr   TORCH_MODEL_FILECONFIGURATIONr   	from_filecfggetr   r   r   torchloaddeviceload_state_dicttoevalpad_size_divisornparrayfloat32meanstdto_rgb)selfr   kwargs
model_pathconfig_path
checkpoint	__class__r   p/home/ubuntu/.local/lib/python3.10/site-packages/modelscope/pipelines/cv/video_panoptic_segmentation_pipeline.pyr      s$   


z*VideoPanopticSegmentationPipeline.__init__inputreturnc                 C   s4  t |tstdt| g }g }g }t|}|tj| _|tj	| _
d}| r| \}}|s6nX|| jkr<nRt|| j| j| j}	tj|	| jdd}
i }|j|d< |j|d< |
j|d< |
jdd |d< d	|d
< d|d< d |d< ||
 ||g || |d7 }| s-|t|||d}|S )Nz input should be a str,  but got r   )pad_val	ori_shape	img_shape	pad_shape   batch_input_shape)g      ?scale_factorFflipflip_direction   )
video_nameimgs	img_metasiids)
isinstancestr	TypeErrortypecv2VideoCapturer"   CAP_PROP_FPSfpsCAP_PROP_FRAME_COUNTframe_countisOpenedreadr   mmcvimnormalizer-   r.   r/   impad_to_multipler)   shapeappendr*   r+   )r0   r8   framesrF   rG   cap	frame_idxretframe
norm_frame	pad_frameimg_metaresultr   r   r7   
preprocess9   sT   







z,VideoPanopticSegmentationPipeline.preprocessc              
   C   s   g }g }g }g }g }t tt|d D ]q}|d | }|d | }	|d | }
t|g d}t|d}t|| j	}t
  | j||	d|
d}W d    n1 sWw   Y  |\	}}}}}}}}}|dgt|  || || || || q|||||d	}|S )
NrG   rE   rF   )r>   r   rC   r   T)rescaleiidgGz?)scoreslabelsmasksboxesuuid)r   rangelenr*   	transposeexpand_dimsr#   
from_numpyr'   r%   no_gradr   rX   )r0   r8   re   rf   rg   rh   	track_idsiiimgr`   rd   xsegm_results_vis_semvis_trackerlabelbinary_masktrack_idthing_bbox_for_trackingoutputr   r   r7   forwardh   s8   



z)VideoPanopticSegmentationPipeline.forwardinputsc                 C   s   |S )Nr   )r0   r~   r   r   r7   postprocess   s   z-VideoPanopticSegmentationPipeline.postprocess)__name__
__module____qualname__rI   r   r   r   r   rb   r}   r   __classcell__r   r   r5   r7   r      s
    "/*!r   )#osos.pathpathr   typingr   r   rL   rT   numpyr*   r#   r   modelscope.metainfor   <modelscope.models.cv.video_panoptic_segmentation.video_k_netr   modelscope.outputsr   modelscope.pipelines.baser   r	   modelscope.pipelines.builderr
   modelscope.utils.configr   modelscope.utils.constantr   r   modelscope.utils.loggerr   r   register_modulevideo_panoptic_segmentationr   r   r   r   r7   <module>   s,   