o
    ,h2                  
   @   sr   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dZdd	 Zd
d Ze	dkr7e  dS dS )    N      i`  i   enTcpuc                 C   s  |du rt d tj||dkrdnd|	|	||||d}|	rt|}||}t 1 ||\}}tjj	|j|| ddddgdg|rPd	d
ddd	ddddnd dd
 W d    n1 s_w   Y  t
| }tj| t d|jj dd  t d|jj dd  dd l}|| }dd }| d j||i}|d |\}}t d|j d|j  t d|j d|j  tjj|||ddd tjj|||d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                 S   s"   | j r|    S |   S )N)requires_graddetachr   numpy)tensor r#   I/var/www/html/scripts/venv/lib/python3.10/site-packages/easyocr/export.pyto_numpyB   s   z!export_detector.<locals>.to_numpyz!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_onnxr5   ort_sessionr%   
ort_inputs
y_onnx_outfeature_onnx_outr#   r#   r$   export_detector	   sf   







rL   c                  C   s   t  } | jdddtdgdd | jddtd	d
d | jddddd | jdddtg ddd | jddtdd | jddtdd |  }|j}|dkrOd 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)rO   rP   rQ   z-dz	--dynamic
store_truez)Dynamic  input output shapes for detector)actionrQ   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)rO   rQ   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_argsr>   lenr?   
ValueError)parserargsdpathr#   r#   r$   r[   V   sB   


r[   c                  C   s*   t  } t| j| j| j| j| j| jd d S )N)r>   r?   r@   r   r   rA   )r[   rL   r>   r?   r@   r   r   rA   )r_   r#   r#   r$   maint   s   
ra   __main__)
rV   r/   r+   r)   r!   r;   rL   r[   ra   __name__r#   r#   r#   r$   <module>   s*    
M

