
    wi%                         d dl Z d dlZd dlmZ d dlmZmZ d dlZd dl	Z	d dl
mZ d dl	mZ ddlmZmZ ddlmZ dd	lmZ d
dlmZmZ  G d de          Z G d de          ZdS )    N)Path)OptionalTuple)ConfigKeyError)	inference   )DownloadFileDownloadFileInput)logger)
OCRVersion   )FileInfoInferSessionc                       e Zd Zddee         ddfdZd Zdeeef         fdZ	dededefd	Z
d
 Zd Zdej        fdZd Zd Zed             ZddedefdZdS )PaddleInferSessionNmodereturnc                    || _         |                     |j                   |                     |          \  }}|j        t
          j        k    r|                     |||           d S |                     |||           d S N)	r   _set_device_envs
engine_cfg_setup_modelocr_versionr   PPOCRV5_init_predictor_v2_init_predictor_v1)selfcfgr   pdmodel_pathpdiparams_paths        x/var/www/development/aibuddy-work/election-extract/venv/lib/python3.11/site-packages/rapidocr/inference_engine/paddle.py__init__zPaddleInferSession.__init__   s    	 	cn---'+'8'8'='=$n?j000##C~FFFFF##C~FFFFF    c                    d }                     dd          ri } ||           dS t          fddD                       si } ||           dS                      dd          rdddd	d
d
d} ||           dS dS )u!   设置设备特定的环境变量c                     |                                  D ].\  }}|t          j        |<   t          j        | d| d           /d S )Nz has been set to .)itemsosenvironr   debug)envskeyvals      r!   	_set_envsz6PaddleInferSession._set_device_envs.<locals>._set_envs$   sV     JJLL > >S"%
3<<c<<<====> >r#   use_cudaFc                 B    g | ]}                     d | d          S )use_F)get).0devr   s     r!   
<listcomp>z7PaddleInferSession._set_device_envs.<locals>.<listcomp>.   s=        |c||U33  r#   )cudanpuxpumludcugcuuse_npu0auto_growthz0pad3d,pad3d_grad,set_value,set_value_with_tensorTrue)FLAGS_npu_jit_compileFLAGS_use_stride_kernelFLAGS_allocator_strategyCUSTOM_DEVICE_BLACK_LISTFLAGS_npu_scale_aclnnFLAGS_npu_split_aclnnN)r2   any)r   r   r.   r+   s    `  r!   r   z#PaddleInferSession._set_device_envs!   s    	> 	> 	>
 >>*e,, 	DIdOOOOO   F  
 
 	 DIdOOOOO ^^Iu-- 		),+.,9,^)/)/ D IdOOOOO		 		r#   c           	      J   d}d}d}|                     dd           }||                     t          |j        |j        |j        |j        |j                            }|d         }	 |                     |||          }nN# t          $ r!}	|                     |||          }Y d }	~	n(d }	~	wt          $ r}	t          d|	           |	d }	~	ww xY w|                     |||          }
t          j        d|            t          j        d|
            ||
fS t          |          }||z  }||z  }
|                                s||z  }|                     |           |                     |
           t          j        d|            t          j        d|
            ||
fS )Nzinference.jsonzinference.pdmodelzinference.pdiparams	model_dir)engine_typer   	task_type	lang_type
model_typezDownload model error: zUsing )r2   get_model_urlr   rI   r   rJ   rK   rL   download_modelr   	ExceptionPaddleInferErrorr   infor   exists_verify_model)r   r   pdmodel_namepdmodel_name_v2pdiparams_namerH   
model_infodefault_model_dirr   er    s              r!   r   zPaddleInferSession._setup_modelB   s   '-.GGK..	++ # #!m!m"~   J !+; 7	L#22 1<    "   #22 1?     L L L&'C'C'CDD!KL "00-~ N K///000K111222//OO	 </"^3""$$ 	7$6L<(((>***+\++,,,-^--...^++s$   (B   
C
B&&C3CCrX   model_file_namec                     | d| }| j         t          |          j        z  |z  }t          j        t          |||         |t                               |S )N/)file_urlsha256	save_pathr   )DEFAULT_MODEL_PATHr   namer	   runr
   r   )r   rW   rX   rZ   model_file_urlmodel_file_paths         r!   rN   z!PaddleInferSession.download_models   sz     .AAAA#d+<&=&=&BB_T 	 	'!/2)	  	
 	
 	
 r#   c                 \   t          j        t          |          t          |                    }|j        j        rn|                                 }|t          j        d           |j        j        }|	                    |j        j
        |           t          j        d|            n}|j        j        rI|j                            dd          }|                    d|           t          j        d|            n(|                                 t          j        d           t!          j                    }|j                            dd	          }	|	d	k    r<d
|	cxk    r|k    r/n n,|                    |	           t          j        d|	            |                                 |                                 |                    d           |                    d           |                    d           |                    d           t          j        |          | _        d S )NiGPU is not found in current device by nvidia-smi. Please check your device or ignore it if run on jetson.Using GPU device with ID: npu_idr   r7   Using NPU device with ID: Using CPU devicecpu_math_library_num_threadsr   !Set CPU math library threads to: &conv_transpose_eltwiseadd_bn_fuse_pass"matmul_transpose_reshape_fuse_passFT)r   Configstrr   r/   get_infer_gpuidr   warninggpu_idenable_use_gpugpu_memrQ   r<   r2   enable_custom_devicedisable_gpur(   	cpu_count set_cpu_math_library_num_threadsenable_memory_optimdisable_glog_infodelete_passswitch_use_feed_fetch_opsswitch_ir_optimcreate_predictor	predictor
r   r   r   r    
infer_optsrt   	device_idrh   cpu_numsinfer_num_threadss
             r!   r   z%PaddleInferSession._init_predictor_v1   s*   %c,&7&7^9L9LMM
>" 	,))++F~   -I%%cn&<iHHHK@Y@@AAAA^# 	,^''!44F++E6:::K=V==>>>> ""$$$K*+++<>>N../MrRR""q,='I'I'I'I'I'I'I'I'I778IJJJKO<MOOPPP 	&&((($$&&&GHHHCDDD,,U333""4((("3J??r#   c                    t          j        t          |          t          |                    }|j        j        ro|                                 }|t          j        d           |j        j        }|	                    |j        j
        |           t          j        d|            np|j        j        rJ|j                            dd          }|                    d|           t          j        d|            n|                                 t!          |d          r|                                 t          j        d           t%          j                    }|j                            d	d
          }	|	d
k    r<d|	cxk    r|k    r/n n,|                    |	           t          j        d|	            t!          |d          r|                    d           t!          |d          r|                                 |                    d           |                                 t          j        |          | _        d S )Nrf   rg   rh   r   r7   ri   disable_mkldnnrj   rk   rl   r   rm   enable_new_irTenable_new_executor   )r   rp   rq   r   r/   rr   r   rs   rt   ru   rv   rQ   r<   r2   rw   rx   hasattrr   r(   ry   rz   r   r   set_optimization_levelr{   r   r   r   s
             r!   r   z%PaddleInferSession._init_predictor_v2   sI   %c,&7&7^9L9LMM
>"  	1))++F~   -I%%cn&<iHHHK@Y@@AAAA^# 	1^''!44F++E6:::K=V==>>>> ""$$$z#344 ,))+++K*+++|~~H # 2 23QSU V V B&&10A+M+M+M+MX+M+M+M+M+M;;<MNNNS@QSSTTTz?33 /((...z#899 1..000--a000&&((("3J??r#   imgc                 P   |                                  }|                                 }|                    |           | j                                         g }|D ]+}|                                }|                    |           ,| j                                         |d         S )Nr   )get_input_tensorsget_output_tensorscopy_from_cpur   rb   copy_to_cpuappendtry_shrink_memory)r   r   input_tensoroutput_tensorsoutputsoutput_tensoroutputs          r!   __call__zPaddleInferSession.__call__   s    --//0022""3'''+ 	# 	#M"..00FNN6""""((***qzr#   c                 v    | j                                         }|D ]}| j                             |          }|S r   )r   get_input_namesget_input_handle)r   input_namesra   r   s       r!   r   z$PaddleInferSession.get_input_tensors   sC    n4466 	A 	AD>::4@@LLr#   c                     | j                                         }| j        dk    r!d}||v r| j                             |          gS g }|D ]1}| j                             |          }|                    |           2|S )Nreczsoftmax_0.tmp_0)r   get_output_namesr   get_output_handler   )r   output_namesoutput_namer   r   s        r!   r   z%PaddleInferSession.get_output_tensors   s    ~66889+Kl**88EEFF' 	1 	1K N<<[IIM!!-0000r#   c                  j   t          j                    } | dk    rdS t          j        j        sd}nd}t          j        |                                          }t          |          dk    rdS |d         	                                
                    d          d         }t          |d                   S )NWindowsr   zenv | grep CUDA_VISIBLE_DEVICESzenv | grep HIP_VISIBLE_DEVICES=r   )platformsystempaddledeviceis_compiled_with_rocmr(   popen	readlineslenstripsplitint)sysstrcmdenv_cudart   s       r!   rr   z"PaddleInferSession.get_infer_gpuid   s    ""Y1}2 	33CC2C8C==**,,x==A1!""$$**3//26!9~~r#   	characterr,   c                     dS )NF )r   r,   s     r!   have_keyzPaddleInferSession.have_key  s    ur#   r   )r   )__name__
__module____qualname__r   rq   r"   r   r   r   r   rN   r   r   npndarrayr   r   r   staticmethodrr   boolr   r   r#   r!   r   r      sJ       
G 
G(3- 
G4 
G 
G 
G 
G  B/,5t#4 /, /, /, /,b-0CF	   "$@ $@ $@L&@ &@ &@PBJ           \" C $      r#   r   c                       e Zd ZdS )rP   N)r   r   r   r   r#   r!   rP   rP   
  s        Dr#   rP   )r(   r   pathlibr   typingr   r   numpyr   r   omegaconf.errorsr   r   utils.download_filer	   r
   	utils.logr   utils.typingsr   baser   r   r   rO   rP   r   r#   r!   <module>r      s7   
			        " " " " " " " "      + + + + + +       A A A A A A A A       & & & & & & ( ( ( ( ( ( ( (s s s s s s s sl	 	 	 	 	y 	 	 	 	 	r#   