
    i*C                        S r SSKJr  SSKJr  SSKJr  SSKJr  SSKrSSKrSSKr	SSK
r
SSKJr   " S S	\5      r " S
 S\5      r " S S\5      r " S S\5      r " S S\5      r " S S\5      r " S S\5      r " S S\5      r " S S\5      r " S S\5      r " S S\5      r " S S\5      r " S  S!\5      rg)"ab  
# Copyright (c) 2020 PaddlePaddle Authors. All Rights Reserved
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
    )absolute_import)division)print_function)unicode_literalsNImagec                   *    \ rS rSrSr SS jrS rSrg)DecodeImage   zdecode imagec                 (    Xl         X l        X0l        g N)img_modechannel_firstignore_orientation)selfr   r   r   kwargss        d/var/www/html/banglarbhumi/venv/lib/python3.13/site-packages/paddleocr/ppocr/data/imaug/operators.py__init__DecodeImage.__init__    s     !*"4    c                    US   n[        U5      [        L a  [        U5      S:  d   S5       e[        R                  " USS9nU R
                  (       a7  [        R                  " U[        R                  [        R                  -  5      nO[        R                  " US5      nUc  g U R                  S:X  a&  [        R                  " U[        R                  5      nOFU R                  S:X  a6  UR                  S	   S
:X  d   SUR                  -  5       eUS S 2S S 2S S S24   nU R                  (       a  UR                  S5      nX!S'   U$ )Nimager   z"invalid input 'img' in DecodeImageuint8dtype   GRAYRGB      zinvalid shape of image[%s]r   r   r   )typebyteslennp
frombufferr   cv2imdecodeIMREAD_IGNORE_ORIENTATIONIMREAD_COLORr   cvtColorCOLOR_GRAY2BGRshaper   	transpose)r   dataimgs      r   __call__DecodeImage.__call__'   s   7mCyE!c#hlX4XX2mmCw/"",,sC$A$ACDTDT$TUC,,sA&C;==F",,sC$6$67C]]e#99Q<1$P&Bcii&PP$aDbDj/C--	*CWr   )r   r   r   N)r   FF__name__
__module____qualname____firstlineno____doc__r   r2   __static_attributes__ r   r   r
   r
      s     GL5r   r
   c                   (    \ rS rSrSrSS jrS rSrg)NormalizeImage>   z1normalize image such as subtract mean, divide stdNc                    [        U[        5      (       a  [        U5      n[        R                  " Ub  UOS5      U l        Ub  UO/ SQnUb  UO/ SQnUS:X  a  SOSn[        R                  " U5      R                  U5      R                  S5      U l	        [        R                  " U5      R                  U5      R                  S5      U l
        g )Ngp?)g
ףp=
?gv/?gCl?)gZd;O?gy&1?g?chw)r    r   r   )r   r   r    float32)
isinstancestrevalr&   rA   scalearrayreshapeastypemeanstd)r   rE   rI   rJ   orderr   r.   s          r   r   NormalizeImage.__init__A   s    eS!!KEZZ):L
't-B_c*?"e^	HHTN**5188C	88C=((/66yAr   c                 >   US   nSSK Jn  [        X#R                  5      (       a  [        R                  " U5      n[        U[        R
                  5      (       d   S5       eUR                  S5      U R                  -  U R                  -
  U R                  -  US'   U$ )Nr   r   r   z%invalid input 'img' in NormalizeImagerA   )
PILr   rB   r&   rF   ndarrayrH   rE   rI   rJ   r   r0   r1   r   s       r   r2   NormalizeImage.__call__L   sy    7mc;;''((3-C#rzz**S,SS*I.;diiG488SWr   )rI   rE   rJ   )NNNr@   r4   r;   r   r   r=   r=   >   s    ;	Br   r=   c                   $    \ rS rSrSrS rS rSrg)
ToCHWImageW   zconvert hwc image to chw imagec                     g r   r;   )r   r   s     r   r   ToCHWImage.__init__Z   s    r   c                     US   nSSK Jn  [        X#R                  5      (       a  [        R                  " U5      nUR                  S5      US'   U$ )Nr   r   r   r"   )rN   r   rB   r&   rF   r/   rP   s       r   r2   ToCHWImage.__call__]   sA    7mc;;''((3-Ci0Wr   r;   Nr4   r;   r   r   rS   rS   W   s    (r   rS   c                   $    \ rS rSrSS jrS rSrg)Fasttextg   c                 8    SS K nUR                  U5      U l        g )Nr   )fasttext
load_model
fast_model)r   pathr   r]   s       r   r   Fasttext.__init__h   s    "--d3r   c                 6    US   nU R                   U   nX1S'   U$ )Nlabel
fast_labelr_   )r   r0   rc   rd   s       r   r2   Fasttext.__call__m   s&    W__U+
'\r   re   N)Noner5   r6   r7   r8   r   r2   r:   r;   r   r   rZ   rZ   g   s    4
r   rZ   c                        \ rS rSrS rS rSrg)KeepKeyst   c                     Xl         g r   	keep_keys)r   rn   r   s      r   r   KeepKeys.__init__u   s    "r   c                 V    / nU R                    H  nUR                  X   5        M     U$ r   )rn   append)r   r0   	data_listkeys       r   r2   KeepKeys.__call__x   s+    	>>CTY' "r   rm   Nrh   r;   r   r   rj   rj   t   s    #r   rj   c                   $    \ rS rSrSS jrS rSrg)Pad   Nc                     UbC  [        U[        [        [        45      (       d#  [	        SR                  [        U5      5      5      e[        U[        5      (       a  X/nXl        X l        g )Nz)Type of target_size is invalid. Now is {})	rB   intlisttuple	TypeErrorformatr#   sizesize_div)r   r~   r   r   s       r   r   Pad.__init__   sZ    Jtc45G$H$H;BB4:N  dC  <D	 r   c           
      t   US   nUR                   S   UR                   S   pCU R                  (       a   U R                  u  pVX5:  a  XF:  d   S5       eO[        [        [        R
                  " UR                   S   U R                  -  5      U R                  -  5      U R                  5      n[        [        [        R
                  " UR                   S   U R                  -  5      U R                  -  5      U R                  5      n[        R                  " USXS-
  SXd-
  [        R                  SS9nX!S'   U$ )Nr   r   r   z;(h, w) of target size should be greater than (img_h, img_w))value)
r.   r~   maxry   mathceilr   r(   copyMakeBorderBORDER_CONSTANT)r   r0   r1   img_himg_w	resize_h2	resize_w2s          r   r2   Pad.__call__   s   7myy|SYYq\u99#'99 I!e&7MLM7&7 DIIciilT]]:;dmmKLI DIIciilT]]:;dmmKLI   
 Wr   )r~   r   N    rh   r;   r   r   rv   rv      s    !r   rv   c                   *    \ rS rSrSS jrS rS rSrg)Resize   c                     Xl         g r   r~   )r   r~   r   s      r   r   Resize.__init__   s    	r   c                     U R                   u  p#UR                  S S u  pE[        U5      U-  n[        U5      U-  n[        R                  " U[        U5      [        U5      45      nXU/4$ )Nr   )r~   r.   floatr(   resizery   )r   r1   resize_hresize_wori_hori_wratio_hratio_ws           r   resize_imageResize.resize_image   sf    !YYyy!}/E)/E)jjs8}c(m<=g&&&r   c                 >   US   nSU;   a  US   nU R                  U5      u  nu  pVSU;   al  / nW H>  n/ n	U H"  n
U	R                  U
S   U-  U
S   U-  /5        M$     UR                  U	5        M@     [        R                  " U[        R                  S9US'   XAS'   U$ )Nr   polysr   r   r   )r   rq   r&   rF   rA   )r   r0   r1   
text_polys
img_resizer   r   	new_boxesboxnew_boxcords              r   r2   Resize.__call__   s    7md?gJ)-):):3)?&
&Wd?I!DNNDGg$5tAw7H#IJ    )	 "
 HHYbjjADM"Wr   r   N))  r   )r5   r6   r7   r8   r   r   r2   r:   r;   r   r   r   r      s    'r   r   c                   J   ^  \ rS rSrU 4S jrS rS	S jrS rS rS r	Sr
U =r$ )
DetResizeForTest   c                 N  > [         [        U ]  5         SU l        SU l        SU;   a#  US   U l        SU l        SU;   a  US   U l        g g SU;   a"  US   U l        UR                  SS5      U l        g S	U;   a  S
U l        UR                  S	S5      U l	        g SU l        SU l        g )Nr   Fimage_shaper   
keep_ratiolimit_side_len
limit_typeminresize_longr   i  i  )
superr   r   resize_typer   r   r   getr   r   r   r   	__class__s     r   r   DetResizeForTest.__init__   s    .0F"%m4D Dv%"("6 &'"()9":D$jju=DOf$ D%zz-=D"%D#DOr   c                 v   US   nUR                   u  p4n[        X4/5      S:  a  U R                  U5      nU R                  S:X  a  U R	                  U5      u  nu  pgO=U R                  S:X  a  U R                  U5      u  nu  pgOU R                  U5      u  nu  pgX!S'   [        R                  " X4Xg/5      US'   U$ )Nr   @   r   r   r.   )	r.   sumimage_paddingr   resize_image_type0resize_image_type2resize_image_type1r&   rF   )r   r0   r1   src_hsrc_w_r   r   s           r   r2   DetResizeForTest.__call__   s    7m))a~#$$S)Cq &*&=&=c&B#C#'7"&*&=&=c&B#C#'7 '+&=&=c&B#C#'W%!ABWr   c                     UR                   u  p4n[        R                  " [        SU5      [        SU5      U4[        R                  5      U-   nXS U2S U2S S 24'   U$ r   )r.   r&   zerosr   r   )r   imr   hwcim_pads          r   r   DetResizeForTest.image_padding   sV    ((a3r1:s2qz15rxx@5Hrr2A2qyr   c                 @   U R                   u  p#UR                  S S u  pEU R                  SL a%  XR-  U-  n[        R                  " US-  5      nUS-  n[        U5      U-  n[        U5      U-  n[        R                  " U[        U5      [        U5      45      nXU/4$ )Nr   Tr   )	r   r.   r   r   r   r   r(   r   ry   )	r   r1   r   r   r   r   Nr   r   s	            r   r   #DetResizeForTest.resize_image_type1   s    !--yy!}??d"'%/H		(R-(A2vH/E)/E)jjs8}c(m<=g&&&r   c                    U R                   nUR                  u  p4nU R                  S:X  a5  [        X45      U:  a#  X4:  a  [	        U5      U-  nO[	        U5      U-  nO{SnOxU R                  S:X  a5  [        X45      U:  a#  X4:  a  [	        U5      U-  nOE[	        U5      U-  nO6SnO3U R                  S:X  a  [	        U5      [        X45      -  nO[        S5      e[        X6-  5      n[        XF-  5      n[        [        [        US-  5      S-  5      S5      n[        [        [        US-  5      S-  5      S5      n [        U5      S::  d  [        U5      S::  a  g[        R                  " U[        U5      [        U5      45      nU[	        U5      -  n	U[	        U5      -  n
XU
/4$ !   [        UR                  X5        [        R                  " S5         NQ= f)	z
resize image to a size multiple of 32 which is required by the network
args:
    img(array): array with shape [h, w, c]
return(tuple):
    img, (ratio_h, ratio_w)
r   g      ?r   r   znot support limit type, image r   r   )N)NN)r   r.   r   r   r   r   	Exceptionry   roundr(   r   printsysexit)r   r1   r   r   r   r   ratior   r   r   r   s              r   r   #DetResizeForTest.resize_image_type0   s    ,,))a ??e#1y>)5!.1A5E!.1A5E__%1y>)5!.1A5E!.1A5E__-.)CI5E<==qy>qy>s5B/"45r:s5B/"45r:	8}!S]a%7)**S3x=#h-"@AC U1X%U1X%g&&&	#))X0HHQKs   <F' +F' '.Gc                    UR                   u  p#nUnUnXe:  a  [        U R                  5      U-  nO[        U R                  5      U-  n[        Xg-  5      n[        XW-  5      nSnXh-   S-
  U-  U-  nXX-   S-
  U-  U-  n[        R
                  " U[        U5      [        U5      45      nU[        U5      -  n	U[        U5      -  n
XU
/4$ )N   r   )r.   r   r   ry   r(   r   )r   r1   r   r   r   r   r   r   
max_strider   r   s              r   r   #DetResizeForTest.resize_image_type20  s    ))a$**+h6E$**+h6Ex'(x'(
)A-*<zI)A-*<zIjjs8}c(m<=U1X%U1X%g&&&r   )r   r   r   r   r   r   )r   )r5   r6   r7   r8   r   r2   r   r   r   r   r:   __classcell__r   s   @r   r   r      s'    $&$'/'b' 'r   r   c                   B   ^  \ rS rSrU 4S jrS rSS jrSS jrSrU =r	$ )E2EResizeForTestiH  c                 R   > [         [        U ]  5         US   U l        US   U l        g )Nmax_side_len	valid_set)r   r   r   r   r   r   s     r   r   E2EResizeForTest.__init__I  s*    .0">2,r   c                    US   nUR                   u  p4nU R                  S:X  a  U R                  X R                  S9u  nu  pxOU R	                  X R                  S9u  nu  pxXaS'   [
        R                  " X4Xx/5      US'   U$ )Nr   	totaltext)r   r.   )r.   r   resize_image_for_totaltextr   r   r&   rF   )	r   r0   r1   r   r   r   
im_resizedr   r   s	            r   r2   E2EResizeForTest.__call__N  s    7m))a>>[(-1-L-L"3"3 .M .*J*' .2->->"3"3 .? .*J* #W%!ABWr   c                 \   UR                   u  p4nUnUnSnX8-  U:  a  [        U5      U-  n[        Xx-  5      n[        Xh-  5      nSn	Xy-   S-
  U	-  U	-  nXi-   S-
  U	-  U	-  n[        R                  " U[        U5      [        U5      45      nU[        U5      -  n
U[        U5      -  nXU44$ )Ng      ?r   r   r.   r   ry   r(   r   r   r   r   r   r   r   r   r   r   r   r   r   s               r   r   +E2EResizeForTest.resize_image_for_totaltext]  s    ((a9|#,'(2Ex'(x'(
)A-*<zI)A-*<zIZZS]CM:;U1X%U1X%W%%%r   c                 p   UR                   u  p4nUnUnXv:  a  [        U5      U-  nO[        U5      U-  n[        Xx-  5      n[        Xh-  5      nSn	Xy-   S-
  U	-  U	-  nXi-   S-
  U	-  U	-  n[        R                  " U[        U5      [        U5      45      nU[        U5      -  n
U[        U5      -  nXU44$ )z
resize image to a size multiple of max_stride which is required by the network
:param im: the resized image
:param max_side_len: limit of max image size to avoid out of memory in gpu
:return: the resized image and the resize ratio
r   r   r   r   s               r   r   E2EResizeForTest.resize_imageo  s     ((a ,'(2E,'(2Ex'(x'(
)A-*<zI)A-*<zIZZS]CM:;U1X%U1X%W%%%r   )r   r   )   )
r5   r6   r7   r8   r   r2   r   r   r:   r   r   s   @r   r   r   H  s    -
&$& &r   r   c                   :   ^  \ rS rSrU 4S jrS rS rS rSrU =r	$ )	KieResizei  c                 `   > [         [        U ]  5         US   S   US   S   sU l        U l        g )N	img_scaler   r   )r   r   r   max_sidemin_sider   s     r   r   KieResize.__init__  s5    i')'-k':1'=vk?RST?U$t}r   c                     US   nUS   nUR                   u  pEnU R                  U5      u  nnu  pu  pU R                  X#U5      nX!S'   X1S'   XS'   XqS'   [        R                  " X/5      US'   U$ )Nr   points	ori_image	ori_boxesr.   )r.   r   resize_boxesr&   rF   )r   r0   r1   r   r   r   r   r   scale_factorr   r   new_hnew_wresize_pointss                 r   r2   KieResize.__call__  s    7mh))a c"	
WU))#|D["[&X"W%0Wr   c                 F   [         R                  " / SQSS9nSS/nUR                  S S u  pE[        U5      n[	        U5      n[	        U[        XE5      -  U[	        XE5      -  5      n[        U[        U5      -  S-   5      [        U[        U5      -  S-   5      pSnX-   S	-
  U-  U-  n
X-   S	-
  U-  U-  n	[        R                  " XU
45      nUR                  S S u  pX-  nX-  n[         R                  " UUUU/[         R                  S9nXS U2S U2S S 24'   X(UU/X/4$ )
N)   r  r    rA   r   r   r  r   g      ?r   r   )r&   r   r.   r   r   ry   r   r(   r   rF   rA   )r   r1   norm_imgrE   r   r   max_long_edgemax_short_edger   r   r   r   r   r   r   w_scaleh_scales                    r   r   KieResize.resize_image  s>   88O9=dyy!}E
U=3q94ns1y6PQ U<%8!83!>?l##c)B
( 
)A-*<zI)A-*<zIZZ12xx|))xx'7G DBJJW&(%%"#'9E>IIr   c                     X#-  nUR                   S S n[        R                  " US S 2SS S24   SUS   5      US S 2SS S24'   [        R                  " US S 2SS S24   SUS   5      US S 2SS S24'   U$ )Nr   r   r   )r.   r&   clip)r   r   r   r   	img_shapes        r   r   KieResize.resize_boxes  s    &HHRaL	''&ADqD/1ilCq!$Q$w''&ADqD/1ilCq!$Q$wr   )r   r   )
r5   r6   r7   r8   r   r2   r   r   r:   r   r   s   @r   r   r     s    V$J* r   r   c                   2    \ rS rSr       SS jrS rSrg)SRResizei  c                 X    Xl         X l        X@l        XPl        X0l        X`l        Xpl        g r   )imgHimgWr   	min_ratiodown_sample_scalemask
infer_mode)	r   r  r  r  r   r  r  r  r   s	            r   r   SRResize.__init__  s(     		$"!2	$r   c                    U R                   nU R                  nUS   n[        X0R                  -  X R                  -  45      nU" U5      nXAS'   U R                  (       a  U$ US   nUS   n[        X245      nU" U5      nXaS'   U$ )Nimage_lrimg_lrimage_hrrc   img_hr)r  r  ResizeNormalizer  r  )	r   r0   r  r  	images_lr
transform2	images_HR
label_strs	transforms	            r   r2   SRResize.__call__  s    yyyy$	$+++T5K5K-KL

 y)	"X??K$	']
#TL1	i(	"Xr   )r  r  r  r  r   r  r  N)r   r      Fr   FFrh   r;   r   r   r  r    s#     %&r   r  c                   :    \ rS rSr\R
                  4S jrS rSrg)r  i  c                     Xl         X l        g r   )r~   interpolation)r   r~   r&  s      r   r   ResizeNormalize.__init__  s    	*r   c                     UR                  U R                  U R                  5      n[        R                  " U5      R                  S5      nUR                  S5      S-  nU$ )NrA   r"      )r   r~   r&  r&   rF   rH   r/   )r   r1   	img_numpys      r   r2   ResizeNormalize.__call__  sO    jjD$6$67HHSM((3	''	2S8	r   )r&  r~   N)	r5   r6   r7   r8   r   BICUBICr   r2   r:   r;   r   r   r  r    s    +0== +r   r  c                   (    \ rS rSrSrSS jrS rSrg)GrayImageChannelFormati  z]
format gray scale image's channel: (3,h,w) -> (1,h,w)
Args:
    inverse: inverse gray image
c                     Xl         g r   inverse)r   r1  r   s      r   r   GrayImageChannelFormat.__init__  s    r   c                     US   n[         R                  " U[         R                  5      n[        R                  " US5      nU R
                  (       a  [        R                  " US-
  5      US'   OXAS'   X!S'   U$ )Nr   r   r   	src_image)r(   r,   COLOR_BGR2GRAYr&   expand_dimsr1  abs)r   r0   r1   img_single_channelimg_expandeds        r   r2   GrayImageChannelFormat.__call__   se    7m \\#s/A/AB~~&8!<<<FF<!#34DM(M[r   r0  N)Fr4   r;   r   r   r.  r.    s    r   r.  )r9   
__future__r   r   r   r   r   r(   numpyr&   r   rN   r   objectr
   r=   rS   rZ   rj   rv   r   r   r   r   r  r  r.  r;   r   r   <module>r>     s     '  % ' 
 
   & BV 2  
v 
v && &RV <'v 'DC&v C&L1 1h%v %P	f 	V r   