o
    'jO'                  	   @   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   e/var/www/html/Deteccion_Ine/venv/lib/python3.10/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}|d u rt d d d |fS t }| }| |\}}||d< |d u rCt d| t }|| |d< d d |fS t dt|| g }	t|}tt|D ]}
t	||
 }| j
jdkrot||}nt||}|	| qZ| jr|r| |	\}	}}||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recclsallzno valid image providedr,   zno dt_boxes found, elapsed : {}r/   zdt_boxes num : {}, elapsed : {}Zquadr.   zcls num  : {}, elapsed : {}r-   zrec_res num  : {}, elapsed : {})r
   r&   timecopyr   formatr    sorted_boxesr!   deepcopyr   Zdet_box_typer   r   appendr   r   r   Zsave_crop_resr+   Zcrop_res_save_dirzipr   )r   imgr.   	time_dictstartZori_imdt_boxeselapseendr(   r*   Ztmp_boxZimg_cropZ
angle_listr)   Zfilter_boxesZfilter_rec_resboxZ
rec_resulttextscorer   r   r   __call__C   sf   










zTextSystem.__call__N)T)__name__
__module____qualname__r   r+   r@   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sorted_boxes.<locals>.<lambda>)keyrD   
   )shapesortedlistr!   abs)r:   Z	num_boxesr3   Z_boxesijtmpr   r   r   r3   {   s   
,$r3   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      )  rS      rJ   )r   r   r   zerror in loading image:{}rD   _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.0rO   r:   r)   r   r   
<listcomp>   s
    

zmain.<locals>.<listcomp>	F)ensure_ascii
c                       g | ]} | d  qS )r   r   rZ   r)   r   r   r]      rG   c                    ra   )rD   r   rZ   rb   r   r   r]      rG   )r   	font_pathZpngz.pdfz.pngrI   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warmuprV   randomuniformrX   Zuint8r!   r0   	enumerater   r"   Zimreadr&   r2   page_numr    strr$   basenamejsondumpsr5   r   Z	fromarrayZcvtColorZCOLOR_BGR2RGBr   replacer#   r%   Z	benchmarkr   Zautologreportr   open
writelines)%r   Zimage_file_listZtext_sysZis_visualizerc   r   ri   Zsave_resultsr7   rO   res
total_timeZcpu_memZgpu_memZgpu_utilZ_stcountidxZ
image_fileZflag_gifZflag_pdfZimgsrn   indexZ	starttimer8   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__r5   insertr%   environr"   r1   numpyrV   rq   r0   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	   r3   r~   rA   
parse_argsr   Zuse_mpZp_listrh   r!   rg   
executableargvr2   cmdPopenr   pwaitr   r   r   r   <module>   sT    
Rn
