ó
    qyüiÐ  ã                   ó²   • S SK r S SKJs  Jr  SSKJr  SSKJr  SSK	J
r
Jr  SSKJrJr  SSKJr  SSKJr  SS	KJr  \\" S
S9 " S S\5      5       5       rS/rg)é    Né   )ÚBatchFeature)ÚTorchvisionBackend)Úgroup_images_by_shapeÚreorder_images)ÚPILImageResamplingÚSizeDict)Úauto_docstring)Ú
TensorType)Úrequires)Útorch)Úbackendsc                   ó"  • \ rS rSrSrSrSSS.r\R                  r	S\
S   S\S	\S
\S\S\S\\
\   -  S-  S\\
\   -  S-  S\S-  S\\-  S-  S\4S jr SS\R&                  S\
\R&                     S\S\
\\\R&                  4      4S jjrSrg)ÚUVDocImageProcessoré"   TiÈ  iè  )ÚheightÚwidthÚimagesztorch.TensorÚ	do_resizeÚsizeÚ
do_rescaleÚrescale_factorÚdo_normalizeÚ
image_meanNÚ	image_stdÚdisable_groupingÚreturn_tensorsÚreturnc           	      óÐ  • [        XS9u  pÍ0 nUR                  5        H/  u  nnU R                  UXEXgU5      nUS S 2/ SQS S 2S S 24   nUXï'   M1     [        Xí5      nUR	                  5       n[        UU	S9u  pÍ0 nUR                  5        H?  u  nnU(       a-  [
        R                  " UUR                  UR                  4SSS9nUUU'   MA     [        UU5      n[        UUS.U
S/S9$ )	N)r   )é   é   r   ÚbilinearT©r   ÚmodeÚalign_corners)Úpixel_valuesÚoriginal_imagesr'   )ÚdataÚtensor_typeÚskip_tensor_conversion)
r   ÚitemsÚrescale_and_normalizer   ÚcopyÚFÚinterpolater   r   r   )Úselfr   r   r   r   r   r   r   r   r   r   ÚkwargsÚgrouped_imagesÚgrouped_images_indexÚprocessed_images_groupedÚshapeÚstacked_imagesÚrescale_and_normalize_imagesr'   Úinterpolated_images_groupedr&   s                        Úm/home/mande/repo/quber/.venv/lib/python3.13/site-packages/transformers/models/uvdoc/image_processing_uvdoc.pyÚ_preprocessÚUVDocImageProcessor._preprocess*   s  € ô 0EÀVÑ/oÑ,ˆØ#%Ð Ø%3×%9Ñ%9Ö%;Ñ!ˆE�>Ø!×7Ñ7Ø 
¸LÐV_óˆNð ,ªAªyº!ºQÐ,>Ñ?ˆNØ.<Ð$Ó+ñ &<ô (6Ð6NÓ'eÐ$à6×;Ñ;Ó=ˆä/DØ(Ð;Kñ0
Ñ,ˆð ')Ð#à%3×%9Ñ%9Ö%;Ñ!ˆE�>æÜ!"§¢Ø"¨$¯+©+°t·z±zÐ)BÈÐcgñ"�ð 2@Ð'¨Ó.ñ &<ô &Ð&AÐCWÓXˆäØ".À?ÑSØ&Ø$5Ð#6ñ
ð 	
ó    Ú
predictionr'   Úscalec                 óŒ  • [        U5      n[        R                  " [        U5      UR                  S9n/ n[        U5       Hÿ  u  pgUR                  S:X  a  UR                  S5      nUR                  UR                  5      nUR                  SS u  p‰[        R                  " XUS-    X‰4SSS	9n
U
R                  SSSS5      n[        R                  " X{SS
9nUR                  S5      R                  SSS5      nXÓ-  nUR                  S/S9R                  [        R                   SSS9nUR#                  SU05        GM     U$ )aN  
Post-process document rectification predictions to convert them into rectified images.

Args:
    prediction: Predicted 2D Bezier mesh coordinates, shape (B, 2, H, W)
    original_images: List of original input tensors, each of shape (C, H_i, W_i). Images may have different sizes.
    scale: Scaling factor for output images (default: 255.0)

Returns:
    List of dictionaries containing rectified images. Each dictionary has:
        - "images": Rectified image tensor of shape (H, W, 3) with dtype torch.uint8
                  and BGR channel order (suitable for OpenCV visualization)
)Údevicer   r   r    Nr!   r"   Tr#   )r%   éÿÿÿÿ)ÚdimsF)ÚdtypeÚnon_blockingr-   r   )Úlistr   ÚtensorÚfloatr@   Ú	enumerateÚndimÚ	unsqueezeÚtor5   r.   r/   ÚpermuteÚgrid_sampleÚsqueezeÚflipÚuint8Úappend)r0   r=   r'   r>   Ú
image_listÚresultsÚiÚoriginal_imageÚoriginal_heightÚoriginal_widthÚupsampled_meshÚrearranged_meshÚ	rectifiedÚimages                 r9   Ú#post_process_document_rectificationÚ7UVDocImageProcessor.post_process_document_rectification[   sF  € ô& ˜/Ó*ˆ
Ü—’œU 5›\°*×2CÑ2CÑDˆØˆä!*¨:Ö!6ÑˆAà×"Ñ" aÓ'Ø!/×!9Ñ!9¸!Ó!<�Ø+×.Ñ.¨z×/@Ñ/@ÓAˆNØ.<×.BÑ.BÀ1À2Ð.FÑ+ˆOô Ÿ]š]Ø˜q 1™uÐ%Ø%Ð6ØØ"ñ	ˆNð -×4Ñ4°Q¸¸1¸aÓ@ˆOô Ÿš nÐUYÑZˆIð ×%Ñ% aÓ(×0Ñ0°°A°qÓ9ˆEð ‘MˆEà—J‘J R D�JÐ)×,Ñ,´5·;±;ÈTÐX]Ð,Ð^ˆEà�N‰N˜H eÐ,×-ñ9 "7ð< ˆr<   © )g     ào@)Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__r   r   r   r   ÚBILINEARÚresamplerE   Úboolr	   rG   Ústrr   r   r:   r   ÚTensorÚdictr\   Ú__static_attributes__r^   r<   r9   r   r   "   s  † ð €JØ€IØ CÑ(€DØ!×*Ñ*€Hð/
à�^Ñ$ð/
ð ð/
ð ð	/
ð
 ð/
ð ð/
ð ð/
ð ˜D ™KÑ'¨$Ñ.ð/
ð ˜4 ™;Ñ&¨Ñ-ð/
ð  ™+ð/
ð ˜jÑ(¨4Ñ/ð/
ð 
ô/
ðj ñ	5à—L‘Lð5ð ˜eŸl™lÑ+ð5ð ð	5ð
 
ˆd�3˜Ÿ™Ð$Ñ%Ñ	&÷5ð 5r<   r   )r   Útorch.nn.functionalÚnnÚ
functionalr.   Úfeature_extraction_utilsr   Úimage_processing_backendsr   Úimage_transformsr   r   Úimage_utilsr   r	   Úutilsr
   Úutils.genericr   Úutils.import_utilsr   r   Ú__all__r^   r<   r9   Ú<module>ru      s\   ðó, ß Ð å 4Ý ;ß Eß 7Ý #Ý 'Ý *ð Ù	�:ÑôlÐ,ó ló ó ðlð^ !Ð
!�r<   