o
    *jm%                     @   sv  d dl Z d dlZdd Zd7ddZdd Zd8d	d
Zd9ddZdd Zdd Z	dd Z
dd Zd8ddZd8ddZd8ddZdd Zd8ddZd8d d!Zd"d# Zd$d% Zd&d' Zd(d) Zd*d+ Zd,d- Zd.d/ Zd0d1 Zeeeeeee	e
eeeeeed2Zd3Zd3Zd4Zeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeed2ZG d5d6 d6eZ dS ):    Nc                 C   s   | S N )imgr   r   q/var/www/html/Deteccion_Ine/venv/lib/python3.10/site-packages/modelscope/preprocessors/ofa/utils/vision_helper.pyidentity_func
      r   c                    s8   d fddfddt | D }t |}|S )z6
        same output as PIL.ImageOps.autocontrast
       c           	         s8  | j } | d }|dkr|  |  }}nGt| gdgd gdg}tt||k}|jd dkr8dn|d }tt|d d d |k}|jd dkrVd nd |d  }||krht	}n&d ||  }| | }t	| | }d||dk < d ||d k< |
ddtj}||  S )Nd   r         )sizemaxmincv2calcHistnpZargwherecumsumshapearangeclipastypeuint8)	chncuthighlowhisttablescaleoffset)cutoffn_binsr   r   tune_channel   s$   &
z'autocontrast_func.<locals>.tune_channelc                       g | ]} |qS r   r   .0r   r$   r   r   
<listcomp>*       z%autocontrast_func.<locals>.<listcomp>r   splitmerge)r   r"   channelsoutr   )r"   r#   r$   r   autocontrast_func   s
   
r0   c                    s6   d  fddfddt | D }t |}|S )zn
        same output as PIL.ImageOps.equalize
        PIL's implementation is different from cv2.equalize
    r   c                    s   t | gdgd  gd g}||dk d}t|d d  d  }|dkr*| S t|}|d |d< |d d |dd < t|| ddtj	}||  S )Nr   r
   r      r   )
r   r   Zreshaper   sumZ
empty_liker   r   r   r   )r   r   Znon_zero_histstepr   r   )r#   r   r   r$   6   s   
z#equalize_func.<locals>.tune_channelc                    r%   r   r   r&   r(   r   r   r)   B   r*   z!equalize_func.<locals>.<listcomp>r+   )r   r.   r/   r   )r#   r$   r   equalize_func/   s
   
r4   r   r   r   c                 C   sN   | j d | j d }}|d |d f}t||d}tj| |||f|d}|S )z1
    like PIL, rotate by degree, not radians
    r   r   r1   )borderValue)r   r   ZgetRotationMatrix2D
warpAffine)r   ZdegreefillHWcenterMr/   r   r   r   rotate_funcG   s
   r=      c                    s<   t  fddtdD }|ddt j}||  }|S )3
        same output as PIL.ImageOps.posterize
    c                    s    g | ]}| k r
|nd | qS )r   r   r'   elthreshr   r   r)   V   s     z!solarize_func.<locals>.<listcomp>r   r   r   )r   arrayranger   r   r   )r   rC   r   r/   r   rB   r   solarize_funcR   s   rF   c                 C   sV   t g dg dg dg| t dgdgdgg }t | |ddt j}|S )	N)g'1Z?v/rG   )bX9g;On?rH   )A`"ӿrI   g;On?v/?bX9?A`"?r   r   )r   float32matmulr   r   r   )r   factorr<   r/   r   r   r   
color_func\   s   rP   c                    s\   t t j| ddt g d t  fddtdD ddt j}||  }|S )	6
        same output as PIL.ImageEnhance.Contrast
    )r   r   )Zaxis)rJ   rK   rL   c                    s   g | ]
}|    qS r   r   r@   rO   meanr   r   r)   k   s    z!contrast_func.<locals>.<listcomp>r   r   r   )r   r2   rS   rD   rE   r   r   r   r   rO   r   r/   r   rR   r   contrast_funcf   s   "rU   c                 C   s0   t jdt jd| ddt j}||  }|S )rQ   r   Zdtyper   r   )r   r   rM   r   r   r   rT   r   r   r   brightness_funcq   s
   rW   c                 C   s   t jdt jd}d|d d< |d }t| d|}|dkr!|}|S |dkr)| }|S | t j}|t jddddd	d	f }|||ddddd	d	f |   |ddddd	d	f< |t j}|S )
zl
    The differences the this result and PIL are all on the 4 boundaries, the center
    areas are same
    )   rX   rV      r      r
   g        g      ?N)r   ZonesrM   r   Zfilter2Dr   r   )r   rO   ZkernelZ
degenerater/   r   r   r   sharpness_func{   s"   	"r[   c                 C   sT   | j d | j d }}td|dgg dg}tj| |||f|tjdtj}|S )Nr   r   r   r   r   r6   flagsr   r   rM   r   r7   ZINTER_LINEARr   r   r   rO   r8   r9   r:   r<   r/   r   r   r   shear_x_func      ra   c                 C   sV   | j d | j d }}tdd| gg dg}tj| |||f|tjdtj}|S )0
        same output as PIL.Image.transform
    r   r   r\   r]   r_   r   r!   r8   r9   r:   r<   r/   r   r   r   translate_x_func      re   c                 C   sV   | j d | j d }}tg ddd| gg}tj| |||f|tjdtj}|S )rc   r   r   r   r   r   r]   r_   rd   r   r   r   translate_y_func   rf   rh   c                 C   s   t | t dd| > }|S )r?   r      )r   Zbitwise_andr   )r   bitsr/   r   r   r   posterize_func   s   rk   c                 C   sT   | j d | j d }}tg d|ddgg}tj| |||f|tjdtj}|S )Nr   r   rg   r]   r_   r`   r   r   r   shear_y_func   rb   rl   c                 C   s   t j|t jd}| jd | jd }}t jd\}}|d }t|| t|| }}t|| dt|| |}	}
t|| dt|| |}}|  }|||	|
||d d f< |S )NrV   r   r   r1   )	r   rD   r   r   randomintr   r   copy)r   Zpad_sizereplacer9   r:   Zrhrwr   Zcwx1Zx2y1y2r/   r   r   r   cutout_func   s   ru   c                        fdd}|S )Nc                    s   |   d d fS )Ng?g?r   level	MAX_LEVELr   r   level_to_args   s   z,enhance_level_to_args.<locals>.level_to_argsr   rz   r{   r   ry   r   enhance_level_to_args   s   r}   c                        fdd}|S )Nc                    s(   |   d } t j dkr|  } | fS )Ng333333?      ?r   rm   rw   rz   replace_valuer   r   r{         z*shear_level_to_args.<locals>.level_to_argsr   rz   r   r{   r   r   r   shear_level_to_args      r   c                        fdd}|S )Nc                    s,   |   t  } tj dkr|  } | fS )Nr   )floatr   rm   rw   rz   r   translate_constr   r   r{      s   z.translate_level_to_args.<locals>.level_to_argsr   )r   rz   r   r{   r   r   r   translate_level_to_args   s   r   c                    r   )Nc                    s   t |    } | fS r   rn   rw   rz   cutout_constr   r   r   r{      s   z+cutout_level_to_args.<locals>.level_to_argsr   )r   rz   r   r{   r   r   r   cutout_level_to_args   s   r   c                    rv   )Nc                       t |   d } | fS )Nr   r   rw   ry   r   r   r{         z-solarize_level_to_args.<locals>.level_to_argsr   r|   r   ry   r   solarize_level_to_args      r   c                 C   s   dS )Nr   r   rw   r   r   r   none_level_to_args  r   r   c                    rv   )Nc                    r   )N   r   rw   ry   r   r   r{     r   z.posterize_level_to_args.<locals>.level_to_argsr   r|   r   ry   r   posterize_level_to_args  r   r   c                    r~   )Nc                    s(   |   d } t j dk r|  } | fS )N   r   r   rw   r   r   r   r{     r   z+rotate_level_to_args.<locals>.level_to_argsr   r   r   r   r   rotate_level_to_args  r   r   )ZIdentityZAutoContrastZEqualizeZRotateZSolarizeColorZContrastZ
BrightnessZ	SharpnessZShearXZ
TranslateXZ
TranslateYZ	PosterizeZShearY
   )r>   r>   r>   c                   @   s.   e Zd Zdddg fddZdd Zdd	 Zd
S )RandomAugmentr1   r   Fc                 C   s2   || _ || _|| _|r|| _d S tt | _d S r   )Nr<   isPILaugslistarg_dictkeys)selfr   r<   r   r   r   r   r   __init__O  s   
zRandomAugment.__init__c                    s$   t j j j} fdd|D S )Nc                    s   g | ]}|d  j fqS )r   )r<   )r'   opr   r   r   r)   Z  s    z0RandomAugment.get_random_ops.<locals>.<listcomp>)r   rm   choicer   r   )r   Zsampled_opsr   r   r   get_random_opsX  s   zRandomAugment.get_random_opsc                 C   s\   | j rt|}|  }|D ]\}}}tj |krqt| |}t| |g|R  }q|S r   )r   r   rD   r   rm   r   	func_dict)r   r   opsnameZprobrx   argsr   r   r   __call__\  s   
zRandomAugment.__call__N)__name__
__module____qualname__r   r   r   r   r   r   r   r   M  s    	r   )r   )r5   )r>   )!r   numpyr   r   r0   r4   r=   rF   rP   rU   rW   r[   ra   re   rh   rk   rl   ru   r}   r   r   r   r   r   r   r   r   r   rz   r   r   objectr   r   r   r   r   <module>   sv   
!






	


				

 