
    Yh2              
           d dl Z d dlZd dlZd dlZd dlZg ddgddddddddf
dZd Zd Ze	d	k    r e             dS dS )
    N      i`  i   enTcpuc                    |du rt          d           t          j        ||dk    rdnd|	|	||||          }|	r&t          j        |          }|                    |          }t          j                    5  |                    |          \  }}t          j        	                    |j        || ddddgdg|rd	d
ddd	ddddnd d
  
         d d d            n# 1 swxY w Y   t          j
        |           }t          j                            |           t          d|j        j         dd            t          d|j        j         dd            dd l}|                    |           }d }|                                d         j         ||          i}|                    d |          \  }}t          d|j         d|j                    t          d|j         d|j                    t,          j                             ||          |dd           t,          j                             ||          |dd           t          d|  d            d S d S )!NFzEWARNING: it is recommended to use -d dynamic flag when exporting onnxr   T)gpudetector
recognizerquantizemodel_storage_directoryuser_network_directorydownload_enabled   inputoutput
batch_sizeheightwidth)r      r   dim1dim2)r   r   r   )r   r   )export_paramsdo_constant_foldingopset_versioninput_namesoutput_namesdynamic_axesverbosezModel Inputs:
 
zP********************************************************************************zModel Outputs:
 r   c                     | j         r8|                                                                                                 S |                                                                 S )N)requires_graddetachr   numpy)tensors    `/var/www/tools.fuzzalab.pt/emblema-extractor/venv/lib/python3.11/site-packages/easyocr/export.pyto_numpyz!export_detector.<locals>.to_numpyB   sM    # 5}}**,,22444::<<%%'''    z!torch outputs: y_torch_out.shape=z feature_torch_out.shape=zonnx outputs: y_onnx_out.shape=z feature_onnx_out.shape=gMbP?gh㈵>)rtolatolzModel exported to z8 and tested with ONNXRuntime, and the result looks good!)printeasyocrReadertorchrandtono_gradr
   onnxexportloadcheckercheck_modelgraphr   r   onnxruntimeInferenceSession
get_inputsnamerunshapenptestingassert_allclose)detector_onnx_save_pathin_shape	lang_listr   r   r   dynamicdevicer   r
   r   
ocr_readerdummy_inputy_torch_outfeature_torch_outdetector_onnxr8   ort_sessionr'   
ort_inputs
y_onnx_outfeature_onnx_outs                         r&   export_detectorrO   	   sG    %UVVV	-3u__EE$)1+3)18O7M1AC C CJ  3vj**!nnV,, ]__ 	- 	--7-@-@-M-M*K*Jj1)5,026,.+2),4: 29,C(W^5_5_:F6V\6]6],. ,. ,.>B&+  - - -	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	-& 	"9::  ///F!4!:FFfFFGGGH-"5"<HHHHIII 	!223JKK	( 	( 	( ",,..q168M8MN
'2tZ'H'H$
$w+2Cww^o^uwwxxxr
0@rrZjZprrsss

""H[!!:E 	# 	G 	G 	G

""H&'')9E 	# 	S 	S 	S 	t#:tttuuuuug3v 3vs   7ACC"Cc                  <   t          j                    } |                     dddt          dgd           |                     ddt          d	d
           |                     dddd           |                     dddt          g dd           |                     ddt          d           |                     ddt          d           |                                 }|j        }|dk    rd n||_        t          |j                  dk    rt          d          |S )Nz-lz--lang_list+r   z--l en ch_sim ... (language lists for easyocr))nargstypedefaulthelpz-sz--detector_onnx_save_pathzdetector_craft.onnxzbexport detector onnx file path ending in .onnxDo not pass in this flag to avoid exporting detector)rS   rT   rU   z-dz	--dynamic
store_truez)Dynamic  input output shapes for detector)actionrU   z-isz
--in_shaper   z/-is 1 3 608 800 (bsize, channel, height, width)z-mz--model_storage_directoryz'model storage directory for craft model)rS   rU   z-uz--user_network_directoryzuser model storage directoryNone   zQInput shape must have four values (bsize, channel, height, width) eg. 1 3 608 800)
argparseArgumentParseradd_argumentstrint
parse_argsrA   lenrB   
ValueError)parserargsdpaths      r&   r_   r_   V   s   $&&F
m!!%L  N N N 9 5O  P P P k+H  J J J |! 0 0 0N  P P P 9F  H H H
8s;  = = =D(E+0F??44D 
4=Q`b b 	bKr(   c                      t                      } t          | j        | j        | j        | j        | j        | j                   d S )N)rA   rB   rC   r   r   rD   )r_   rO   rA   rB   rC   r   r   rD   )rc   s    r&   mainrf   t   sL    <<DD,H!]"n,0,H+/+F L* * * * * *r(   __main__)
rZ   r2   r.   r,   r$   r>   rO   r_   rf   __name__ r(   r&   <module>rj      s            .--#f,0+/%)  !!#Jv Jv Jv JvZ  <* * * zDFFFFF r(   