
    kh %                     B   d Z ddlZddlZddlmZ ddlmZ ddlZddl	Z	dZ
dZdZdZ G d d	      Z G d
 d      Zd Zej"                  ej$                  fZd Zd Zd Z G d d      Z G d d      Z G d d      Ze
fdZ G d d      Zdddde
efdZdddde
efdZy) zE COCO transforms (quick and dirty)

Hacked together by Ross Wightman
    N)deepcopy)Image)g
ףp=
?gv/?gCl?)gZd;O?gy&1?g?)      ?r   r   c                       e Zd ZdefdZy)ImageToNumpyannotationsc                     t        j                  |t         j                        }|j                  dk  rt        j                  |d      }t        j
                  |dd      }||fS Ndtype   axis   r   )nparrayuint8ndimexpand_dimsmoveaxisselfpil_imgr   np_imgs       R/var/www/teggl/fontify/venv/lib/python3.12/site-packages/effdet/data/transforms.py__call__zImageToNumpy.__call__   sN    '2;;?^^F4FVQ*{""    N)__name__
__module____qualname__dictr    r   r   r   r      s    #T #r   r   c                   6    e Zd Zej                  fdZdefdZy)ImageToTensorc                     || _         y Nr   )r   r   s     r   __init__zImageToTensor.__init__   s	    
r   r   c                 (   t        j                  |t         j                        }|j                  dk  rt        j                  |d      }t        j
                  |dd      }t        j                  |      j                  | j                        |fS r
   )
r   r   r   r   r   r   torch
from_numpytor   r   s       r   r   zImageToTensor.__call__"   sk    '2;;?^^F4FVQ*'***<kIIr   N)r   r    r!   r*   float32r(   r"   r   r#   r   r   r%   r%      s    "]] JT Jr   r%   c                     | dk(  rt         j                  S | dk(  rt         j                  S | dk(  rt         j                  S t         j                  S )Nbicubiclanczoshamming)r   BICUBICLANCZOSHAMMINGBILINEAR)methods    r   _pil_interpr7   *   sD    }}	9	}}	9	}} ~~r   c                     |\  }}t        j                  ||gdz  | j                        }t        j                  | d||        y )Nr   r   r   )out)r   r   r   clip)boxesimg_sizeheightwidth
clip_uppers        r   clip_boxes_r@   9   s:    MFE65/A-U[[AJGGE1je,r   c                 >    | j                         }t        ||       |S r'   )copyr@   )r;   r<   clipped_boxess      r   
clip_boxesrD   ?   s    JJLMx(r   c                 N    t        | t              r| | fS t        |       dk(  sJ | S )Nr   )
isinstanceintlen)sizes    r   _size_tuplerJ   E   s+    $Tz4yA~~r   c                   .    e Zd ZddededefdZdefdZy)		ResizePadtarget_sizeinterpolation
fill_colorc                 @    t        |      | _        || _        || _        y r'   )rJ   rM   rN   rO   )r   rM   rN   rO   s       r   r(   zResizePad.__init__O   s    &{3*$r   annoc                    |j                   \  }}| j                  d   |z  }| j                  d   |z  }t        ||      }t        ||z        }t        ||z        }	t	        j
                  d| j                  d   | j                  d   f| j                        }
t        | j                        }|j                  |	|f|      }|
j                  |       d|v r|d   }|d d d dfxx   |z  cc<   t        || j                  d         t        |	| j                  d         f}t        ||       |d d d df   |d d ddf   k  j                  d      }||d d f   |d<   |d	   |   |d	<   d
|z  |d<   |
|fS )Nr      RGBcolorbbox   r   r   cls      ?	img_scale)rI   rM   minrG   r   newrO   r7   rN   resizepaster@   all)r   imgrQ   r>   r=   img_scale_yimg_scale_xr[   scaled_hscaled_wnew_imginterp_methodrW   
bbox_boundvalid_indicess                  r   r   zResizePad.__call__T   s   v&&q)F2&&q)E1[1	v	)*uy()))ED$4$4Q$79I9I!9L#MUYUdUde#D$6$67jj(H-}=cT><DBQBK9$Kh(8(8(;<c(DL\L\]^L_>`aJj)!!RaR%[41Q3<7<<!<DMq 01DLu+m4DKN[}r   N)bilinearr   r   r   )	r   r    r!   rG   strtupler(   r"   r   r#   r   r   rL   rL   M   s)    %C % %V[ %
$ r   rL   c            	       <    e Zd Z	 	 d
dedededefdZd ZdefdZ	y	)RandomResizePadrM   scalerN   rO   c                     t        |      | _        || _        |dk(  rt        | _        || _        y t        |      | _        || _        y )Nrandom)rJ   rM   rp   _RANDOM_INTERPOLATIONrN   r7   rO   )r   rM   rp   rN   rO   s        r   r(   zRandomResizePad.__init__r   sE    &{3
H$!6D % "-]!;D$r   c                 .   t        j                  | j                   }|| j                  d   z  }|| j                  d   z  }|j                  \  }}||z  }||z  }t        ||      }	t        ||	z        }
t        ||	z        }|
| j                  d   z
  }|| j                  d   z
  }t        t        dt        |            t        j                  dd      z        }t        t        dt        |            t        j                  dd      z        }|
||||	fS )Nr   rS   g        )	rr   uniformrp   rM   rI   r\   rG   maxfloat)r   ra   scale_factorscaled_target_heightscaled_target_widthr>   r=   rb   rc   r[   rd   re   offset_yoffset_xs                 r   _get_paramszRandomResizePad._get_params|   s   ~~tzz2+d.>.>q.AA*T-=-=a-@@ v*V3)E1[1	 v	)*uy()d..q11d..q11s3h06>>!Q3GGHs3h06>>!Q3GGH8Xy@@r   rQ   c                    | j                  |      \  }}}}}t        | j                  t        t        f      r t        j                  | j                        }n| j                  }|j                  ||f|      }t        ||| j                  d   z         t        ||| j                  d   z         }
}	|j                  |||	|
f      }t        j                  d| j                  d   | j                  d   f| j                        }|j                  |       d|v r|d   }|d d d dfxx   |z  cc<   t        j                   ||gdz        }||z  }t        || j                  d         t        || j                  d         f}t#        ||       |d d d df   |d d ddf   k  j%                  d      }||d d f   |d<   |d	   |   |d	<   d
|z  |d<   ||fS )NrS   r   rT   rU   rW   rX   r   r   rY   rZ   r[   )r}   rF   rN   rm   listrr   choicer^   r\   rM   cropr   r]   rO   r_   r   stackr@   r`   )r   ra   rQ   rd   re   r{   r|   r[   rN   rightlowerrf   rW   
box_offsetrh   ri   s                   r   r   zRandomResizePad.__call__   s   <@<L<LS<Q9(Hh	d((5$-8"MM$*<*<=M ..Mjj(H-}=8X0@0@0C%CDc(T\_c_o_opq_rTrFsuhh(E59:))ED$4$4Q$79I9I!9L#MUYUdUdecT><DBQBK9$K8X"6":;JJDh(8(8(;<c(DL\L\]^L_>`aJj)!!RaR%[41Q3<7<<!<DMq 01DLu+m4DKN[}r   N))g?g       @rr   rk   )
r   r    r!   rG   rm   rl   r(   r}   r"   r   r#   r   r   ro   ro   p   s=    Ya%.%C % %SV %"%A*$ r   ro   c                   &    e Zd ZddZd ZdefdZy)
RandomFlipc                 .    || _         || _        || _        y r'   )
horizontalverticalprob)r   r   r   r   s       r   r(   zRandomFlip.__init__   s    $ 	r   c                     | j                   r!t        j                         | j                  k  nd}| j                  r!t        j                         | j                  k  nd}||fS )NF)r   rr   r   r   )r   do_horizontaldo_verticals      r   r}   zRandomFlip._get_params   sE    7;$))3E59]]fmmo		1k))r   r   c                    | j                         \  }}|j                  \  fd}fd}|r?|r=|j                  t        j                        }d|v r ||d           ||d          ||fS |r2|j                  t        j
                        }d|v r ||d          ||fS |r.|j                  t        j                        }d|v r ||d          ||fS )Nc                 Z    | d d df   z
  }| d d df   z
  }|| d d df<   || d d df<   y )NrS   r   r#   )rW   x_maxx_minr>   s      r   _fliphz#RandomFlip.__call__.<locals>._fliph   sA    DAJ&EDAJ&EDAJDAJr   c                 Z    | d d df   z
  }| d d df   z
  }|| d d df<   || d d df<   y )Nr   r   r#   )rW   y_maxy_minr=   s      r   _flipvz#RandomFlip.__call__.<locals>._flipv   sA    T!Q$Z'ET!Q$Z'EDAJDAJr   rW   )r}   rI   	transposer   
ROTATE_180FLIP_LEFT_RIGHTFLIP_TOP_BOTTOM)	r   ra   r   r   r   r   r   r=   r>   s	          @@r   r   zRandomFlip.__call__   s    %)%5%5%7"{v		 [-- 0 01C${6*+{6*+ K -- 5 56C${6*+ K -- 5 56C${6*+Kr   N)TFr   )r   r    r!   r(   r}   r"   r   r#   r   r   r   r      s    
*
   r   r   c                    t        | t              rt        |       dk(  sJ | } | S 	 t        |       }|fdz  } | S # t        $ r? | dk(  sJ t        |D cg c]  }t        t        d|z               nc c}w c}      } Y | S w xY w)Nr   mean   )rF   rm   rH   rG   
ValueErrorround)rO   img_mean	int_colorxs       r   resolve_fill_colorr      s    *e$:!###
 	HJI#)J   	H'''XFE#'N 3FFGJ	Hs   9 BA1
0B Bc                   $    e Zd ZdefdZdefdZy)Compose
transformsc                     || _         y r'   r   )r   r   s     r   r(   zCompose.__init__   s	    $r   r   c                 D    | j                   D ]  } |||      \  }} ||fS r'   r   )r   ra   r   ts       r   r   zCompose.__call__   s1     	3A k2C	3Kr   N)r   r    r!   r   r(   r"   r   r#   r   r   r   r      s    %4 %   r   r      rj   Fr   c                 v    t        ||      }t        | ||      t               g}|sJ d       t        |      }|S )NrM   rN   rO   *Only supporting prefetcher usage right now)r   rL   r   r   r<   rN   use_prefetcherrO   r   std	image_tflimage_tfs           r   transforms_coco_evalr      sM     $J5J 	 *	VI GGG>y!HOr   rr   c                     t        ||      }t        dd      t        | ||      t               g}|sJ d       t	        |      }|S )NTr   )r   r   r   r   )r   r   ro   r   r   r   s           r   transforms_coco_trainr   
  sW     $J5J 	d- *	V	I GGG>y!HOr   )__doc__rr   mathrB   r   PILr   numpyr   r*   IMAGENET_DEFAULT_MEANIMAGENET_DEFAULT_STDIMAGENET_INCEPTION_MEANIMAGENET_INCEPTION_STDr   r%   r7   r5   r2   rs   r@   rD   rJ   rL   ro   r   r   r   r   r   r#   r   r   <module>r      s         - , ) ( # #
J 
J	 7 -   F; ;|*  * Z -B      " . " r   