o
    e&                  	   @   s  d dl Z d dlZd dlZe je jeZeje ej	d e je j
ed de jd< d dl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  mZ d dlm  mZ d dlm  mZ d dlm  mZ d dlmZm Z  d dl!m"Z" d dlm#Z#m$Z$m%Z% e" Z&G d	d
 d
e'Z(dd Z)dd Z*e+dkre, Z-e-j.rg Z/e-j0Z0e1e0D ]#Z2ej3dgej4 d5e2d5dg Z6ej7e6ej8ej8dZ9e/e9 qe/D ]Z9e9:  qdS e*e- dS dS )    Nz../..Zauto_growthZFLAGS_allocator_strategy)Image)get_image_file_listcheck_and_read)
get_logger)draw_ocr_box_txtget_rotate_crop_imageget_minarea_rect_cropc                   @   s&   e Zd Zdd Zdd Zd	ddZdS )

TextSystemc                 C   s\   |j s	ttj t|| _t	|| _
|j| _|j| _| jr&t|| _|| _d| _d S )Nr   )Zshow_logloggersetLevelloggingINFOpredict_detZTextDetectortext_detectorpredict_recZTextRecognizertext_recognizeruse_angle_cls
drop_scorepredict_clsZTextClassifiertext_classifierargscrop_image_res_index)selfr    r   TD:\Projects\ConvertPro\env\Lib\site-packages\paddleocr/tools/infer/predict_system.py__init__*   s   
zTextSystem.__init__c              	   C   sv   t j|dd t|}t|D ]"}tt j|d|| j  d||  t	
| d||   q|  j|7  _d S )NTexist_okZmg_crop_z.jpgz, )osmakedirslenrangecv2imwritepathjoinr   r
   debug)r   
output_dirimg_crop_listrec_resZbbox_numbnor   r   r   draw_crop_rec_res8   s   zTextSystem.draw_crop_rec_resTc                 C   s  ddddd}t   }| }| |\}}||d< tdt|| |d u r+dS g }t|}tt|D ]}	t	||	 }
| j
jdkrLt||
}nt||
}|| q7| jrs|rs| |\}}}||d< tdt|| | |\}}||d	< td
t|| | j
jr| | j
j|| g g }}t||D ]\}}|\}}|| jkr|| || qt   }|| |d< |||fS )Nr   )detrecZcslallr,   zdt_boxes num : {}, elapse : {})NNquadclszcls num  : {}, elapse : {}r-   zrec_res num  : {}, elapse : {}r.   )timecopyr   r
   r&   formatr    sorted_boxesr!   deepcopyr   Zdet_box_typer   r   appendr   r   r   Zsave_crop_resr+   Zcrop_res_save_dirzipr   )r   imgr0   	time_dictstartZori_imdt_boxeselapser(   r*   Ztmp_boxZimg_cropZ
angle_listr)   Zfilter_boxesZfilter_rec_resboxZ
rec_resulttextscoreendr   r   r   __call__C   sZ   







zTextSystem.__call__N)T)__name__
__module____qualname__r   r+   rA   r   r   r   r   r	   )   s    r	   c                 C   s   | j d }t| dd d}t|}t|d D ]F}t|ddD ]=}t||d  d d || d d  dk r\||d  d d || d d k r\|| }||d  ||< |||d < q q|S )z
    Sort text boxes in order from top to bottom, left to right
    args:
        dt_boxes(array):detected text boxes with shape [4, 2]
    return:
        sorted boxes(array) with shape [4, 2]
    r   c                 S   s   | d d | d d fS )Nr      r   )xr   r   r   <lambda>z       zsorted_boxes.<locals>.<lambda>)keyrE   
   )shapesortedlistr!   abs)r;   Z	num_boxesr4   Z_boxesijtmpr   r   r   r4   q   s   
,$r4   c           %         s  t | j}|| jd | j }t| }d}| j}| j}| j}tj	|dd g }t
d | jrGtjddg dtj}tdD ]}	||}
q@d}d\}}}t }d}t|D ]T\}}t|\}}}|sm|smt|}|s|d u r|t
d	| qX|g}n| j}|t|ks|dkrt|}|d | }t|D ]\}}t }||\ }t | }||7 }t|d
krt
t|d t| d||f   nt
t|d||f   D ]\}}t
d|| qއ fddtt D }
t|d
krtj|d t| d tj |
dd d }ntj|d tj |
dd d }|!| |rt"#t$|tj%} }fddttD } fddttD }!t&||| |!||d}"|rn|d d d }#n|r~|'ddt| d }#n|}#t(tj)|tj|#|"d d d d d d df  t
dtj)|tj|# qqXt
dt |  | j*r|j+j,-  |j.j,-  t/tj)|ddd d!}$|$0| W d    d S 1 sw   Y  d S )"NTr   zIn PP-OCRv3, rec_image_shape parameter defaults to '3, 48, 320', if you are using recognition model with PP-OCRv2 or an older version, please set --rec_image_shape='3,32,320r      )  rT      rK   )r   r   r   zerror in loading image:{}rE   _z  Predict time of %s: %.3fsz
{}, {:.3f}c                    s4   g | ]}| d  t  | t j dqS )r   )ZtranscriptionZpoints)nparrayastypeZint32tolist.0rP   r;   r)   r   r   
<listcomp>   s
    

zmain.<locals>.<listcomp>	F)ensure_ascii
c                       g | ]} | d  qS )r   r   r[   r)   r   r   r^      rH   c                    rb   )rE   r   r[   rc   r   r   r^      rH   )r   	font_pathZpngz.pdfz.pngrJ   z The visualized image saved in {}zThe predict total time is {}zsystem_results.txtwzutf-8)encoding)1r   Z	image_dir
process_idtotal_process_numr	   Zvis_font_pathr   draw_img_save_dirr   r   r
   infoZwarmuprW   randomuniformrY   Zuint8r!   r1   	enumerater   r"   Zimreadr&   r3   page_numr    strr$   basenamejsondumpsr6   r   Z	fromarrayZcvtColorZCOLOR_BGR2RGBr   replacer#   r%   Z	benchmarkr   Zautologreportr   open
writelines)%r   Zimage_file_listZtext_sysZis_visualizerd   r   rj   Zsave_resultsr8   rP   res
total_timeZcpu_memZgpu_memZgpu_utilZ_stcountidxZ
image_fileZflag_gifZflag_pdfZimgsro   indexZ	starttimer9   r<   r>   r?   Z	save_predimageZboxesZtxtsZscoresZdraw_imgZ	save_filefr   r]   r   main   s   







9$r   __main__z-uz--process_id={}z--use_mp={}F)stdoutstderr);r   sys
subprocessr$   dirnameabspath__file____dir__r6   insertr%   environr"   r2   numpyrW   rr   r1   r   ZPILr   Ztools.infer.utilityZinferZutilityZtools.infer.predict_recr   Ztools.infer.predict_detr   Ztools.infer.predict_clsr   Zppocr.utils.utilityr   r   Zppocr.utils.loggingr   r   r   r   r
   objectr	   r4   r   rB   
parse_argsr   Zuse_mpZp_listri   r!   rh   
executableargvr3   cmdPopenr   pwaitr   r   r   r   <module>   sT    
Hn
