o
    'Õj®#  ã                   @   s–   d dl mZ d dl mZ d dl mZ d dlZd dlZd dlZd dlZd dlZd dl	m
Z
 d dlmZ dgZdd	„ Zddd„Zdd„ Z		ddd„ZdS )é    )Úabsolute_import)Údivision)Úprint_functionN)Ú
get_logger)Úmaybe_download_paramsÚ
load_modelc              
   C   s€   t j | ¡s>zt  | ¡ W dS  ty= } z#|jtjkr+t j | ¡r+| d 	| ¡¡ ntd 	| ¡ƒ‚W Y d}~dS d}~ww dS )zT
    mkdir if not exists, ignore the exception when multiprocess mkdir together
    z/be happy if some process has already created {}zFailed to mkdir {}N)
ÚosÚpathÚexistsÚmakedirsÚOSErrorÚerrnoÚEEXISTÚisdirÚwarningÚformat)r	   ÚloggerÚe© r   ú`/var/www/html/Deteccion_Ine/venv/lib/python3.10/site-packages/paddleocr/ppocr/utils/save_load.pyÚ_mkdir_if_not_exist    s   ÿÿü€þýr   Údetc                 C   s‚  t ƒ }| d }| d¡}| d¡}i }d}	|dko | d d dv}
|
d	u r·| d d d
v r/|S | d d d }|rµtj tj |d¡¡rttj |d¡dƒ}tjrWt	 
|¡nt	j
|dd}W d  ƒ n1 shw   Y  | di ¡}d|v r|d d |d< | d |¡¡ |durµ|d dv r—|dd… }tj |d ¡r­t 
|d ¡}| |¡ |S | d |¡¡ |S |r­| d¡rÅ| dd¡}tj |d ¡sÔJ d |¡ƒ‚t 
|d ¡}| ¡ }i }| ¡ D ]J\}}||vrù| d || ¡ ¡¡ qå|| }|jtjkrd	}	|j|jkr| |j¡}t|jƒt|jƒkr#|||< qå| d ||j|j¡¡ qå| |¡ |	r=| d¡ |dur`tj |d ¡rXt 
|d ¡}| |¡ n| d |¡¡ tj |d  ¡r¤t|d  dƒ}tjrzt	 
|¡nt	j
|dd}W d  ƒ n	1 sŒw   Y  | di ¡}d|v r¤|d d |d< | d |¡¡ n|r¶t||ƒ}	n| d!¡ |	|d"< |S )#z8
    load model from checkpoint or pretrained_model
    ÚGlobalÚcheckpointsÚpretrained_modelFÚkieÚArchitectureÚ	algorithm©ZSDMGRT©ZDistillationZBackbonezmetric.statesÚrbÚlatin1)ÚencodingNÚbest_model_dictÚepoché   Zstart_epochzresume from {}éÿÿÿÿ)ú/ú\ú.pdoptz9{}.pdopt is not exists, params of optimizer is not loadedú	.pdparamsÚ ú The {}.pdparams does not exists!z{} not in loaded params {} !zIThe shape of model params {} {} not matched with loaded params shape {} !úIThe parameter type is float16, which is converted to float32 when loadingú.statesztrain from scratchÚ
is_float16)r   Úgetr   r	   r
   ÚjoinÚopenÚsixZPY2ÚpickleÚloadÚinfor   ÚpaddleÚset_state_dictr   ÚendswithÚreplaceÚ
state_dictÚitemsÚkeysÚdtypeÚfloat16ÚastypeÚlistÚshapeÚload_pretrained_params)ÚconfigÚmodelÚ	optimizerÚ
model_typer   Zglobal_configr   r   r#   r/   Úis_nlp_modelÚfZstates_dictZ
optim_dictÚparamsr;   Únew_state_dictÚkeyÚvalueZ	pre_valuer   r   r   r   0   s¾   

ÿÿÿÿþ
üþ
ÿÿ
þ
ÿ
þÿÿ

c              
   C   sD  t ƒ }t|ƒ}| d¡r| dd¡}tj |d ¡s!J d |¡ƒ‚t 	|d ¡}|  
¡ }i }d}| ¡ D ]W}|| ¡ vrE| d |¡¡ q4|| jtjkrOd}|| j|| jkre||  || j¡||< t|| jƒt|| jƒkrz|| ||< q4| d ||| j||| j¡¡ q4|  |¡ |r˜| d¡ | d	 |¡¡ |S )
Nr*   r+   r,   Fz%The pretrained params {} not in modelTzFThe shape of model params {} {} not matched with loaded params {} {} !r-   z load pretrain successful from {})r   r   r9   r:   r   r	   r
   r   r7   r5   r;   r=   r   r>   r?   r@   rA   rB   r8   r6   )rE   r	   r   rJ   r;   rK   r/   Zk1r   r   r   rC   “   s>   
ÿþ
ÿrC   FÚppocrc                 K   sœ  t ||ƒ tj ||¡}|dkrtj |d¡}	t |	|ƒ t | ¡ |d ¡ |dkr7t | ¡ tj |	d¡¡ |d d dkoF|d d d	v}
|
d
urit |  ¡ |d ¡ |}|dkrht |  ¡ tj |	d¡¡ n0|d d rs| j}n| }|d d dv r€|j}|j	j
 |¡ tj |d¡}|dkr™|j	j
 |	¡ t|d dƒ}tj||dd W d  ƒ n1 s³w   Y  |rÄ| d |¡¡ dS | d |¡¡ dS )z'
    save model to the target path
    Zbest_accuracyZ
best_modelr)   zmodel.pdoptr   rG   r   r   r   Tr*   zmodel.pdparamsr   Údistributedr   Zmetricr.   Úwbé   )ÚprotocolNzsave best model is to {}zsave model in {})r   r   r	   r1   r7   Úsaver;   Z_layersZStudentZbackbonerE   Zsave_pretrainedr2   r4   Údumpr6   r   )rE   rF   Z
model_pathr   rD   Zis_bestÚprefixÚkwargsZmodel_prefixZbest_model_pathrH   Zmetric_prefixÚarchrI   r   r   r   Ú
save_model»   sP   


ÿÿÿÿ
ÿ€ÿrX   )Nr   )FrN   )Ú
__future__r   r   r   r   r   r4   r3   r7   Zppocr.utils.loggingr   Zppocr.utils.networkr   Ú__all__r   r   rC   rX   r   r   r   r   Ú<module>   s"   
c-ú