
    9iE*                     l   S SK r S SKJr  S SKJs  Jr  S SKrS SKJr  S SKJr  S SK	J
r
  S r " S S\ R                  R                  5      r " S S	\R                  5      r " S
 S\R                  5      r " S S\R                  5      r " S S\R                  5      r " S S\R                  5      rg)    N)models)
namedtuple)versionc                    U  GHX  n[        U[        R                  5      (       a_  [        R                  " UR
                  R                  5        UR                  b&  UR                  R                  R                  5         M  M  [        U[        R                  5      (       aK  UR
                  R                  R                  S5        UR                  R                  R                  5         M  [        U[        R                  5      (       d  GM  UR
                  R                  R                  SS5        UR                  R                  R                  5         GM[     g )N   r   g{Gz?)
isinstancennConv2dinitxavier_uniform_weightdatabiaszero_BatchNorm2dfill_Linearnormal_)modulesms     U/var/www/html/land-doc-ocr/venv/lib/python3.13/site-packages/easyocr/model/modules.pyinit_weightsr   
   s    a##  /vv!!!# "2>>**HHMM"FFKK299%%HHMM!!!T*FFKK     c                   2   ^  \ rS rSrSU 4S jjrS rSrU =r$ )vgg16_bn   c                   > [         [        U ]  5         [        R                  " [
        R                  5      [        R                  " S5      :  a@  [        R                  " U(       a  [        R                  R                  OS S9R                  nOf[        R                  R                  S   R                  SS5      [        R                  R                  S'   [        R                  " US9R                  n[        R                  R!                  5       U l        [        R                  R!                  5       U l        [        R                  R!                  5       U l        [        R                  R!                  5       U l        [        R                  R!                  5       U l        [-        S5       H*  nU R"                  R/                  [1        U5      X4   5        M,     [-        SS5       H*  nU R$                  R/                  [1        U5      X4   5        M,     [-        SS	5       H*  nU R&                  R/                  [1        U5      X4   5        M,     [-        S	S
5       H*  nU R(                  R/                  [1        U5      X4   5        M,     [        R                  R!                  [        R2                  " SSSS9[        R4                  " SSSSSS9[        R4                  " SSSS95      U l        U(       d  [7        U R"                  R9                  5       5        [7        U R$                  R9                  5       5        [7        U R&                  R9                  5       5        [7        U R(                  R9                  5       5        [7        U R*                  R9                  5       5        U(       a)  U R"                  R;                  5        H
  nSUl        M     g g )Nz0.13)weightsr   zhttps://zhttp://)
pretrained         '      r   kernel_sizestridepadding   i      )r&   r(   dilation)r&   F)superr   __init__r   parsetorchvision__version__r   VGG16_BN_WeightsDEFAULTfeaturesvgg
model_urlsreplacetorchr	   
Sequentialslice1slice2slice3slice4slice5range
add_modulestr	MaxPool2dr
   r   r   
parametersrequires_grad)selfr   freezevgg_pretrained_featuresxparam	__class__s         r   r-   vgg16_bn.__init__   s   h&(==001W]]65JJ&,oo;E//774'h $ 17

0E0Ej0Q0Y0YZdfo0pFJJ!!*-&,oo&L&U&U#hh))+hh))+hh))+hh))+hh))+rAKK""3q6+B+EF r2AKK""3q6+B+EF r2AKK""3q6+B+EF r2AKK""3q6+B+EF  hh))1a@		#tAJ		$!4
 ,,./,,./,,./,,./T[[((*+//1%*# 2 r   c                     U R                  U5      nUnU R                  U5      nUnU R                  U5      nUnU R                  U5      nUnU R	                  U5      nUn[        S/ SQ5      nU" XvXTU5      n	U	$ )N
VggOutputs)fc7relu5_3relu4_3relu3_2relu2_2)r9   r:   r;   r<   r=   r   )
rD   Xh	h_relu2_2	h_relu3_2	h_relu4_3	h_relu5_3h_fc7vgg_outputsouts
             r   forwardvgg16_bn.forwardC   s|    KKN	KKN	KKN	KKN	KKN /bc%I)L
r   )r9   r:   r;   r<   r=   )TT__name__
__module____qualname____firstlineno__r-   r[   __static_attributes____classcell__rI   s   @r   r   r      s    )+V r   r   c                   .   ^  \ rS rSrU 4S jrS rSrU =r$ )BidirectionalLSTMR   c                    > [         [        U ]  5         [        R                  " XSSS9U l        [        R                  " US-  U5      U l        g )NT)bidirectionalbatch_first   )r,   rf   r-   r	   LSTMrnnr   linear)rD   
input_sizehidden_sizeoutput_sizerI   s       r   r-   BidirectionalLSTM.__init__T   s<    /177:$TXYiia=r   c                      U R                   R                  5         U R                  U5      u  p#U R                  U5      nU$ !    N*= f)zq
input : visual feature [batch_size x T x input_size]
output : contextual feature [batch_size x T x output_size]
)rm   flatten_parametersrn   )rD   input	recurrent_outputs        r   r[   BidirectionalLSTM.forwardY   sE    
	HH'') xx	Y'		s   A A)rn   rm   r]   rd   s   @r   rf   rf   R   s    >
 r   rf   c                   2   ^  \ rS rSrSU 4S jjrS rSrU =r$ )VGG_FeatureExtractorf   c                   > [         [        U ]  5         [        US-  5      [        US-  5      [        US-  5      U/U l        [
        R                  " [
        R                  " XR                  S   SSS5      [
        R                  " S5      [
        R                  " SS5      [
        R                  " U R                  S   U R                  S   SSS5      [
        R                  " S5      [
        R                  " SS5      [
        R                  " U R                  S   U R                  S   SSS5      [
        R                  " S5      [
        R                  " U R                  S   U R                  S   SSS5      [
        R                  " S5      [
        R                  " SS5      [
        R                  " U R                  S   U R                  S   SSSS	S
9[
        R                  " U R                  S   5      [
        R                  " S5      [
        R                  " U R                  S   U R                  S   SSSS	S
9[
        R                  " U R                  S   5      [
        R                  " S5      [
        R                  " SS5      [
        R                  " U R                  S   U R                  S   SSS5      [
        R                  " S5      5      U l        g )N      rk   r   r$   r   Trk   r   F)r   )r,   r{   r-   intoutput_channelr	   r8   r
   ReLUrA   r   ConvNetrD   input_channelr   rI   s      r   r-   VGG_FeatureExtractor.__init__h   s4   "D24">A#56NQ<N8O">A#56H}}IIm%8%8%;Q1Erwwt}LLAIId))!,d.A.A!.DaANPRPWPWX\P]LLAIId))!,d.A.A!.DaANPRPWPWX\P]IId))!,d.A.A!.DaANPRPWPWX\P]LL(IId))!,d.A.A!.DaATYZNN4..q12BGGDMIId))!,d.A.A!.DaATYZNN4..q12BGGDMLL(IId))!,d.A.A!.DaANPRPWPWX\P]_r   c                 $    U R                  U5      $ Nr   rD   ru   s     r   r[   VGG_FeatureExtractor.forward{       ||E""r   )r   r   )   r]   rd   s   @r   r{   r{   f   s    _&# #r   r{   c                   6   ^  \ rS rSrSrSU 4S jjrS rSrU =r$ )ResNet_FeatureExtractor~   zFeatureExtractor of FAN (http://openaccess.thecvf.com/content_ICCV_2017/papers/Cheng_Focusing_Attention_Towards_ICCV_2017_paper.pdf) c                 Z   > [         [        U ]  5         [        X[        / SQ5      U l        g )N)r   rk      r$   )r,   r   r-   ResNet
BasicBlockr   r   s      r   r-    ResNet_FeatureExtractor.__init__   s!    %t57mZVr   c                 $    U R                  U5      $ r   r   r   s     r   r[   ResNet_FeatureExtractor.forward   r   r   r   )r)   )	r^   r_   r`   ra   __doc__r-   r[   rb   rc   rd   s   @r   r   r   ~   s     QW# #r   r   c                   @   ^  \ rS rSrSrSU 4S jjrSS jrS rSrU =r	$ )	r      r   c                 8  > [         [        U ]  5         U R                  X5      U l        [
        R                  " U5      U l        U R                  X"5      U l        [
        R                  " U5      U l	        [
        R                  " SS9U l        X@l        X0l        g )NTinplace)r,   r   r-   _conv3x3conv1r	   r   bn1conv2bn2r   relu
downsampler'   )rD   inplanesplanesr'   r   rI   s        r   r-   BasicBlock.__init__   sj    j$(*]]84
>>&)]]62
>>&)GGD)	$r   c           	      2    [         R                  " XSUSSS9$ )z3x3 convolution with paddingr$   r   Fr&   r'   r(   r   )r	   r
   )rD   	in_planes
out_planesr'   s       r   r   BasicBlock._conv3x3   s    yyAf!"0 	0r   c                    UnU R                  U5      nU R                  U5      nU R                  U5      nU R                  U5      nU R	                  U5      nU R
                  b  U R                  U5      nX2-  nU R                  U5      nU$ r   )r   r   r   r   r   r   )rD   rG   residualrZ   s       r   r[   BasicBlock.forward   sy    jjmhhsmiinjjohhsm??&q)Hiin
r   )r   r   r   r   r   r   r'   )r   Nr   )
r^   r_   r`   ra   	expansionr-   r   r[   rb   rc   rd   s   @r   r   r      s    I0
 r   r   c                   8   ^  \ rS rSrU 4S jrSS jrS rSrU =r$ )r      c           	        > [         [        U ]  5         [        US-  5      [        US-  5      X"/U l        [        US-  5      U l        [        R                  " U[        US-  5      SSSSS9U l        [        R                  " [        US-  5      5      U l
        [        R                  " [        US-  5      U R
                  SSSSS9U l        [        R                  " U R
                  5      U l        [        R                  " S	S
9U l        [        R                  " SSSS9U l        U R#                  X0R                  S   US   5      U l        [        R                  " U R                  S   U R                  S   SSSSS9U l        [        R                  " U R                  S   5      U l        [        R                  " SSSS9U l        U R#                  X0R                  S   US   SS9U l        [        R                  " U R                  S   U R                  S   SSSSS9U l        [        R                  " U R                  S   5      U l        [        R                  " SSSS9U l        U R#                  X0R                  S   US   SS9U l        [        R                  " U R                  S   U R                  S   SSSSS9U l        [        R                  " U R                  S   5      U l        U R#                  X0R                  S   US   SS9U l        [        R                  " U R                  S   U R                  S   SSSSS9U l        [        R                  " U R                  S   5      U l        [        R                  " U R                  S   U R                  S   SSSSS9U l         [        R                  " U R                  S   5      U l!        g )Nr   rk   r~      r$   r   Fr   Tr   r   r%   )r'   r   )r   r   )"r,   r   r-   r   output_channel_blockr   r	   r
   conv0_1r   bn0_1conv0_2bn0_2r   r   rA   maxpool1_make_layerlayer1r   r   maxpool2layer2r   r   maxpool3layer3conv3bn3layer4conv4_1bn4_1conv4_2bn4_2)rD   r   r   blocklayersrI   s        r   r-   ResNet.__init__   sS   fd$&%(!);%<c.STBT>UWe$v!NQ./yyNR4G0H-.q!%Q^^C(;$<=
yy^b%8!94==-.q!%Q^^DMM2
GGD)	1aH&&u.G.G.JFSTIVYYt88;T=V=V >"/0AES
>>$";";A">?1aH&&u.G.G.JFSTI^_&`YYt88;T=V=V >"/0AES
>>$";";A">?66R&&u.G.G.JFSTI^_&`YYt88;T=V=V >"/0AES
>>$";";A">?&&u.G.G.JFSTI^_&`yy!:!:1!=t?X?X!"@$1266X]_^^D$=$=a$@A
yy!:!:1!=t?X?X!"@$121aeU^^D$=$=a$@A
r   c           
         S nUS:w  d  U R                   X!R                  -  :w  ac  [        R                  " [        R                  " U R                   X!R                  -  SUSS9[        R
                  " X!R                  -  5      5      n/ nUR                  U" U R                   X$U5      5        X!R                  -  U l         [        SU5       H%  nUR                  U" U R                   U5      5        M'     [        R                  " U6 $ )Nr   F)r&   r'   r   )r   r   r	   r8   r
   r   appendr>   )rD   r   r   blocksr'   r   r   is           r   r   ResNet._make_layer   s    
Q;$--6OO+CC		$--//)A&'UDv78J eDMM6:FG0q&!AMM%v67 " }}f%%r   c                    U R                  U5      nU R                  U5      nU R                  U5      nU R                  U5      nU R	                  U5      nU R                  U5      nU R                  U5      nU R                  U5      nU R                  U5      nU R                  U5      nU R                  U5      nU R                  U5      nU R                  U5      nU R                  U5      nU R                  U5      nU R                  U5      nU R                  U5      nU R                  U5      nU R                  U5      nU R!                  U5      nU R                  U5      nU R#                  U5      nU R%                  U5      nU R'                  U5      nU R                  U5      nU R)                  U5      nU R+                  U5      nU R                  U5      nU$ r   )r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   )rD   rG   s     r   r[   ResNet.forward   sv   LLOJJqMIIaLLLOJJqMIIaLMM!KKNJJqMHHQKIIaLMM!KKNJJqMHHQKIIaLMM!KKNJJqMHHQKIIaLKKNLLOJJqMIIaLLLOJJqMIIaLr   )r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   )	r^   r_   r`   ra   r-   r   r[   rb   rc   rd   s   @r   r   r      s    &BP&"" "r   r   )r7   torch.nnr	   torch.nn.initr   r/   r   collectionsr   	packagingr   r   Moduler   rf   r{   r   r   r    r   r   <module>r      s          "  9uxx 9v		 (#299 #0#bii #! !F]RYY ]r   