
    ^j                         d dl Z d dlmc 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 ddlmZ ddlmZ dd	lmZ e ed
       G d de                    ZdgZy)    N   )BatchFeature)TorchvisionBackend)group_images_by_shapereorder_images)PILImageResamplingSizeDict)auto_docstring)
TensorType)requires)torch)backendsc                      e Zd ZdZdZdddZej                  Zde	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ez  dz  defdZ	 ddej$                  de	ej$                     dede	eeej$                  f      fdZy)UVDocImageProcessorTi  i  )heightwidthimagesztorch.Tensor	do_resizesize
do_rescalerescale_factordo_normalize
image_meanN	image_stddisable_groupingreturn_tensorsreturnc           	         t        ||	      \  }}i }|j                         D ]1  \  }}| j                  ||||||      }|d d g dd d d d f   }|||<   3 t        ||      }|j	                         }t        ||	      \  }}i }|j                         D ];  \  }}|r/t        j                  ||j                  |j                  fdd      }|||<   = t        ||      }t        ||d|
dg      S )	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                        {/var/www/ramen.bs-engineer-server.com/venv/lib/python3.12/site-packages/transformers/models/uvdoc/image_processing_uvdoc.py_preprocesszUVDocImageProcessor._preprocess*   s9    0EV^n/o,,#% %3%9%9%; 	=!E>!77
NL*V_N ,Ay!Q,>?N.<$U+	= (66NPd'e$6;;=/D(;K0
,, ')#%3%9%9%; 	@!E>!""$++tzz)Bcg" 2@'.	@ &&ACWX".?S&$5#6
 	
    
predictionr&   scalec                    t        |      }t        j                  t        |      |j                        }g }t        |      D ]  \  }}|j                  dk(  r|j                  d      }|j                  |j                        }|j                  dd \  }}	t        j                  |||dz    ||	fdd	      }
|
j                  dddd      }t        j                  ||d
      }|j                  d      j                  ddd      }||z  }|j                  dg      j                  t        j                   dd      }|j#                  d|i        |S )a  
        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tor4   r-   r.   permutegrid_samplesqueezeflipuint8append)r/   r;   r&   r<   
image_listresultsioriginal_imageoriginal_heightoriginal_widthupsampled_meshrearranged_mesh	rectifiedimages                 r8   #post_process_document_rectificationz7UVDocImageProcessor.post_process_document_rectification[   sW   & /*
U5\*2C2CD!*:!6 	.A~""a'!/!9!9!!<+..z/@/@AN.<.B.B12.F+O^ ]]1q1u%%~6"	N -44Q1a@O noUYZI %%a(00Aq9E EMEJJRDJ),,5;;TX],^ENNHe,-9	.< r:   )g     o@)__name__
__module____qualname__r   r   r   r   BILINEARresamplerC   boolr	   rE   strr   r   r9   r   TensordictrZ    r:   r8   r   r   "   s    JIC(D!**H/
^$/
 /
 	/

 /
 /
 /
 DK'$./
 4;&-/
 +/
 j(4//
 
/
j 	5LL5 ell+5 	5
 
d3$%	&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__rd   r:   r8   <module>rp      s\   ,    4 ; E 7 # ' * 	:l, l  l^ !
!r:   