o
    ,ho%                     @   s^   d Z ddlZddlZddlZddlmZ 	 dd Z	 dddZd	d
 Z	dddZ
dddZdS )z6  
Copyright (c) 2019-present NAVER Corp.
MIT License
    N)labelc                 C   s@   t | |d |d df}t |d |d  |d |d  gS )Nr         )npmatmularray)Minvptout r   N/var/www/html/scripts/venv/lib/python3.10/site-packages/easyocr/craft_utils.py	warpCoord   s   &r   Fc           +      C   s  |  }|   } | j\}}	 t| |dd\}}	t||dd\}}
t|	|
 dd}tj|tjdd\}}}}g }g }t	d|D ]}||tj
f }|dk rRqCt| ||k |k r^qCtj| jtjd}d|||k< |rt| | | d |dd\}}t|\}}|| n|| d|t|
dk|	dk< ||tjf ||tjf }}||tjf ||tjf }}tt|t|| ||  d	 }|| || | d || || | d f\}}}} |dk rd}|dk rd}||kr|}| |kr|} ttjd| d| f}!t||| ||f |!||| ||f< tjtt|dkddd
 dd	}"t |"}#t!|#}$tj"#|$d |$d  tj"#|$d |$d	  }}t||t||d  }%t$d|% dkrt|"d d df t|"d d df }&}'t|"d d df t|"d d df }(})tj|&|(g|'|(g|'|)g|&|)ggtj%d}$|$j&dd
' }*t|$d|* d}$t|$}$||$ qC|||fS )Nr   r      )connectivity
   dtype   g     o@r   )axisgh㈵>g?)(copyshapecv2	thresholdr   clipconnectedComponentsWithStatsastypeuint8rangeCC_STAT_AREAmaxzerosr   appendlogical_andCC_STAT_LEFTCC_STAT_TOPCC_STAT_WIDTHCC_STAT_HEIGHTintmathsqrtmingetStructuringElement
MORPH_RECTdilaterollr   where	transposereshapeminAreaRect	boxPointslinalgnormabsfloat32sumargmin)+textmaplinkmaptext_thresholdlink_thresholdlow_textestimate_num_charsimg_himg_wret
text_score
link_scoretext_score_combnLabelslabelsstats	centroidsdetmapperksizesegmap_character_locsn_charsxywhnitersxexsyeykernelnp_contours	rectanglebox	box_ratiolrtbstartidxr   r   r   getDetBoxes_core   s\   

 
$4,,

2**(

rf   c           6   	   C   s  d}d}d}d}d}g }	t | D ]\}
}ttj|d |d  d ttj|d |d  d }}|d	k s>|d	k rD|	d  qtddg|dg||gd|gg}t||}tj	||||ftj
d
}ztj|}W n
   |	d  Y q||
 }d|||k< d||dk< 	 g }d}t|D ]4}t|d d |f dkd }t|dk rq|||d |d f |d |d  d }||kr|}q|| |k r|	d  q|d d }|| }d g| }ddgg| }dg| }d}d}d}tdt|D ]}|| \} }!}"|d | | kr4||kr4|dkr nb|| d | || d | g||< d}|d7 }d}|!|" d }#|"|! d }$|| d |  || d |# g||< |d7 }|d dkr^q||$k r{| |#f|t|d d < |$|t|d d < |$}q|dkr|d d | |d d | g|d< d |v s|t|d k r|	d  qt|| d }%g }&t |D ]f\}\} }#||d d  d ||d  d  }'||d d  d ||d  d  }(|'dkr|&| |#|% | |#|% g qt|(|' })|%t|) |%t|) }*}+|&| |+ |#|* | |+ |#|* g qd\},}-|d d |d d  |d d |d d   |d d |d d  |d d |d d    }.|d d |d d  |d d |d d   |d d |d d  |d d |d d    }/td||D ]}0d|% |0 }'|,stj|jtjd}1|.|' }(t|&d t|'|(|'|(g }2tj|1t|2d t|2d ft|2d t|2d fddd tt||1dks|0d|  |kr|2}3d},|-s?tj|jtjd}1|/|' }(t|&d t|'|(|'|(g }2tj|1t|2d t|2d ft|2d t|2d fddd tt||1dks;|0d|  |kr?|2}4d}-|,rG|-rG nq|,rO|-sU|	d  qg }5|5t||3d |3d f |&D ]}2|5t||2d |2d f qg|5t||4d |4d f |5t||4d |4d f t|&D ]}2|5t||2d |2d f q|5t||3d |3d f |	t|5 q|	S )N   gffffff?g333333?g       @g?r   r   r   r   )flagsr   g      ?g      ?FFr      )	thicknessT)	enumerater(   r   r5   r6   r"   r8   r   getPerspectiveTransformwarpPerspectiveINTER_NEARESTinvr   r0   lenr    medianr)   atan2cossinaranger!   r   r   r   liner9   r#   r   reversed)6boxesrH   rL   r<   num_cpmax_len_ratioexpand_ratiomax_rstep_rpolysrM   r_   rU   rV   tarM
word_labelr   	cur_labelcpmax_leniregionlengthtot_segseg_wpp
cp_section
seg_heightseg_numnum_secprev_hrS   rZ   r[   cycur_hhalf_char_hnew_ppdxdyradcs
isSppFound
isEppFoundgrad_sgrad_erb   line_imgpsppepppolyr   r   r   getPoly_coreW   s   B"

$$

$$$
&`` <* <*  r   c                 C   sT   |r|rt dt| |||||\}}}	|rt|||	|}
nd gt| }
||
|	fS )NzFEstimating the number of characters not currently supported with poly.)	Exceptionrf   r   rs   )r;   r<   r=   r>   r?   r   r@   r{   rH   rL   r   r   r   r   getDetBoxes   s   
r   r   c                 C   sT   t | dkr(t| } tt | D ]}| | d ur'| |  || || f9  < q| S )Nr   )rs   r   r   r   )r   ratio_wratio_h	ratio_netrM   r   r   r   adjustResultCoordinates   s   
r   )Fri   )r   )__doc__numpyr   r   r)   scipy.ndimager   r   rf   r   r   r   r   r   r   r   <module>   s    
C 
