
    9i2              
       x    S SK r S SKrS SKrS SKrS SKr/ SQS/SSSSSSSS4
S jrS rS r\	S	:X  a  \" 5         gg)
    N      i`  i   enTcpuc                    USL a  [        S5        [        R                  " UUS:X  a  SOSU	U	UUUUS9nU	(       Ga  [        R                  " U5      nUR                  U5      n[        R                  " 5          UR                  U5      u  p[        R                  R                  UR                  UU SSSS/S/U(       a  S	S
SS.S	SSS.S.OS SS9
  S S S 5        [        R                  " U 5      n[        R                  R                  U5        [        SUR                  R                   SS 35        [        SUR                  R                   SS 35        SS KnUR#                  U 5      nS nUR%                  5       S   R&                  U" U5      0nUR)                  S U5      u  nn[        SWR*                   SWR*                   35        [        SUR*                   SUR*                   35        [,        R.                  R1                  U" U5      USSS9  [,        R.                  R1                  U" U5      USSS9  [        SU  S 35        g g ! , (       d  f       GN= f)!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                     U R                   (       a,  U R                  5       R                  5       R                  5       $ U R                  5       R                  5       $ )N)requires_graddetachr   numpy)tensors    N/var/www/html/land-doc-ocr/venv/lib/python3.13/site-packages/easyocr/export.pyto_numpy!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_onnxr9   ort_sessionr'   
ort_inputs
y_onnx_outfeature_onnx_outs                         r&   export_detectorrP   	   sf    %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   8AI
I!c            	         [         R                  " 5       n U R                  SSS[        S/SS9  U R                  SS[        S	S
S9  U R                  SSSSS9  U R                  SSS[        / SQSS9  U R                  SS[        SS9  U R                  SS[        SS9  U R                  5       nUR                  nUS:X  a  S OUUl        [        UR                  5      S:w  a  [        S5      eU$ )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)rT   rU   rV   z-dz	--dynamic
store_truez)Dynamic  input output shapes for detector)actionrV   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)rT   rV   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_argsrB   lenrC   
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            	          [        5       n [        U R                  U R                  U R                  U R
                  U R                  U R                  S9  g )N)rB   rC   rD   r   r   rE   )r`   rP   rB   rC   rD   r   r   rE   )rd   s    r&   mainrg   t   s@    <DD,H,H!]]"nn,0,H,H+/+F+F LL*r)   __main__)
r[   r3   r/   r-   r$   r?   rP   r`   rg   __name__ r)   r&   <module>rk      s\         .#f,0+/%)  !!#JvZ<* zF r)   