
    j+                         d dl Z d dlmZ d dl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 d dlmZ dgZ G d	 dej                  ZdS )
    N)Any)nn)
functional)
transforms)Resize)multithread_execPreProcessorc                   "    e Zd ZdZ	 	 ddeeef         dedeeeef         deeeef         ded	d
f fdZde	e
j                 d	e	e
j                 fdZdej        d	e
j        fdZdej        e	ej                 z  d	e	e
j                 fdZ xZS )r	   a  Implements an abstract preprocessor object which performs casting, resizing, batching and normalization.

    Args:
        output_size: expected size of each page in format (H, W)
        batch_size: the size of page batches
        mean: mean value of the training distribution by channel
        std: standard deviation of the training distribution by channel
        **kwargs: additional arguments for the resizing operation
          ?r   r         ?r   r   output_size
batch_sizemeanstdkwargsreturnNc                     t                                                       || _        t          |fi || _        t          j        ||          | _        d S N)super__init__r   r   resizeT	Normalize	normalize)selfr   r   r   r   r   	__class__s         d/var/www/html/Carbon-Document/venv/lib/python3.11/site-packages/doctr/models/preprocessor/pytorch.pyr   zPreProcessor.__init__    sP     	$ &{ = =f = =T3//    samplesc                      t          t          j        t                     j        z                      } fdt          t          |                    D             }|S )zGather samples into batches for inference purposes

        Args:
            samples: list of samples of shape (C, H, W)

        Returns:
            list of batched samples (*, C, H, W)
        c                     g | ]N}t          j        |j        z  t          |d z   j        z  t	                                       d          OS )   r   )dim)torchstackr   minlen).0idxr!   r   s     r   
<listcomp>z-PreProcessor.batch_inputs.<locals>.<listcomp>8   si     
 
 
 Kdo 5S1W<WY\]dYeYe8f8f fgmnooo
 
 
r    )intmathceilr)   r   range)r   r!   num_batchesbatchess   ``  r   batch_inputszPreProcessor.batch_inputs.   sn     $)CLL4?$BCCDD
 
 
 
 
S--..
 
 

 r    xc                 F   |j         dk    rt          d          |j        t          j        t          j        t          j        fvrt          d          t          j	        |
                                                              ddd          }|                     |          }|j        t          j        k    rH|                    t          j                                      d                              dd          }n |                    t          j                  }|S )	N   zexpected list of 3D Tensors'unsupported data type for numpy.ndarray   r   r$   dtype   )ndimAssertionErrorr:   npuint8float32float16	TypeErrorr&   
from_numpycopypermuter   todivclip)r   r4   tensors      r   sample_transformszPreProcessor.sample_transforms?   s    6Q;; !>???728RZ<<<EFFF!!&&((++33Aq!<<V$$<5;&&YYU]Y3377<<AA!QGGFFYYU]Y33Fr    c                    t          |t          j                  r|j        dk    rt	          d          |j        t          j        t          j        t          j        fvrt          d          t          j        |                                                              dddd          }|j        d         | j        j        d         k    s!|j        d	         | j        j        d         k    r6t#          j        || j        j        | j        j        | j        j        
          }|j        t          j        k    rH|                    t          j                                      d                              dd          }n |                    t          j                  }|g}nt          |t.                    rQt1          d |D                       r8t/          t3          | j        |                    }|                     |          }nt          dt9          |                     t/          t3          | j        |                    }|S )zPrepare document data for model forwarding

        Args:
            x: list of images (np.array) or a single image (np.array) of shape (H, W, C)

        Returns:
            list of page batches (*, C, H, W) ready for model inference
           zexpected 4D Tensorr7   r   r6   r$   r8   )interpolation	antialiasr9   r;   c              3   J   K   | ]}t          |t          j                  V  d S r   )
isinstancer>   ndarray)r*   samples     r   	<genexpr>z(PreProcessor.__call__.<locals>.<genexpr>l   s.      (X(XFFBJ)G)G(X(X(X(X(X(Xr    zinvalid input type: )rR   r>   rS   r<   r=   r:   r?   r@   rA   rB   r&   rC   rD   rE   shaper   sizeFrO   rP   rF   rG   rH   listallr   rJ   r3   typer   )r   r4   rI   r2   r!   s        r   __call__zPreProcessor.__call__O   s    a$$ 	>v{{$%9:::wrxRZ@@@ IJJJ%affhh//771aCCF |B4;#3A#666&,r:JdkN^_`Na:a:aDK,DK<Uaealav   |u{**77;;C@@EEaKK77hGG4   	>S(X(XVW(X(X(X%X%X 	>+D,BAFFGGG''00GG<477<<=== '@@AAr    )r   r   )__name__
__module____qualname____doc__tupler-   floatr   r   rY   r&   Tensorr3   r>   rS   rJ   r\   __classcell__)r   s   @r   r	   r	      s;         ,;*90 038_0 0 E5%'(	0
 5%&'0 0 
0 0 0 0 0 0D$6 4;M    "2: %,     ("*tBJ'77 (D<N ( ( ( ( ( ( ( (r    )r.   typingr   numpyr>   r&   r   torchvision.transformsr   rX   r   r   doctr.transformsr   doctr.utils.multithreadingr   __all__Moduler	    r    r   <module>rm      s                      2 2 2 2 2 2 2 2 2 2 2 2 # # # # # # 7 7 7 7 7 7
b b b b b29 b b b b br    