
    y h2              
       t    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        yy)
    N      i`  i   enTcpuc                    |du rt        d       t        j                  ||dk(  rdnd|	|	||||      }|	rt        j                  |      }|j                  |      }t        j                         5  |j                  |      \  }}t        j                  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        t        j                  |       }t        j                  j                  |       t        d|j                  j                   dd        t        d|j                  j                   dd        dd l}|j#                  |       }d }|j%                         d   j&                   ||      i}|j)                  d |      \  }}t        dj*                   dj*                          t        d|j*                   d|j*                          t,        j.                  j1                   ||      |dd       t,        j.                  j1                   ||      |dd       t        d|  d        y y # 1 sw Y   xY w)!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                   r,| j                         j                         j                         S | j                         j                         S )N)requires_graddetachr   numpy)tensors    j/home/developers/rajanand/mypropertyqr-fmb-refixing-v2/venv/lib/python3.12/site-packages/easyocr/export.pyto_numpyz!export_detector.<locals>.to_numpyB   s>    ##}}**,22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   	   sq    %UV	-3u_E$)1+3)18O7M1ACJ jj*!nnV, ]]_ 	--7-@-@-M*K*JJj11)5,026,.+2),4: 29 :F(W^5_:F6V\6],.>B&+  -	-& 		"9:  / !4!4!:!: ;2fXFG!-"5"5"<"<!=RxHI 	!223JK	( ",,.q1668MN
'2tZ'H$
$1+2C2C1DD]^o^u^u]vwx/
0@0@/AAYZjZpZpYqrs


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


""&')9E 	# 	S 	"#:";;stug 
	- 	-s   1AIIc                     t        j                         } | j                  dddt        dgd       | j                  ddt        d	d
       | j                  dddd       | j                  dddt        g dd       | j                  ddt        d       | j                  ddt        d       | j                         }|j                  }|dk(  rd n||_        t        |j                        dk7  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 9 5O  P k+H  J |! 0N  P 9F  H
8s;  =D((E+0F?4D 
4==Q_b 	bKr(   c                      t               } t        | j                  | j                  | j                  | j
                  | j                  | j                         y )N)rA   rB   rC   r   r   rD   )r_   rO   rA   rB   rC   r   r   rD   )rc   s    r&   mainrf   t   s@    <DD,H,H!]]"nn,0,H,H+/+F+F LL*r(   __main__)
rZ   r2   r.   r,   r$   r>   rO   r_   rf   __name__ r(   r&   <module>rj      s\         .#f,0+/%)  !!#JvZ<* zF r(   