
    9i$                     :   S SK Jr  S SKrS SKJs  Jr  S SKrS SKJs  J	r
  S SKJr  S SKrS SKJr  S SKrSSKJr  S SKrS rS rSS jr " S	 S
\5      r " S S\R$                  R4                  R6                  5      r " S S\5      r SS jr SS jr  SS jr g)    )ImageN)OrderedDict   )CTCLabelConverterc                 h    U R                  5       S[        R                  " [        U 5      5      -  -  $ )Ng       @)prodnpsqrtlenxs    S/var/www/html/land-doc-ocr/venv/lib/python3.13/site-packages/easyocr/recognition.pycustom_meanr      s$    668c"''#a&/)**    c                     [         R                  " U S5      n[         R                  " U S5      nX-
  [         R                  " SX-   5      -  X4$ )NZ   
   )r	   
percentilemaximum)imghighlows      r   contrast_greyr      sA    ==b!D==b!CHbjjTX..99r   c           	         [        U 5      u  p#nX!:  a  U R                  [        5      n S[        R                  " SX4-
  5      -  nX-
  S-   U-  n [        R                  " [        R
                  " U R                  S5      [        R                  " [        R
                  " U R                  S5      U 5      5      R                  [        R                  5      n U $ )Ng      i@r      r      )	r   astypeintr	   r   fullshapeminimumuint8)r   targetcontrastr   r   ratios         r   adjust_contrast_greyr&      s    ',HCjjoRZZDH--y2~u$jjA.

277399c;RTW0XY``acaiaijJr   c                   $    \ rS rSrSS jrS rSrg)NormalizePAD   c                     [         R                  " 5       U l        Xl        [        R
                  " US   S-  5      U l        X l        g )N   )
transformsToTensortoTensormax_sizemathfloormax_width_halfPAD_type)selfr/   r3   s      r   __init__NormalizePAD.__init__    s5    "++- "jj!q9 r   c                    U R                  U5      nUR                  S5      R                  S5        UR                  5       u  p#n[        R
                  " U R                  6 R                  S5      nXS S 2S S 2S U24'   U R                  S   U:w  aJ  US S 2S S 2US-
  4   R                  S5      R                  X#U R                  S   U-
  5      US S 2S S 2US 24'   U$ )N      ?r   r+   r   )
r.   sub_div_sizetorchFloatTensorr/   fill_	unsqueezeexpand)r4   r   chwPad_imgs         r   __call__NormalizePAD.__call__&   s    mmC 3((*a##T]]399!<1bqb==q  #Aq!a%K 0 : :1 = D DQ4==YZK[^_K_ `GAq!"Hr   )r3   r/   r2   r.   N)right__name__
__module____qualname____firstlineno__r5   rE   __static_attributes__ r   r   r(   r(      s    !	r   r(   c                   &    \ rS rSrS rS rS rSrg)ListDataset1   c                 0    Xl         [        U5      U l        g N)
image_listr   nSamples)r4   rT   s     r   r5   ListDataset.__init__3   s    $Jr   c                     U R                   $ rS   )rU   )r4   s    r   __len__ListDataset.__len__7   s    }}r   c                 N    U R                   U   n[        R                  " US5      $ )NL)rT   r   	fromarray)r4   indexr   s      r   __getitem__ListDataset.__getitem__:   s!    ooe$sC((r   )rT   rU   N)rI   rJ   rK   rL   r5   rX   r^   rM   rN   r   r   rP   rP   1   s    ()r   rP   c                   $    \ rS rSrSS jrS rSrg)AlignCollate>   c                 4    Xl         X l        X0l        X@l        g rS   imgHimgWkeep_ratio_with_padadjust_contrast)r4   re   rf   rg   rh   s        r   r5   AlignCollate.__init__@   s    		#6 .r   c                 :   [        S U5      nUnU R                  nSn[        X@R                  U45      n/ nU GH"  nUR                  u  pU R
                  S:  aO  [        R                  " UR                  S5      5      n[        XpR
                  S9n[        R                  " US5      nU[        U	5      -  n
[        R                  " U R                  U
-  5      U R                  :  a  U R                  nO#[        R                  " U R                  U
-  5      nUR                  XR                  4[        R                   5      nUR#                  U" U5      5        GM%     [$        R&                  " U Vs/ s H  oR)                  S5      PM     snS5      nU$ s  snf )Nc                 
    U S L$ rS   rN   r   s    r   <lambda>'AlignCollate.__call__.<locals>.<lambda>G   s    $r   r   r   r[   )r#   )filterrf   r(   re   r;   rh   r	   arrayconvertr&   r   r\   floatr0   ceilresizeBICUBICappendr<   catr?   )r4   batchimagesresized_max_winput_channel	transformresized_imagesimagerC   rB   r%   	resized_wresized_imagetimage_tensorss                  r   rE   AlignCollate.__call__F   s@   .6		 -M!JK	E::DA##a's!34,U=Q=QRs3aLEyyU*+dii7 II	 IIdii%&78	!LL)YY)?OM!!)M":; " 		>"J>a;;q>>"JAN #Ks   4F)rh   re   rf   rg   N)    d   F        rH   rN   r   r   ra   ra   >   s    /r   ra   c	                 "   U R                  5         / n	[        R                  " 5          U GHE  n
U
R                  S5      nU
R	                  U5      n[        R
                  " U/U-  5      R	                  U5      n[        R                  " XS-   5      R                  S5      R	                  U5      nU " X5      n[        R
                  " UR                  S5      /U-  5      n[        R                  " USS9nUR                  5       R                  5       R                  5       nSUS S 2S S 2U4'   UR                  SS9nU[        R                  " USS9-  n[        R                   " U5      R#                  5       R	                  U5      nUS:X  av  UR%                  S5      u  nnUR'                  S5      nUR)                  UR*                  R                  5       R                  5       R                  5       UR*                  5      nOUS	:X  a=  UR                  5       R                  5       R                  5       nUR-                  UUS
9nOBUS:X  a<  UR                  5       R                  5       R                  5       nUR/                  UUS
9nUR                  5       R                  5       R                  5       nUR%                  SS9nUR1                  SS9n/ n[3        UU5       HV  u  nnUUS:g     n[5        U5      S:  a  UR7                  U5        M0  UR7                  [        R8                  " S/5      5        MX     [3        WU5       H$  u  nn[;        U5      nU	R7                  UU/5        M&     GMH     S S S 5        U	$ ! , (       d  f       U	$ = f)Nr   r   r+   )dimr   )axisgreedy
beamsearch)	beamWidthwordbeamsearch)evalr<   no_gradr;   to	IntTensor
LongTensorr>   Fsoftmaxcpudetachnumpysumr	   expand_dims
from_numpyrq   maxviewdecode_greedydatadecode_beamsearchdecode_wordbeamsearchargmaxzipr   ru   ro   r   ) model	convertertest_loaderbatch_max_length
ignore_idxchar_group_idxdecoderr   deviceresultr   
batch_sizer}   length_for_predtext_for_predpreds
preds_size
preds_prob	pred_norm_preds_index	preds_strkvaluesindicespreds_max_probvi	max_probspredpred_max_probconfidence_scores                                    r   recognizer_predictr   c   s   	JJLF	(M&++A.J!$$V,E#oo/?.@:.MNQQRXYO!,,ZA9MNTTUVWZZ[abM%/E %**Q-:)EFJ 5a0J#)00288:J)+Jq:~&"A.I#BNN92$FFJ))*5;;=@@HJ("!+!2;)..r2%33K4D4D4H4H4J4Q4Q4S4Y4Y4[]g]l]lm	L(NN$++-335%77Y7O	,,NN$++-335%;;A;S	#)00288:J^^^+F ''Q'/GN67+!adG	y>!#")))4"))"((A3-8 , (+9n'E#m#.}#= t%567 (FW ) 
` Ma 
` Ms   MM??
Nc                    [        X#U5      n[        UR                  5      n	U S:X  a  [        R                  " S5      n
O3U S:X  a  [        R                  " S5      n
O[        R                  " U 5      n
U
R
                  " SSU	0UD6nUS:X  a  [        R                  " XVSS9n[        5       nUR                  5        H  u  pUS	S  nXU'   M     UR                  U5        U(       a1   [        R                  R                  U[        R                  S
S9  X4$  X4$ [        R                  R                  U5      R!                  U5      nUR                  [        R                  " XVSS95        X4$ !    X4$ = f)Ngeneration1zeasyocr.model.modelgeneration2zeasyocr.model.vgg_model	num_classr   F)map_locationweights_only   T)dtypeinplacerN   )r   r   	character	importlibimport_moduleModelr<   loadr   itemsload_state_dictquantizationquantize_dynamicqint8nnDataParallelr   )recog_networknetwork_paramsr   separator_list	dict_list
model_pathr   quantizer   r   	model_pkgr   
state_dictnew_state_dictkeyvaluenew_keys                    r   get_recognizerr      sj    ")YGII''(I%++,AB		-	'++,EF	++M:	OOBiB>BEZZ
eT
$$**,JC!"gG&+7# - 	n-""33EVZ3[    %%e,//7ejjW\]^
 s   &-E/ /E5c                 R   [        US-  5      n0 n/ nU H&  nUR                  U R                  U5      S-   5        M(     U Vs/ s H  nUS   PM
     nnU Vs/ s H  nUS   PM
     nn[        XSS9n[	        U5      n[
        R                  R                  R                  UU	S[        U5      USS9n[        X4UUUUXxUS9	n[        U5       VVs/ s H  u  nnUS   U
:  d  M  UPM     nnn[        U5      S:  ao  U Vs/ s H  nUU   PM
     nn[        XSUS	9n[	        U5      n[
        R                  R                  R                  UU	S[        U5      USS9n[        X4UUUUXxUS9	n/ n[        [        UU5      5       H  u  nn U u  n!n"UU;   aX  WUR                  U5         n#U"S   U#S   :  a  UR                  U!U"S   U"S   45        MM  UR                  U!U#S   U#S   45        Mi  UR                  U!U"S   U"S   45        M     U$ !    GM  = fs  snf s  snf s  snnf s  snf )
Nr   r   r   T)re   rf   rg   F)r   shufflenum_workers
collate_fn
pin_memory)r   rd   )r   ru   r]   ra   rP   r<   utilsr   
DataLoaderr   	enumerater   r   )$r   re   rf   
recognizerr   rT   ignore_charr   r   r   contrast_thsrh   
filter_thsworkersr   r   r   r   charitemcoordimg_listAlignCollate_normal	test_datar   result1r   low_confident_idx	img_list2AlignCollate_contrastresult2r   zippedboxpred1pred2s$                                       r   get_textr      sh    47|NJyt4Q67  ",,T!WE,$./JDQJH/&DQUVH%I++""--j%L-@T . SK
 !DT!+^WZ`bG *37);X);vqQ,@V);X
!*;<*;QXa[*;	< ,$W[m| }	*	kk&&11!j%$'L=R_c 2 e %ZKIY%/^df Fs5'23	6
U!!-33A67EQxa U1XuQx8:U1XuQx8:MMCq5846 4 MM 	,/ Y<s)   #HHHH$H H$H)g?)r      r   )r   T)	 r   r   r   g?r8   g~jth?r   r   )!PILr   r<   torch.backends.cudnnbackendscudnntorch.utils.datatorch.nn.functionalr   
functionalr   torchvision.transformsr,   r   r	   collectionsr   r   r   r   r0   r   r   r&   objectr(   r   DatasetrP   ra   r   r   r   rN   r   r   <module>r     s      $ $    +  #  $ +:
6 &)%++""** )#6 #L _d4p /3D \_LQ/r   