
    Yh$                     (   d dl mZ d dlZd dlmc mZ d dlZd dlmc m	Z
 d dlmZ d dlZd dlmZ d dlZddlmZ d dlZd Zd Zdd	Z G d
 de          Z G d dej        j        j                  Z G d de          Z	 ddZ	 ddZ	 	 ddZ dS )    )ImageN)OrderedDict   )CTCLabelConverterc                 t    |                                  dt          j        t          |                     z  z  S )Ng       @)prodnpsqrtlenxs    e/var/www/tools.fuzzalab.pt/emblema-extractor/venv/lib/python3.11/site-packages/easyocr/recognition.pycustom_meanr      s(    6688c"'#a&&//)**    c                     t          j        | d          }t          j        | d          }||z
  t          j        d||z             z  ||fS )NZ   
   )r	   
percentilemaximum)imghighlows      r   contrast_greyr      sJ    =b!!D=b!!CHbjT#X...c99r   皙?c           	         t          |           \  }}}||k     r|                     t                    } dt          j        d||z
            z  }| |z
  dz   |z  } t          j        t          j        | j        d          t          j        t          j        | j        d          |                                         t          j                  } | S )Ng      i@r      r      )	r   astypeintr	   r   fullshapeminimumuint8)r   targetcontrastr   r   ratios         r   adjust_contrast_greyr'      s    ',,HdC&jjooRZDH---Sy2~u$jA..
2739c;R;RTW0X0XYY``acaijjJr   c                       e Zd ZddZd ZdS )NormalizePADrightc                     t          j                    | _        || _        t	          j        |d         dz            | _        || _        d S )N   )
transformsToTensortoTensormax_sizemathfloormax_width_halfPAD_type)selfr0   r4   s      r   __init__zNormalizePAD.__init__    s>    "+-- "j!q99 r   c                    |                      |          }|                    d                              d           |                                \  }}}t	          j        | j                             d          }||d d d d d |f<   | j        d         |k    rT|d d d d |dz
  f                             d          	                    ||| j        d         |z
            |d d d d |d f<   |S )N      ?r   r,   r   )
r/   sub_div_sizetorchFloatTensorr0   fill_	unsqueezeexpand)r5   r   chwPad_imgs         r   __call__zNormalizePAD.__call__&   s    mmC  3((**1a#T]399!<<111bqb=q   #AAAqqq!a%K 0 : :1 = = D DQ4=YZK[^_K_ ` `GAAAqqq!""Hr   N)r*   __name__
__module____qualname__r6   rE    r   r   r)   r)      s7        ! ! ! !	 	 	 	 	r   r)   c                        e Zd Zd Zd Zd ZdS )ListDatasetc                 <    || _         t          |          | _        d S N)
image_listr   nSamples)r5   rO   s     r   r6   zListDataset.__init__3   s    $Jr   c                     | j         S rN   )rP   )r5   s    r   __len__zListDataset.__len__7   s
    }r   c                 F    | j         |         }t          j        |d          S )NL)rO   r   	fromarray)r5   indexr   s      r   __getitem__zListDataset.__getitem__:   s     oe$sC(((r   N)rG   rH   rI   r6   rR   rW   rJ   r   r   rL   rL   1   sA        ( ( (  ) ) ) ) )r   rL   c                       e Zd ZddZd ZdS )	AlignCollate    d   F        c                 >    || _         || _        || _        || _        d S rN   imgHimgWkeep_ratio_with_padadjust_contrast)r5   r_   r`   ra   rb   s        r   r6   zAlignCollate.__init__@   s&    		#6 .r   c                    t          d |          }|}| j        }d}t          || j        |f          }g }|D ]
}|j        \  }}	| j        dk    rRt          j        |                    d                    }t          || j                  }t          j        |d          }|t          |	          z  }
t          j        | j        |
z            | j        k    r| j        }nt          j        | j        |
z            }|                    || j        ft          j                  }|                     ||                     t%          j        d |D             d          }|S )Nc                 
    | d uS rN   rJ   r   s    r   <lambda>z'AlignCollate.__call__.<locals>.<lambda>G   s
    $ r   r   r   rT   )r$   c                 8    g | ]}|                     d           S r   )r?   ).0ts     r   
<listcomp>z)AlignCollate.__call__.<locals>.<listcomp>`   s"    "J"J"Ja1;;q>>"J"J"Jr   )filterr`   r)   r_   r;   rb   r	   arrayconvertr'   r   rU   floatr1   ceilresizeBICUBICappendr<   cat)r5   batchimagesresized_max_winput_channel	transformresized_imagesimagerC   rB   r&   	resized_wresized_imageimage_tensorss                 r   rE   zAlignCollate.__call__F   sY   ..66	 -M!JKK	 	< 	<E:DAq#a''s!3!344,UT=QRRRs33aLEyU*++di77 I		 Idi%&788	!LL)TY)?OOM!!))M":":;;;;	"J"J>"J"J"JANNr   N)rZ   r[   Fr\   rF   rJ   r   r   rY   rY   >   s7        / / / /    r   rY   greedy   cpuc	                 D   |                                   g }	t          j                    5  |D ]}
|
                    d          }|
                    |          }t          j        |g|z                                |          }t          j        ||dz                                 d                              |          } | ||          }t          j        |                    d          g|z            }t          j	        |d          }|
                                                                                                }d|d d d d |f<   |                    d          }|t          j        |d          z  }t          j        |                                                              |          }|dk    r|                    d          \  }}|                    d          }|                    |j        
                                                                                                |j                  }n|d	k    rP|
                                                                                                }|                    ||
          }nU|dk    rO|
                                                                                                }|                    ||
          }|
                                                                                                }|                    d          }|                    d          }g }t3          ||          D ]b\  }}||dk             }t5          |          dk    r|                    |           :|                    t          j        dg                     ct3          ||          D ]+\  }}t;          |          }|	                    ||g           ,	 d d d            n# 1 swxY w Y   |	S )Nr   r   r,   )dimr\   )axisr~   
beamsearch)	beamWidthwordbeamsearch)evalr<   no_gradr;   to	IntTensor
LongTensorr>   Fsoftmaxr   detachnumpysumr	   expand_dims
from_numpyrn   maxviewdecode_greedydatadecode_beamsearchdecode_wordbeamsearchargmaxzipr   rr   rl   r   ) model	convertertest_loaderbatch_max_length
ignore_idxchar_group_idxdecoderr   deviceresultr}   
batch_sizerz   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   	JJLLLF	 .8 .8( -	8 -	8M&++A..J!$$V,,E#o/?.@:.MNNQQRXYYO!,Z9IA9MNNTTUVWWZZ[abbME%//E %**Q--:)EFFJ 5a000J#))002288::J)+Jqqq:~&"A..I#BN92$F$F$FFJ)*55;;==@@HHJ(""!+!2!2;)..r22%33K4D4H4H4J4J4Q4Q4S4S4Y4Y4[4[]g]lmm		L((NN$$++--3355%77Y7OO		,,,NN$$++--3355%;;A;SS	#))002288::J^^^++F ''Q'//GN67++ 9 9!adG	y>>!##")))4444"))"(A3--8888'*9n'E'E 8 8#m#.}#=#= t%5677778W-	8.8 .8 .8 .8 .8 .8 .8 .8 .8 .8 .8 .8 .8 .8 .8` Ms   OPPPTc                     t          |||          }t          |j                  }	| dk    rt          j        d          }
n/| dk    rt          j        d          }
nt          j        |           }
 |
j        dd|	i|}|dk    rt          j        ||d          }t                      }|	                                D ]\  }}|d	d          }|||<   |
                    |           |r5	 t          j                            |t          j        d
           nd#  Y n`xY wn\t          j                            |                              |          }|
                    t          j        ||d                     ||fS )Ngeneration1zeasyocr.model.modelgeneration2zeasyocr.model.vgg_model	num_classr   F)map_locationweights_only   T)dtypeinplacerJ   )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      s    ")^YGGII'((I%%+,ABB			-	'	'+,EFF		+M::	IOBBiB>BBEZ
eTTT
$$**,, 	, 	,JC!""gG&+N7##n--- 	"33EVZ3[[[[		 %%e,,//77ej&W\]]]^^^)s   +,D D 皙?r8   ~jth?c                   
" t          |dz            }i }g }|D ]4}|                    |                     |          dz              .#  Y 2xY wd |D             }d |D             "t          ||d          }t	          "          }t
          j        j                            ||	dt          |          |d          }t          |||||||||		  	        }
fd
t          |          D             }t          |          dk    r"fd|D             }t          ||d|          }t	          |          }t
          j        j                            ||	dt          |          |d          }t          |||||||||		  	        }g }t          t          ||                    D ]\  }}|\  }} ||v rw||                    |                   }!| d         |!d         k    r%|                    || d         | d         f           `|                    ||!d         |!d         f           |                    || d         | d         f           |S )Nr   r   c                     g | ]
}|d          S rg   rJ   rh   items     r   rj   zget_text.<locals>.<listcomp>   s    ,,,T!W,,,r   c                     g | ]
}|d          S r   rJ   r   s     r   rj   zget_text.<locals>.<listcomp>   s    ///DQ///r   T)r_   r`   ra   F)r   shufflenum_workers
collate_fn
pin_memory)r   c                 2    g | ]\  }}|d          k     |S r   rJ   )rh   r   r   contrast_thss      r   rj   zget_text.<locals>.<listcomp>   s+    XXXvqQ,@V@V@V@V@Vr   r   c                      g | ]
}|         S rJ   rJ   )rh   r   img_lists     r   rj   zget_text.<locals>.<listcomp>   s    <<<QXa[<<<r   r^   )r   rr   rV   rY   rL   r<   utilsr   
DataLoaderr   	enumerater   r   )#r   r_   r`   
recognizerr   rO   ignore_charr   r   r   r   rb   
filter_thsworkersr   r   r   r   charcoordAlignCollate_normal	test_datar   result1low_confident_idx	img_list2AlignCollate_contrastresult2r   r   zippedboxpred1pred2r   s#             `                       @r   get_textr     s    47||NJ  yt44Q67777,,,,,E//J///H&DtQUVVVH%%I+"--j%LL-@T . S SK
 !YDT!+^WiZ`b b bG YXXX7););XXX
!!<<<<*;<<<	 ,$TW[m| } } }	**	k&11!j%$'LL=R_c 2 e e %ZKIY%/)^df f f Fs5'2233 	7 	7	6
U!!!-33A667EQxa  U1XuQx8::::U1XuQx8::::MMCq5846666Ms   +A		A)r   )r~   r   r   )r   T)	r   r~   r   r   r   r8   r   r   r   )!PILr   r<   torch.backends.cudnnbackendscudnntorch.utils.datatorch.nn.functionalr   
functionalr   torchvision.transformsr-   r   r	   collectionsr   r   r   r   r1   r   r   r'   objectr)   r   DatasetrL   rY   r   r   r  rJ   r   r   <module>r     s          $ $ $ $ $ $ $ $ $              + + + + + +     # # # # # #     $ $ $ $ $ $ + + +: : :
       6   &) ) ) ) )%+"* ) ) )# # # # #6 # # #L _d4 4 4 4p /3   D \_LQ/ / / / / /r   