Ë
    ÜÓ^j¢  ã                   óÌ   — d Z ddlm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mZmZmZ dd
lmZmZ ddlmZmZ  G d„ ded¬«      Ze G d„ de«      «       ZdgZy)z#Image processor class for ViTMatte.é    )ÚUnionN)Ú
functionalé   )ÚTorchvisionBackend)ÚBatchFeature)Úgroup_images_by_shapeÚreorder_images)ÚIMAGENET_STANDARD_MEANÚIMAGENET_STANDARD_STDÚChannelDimensionÚ
ImageInputÚget_image_size)ÚImagesKwargsÚUnpack)Ú
TensorTypeÚauto_docstringc                   ó   — e Zd ZU dZeed<   y)ÚVitMatteImageProcessorKwargsz¥
    size_divisor (`int`, *optional*, defaults to `self.size_divisor`):
        The width and height of the image will be padded to be divisible by this number.
    Úsize_divisorN)Ú__name__Ú
__module__Ú__qualname__Ú__doc__ÚintÚ__annotations__© ó    ú�/var/www/ramen.bs-engineer-server.com/venv/lib/python3.12/site-packages/transformers/models/vitmatte/image_processing_vitmatte.pyr   r   #   s   … ñð
 Ôr   r   F)Útotalc                   óV  ‡ — e Zd ZdZdZdZeZeZ	dZ
dZeZdee   ddfˆ fd„Z	 ddd	d
edd	fd„Zedededee   defˆ fd„«       Z	 ddededededeedf   dz  dee   defd„Zded	   ded	   dedededeee   z  dz  deee   z  dz  dedz  d
edz  dedz  deez  dz  defd„Zˆ xZS )ÚVitMatteImageProcessorTgp?é    ÚkwargsÚreturnNc                 óp   •— |j                  dd «      }|�|j                  d|«       t        ‰| �  di |¤Ž y )NÚsize_divisibilityr   r   )ÚpopÚ
setdefaultÚsuperÚ__init__)Úselfr#   r&   Ú	__class__s      €r   r*   zVitMatteImageProcessor.__init__7   s<   ø€ à"ŸJ™JÐ':¸DÓAÐØÐ(Ø×Ñ˜nÐ.?Ô@Ü‰ÑÑ"˜6Ó"r   Úimagesztorch.Tensorr   c                 óÒ   — t        |t        j                  ¬«      \  }}||z  dk(  rdn|||z  z
  }||z  dk(  rdn|||z  z
  }||z   dkD  rdd||f}t        j                  ||«      }|S )ad  
        Pads an image or batched images constantly so that width and height are divisible by size_divisor

        Args:
            images (`torch.Tensor`):
                Image to pad.
            size_divisor (`int`, *optional*, defaults to 32):
                The width and height of the image will be padded to be divisible by this number.
        )Úchannel_dimr   )r   r   ÚFIRSTÚtvFÚpad)r+   r-   r   ÚheightÚwidthÚ
pad_heightÚ	pad_widthÚpaddings           r   Ú
_pad_imagez!VitMatteImageProcessor._pad_image>   s†   € ô ' vÔ;K×;QÑ;QÔR‰ˆ�à  <Ñ/°1Ò4‘Q¸,ÈÐR^ÑI^Ñ:^ˆ
Ø Ñ-°Ò2‘A¸ÀuÈ|ÑG[Ñ8[ˆ	à�zÑ! AÒ%Ø˜!˜Y¨
Ð3ˆGÜ—W‘W˜V WÓ-ˆFàˆr   Útrimapsc                 ó&   •— t        ‰| �  ||fi |¤ŽS )zP
        trimaps (`ImageInput`):
            The trimaps to preprocess.
        )r)   Ú
preprocess)r+   r-   r9   r#   r,   s       €r   r;   z!VitMatteImageProcessor.preprocessW   s   ø€ ô ‰wÑ! &¨'Ñ<°VÑ<Ð<r   Údo_convert_rgbÚinput_data_formatÚdeviceztorch.devicec                 ó|   — | j                  ||||¬«      }| j                  |d|¬«      } | j                  ||fi |¤ŽS )z/
        Preprocess image-like inputs.
        )r-   r<   r=   r>   é   )r-   Úexpected_ndimsr>   )Ú_prepare_image_like_inputsÚ_preprocess)r+   r-   r9   r<   r=   r>   r#   s          r   Ú_preprocess_image_like_inputsz4VitMatteImageProcessor._preprocess_image_like_inputsd   sY   € ð ×0Ñ0Ø¨.ÐL]Ðflð 1ó 
ˆð ×1Ñ1¸ÐQRÐ[aÐ1Óbˆàˆt×Ñ ¨Ñ:°6Ñ:Ð:r   Ú
do_rescaleÚrescale_factorÚdo_normalizeÚ
image_meanÚ	image_stdÚdo_padÚdisable_groupingÚreturn_tensorsc           	      óZ  — t        ||
¬«      \  }}t        ||
¬«      \  }}i }|D ]j  }||   }||   }| j                  ||||||«      }| j                  |||d||«      }t        j                  ||gd¬«      }|r| j	                  ||	«      }|||<   Œl t        ||«      }t        d|i|¬«      S )N)rK   Fé   )ÚdimÚpixel_values)ÚdataÚtensor_type)r   Úrescale_and_normalizeÚtorchÚcatr8   r	   r   )r+   r-   r9   rE   rF   rG   rH   rI   rJ   r   rK   rL   r#   Úgrouped_imagesÚgrouped_images_indexÚgrouped_trimapsÚgrouped_trimaps_indexÚprocessed_images_groupedÚshapeÚstacked_imagesÚstacked_trimapsÚprocessed_imagess                         r   rC   z"VitMatteImageProcessor._preprocessw   sì   € ô 0EÀVÐ^nÔ/oÑ,ˆÐ,Ü1FÀwÐaqÔ1rÑ.ˆÐ.Ø#%Ð Ø#ò 	=ˆEØ+¨EÑ2ˆNØ-¨eÑ4ˆOà!×7Ñ7Ø 
¨N¸LÈ*ÐV_óˆNð #×8Ñ8Ø ¨^¸UÀJÐPYóˆOô #ŸY™Y¨¸Ð'HÈaÔPˆNÙØ!%§¡°ÀÓ!N�Ø.<Ð$ UÒ+ð	=ô *Ð*BÐDXÓYÐä .Ð2BÐ!CÐQ_Ô`Ð`r   )r"   )N) r   r   r   rE   rF   rG   r
   rH   r   rI   rJ   r   r   Úvalid_kwargsr   r*   r   r8   r   r   r   r;   Úboolr   r   ÚstrrD   ÚlistÚfloatr   rC   Ú__classcell__)r,   s   @r   r!   r!   ,   sÑ  ø„ à€JØ€NØ€LØ'€JØ%€IØ€FØ€LØ/€Lð# Ð(DÑ!Eð #È$õ #ð ñàðð ðð 
ó	ð2 ð
=àð
=ð ð
=ð Ð5Ñ6ð	
=ð
 
ô
=ó ð
=ð$ 59ñ;àð;ð ð;ð ð	;ð
 ,ð;ð �c˜>Ð)Ñ*¨TÑ1ð;ð Ð5Ñ6ð;ð 
ó;ð&#aà�^Ñ$ð#að �nÑ%ð#að ð	#að
 ð#að ð#að ˜D ™KÑ'¨$Ñ.ð#að ˜4 ™;Ñ&¨Ñ-ð#að �t‘ð#að ˜D‘jð#að  ™+ð#að ˜jÑ(¨4Ñ/ð#að 
÷#ar   r!   )r   Útypingr   rT   Útorchvision.transforms.v2r   r1   Úimage_processing_backendsr   Úimage_processing_utilsr   Úimage_transformsr   r	   Úimage_utilsr
   r   r   r   r   Úprocessing_utilsr   r   Úutilsr   r   r   r!   Ú__all__r   r   r   ú<module>rn      si   ðñ *å ã Ý 7å ;Ý 2ß E÷õ ÷ 5ß /ô <°uõ ð ômaÐ/ó maó ðmað` $Ð
$�r   