o
    *jJ                     @   s  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Z dddZdd Zddd	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dS )     N)ImageTc                    st  t j| g|R  }| }|\ }}t||g|d< ddg}d|v ry|d }tj||gtjd}	|t  g }
t|
ddd|	}
|
j	dd	}
|
d d d
d d f |
d d dd d f  j
d
d}|
dd|d< ||d< |d d|v r|d }|jd }tj||gtjd}	tj fddt|jd
 d D dd}|| }
t|
|dd|	}
|
j	dd	}
|
|d|d< |d d|v r|d d d   | | f |d< |d |r6d|v sd|v r6d|v r|d ddd}
tj|
d d d
d d f |
d d dd d f kd
d}n
|d d
d
}|D ]}|| |  ||< q(||fS )NsizelabelsareaboxesZdtype   r   min   dim   polygonsc                        g | ]}t j gt jd qS r   torchtensorfloat32.0_ij n/var/www/html/Deteccion_Ine/venv/lib/python3.10/site-packages/modelscope/preprocessors/ofa/utils/transforms.py
<listcomp>)       zcrop.<locals>.<listcomp>masks)Fcropcopyr   r   	as_tensorr   r   reshapeclampprodappendshapecatrangeallflattenanytolist)imagetargetregiondeleteZcropped_imagehwfieldsr   max_sizecropped_boxesr   r   num_polygonsZstart_coordkeepfieldr   r   r   r#      sX   4


*

,r#   c                 C   s   t | }| j\}}| }d|v r4|d }|d d g df tg d t|d|dg }||d< d|v rZ|d }|jd }||ddtddg t|dg }||d< d	|v rg|d	 d|d	< ||fS )
Nr   )r	   r   r      )r   r   r   r   r   r   r   r	   r   r!   )	r"   hflipr   r$   r   r%   r*   r&   flip)r1   r2   Zflipped_imager6   r5   r   r   r:   r   r   r   r>   I   s.   


r>   c                    s<  ddd d fdd	}|| j ||}tj| |tjd}|d u r"|S tdd t|j | j D }|\| }d|v rO|d }|t	g }||d< d	|v ru|d	 }	tj
fd
dt|	jd d D dd}
|	|
 }||d	< d|v r|d }|  }||d< |\}}t||g|d< d|v rJ ||fS )Nc                 S   s   | \}}||kr||ks||kr*||kr*|d ur&t |}t||}t||}||fS ||k r9|}t || | }n
|}t || | }|d urUt |}t||}t||}||fS N)intr   )
image_sizer   r8   r6   r5   owZohr   r   r   get_size_with_aspect_ratioc   s"    



z*resize.<locals>.get_size_with_aspect_ratioc                    s(   t |ttfr|d d d S  | ||S )Nr   )
isinstancelisttuple)rB   r   r8   )rD   r   r   get_size{   s   zresize.<locals>.get_sizeinterpolationc                 s   s$    | ]\}}t |t | V  qd S r@   )float)r   sZs_origr   r   r   	<genexpr>   s
    
zresize.<locals>.<genexpr>r   r   c                    s   g | ]	}t  gqS r   )r   r   r   )ratio_heightratio_widthr   r   r      s    zresize.<locals>.<listcomp>r   r	   r   r   r   r   r!   Fr@   )r   r"   resizer   BICUBICrG   zipr$   r   r%   r+   r,   r*   r   )r1   r2   r   r8   rH   Zrescaled_imageratiosr   scaled_boxesr   Zscaled_ratioZscaled_polygonsr   scaled_arear5   r6   r   )rD   rN   rO   r   rP   `   sF   

rP   c                   @      e Zd Zdd Zdd ZdS )
CenterCropc                 C   
   || _ d S r@   r   selfr   r   r   r   __init__      
zCenterCrop.__init__c           	      C   sP   |j \}}| j \}}tt|| d }tt|| d }t||||||fS )N       @)r   rA   roundr#   )	r[   imgr2   image_widthimage_heightcrop_height
crop_widthcrop_top	crop_leftr   r   r   __call__   s   


zCenterCrop.__call__N__name__
__module____qualname__r\   rg   r   r   r   r   rW          rW   c                   @   rV   )ObjectCenterCropc                 C   rX   r@   rY   rZ   r   r   r   r\      r]   zObjectCenterCrop.__init__c                 C   s   |j \}}| j \}}t|d d d }t|d d d }t|d d d }	t|d d d }
||	 d }||
 d }t||d  t|| |d  d d}t||d  t|| |d  d d}t||||||fddS )Nr   r   r   r	   r=   F)r4   )r   rK   maxr   r#   )r[   r`   r2   ra   rb   rc   rd   Zx0Zy0x1y1Zcenter_xZcenter_yrf   re   r   r   r   rg      s2   



zObjectCenterCrop.__call__Nrh   r   r   r   r   rm      rl   rm   c                   @   s   e Zd ZdddZdd ZdS )RandomHorizontalFlip      ?c                 C   rX   r@   )p)r[   rs   r   r   r   r\      r]   zRandomHorizontalFlip.__init__c                 C   s    t   | jk rt||S ||fS r@   )randomrs   r>   r[   r`   r2   r   r   r   rg      s   
zRandomHorizontalFlip.__call__N)rr   rh   r   r   r   r   rq      s    
rq   c                   @   s    e Zd ZdddZdddZdS )	RandomResizeNFc                 C   s(   t |ttfs	J || _|| _|| _d S r@   )rE   rF   rG   sizesr8   equal)r[   rw   r8   rx   r   r   r   r\      s   
zRandomResize.__init__c                 C   s0   t | j}| jrt||||S t|||| jS r@   )rt   choicerw   rx   rP   r8   )r[   r`   r2   r   r   r   r   rg      s   zRandomResize.__call__)NFr@   rh   r   r   r   r   rv      s    
rv   c                   @   s   e Zd Zdd ZdS )ToTensorc                 C   s   t ||fS r@   )r"   Z	to_tensorru   r   r   r   rg      s   zToTensor.__call__N)ri   rj   rk   rg   r   r   r   r   rz      s    rz   c                   @   s    e Zd ZdddZdddZdS )		Normalize   c                 C   s   || _ || _|| _d S r@   )meanstdmax_image_size)r[   r}   r~   r   r   r   r   r\      s   
zNormalize.__init__Nc                    s   t j|| j| jd}|d u r|d fS | }|d d |d d  d|v r4|d }|| j }||d< d|v rZ|d }tj fddt|j	d d	 D dd
}|| }||d< ||fS )N)r}   r~   r   r   r   r   r   c                    r   r   r   r   r5   r6   r   r   r   	  r    z&Normalize.__call__.<locals>.<listcomp>r	   r   )
r"   	normalizer}   r~   r$   r   r   r+   r,   r*   )r[   r1   r2   r   r   scaler   r   r   rg      s&   
zNormalize.__call__)r|   r@   rh   r   r   r   r   r{      s    
r{   c                   @   s$   e Zd Zdd Zdd Zdd ZdS )Composec                 C   rX   r@   
transforms)r[   r   r   r   r   r\     r]   zCompose.__init__c                 C   s"   | j D ]	}|||\}}q||fS r@   r   )r[   r1   r2   tr   r   r   rg     s   
zCompose.__call__c                 C   s:   | j jd }| jD ]}|d7 }|d|7 }q	|d7 }|S )N(
z    {0}z
))	__class__ri   r   format)r[   format_stringr   r   r   r   __repr__  s   
zCompose.__repr__N)ri   rj   rk   r\   rg   r   r   r   r   r   r     s    r   c                   @   <   e Zd ZdZdddZdd Zd	d
 Zdd ZdddZdS )LargeScaleJitterB
        implementation of large scale jitter from copy_paste
    r|   333333?r^   c                 C   s   t |g| _|| _|| _d S r@   r   r   desired_sizeaug_scale_minaug_scale_maxr[   Zoutput_sizer   r   r   r   r   r\   )  s   
zLargeScaleJitter.__init__c                 C      || }|\}}|  }||d< d|v r'|d }|t||||g }||d< d|v r9|d }	|	||  }
|
|d< d|v r?J |S Nr   r   r   r!   r$   r   r%   r[   scaled_sizerB   r2   Zimage_scalerN   rO   r   rT   r   rU   r!   r   r   r   rescale_target.  "   
zLargeScaleJitter.rescale_targetc                 C     |\}}}}ddg}|  }t||g|d< d|v rp|d }tj||gtjd}	|t||||g }
t|
ddd|	}
|
jdd	}
|
d d d
d d f |
d d dd d f  jd
d}|
dd|d< ||d< |	d d|v r|d d d ||| ||| f |d< |	d d|v sd|v rd|v r|d ddd}
tj
|
d d d
d d f |
d d dd d f kd
d}n
|d d
d
}|D ]}|| |  ||< q|S Nr   r   r   r   r   r   r	   r   r
   r   r   r   r!   r$   r   r   r%   r   r   r&   r'   r(   r)   r-   r.   r/   r0   r[   r3   r2   r   r   r5   r6   r7   r   r8   r9   r   r;   r<   r   r   r   crop_targetI  B   
*
,zLargeScaleJitter.crop_targetc                 C   <   |  }d|v rtjj|d d|d d|d f|d< |S Nr!   r   r   r$   r   nn
functionalpadr[   paddingr2   r   r   r   
pad_targetq     zLargeScaleJitter.pad_targetNc                 C   s&  |j }t|d d d }td| j| j  | j }|| j  }t||d  ||d  }||  	 }t
j|| tjd}|d urN| |||}|dkr|| j }|td  	 }	|	d  |	d  | jd  | jd  f}
t
j|g|
R  }|d ur| |
|}||fS J )Nr   r   r   rI   r	   )r   r   r   randr   r   r   r_   maximumrA   r"   rP   r0   r   rQ   r   flooritemr#   r   r   r   )r[   r1   r2   rB   random_scaler   r   scaled_image
max_offsetoffsetr3   output_imager   r   r   r   rg   x  s8   


	zLargeScaleJitter.__call__r|   r   r^   r@   	ri   rj   rk   __doc__r\   r   r   r   rg   r   r   r   r   r   $      
(r   c                   @   r   )OriginLargeScaleJitterr   r|   r   r^   c                 C   s   t || _|| _|| _d S r@   r   r   r   r   r   r\     s   
zOriginLargeScaleJitter.__init__c                 C   r   r   r   r   r   r   r   r     r   z%OriginLargeScaleJitter.rescale_targetc                 C   r   r   r   r   r   r   r   r     r   z"OriginLargeScaleJitter.crop_targetc                 C   r   r   r   r   r   r   r   r     r   z!OriginLargeScaleJitter.pad_targetNc                 C   sx  |j }t|d d d }| j| t|   }td| j| j	  | j	 }|| j  }t
||d  ||d  }||   }t|| }|d urX| |||}|dkr|| }	|	td   }
|
d  |
d  |d  |d  f}tj|g|R  }|d ur| ||}||fS || }t|dd|d  |d  g}|d ur| ||}||fS )Nr   r   r   r	   )r   r   r   r   rn   r_   rA   r   r   r   minimumr"   rP   r0   r   r   r   r#   r   r   r   )r[   r1   r2   rB   Zout_desired_sizer   r   r   r   r   r   r3   r   r   r   r   r   rg     sJ   

zOriginLargeScaleJitter.__call__r   r@   r   r   r   r   r   r     r   r   c                   @   s.   e Zd ZdZ					d	ddZd
ddZdS )RandomDistortionz;
    Distort image w.r.t hue, saturation and exposure.
    r   rr   c                 C   s   || _ t||||| _d S r@   )probTZColorJittertfm)r[   Z
brightnessZcontrastZ
saturationhuer   r   r   r   r\      s   zRandomDistortion.__init__Nc                 C   s&   t j | jk r| ||fS ||fS r@   )nprt   r   r   ru   r   r   r   rg   )  s   zRandomDistortion.__call__)r   r   r   r   rr   r@   )ri   rj   rk   r   r\   rg   r   r   r   r   r     s    
	r   )Tr@   )rt   numpyr   r   Ztorchvision.transformsr   r   Z!torchvision.transforms.functionalr   r"   ZPILr   r#   r>   rP   objectrW   rm   rq   rv   rz   r{   r   r   r   r   r   r   r   r   <module>   s&   
:
I{|