o
    *jt                     @   s   d dl Z d dlmZmZ d dlZd dlZd dlm  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 d dlmZmZ d d	lmZ d d
lmZ d dlmZ e Zejg dg ddZ dd Z!dd Z"ej#ej$ej$dG dd deZ%dS )    N)AnyDict)Image)
transforms)	Pipelines)InferenceCore)
OutputKeys)InputPipeline)	PIPELINES)Tasks)
get_logger)g
ףp=
?gv/?gCl?)gZd;O?gy&1?g?)meanZstdc                 C   s   |d |d  dkr| d d d d |d |d  d d f } |d |d  dkr>| d d d d d d |d |d  f } | S )N      r       )imgpadr   r   {/var/www/html/Deteccion_Ine/venv/lib/python3.10/site-packages/modelscope/pipelines/cv/video_object_segmentation_pipeline.pyunpad   s
   **r   c                 C   s   t | jdkrtjt || jd | jd | jd ftjd}ntjt || jd | jd ftjd}t|D ]\}}| |ktj||< q6|S )Nr   r   r   r   dtype)lenshapenpzerosuint8	enumerateastype)maskslabelsZMsklr   r   r   all_to_onehot"   s    r$   )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 )VideoObjectSegmentationPipelinemodelc                    s`   t  jdd|i| td tt ttjdt	j
dg| _ttjdt	jdg| _dS )z
        use `model` to create video_object_segmentation pipeline for prediction
        Args:
            model: model id on modelscope hub.
        r'   zload model donei  )interpolationNr   )super__init__loggerinfor   ZComposeZToTensorim_normalizationZResizer   ZBICUBICim_transformZNEARESTmask_transform)selfr'   kwargs	__class__r   r   r*   6   s   
z(VideoObjectSegmentationPipeline.__init__inputreturnc                 C   sD  |d | _ |d | _t| j }t| j}i }d|d< ||d< ||d< i |d< g }g }t|D ]3}| j | }|| | | j }	|tj	| jtj
d t|d	 }
|
|
d
k }
|
|d |< q/t|d
}t|d
}t|tj
}||d
k }tt|| }| |}|d}||d< |||t	|	d}|S )NimagesmaskZmaas_test_videonameframessizeZgt_objr   r   r   r!   )rgbgtr,   palette)r6   r7   r   r   r   rangeappendr.   Z
getpalettearrayr   uniquetorchstackr   Z
from_numpyr$   floatr/   	unsqueeze)r0   r4   r9   r   r,   r6   r    ir   r>   Zthis_labelsr!   resultr   r   r   
preprocessH   sB   






z*VideoObjectSegmentationPipeline.preprocessc                 C   s<  |d  d}|d }|d }t|d }|d }|j}t| jj|||ddd	}||d d df d|jd
  tj|j	d
g|R tj
|rGdndd}	t|j	D ]#}
t|jd d |
f |j}tj|t|ddd}tj|dd|	|
< qP|r|	   d d df tj
}	n|	  d d df tj
}	tj|	iS )Nr<   r   r=   r,   r!   r:         )Ztop_kZ	mem_everyr   cudacpu)r   ZdeviceZbilinearF)modeZalign_corners)dim)rF   r   is_cudar   r'   Zinteractr   rC   r   tr   r?   r   probr   FZinterpolatetupleZargmaxdetachrM   numpyr   r   r   ZMASKS)r0   r4   r<   Zmskr,   r"   r:   rP   	processorZ	out_maskstirR   r   r   r   forwardw   s8    
 
z'VideoObjectSegmentationPipeline.forwardinputsc                 C   s   |S )Nr   )r0   rZ   r   r   r   postprocess   s   z+VideoObjectSegmentationPipeline.postprocess)__name__
__module____qualname__strr*   r	   r   r   rI   rY   r[   __classcell__r   r   r2   r   r&   1   s
    "/*r&   )&ostypingr   r   rV   r   rC   Ztorch.nn.functionalnnZ
functionalrS   ZPILr   Ztorchvisionr   Zmodelscope.metainfor   Z=modelscope.models.cv.video_object_segmentation.inference_corer   Zmodelscope.outputsr   Zmodelscope.pipelines.baser	   r
   Zmodelscope.pipelines.builderr   Zmodelscope.utils.constantr   Zmodelscope.utils.loggerr   r+   Z	Normalizer-   r   r$   Zregister_moduleZvideo_object_segmentationr&   r   r   r   r   <module>   s2   