o
    'j&k                     @   s  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	Z	m
Z
mZ ddlmZmZmZmZmZ d dlmZ G dd deZG d	d
 d
eZG dd deZG dd deZG dd deZG dd deZG dd deZG dd deZG dd deZG dd deZG dd deZG dd deZ G dd  d eZ!G d!d" d"eZ"G d#d$ d$eZ#G d%d& d&eZ$G d'd( d(eZ%dJd*d+Z&d,ej'fd-d.Z(d/d0 Z)d1d2 Z*d3d4 Z+d5d6 Z,d7d8 Z-d9d: Z.d;d< Z/d=d> Z0dKd@dAZ1dBdC Z2dDdE Z3dFdG Z4dHdI Z5dS )L    N)Image   )tia_perspectivetia_stretchtia_distort)
CVGeometryCVDeteriorationCVColorJitterSVTRGeometrySVTRDeterioration)Composec                   @   s,   e Zd Z							dddZdd ZdS )RecAug皙?c           	      K   s   || _ t||||||| _d S N)tia_probBaseDataAugmentationbda)	selfr   	crop_probreverse_prob
noise_probjitter_prob	blur_probhsv_aug_probkwargs r   g/var/www/html/Deteccion_Ine/venv/lib/python3.10/site-packages/paddleocr/ppocr/data/imaug/rec_img_aug.py__init__   s   	
zRecAug.__init__c                 C   st   |d }|j \}}}t | jkr/|dkr+|dkr+t|tdd}t|tdd}t|}||d< | |}|S )Nimage         )shaperandomr   r   randintr   r   r   r   dataimghw_r   r   r   __call__(   s   
zRecAug.__call__N)r   r   r   r   r   r   r   __name__
__module____qualname__r   r+   r   r   r   r   r      s    
r   c                   @   s*   e Zd Z						dddZdd ZdS )r   r   c                 K   s<   || _ || _|| _|| _|| _|| _tjddtjd| _	d S )N   r   )ZksizesigmaZktype)
r   r   r   r   r   r   cv2ZgetGaussianKernelZCV_32Ffil)r   r   r   r   r   r   r   r   r   r   r   r   :   s   zBaseDataAugmentation.__init__c                 C   s   |d }|j \}}}t | jkr|dkr|dkrt|}t | jkr.t|d| j| j}t | jkr9t	|}t | j
krDt|}t | jkrOt|}t | jkrZd| }||d< |S )Nr   r      )r"   r#   r   get_cropr   r2   ZsepFilter2Dr3   r   hsv_augr   jitterr   add_gasuss_noiser   r%   r   r   r   r+   K   s    zBaseDataAugmentation.__call__N)r   r   r   r   r   r   r,   r   r   r   r   r   9   s    
r   c                   @   $   e Zd Z			dddZdd ZdS )	ABINetRecAug      ?      ?c              
   K   s>   t tddddd|dtddd	|d
tdddd|dg| _d S )N-           r@   r<   g       @r>      r<   )degrees	translatescaleshear
distortionpr   r!      varrD   factorrI   皙?Z
brightnessZcontrastZ
saturationhuerI   )r   r   r   r	   
transforms)r   
geometry_pdeterioration_pcolorjitter_pr   r   r   r   r   g   s(   zABINetRecAug.__init__c                 C      |d }|  |}||d< |S Nr   rQ   r   r&   r'   r   r   r   r+   }      
zABINetRecAug.__call__N)r<   r=   r=   r,   r   r   r   r   r;   f   s    
r;   c                   @   s.   e Zd Z				dddZdd Zd	d
 ZdS )	RecConAugr<       i@  r       r   c                 K   s2   || _ || _|| _|| _| jd | jd  | _d S )Nr   r   )ext_data_numprobmax_text_lengthimage_shapemax_wh_ratio)r   r_   ra   r`   r^   r   r   r   r   r      s
   zRecConAug.__init__c                 C   s   t |d jd |d jd  | jd  }t |d jd |d jd  | jd  }t|d || jd f|d< t|d || jd f|d< tj|d |d gdd|d< |d  |d 7  < |S )Nr   r   r   )Zaxislabel)roundr"   ra   r2   resizenpZconcatenate)r   r&   ext_dataZori_wZext_wr   r   r   merge_ext_data   s   

zRecConAug.merge_ext_datac                 C   s   t   }|| jkr|S t|d D ]>\}}t|d t|d  | jkr& n*|d jd |d jd  |d jd |d jd   }|| jkrI n| ||}q|d |S )Nrg   rc   r   r   r   )	r#   r_   	enumeratelenr`   r"   rb   rh   pop)r   r&   Zrnd_numidxrg   Zconcat_ratior   r   r   r+      s(   


zRecConAug.__call__N)r<   r[   r]   r   )r-   r.   r/   r   rh   r+   r   r   r   r   rZ      s    
rZ   c                   @   s&   e Zd Z				d	ddZdd ZdS )

SVTRRecAugr   r<   r=   c              
   K   s@   t t|ddddd|dtddd	|d
tdddd|dg| _d S )Nr>   r?   rA   rB   r<   )aug_typerD   rE   rF   rG   rH   rI   r   r!   rJ   rK   rN   rO   )r   r
   r   r	   rQ   )r   rn   rR   rS   rT   r   r   r   r   r      s*   zSVTRRecAug.__init__c                 C   rU   rV   rW   rX   r   r   r   r+      rY   zSVTRRecAug.__call__N)r   r<   r=   r=   r,   r   r   r   r   rm      s    
rm   c                   @      e Zd Zdd Zdd ZdS )ClsResizeImgc                 K   
   || _ d S r   ra   r   ra   r   r   r   r   r         
zClsResizeImg.__init__c                 C   s$   |d }t || j\}}||d< |S rV   )resize_norm_imgra   )r   r&   r'   norm_imgr*   r   r   r   r+      s   zClsResizeImg.__call__Nr,   r   r   r   r   rp          rp   c                   @   s&   e Zd Z				d	ddZdd ZdS )
RecResizeImgF./ppocr/utils/ppocr_keys_v1.txtTc                 K   s"   || _ || _|| _|| _|| _d S r   )ra   
infer_mode	eval_modecharacter_dict_pathpadding)r   ra   rz   r{   r|   r}   r   r   r   r   r      s
   
zRecResizeImg.__init__c                 C   sX   |d }| j s| jr| jd urt|| j\}}n
t|| j| j\}}||d< ||d< |S Nr   valid_ratio)r{   rz   r|   resize_norm_img_chinesera   ru   r}   r   r&   r'   rv   r   r   r   r   r+      s   

zRecResizeImg.__call__N)FFry   Tr,   r   r   r   r   rx      s    
rx   c                   @   $   e Zd Z			d	ddZdd ZdS )
VLRecResizeImgFry   Tc                 K   s   || _ || _|| _|| _d S r   )ra   rz   r|   r}   )r   ra   rz   r|   r}   r   r   r   r   r      s   
zVLRecResizeImg.__init__c           
      C   s   |d }| j \}}}tj|||ftjd}|}|d}| j d dkr1|d }|tjd d f }n|dd }tdt	|| }	||d< |	|d	< |S )
Nr   interpolationfloat32r   r   r5      r   r         ?r   )
ra   r2   re   INTER_LINEARastyperf   newaxis	transposeminfloat)
r   r&   r'   imgCimgHimgWresized_image	resized_wrv   r   r   r   r   r+     s   
zVLRecResizeImg.__call__N)Fry   Tr,   r   r   r   r   r      s    
r   c                   @   s   e Zd ZdddZdd ZdS )	RFLRecResizeImgTr   c                 K   sr   || _ || _|| _| jdkrtj| _d S | jdkrtj| _d S | jdkr*tj| _d S | jdkr5tj| _d S td)Nr   r   r   r    "Unsupported interpolation type !!!)	ra   r}   r   r2   INTER_NEARESTr   INTER_CUBIC
INTER_AREA	Exception)r   ra   r}   r   r   r   r   r   r     s   



zRFLRecResizeImg.__init__c                 C   sB   |d }t |t j}t|| j| j| j\}}||d< ||d< |S r~   )r2   cvtColorCOLOR_BGR2GRAYru   ra   r}   r   r   r   r   r   r+   '  s   zRFLRecResizeImg.__call__N)Tr   r,   r   r   r   r   r     s    
r   c                   @   ro   )SRNRecResizeImgc                 K   s   || _ || _|| _d S r   )ra   	num_headsr`   )r   ra   r   r`   r   r   r   r   r   2  s   
zSRNRecResizeImg.__init__c                 C   sZ   |d }t || j}||d< t| j| j| j\}}}}||d< ||d< ||d< ||d< |S )Nr   encoder_word_posgsrm_word_posgsrm_slf_attn_bias1gsrm_slf_attn_bias2)resize_norm_img_srnra   srn_other_inputsr   r`   )r   r&   r'   rv   r   r   r   r   r   r   r   r+   7  s   
zSRNRecResizeImg.__call__Nr,   r   r   r   r   r   1  s    r   c                   @      e Zd ZdddZdd ZdS )SARRecResizeImgr=   c                 K      || _ || _d S r   )ra   width_downsample_ratio)r   ra   r   r   r   r   r   r   F     
zSARRecResizeImg.__init__c                 C   sD   |d }t || j| j\}}}}||d< ||d< ||d< ||d< |S )Nr   resized_shape	pad_shaper   )resize_norm_img_sarra   r   )r   r&   r'   rv   resize_shaper   r   r   r   r   r+   J  s   
zSARRecResizeImg.__call__Nr=   r,   r   r   r   r   r   E      
r   c                   @   ro   )PRENResizeImgc                 K   s   |\| _ | _dS )z
        Accroding to original paper's realization, it's a hard resize method here. 
        So maybe you should optimize it to fit for your task better.
        N)dst_hdst_wrs   r   r   r   r   V  s   zPRENResizeImg.__init__c                 C   sT   |d }t j|| j| jft jd}|dd }|d8 }|d }|tj|d< |S )Nr   r   r   r5   r<   )	r2   re   r   r   r   r   r   rf   r   )r   r&   r'   Zresized_imgr   r   r   r+   ]  s   zPRENResizeImg.__call__Nr,   r   r   r   r   r   U  s    r   c                   @   r:   )	SPINRecResizeImgr        _@r   r   c                 K   s4   || _ tj|tjd| _tj|tjd| _|| _d S )NZdtype)ra   rf   arrayr   meanstdr   )r   ra   r   r   r   r   r   r   r   r   i  s   
zSPINRecResizeImg.__init__c                 C   s  |d }t |t j}| jdkrt j}n| jdkrt j}n| jdkr&t j}n| jdkr/t j}ntd|d u r9d S t 	|t
| j|}t|tj}t|d}|d}| tj}t| jdd}dt| jdd }||8 }||9 }||d< |S )	Nr   r   r   r   r    r   r4   r   )r2   r   r   r   r   r   r   r   r   re   tuplera   rf   r   r   expand_dimsr   copyr   Zfloat64r   reshaper   )r   r&   r'   r   r   Zstdinvr   r   r   r+   u  s0   




zSPINRecResizeImg.__call__N)r   r   r   r,   r   r   r   r   r   h  s    
r   c                   @   r   )
GrayRecResizeImgImage.LANCZOSTFc                 K   s&   || _ || _|| _t|| _|| _d S r   )ra   resize_typer}   eval
inter_typerF   )r   ra   r   r   rF   r}   r   r   r   r   r     s
   

zGrayRecResizeImg.__init__c                 C   s  |d }t |t j}| j}| jrv|\}}}|jd }|jd }|t| }	t||	 |kr2|}
n	t	t||	 }
t 
||
|f}t|d}|d}|tjd d }tj|||ftjd}||d d d d d|
f< ||d< |S | jd	krtt|}|
| j| j}t|}| jd
krt 
|| j}t|d}|d}| jr|tjd d |d< |S |tjd |d< |S )Nr   r   r   r4   r   g      `@r   r   PILZOpenCV     o@)r2   r   r   ra   r}   r"   r   mathceilintre   rf   r   r   r   r   zerosr   r   Z	fromarrayuint8r   r   rF   )r   r&   r'   ra   r   r   r   r(   r)   ratior   r   rv   
padding_imZ	image_pilr   r   r   r+     s@   







zGrayRecResizeImg.__call__N)r   TFr,   r   r   r   r   r     s    
r   c                   @   ro   )ABINetRecResizeImgc                 K   rq   r   rr   rs   r   r   r   r     rt   zABINetRecResizeImg.__init__c                 C   s,   |d }t || j\}}||d< ||d< |S r~   )resize_norm_img_abinetra   r   r   r   r   r+     s
   zABINetRecResizeImg.__call__Nr,   r   r   r   r   r     rw   r   c                   @   r   )SVTRRecResizeImgTc                 K   r   r   )ra   r}   )r   ra   r}   r   r   r   r   r     r   zSVTRRecResizeImg.__init__c                 C   s0   |d }t || j| j\}}||d< ||d< |S r~   )ru   ra   r}   r   r   r   r   r+     s   zSVTRRecResizeImg.__call__N)Tr,   r   r   r   r   r     r   r   c                   @   s    e Zd Z	dddZdd ZdS )RobustScannerRecResizeImgr=   c                 K   s   || _ || _|| _d S r   )ra   r   r`   )r   ra   r`   r   r   r   r   r   r     s   
z"RobustScannerRecResizeImg.__init__c                 C   sd   |d }t || j| j\}}}}ttd| jd}||d< ||d< ||d< ||d< ||d< |S )Nr   r   int64r   r   r   word_positons)r   ra   r   rf   r   ranger`   r   )r   r&   r'   rv   r   r   r   r   r   r   r   r+     s   
z"RobustScannerRecResizeImg.__call__Nr   r,   r   r   r   r   r     s    
	r   r=   c                 C   sH  |\}}}}| j d }| j d }d}	td| }
|t| }t|| }||
 dkr3t||
 |
 }|d ur<t||}|d urNtdd| | }	t||}t	| ||f}|
d}|d dkro|d }|tjd d f }n|dd }|d8 }|d }|j }dtj|||ftjd	 }||d d d d d|f< |j }||||	fS )
Nr   r   r   r   r5   r   r<   g      r   )r"   r   r   r   r   rd   maxr   r2   re   r   rf   r   r   onesr   )r'   ra   r   r   r   ZimgW_minZimgW_maxr(   r)   r   Zwidth_divisorr   Zresize_wr   r   r   r   r   r   r   r     s6   




r   Tc                 C   s  |\}}}| j d }| j d }|stj| ||f|d}	|}
n#|t| }t|| |kr0|}
n	tt|| }
t| |
|f}	|	d}	|d dkrZ|	d }	|	tj	d d f }	n|	
dd }	|	d8 }	|	d }	tj|||ftjd}|	|d d d d d|
f< td	t|
| }||fS )
Nr   r   r   r   r5   r   r<   r   r   )r"   r2   re   r   r   r   r   r   rf   r   r   r   r   r   )r'   ra   r}   r   r   r   r   r(   r)   r   r   r   r   r   r   r   r   ru     s0   




ru   c                 C   s"  |\}}}|d | }| j d | j d }}|d | }t||}t|| }t|| |kr3|}	n	tt|| }	t| |	|f}
|
d}
|d dkr]|
d }
|
tj	d d f }
n|

dd }
|
d8 }
|
d }
tj|||ftjd}|
|d d d d d|	f< tdt|	| }||fS )	Nr   r   r   r   r5   r   r<   r   )r"   r   r   r   r   r2   re   r   rf   r   r   r   r   r   r   )r'   ra   r   r   r   rb   r(   r)   r   r   r   r   r   r   r   r   r   =  s*   


r   c                 C   s  |\}}}t ||f}| jd }| jd }||d kr't| |d |f}n*||d kr8t| |d |f}n||d krIt| |d |f}nt| ||f}t |}	t|	tj}	|	|d d d|	jd f< |d d d d t jf }|j\}
}}d}t 	|||
|f
t jS )Nr   r   r   r    )rf   r   r"   r2   re   Zasarrayr   r   r   r   r   r   )r'   ra   r   r   r   Z	img_blackZim_heiZim_widZimg_newZimg_nprowcolcr   r   r   r   X  s$   



r   c           
      C   s   |\}}}t j| ||ft jd}|}|d}|d }tg d}tg d}||d  |d  }|d}|d}tdt|| }	||	fS )	Nr   r   r   )g
ףp=
?gv/?gCl?)gZd;O?gy&1?g?)NN.r   r   )	r2   re   r   r   rf   r   r   r   r   )
r'   ra   r   r   r   r   r   r   r   r   r   r   r   r   s  s   



r   c                 C   s   | \}}}t |d |d  }ttd||dfd}ttd||dfd}td||f}	t|	dd||g}
t|
|ddgdg }
t	|	dd||g}t||ddgdg }|||
|gS )N   r   r   r   g    er4   )
r   rf   r   r   r   r   r   ZtriuZtileZtril)ra   r   r`   r   r   r   Zfeature_dimr   r   Zgsrm_attn_bias_datar   r   r   r   r   r     s@   
r   c                   C   s   t   dkrdS dS )z
    flag
    g55  ?r   r4   )r#   r   r   r   r   flag  s   r   c                 C   sb   t | t j}dt  t  }|dddddf d|  |dddddf< t |t j}|S )z
    cvtColor
    gMbP?Nr   r   )r2   r   ZCOLOR_BGR2HSVr#   r   ZCOLOR_HSV2BGR)r'   ZhsvdeltaZnew_imgr   r   r   r7     s
   0r7   c                 C   s.   | j \}}}|dkr|dkrt| ddS | S )z
    blur
    
   )r0   r0   r   )r"   r2   ZGaussianBlur)r'   r(   r)   r*   r   r   r   blur  s   r   c                 C   s   | j \}}}|dkrF|dkrFt||}tt | d }|  }t|D ]}|d|| d|| ddf | |d|dddf< q%| S | S )z
    jitter
    r   g{Gz?N)r"   r   r   r#   r   r   )r'   r)   r(   r*   ZthressZsrc_imgir   r   r   r8     s   
:r8   rN   c                 C   s>   t j||d | j}| d|  }t |dd}t |}|S )z
    Gasuss noise
    r<   r   r5   )rf   r#   normalr"   Zclipr   )r   r   rL   noiseoutr   r   r   r9     s
   
r9   c           	      C   s   | j \}}}d}d}tt||}t||d }|  }tdd}|r4|||ddddf }|S |d|| ddddf }|S )z
    random crop
    r   r   r   N)r"   r   r#   r$   r   r   )	r   r(   r)   r*   Ztop_minZtop_maxZtop_cropZcrop_imgr   r   r   r   r6     s   r6   c                 C   s   | t j d S )z
    rad
       )rf   pi)xr   r   r   rad  s   r   c           "   
   C   s  | j | j| j| j| j| j| jf\}}}}}}}|dkr#|dk r#|d }t|d |d  d t	t
|d  }tg ddtt
|tt
| dgdtt
| tt
|dgg dgtj}	ttt
|dtt
|dgg dtt
| dtt
|dgg dgtj}
ttt
|tt
|ddgtt
| tt
|ddgg d	g dgtj}|	|
|}t|d |d ddgtj}tg d
tj| }t|dddgtj| }td|ddgtj| }t||ddgtj| }||}||}||}||}t||||g}tddg|dgd|g||ggtj}tdtj}|dddf | ||dddf   |d  |dddf< |dddf | ||dddf   |d  |dddf< t||}|\}}}}tt|d |d }tt|d |d }tt|d |d }tt|d |d }z1td| ||  d| ||  }| }| }tdd|gdd|gddd| gg} | |}!W n   d}tg dg dg dg} | }!Y |!| | f||fS )z
    get_warpR
    E   p   g      ?r   )r   r   r   r   r   )r   r   r   r   )r   r   r   r   )r   r   r   r   )r   r   r   r   )rJ   r   Nr   r   )r   r   r   )r   r   r   )r   r   r   )anglexangleyanglezfovr)   r(   rrf   sqrttanr   r   cossinr   dotr   r2   ZgetPerspectiveTransformr   r   r   )"configr   r   r   r   r)   r(   r   zrxZryrzZpcenterp1Zp2Zp3Zp4Zdst1Zdst2Zdst3Zdst4Zlist_dstorgdstZwarpRr1r2c1c2r   ZdxZdyZT1retr   r   r   	get_warpR  s   ,
 "" 



&<<"&r   c                 C   sR   | j }ttt|tt|dgtt| tt|dggtj}|S )z
    get_warpAffine
    r   )r   rf   r   r   r   r   r   )r   r   r   r   r   r   get_warpAffine8  s    r   r   )r   rN   )6r   r2   numpyrf   r#   r   r   r   Ztext_image_augr   r   r   Z
abinet_augr   r   r	   r
   r   Zpaddle.vision.transformsr   objectr   r   r;   rZ   rm   rp   rx   r   r   r   r   r   r   r   r   r   r   r   r   ru   r   r   r   r   r   r7   r   r8   r9   r6   r   r   r   r   r   r   r   <module>   sV   -+  -3
%
 
D