Ë
    ÛÓ^ja  ã                   ó   — d 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 ddlmZmZ dd	lmZmZmZmZ erdd
lmZ ddlZddlmZ  ej8                  e«      Z G d„ ded¬«      Ze G d„ de«      «       Z dgZ!y)zImage processor class for GLPN.é    )ÚTYPE_CHECKINGé   )ÚTorchvisionBackend)ÚBatchFeature)Úgroup_images_by_shapeÚreorder_images)Ú
ImageInputÚPILImageResamplingÚSizeDict)ÚImagesKwargsÚUnpack)Ú
TensorTypeÚauto_docstringÚloggingÚrequires_backends)ÚDepthEstimatorOutputN)Ú
functionalc                   ó   — e Zd ZU dZeed<   y)ÚGLPNImageProcessorKwargszÐ
    size_divisor (`int`, *optional*, defaults to 32):
        When `do_resize` is `True`, images are resized so their height and width are rounded down to the closest
        multiple of `size_divisor`.
    Úsize_divisorN)Ú__name__Ú
__module__Ú__qualname__Ú__doc__ÚintÚ__annotations__© ó    úy/var/www/ramen.bs-engineer-server.com/venv/lib/python3.12/site-packages/transformers/models/glpn/image_processing_glpn.pyr   r   (   s   … ñð Ôr   r   F)Útotalc            #       óŒ  ‡ — e Zd ZdZeZdZdZdZe	j                  ZdZdee   fˆ fd„Zˆ fd„Zededee   d	efˆ fd
„«       Z	 d$dddeddded	df
ˆ fd„Z	 d$ded   dededddede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d	ef"d„Z	 d%d d!d"eeeeef      z  dz  d	eeeef      fd#„Zˆ xZ S )&ÚGLPNImageProcessorz6Torchvision backend for GLPN with size_divisor resize.Tgp?é    Úkwargsc                 ó$   •— t        ‰| �  di |¤Ž y )Nr   )ÚsuperÚ__init__©Úselfr$   Ú	__class__s     €r   r'   zGLPNImageProcessor.__init__>   s   ø€ Ü‰ÑÑ"˜6Ó"r   c                 óF   •— |j                  dd «       t        ‰| �  di |¤ŽS )NÚ	do_resizer   )Úpopr&   Ú_validate_preprocess_kwargsr(   s     €r   r.   z.GLPNImageProcessor._validate_preprocess_kwargsA   s$   ø€ à�
‰
�; Ô%Ü‰wÑ2Ñ<°VÑ<Ð<r   ÚimagesÚreturnc                 ó$   •— t        ‰| �  |fi |¤ŽS ©N)r&   Ú
preprocess)r)   r/   r$   r*   s      €r   r3   zGLPNImageProcessor.preprocessF   s   ø€ ä‰wÑ! &Ñ3¨FÑ3Ð3r   Úimageztorch.TensorÚsizeÚresamplez7PILImageResampling | tvF.InterpolationMode | int | Noner   c                 ó„   •— |j                   dd \  }}||z  |z  }||z  |z  }	t        ‰
| �  |t        ||	¬«      fd|i|¤ŽS )zTResize so height and width are rounded down to the closest multiple of size_divisor.éþÿÿÿN)ÚheightÚwidthr6   )Úshaper&   Úresizer   )r)   r4   r5   r6   r   r$   r9   r:   Únew_hÚnew_wr*   s             €r   r<   zGLPNImageProcessor.resizeJ   si   ø€ ð Ÿ™ B CÐ(‰ˆ�Ø˜,Ñ&¨Ñ5ˆØ˜Ñ%¨Ñ4ˆÜ‰w‰~ØÜ˜E¨Ô/ñ
ð ð
ð ñ	
ð 	
r   r,   Údo_center_cropÚ	crop_sizeÚ
do_rescaleÚrescale_factorÚdo_normalizeÚ
image_meanNÚ	image_stdÚdo_padÚpad_sizeÚdisable_groupingÚreturn_tensorsc           	      óð   — t        ||¬«      \  }}i }|j                  «       D ]7  \  }}|r| j                  ||||¬«      }| j                  ||||	|
|«      }|||<   Œ9 t	        ||«      }t        d|i|¬«      S )zCustom preprocessing for GLPN.)rH   )r   Úpixel_values)ÚdataÚtensor_type)r   Úitemsr<   Úrescale_and_normalizer   r   )r)   r/   r,   r5   r6   r?   r@   rA   rB   rC   rD   rE   rF   rG   rH   rI   r   r$   Úgrouped_imagesÚgrouped_images_indexÚprocessed_images_groupedr;   Ústacked_imagesÚprocessed_imagess                           r   Ú_preprocesszGLPNImageProcessor._preprocess]   s¥   € ô* 0EÀVÐ^nÔ/oÑ,ˆÐ,Ø#%Ð Ø%3×%9Ñ%9Ó%;ò 	=Ñ!ˆE�>ÙØ!%§¡¨^¸TÀ8ÐZf Ó!g�Ø!×7Ñ7Ø 
¨N¸LÈ*ÐV_óˆNð /=Ð$ UÒ+ð	=ô *Ð*BÐDXÓYÐÜ .Ð2BÐ!CÐQ_Ô`Ð`r   Úoutputsr   Útarget_sizesc                 óž  — t        | d«       |j                  }|�"t        |«      t        |«      k7  rt        d«      ‚g }|€dgt        |«      z  n|}t	        ||«      D ]l  \  }}|�R|d   }t
        j                  j                  j                  ||dd¬«      }|j                  d«      j                  d«      }|j                  d	|i«       Œn |S )
zf
        Convert raw model outputs to final depth predictions.
        Only supports PyTorch.
        ÚtorchNz]Make sure that you pass in as many target sizes as the batch dimension of the predicted depth)NN.ÚbicubicF)r5   ÚmodeÚalign_cornersr   Úpredicted_depth)r   r]   ÚlenÚ
ValueErrorÚziprY   Únnr   ÚinterpolateÚsqueezeÚappend)r)   rV   rW   r]   ÚresultsÚdepthÚtarget_sizes          r   Úpost_process_depth_estimationz0GLPNImageProcessor.post_process_depth_estimation~   sâ   € ô 	˜$ Ô(Ø!×1Ñ1ˆØÐ#¬¨OÓ(<ÄÀLÓ@QÒ(QÜØoóð ð ˆØ8DÐ8L˜�v¤ OÓ 4Ò4ÐR^ˆÜ"% o°|Ó"Dò 	7ÑˆE�;ØÐ&Ø˜oÑ.�ÜŸ™×+Ñ+×7Ñ7¸ÀKÐV_ÐotÐ7Óu�ØŸ™ aÓ(×0Ñ0°Ó3�Ø�N‰NÐ-¨uÐ5Õ6ð	7ð ˆr   )r#   r2   )!r   r   r   r   r   Úvalid_kwargsr,   rA   rB   r
   ÚBILINEARr6   r   r   r'   r.   r   r	   r   r3   r   r   r<   ÚlistÚboolÚfloatÚstrr   rU   ÚtupleÚdictrh   Ú__classcell__)r*   s   @r   r"   r"   2   s÷  ø„ á@à+€Là€IØ€JØ€NØ!×*Ñ*€HØ€Lð# Ð(@Ñ!Aõ #ô=ð
 ð4 ð 4°vÐ>VÑ7Wð 4Ð\hô 4ó ð4ð ñ
àð
ð ð
ð Lð	
ð
 ð
ð 
õ
ðH ñ#aà�^Ñ$ðað ðað ð	að
 Lðað ðað ðað ðað ðað ðað ˜D ™KÑ'¨$Ñ.ðað ˜4 ™;Ñ&¨Ñ-ðað �t‘ðað ˜T‘/ðað  ™+ðað  ˜jÑ(¨4Ñ/ð!að" ð#að& 
ó'aðH CGñà'ðð ! 4¨¨c°3¨h©Ñ#8Ñ8¸4Ñ?ðð 
ˆd�3˜
�?Ñ#Ñ	$÷	r   r"   )"r   Útypingr   Úimage_processing_backendsr   Úimage_processing_utilsr   Úimage_transformsr   r   Úimage_utilsr	   r
   r   Úprocessing_utilsr   r   Úutilsr   r   r   r   Úmodeling_outputsr   rY   Útorchvision.transforms.v2r   ÚtvFÚ
get_loggerr   Úloggerr   r"   Ú__all__r   r   r   ú<module>r      s…   ðñ &å  å ;Ý 2ß E÷ñ ÷
 5ß KÓ Kñ Ý8ã Ý 7ð 
ˆ×	Ñ	˜HÓ	%€ô˜|°5õ ð ôbÐ+ó bó ðbðJ  Ð
 �r   