o
    ex6                  
   @   s  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m  mZ d dlmZ d dlmZmZ d dlmZmZ d dlmZ d dlZe ZG d	d
 d
eZe dkre! Z"ee"j#Z$ee"Z%d Z&e"j'Z'e j(e'dd e"j)rej*+d dg d,ej-Z.e/dD ]Z0e%e.Z1qg Z2e3e$D ]\Z4Z5ee5\Z.Z6Z7e6se7se8e5Z.e7se.du re9d:e5 qe.gZ;ne"j<Z<e<e=e.kse<d kre=e.Z<e.de< Z;e3e;D ]\Z>Z.e Z?e%e.\Z@ZAe e? ZBe&eB7 Z&e=e;dkr/e jCe5d eDe> d eDeEdd e@D  d ZFne jCe5d eDeEdd e@D  d ZFe2eF eGeF e=e;dkrbeGd:e4e>e5eB n
eGd:e4e5eB eHe@e.ZIe6r~e5dd d ZJne7re5KddeDe> d ZJne5ZJe j	e'd:e jCeJZLeMeLeI eGd :eL qqeNe j	e'd!d"ZOeOPe2 eOQ  W d   n	1 sw   Y  e"jRre%jST  dS dS dS )#    Nz../..Zauto_growthZFLAGS_allocator_strategy)
get_logger)get_image_file_listcheck_and_read)create_operators	transform)build_post_processc                   @   s<   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd ZdS )TextDetectorc           	      C   s  || _ |j| _|j| _d|j|jdidg dg ddddid	d id
dddgiig}i }| jdkrZd|d< |j|d< |j|d< d|d< |j|d< |j|d< |j	|d< |j
|d< n| jdkrd|d< |j|d< |j|d< d|d< |j|d< |j|d< |j	|d< |j
|d< dg dg ddddi|d< n| jdkrd|d< |j|d< |j|d < |j|d!< n| jd"krdd#|jii|d$< d%|d< |j|d< |j|d!< |j
d&krd'|d(< d)|d*< d+|d,< nd-|d(< d.|d*< d/|d,< ns| jd0krd1|d< |j|d< |j|d< |j|d2< |j
|d< |j|d3< nO| jd4kr;dd5d6d7gii|d$< d8|d< |j|d9< |j|d:< |j|d;< |j|d<< |j
|d< n!| jd=krNd>d?d@ii|d$< dA|d< ntdB| j td$ t|| _t|| _ t!"|dCt\| _#| _$| _%| _&| jr| j$j'd-d  \}}|d ur|d ur|d$kr|d$krddD||gii|d$< t|| _|j(rd$d l)}t*+ }t!, }|j-dC|j.ddEd | j&|d |j/r|nd g dFd-tdG| _0d S d S )HNZDetResizeForTest)Zlimit_side_lenZ
limit_typeZNormalizeImage)gZd;O?gy&1?g?)g
ףp=
?gv/?gCl?z1./255.Zhwc)ZstdmeanscaleorderZ
ToCHWImageZKeepKeysZ	keep_keysimageshapeDBZDBPostProcessnameZthreshZ
box_threshi  Zmax_candidatesZunclip_ratiouse_dilationZ
score_modeZbox_typeDB++)      ?r   r   )gy=?gy+H?gw?
?   EASTZEASTPostProcessZscore_threshZcover_threshZ
nms_threshSASTZresize_longr   ZSASTPostProcesspoly   Zsample_pts_numg333333?Zexpand_scaleg?Zshrink_ratio_of_width   r   g333333?PSEZPSEPostProcessZmin_arear
   FCEZrescale_imgi8  i  ZFCEPostProcessscalesalphabetafourier_degreeCTZScaleAlignedShortZ
short_size  ZCTPostProcesszunknown det_algorithm:{}Zdetimage_shapeZdynamic)Zpreprocess_timeZinference_timeZpostprocess_time)Z
model_nameZmodel_precisionZ
batch_sizeZ
data_shapeZ	save_pathZinference_configZpidsZprocess_nameZgpu_idsZ	time_keyswarmuplogger)1argsdet_algorithmuse_onnxZdet_limit_side_lenZdet_limit_typeZdet_db_threshZdet_db_box_threshZdet_db_unclip_ratior   Zdet_db_score_modedet_box_typeZdet_east_score_threshZdet_east_cover_threshZdet_east_nms_threshZdet_sast_score_threshZdet_sast_nms_threshZdet_pse_threshZdet_pse_box_threshZdet_pse_min_areaZdet_pse_scaler   r   r   r   r#   infoformatsysexitr   preprocess_opr   postprocess_oputilityZcreate_predictor	predictorinput_tensoroutput_tensorsconfigr   	benchmarkauto_logosgetpidZget_infer_gpuidZ
AutoLogger	precisionZuse_gpuautolog)	selfr$   Zpre_process_listZpostprocess_paramsZimg_hZimg_wr4   pidZgpu_id r;   QD:\Projects\ConvertPro\env\Lib\site-packages\paddleocr/tools/infer/predict_det.py__init__&   s   














	



















(
zTextDetector.__init__c                 C   s   t jddd}|jdd}|t | |d< |t | |d< t j|t |t |fdd}t jt |dd}|t | |d< |t | |d< |S )	N)   r   Zfloat32)Zdtyper   Zaxisr   r      )npZzerossumZargminZargmaxdeletediffarray)r9   ZptsrectstmprD   r;   r;   r<   order_points_clockwise   s    z#TextDetector.order_points_clockwisec                 C   sh   t |jd D ]*}ttt||df d|d ||df< ttt||df d|d ||df< q|S )Nr   r   )ranger   intminmax)r9   points
img_height	img_widthZpnor;   r;   r<   clip_det_res   s   (*zTextDetector.clip_det_resc           	      C   s   |dd \}}g }|D ]C}t |tu rt|}| |}| |||}ttj|d |d  }ttj|d |d  }|dksI|dkrJq|	| qt|}|S )Nr   r   r   r@   )
typelistrA   rE   rI   rQ   rK   ZlinalgZnormappend)	r9   dt_boxesr!   rO   rP   dt_boxes_newboxZ
rect_widthZrect_heightr;   r;   r<   filter_tag_det_res   s   


zTextDetector.filter_tag_det_resc                 C   sZ   |dd \}}g }|D ]}t |tu rt|}| |||}|| qt|}|S )Nr   r   )rR   rS   rA   rE   rQ   rT   )r9   rU   r!   rO   rP   rV   rW   r;   r;   r<   filter_tag_det_res_only_clip   s   

z)TextDetector.filter_tag_det_res_only_clipc                 C   s8  |  }d|i}t }| jjr| jj  t|| j}|\}}|d u r&dS t	j
|dd}t	j
|dd}|  }| jjrB| jj  | jrVi }||| jj< | j| j|}n&| j| | j  g }| jD ]}| }	||	 qf| jjr|| jj  i }
| jdkr|d |
d< |d |
d< nT| jd	kr|d |
d
< |d |
d< |d |
d< |d |
d< n6| jdv r|d |
d< n*| jdkrt|D ]\}}	|	|
d|< qn| jdkr|d |
d< |d |
d< nt| |
|}|d d }| jjdkr| ||j}n| ||j}| jjr| jjjdd t }||| fS )Nr   )Nr   r   r?   r   Zf_geor   Zf_scorer   Zf_borderr   Zf_tcor@   Zf_tvo)r   r   r   mapsr   zlevel_{}r   ZscorerN   r   T)stamp)copytimer$   r3   r8   timesstartr   r,   rA   Zexpand_dimsr[   r&   r0   r   r/   runr1   Zcopy_from_cpuZcopy_to_cpurT   r%   	enumerater)   NotImplementedErrorr-   r'   rY   r   rX   end)r9   imgZori_imdatastZ
shape_listZ
input_dictZoutputsZoutput_tensoroutputpredsiZpost_resultrU   etr;   r;   r<   __call__   sl   







zTextDetector.__call__N)	__name__
__module____qualname__r=   rI   rQ   rX   rY   rk   r;   r;   r;   r<   r   %   s     	r   __main__T)exist_ok   )r    r    r@   r   zerror in loading image:{}r   _	c                 C      g | ]}|  qS r;   tolist.0xr;   r;   r<   
<listcomp>A      rz   
c                 C   rt   r;   ru   rw   r;   r;   r<   rz   D  r{   z {}_{} The predict time of {}: {}z{} The predict time of {}: {}Zpngz.pdfz.pngz
det_res_{}z The visualized image saved in {}zdet_results.txtw)Ur5   r*   pathdirnameabspath__file____dir__rT   insertjoinenvironZcv2numpyrA   r]   Ztools.infer.utilityZinferr.   Zppocr.utils.loggingr   Zppocr.utils.utilityr   r   Z
ppocr.datar   r   Zppocr.postprocessr   jsonr#   objectr   rl   
parse_argsr$   Z	image_dirZimage_file_listZtext_detector
total_timeZdraw_img_save_dirmakedirsr"   randomuniformZastypeZuint8rd   rJ   ri   resZsave_resultsra   idxZ
image_fileZflag_gifZflag_pdfZimreaddebugr)   ZimgsZpage_numlenindexrf   rU   rr   ZelapsebasenamestrdumpsZ	save_predr(   Zdraw_text_det_resZsrc_imZ	save_filereplaceZimg_pathZimwriteopenf
writelinescloser3   r8   reportr;   r;   r;   r<   <module>   s    
 
y




$

C