o
    Zh                     @   s  d 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mZ ddlmZmZmZmZmZ ddlmZ dd	lmZ dd
lmZmZ e rOddlmZ e rbe r\ddlmZ nddlmZ e riddl Z G dd deZ!eddG dd deZ"dgZ#dS )z-
Video processor class for InstructBLIPVideo
    )ListOptionalUnion   )BatchFeature)OPENAI_CLIP_MEANOPENAI_CLIP_STDSizeDict)UnpackVideosKwargs)
TensorTypeis_torch_availableis_torchvision_availableis_torchvision_v2_availableis_vision_available)requires)BaseVideoProcessor)group_videos_by_shapereorder_videos)PILImageResampling)
functionalNc                   @   s   e Zd ZdS ))InstructBlipVideoVideoProcessorInitKwargsN)__name__
__module____qualname__ r   r   w/var/www/auris/lib/python3.10/site-packages/transformers/models/instructblipvideo/video_processing_instructblipvideo.pyr   7   s    r   )Ztorchvision)backendsc                !       s   e Zd ZejZeZeZ	dddZ
dZdZdZdZdZeZdgZdee f fddZded	 d
edededee ded dededededededeeeee f  deeeee f  deeeef  def ddZ  Z S )InstructBlipVideoVideoProcessori  )heightwidthTpixel_valueskwargsc                    s   t  jdi | d S )Nr   )super__init__)selfr"   	__class__r   r   r$   H   s   z(InstructBlipVideoVideoProcessor.__init__videosztorch.Tensordo_convert_rgb	do_resizesizesize_divisorinterpolationzF.InterpolationModedo_center_crop	crop_size
do_rescaledo_padrescale_factordo_normalize
image_mean	image_stdreturn_tensorsreturnc              	   C   s   t |\}}i }| D ]\}}|r| |}|r"| j||||d}|||< qt||}t |\}}i }| D ]\}}|rD| ||}| ||	||||}|||< q8t||}|ratj|ddn|}t	d|i|dS )N)r+   r,   r-   r   )dimr!   )dataZtensor_type)
r   itemsZconvert_to_rgbresizer   Zcenter_cropZrescale_and_normalizetorchstackr   )r%   r(   r)   r*   r+   r,   r-   r.   r/   r0   r1   r2   r3   r4   r5   r6   Zgrouped_videosZgrouped_videos_indexZresized_videos_groupedshapeZstacked_videosZresized_videosZprocessed_videos_groupedZprocessed_videosr   r   r   _preprocessK   s.   




z+InstructBlipVideoVideoProcessor._preprocess)!r   r   r   r   ZBICUBICZresampler   r4   r   r5   r+   Zdefault_to_squarer*   r0   r3   r)   r   Zvalid_kwargsZmodel_input_namesr
   r$   r   boolr	   r   intfloatr   strr   r   r?   __classcell__r   r   r&   r   r   :   s\    
	
r   )$__doc__typingr   r   r   Zimage_processing_utilsr   Zimage_utilsr   r   r	   Zprocessing_utilsr
   r   utilsr   r   r   r   r   Zutils.import_utilsr   Zvideo_processing_utilsr   Zvideo_utilsr   r   r   Ztorchvision.transforms.v2r   FZtorchvision.transformsr<   r   r   __all__r   r   r   r   <module>   s*   
B