o
    9i9                     @   s   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	 dZ
dd ZdefddZd	ejd
ejfddZG dd deZded
ejfddZdd Zedkr]d dlZee ed dS dS )    N)Imagezscripts/util/detection/c              	   C   sJ   | |j  | }t|dkddt|   t|dt|  }|j S )Nr      )Tnpwhereexp)Xweightsbiaseslogitsproba r   ^/data/cameron/vidgen/generative-models/scripts/util/detection/nsfw_and_watermark_dectection.pypredict_proba   s
   .r   pathc                 C   s   t | }|d |d fS )Nr	   r
   )r   load)r   model_weightsr   r   r   load_model_weights   s   
r   imagesreturnc                 C   sD   t | jdd  }tt|tjdtjjddtddg| S )N   T)interpolation	antialias)g3<4'?gwgM?gy{ ?)gB91?gwt.?g	U?)	minshaper   Compose
CenterCropResizeInterpolationModeBICUBIC	Normalize)r   min_sizer   r   r   clip_process_images   s   	r#   c                       sR   e Zd Zdedfdedejf fddZe dejdejfd	d
Z	  Z
S )DeepFloydDataFilteringFcpuverbosedevicec                    sx   t    || _d | _tjd|d\| _}| j  tt	j
td\| _| _tt	j
td\| _| _d\| _| _d S )NzViT-L/14)r'   zw_head_v1.npzzp_head_v1.npz)      ?r(   )super__init__r&   _deviceclipr   
clip_modelevalr   osr   joinRESOURCES_ROOTcpu_w_weightscpu_w_biasescpu_p_weightscpu_p_biasesw_thresholdp_threshold)selfr&   r'   _	__class__r   r   r*   (   s   

zDeepFloydDataFiltering.__init__r   r   c                 C   s,  t |}| jd u rtdd | j D j| _| j|| j}| 	 
 tj}t|| j| j}t|| j| j}| jrJtd| d| nd  || jk}| dkrp| jratd| nd  tjddd	|| ||< || jk}| dkr| jrtd
| nd  tjddd	|| ||< |S )Nc                 s   s    | ]}|V  qd S )Nr   ).0pr   r   r   	<genexpr>=   s    z2DeepFloydDataFiltering.__call__.<locals>.<genexpr>z	p_pred = z, w_pred = r   zHit for p_threshold: c   )      Y@r@   )sigmazHit for w_threshold: )r#   r+   nextr-   
parametersr'   encode_imagetodetachr%   numpyastyper   float16r   r4   r5   r2   r3   r&   printr7   sumr   GaussianBlurr6   )r8   r   imgsimage_featuresp_predw_predqueryr   r   r   __call__9   s(   


zDeepFloydDataFiltering.__call__)__name__
__module____qualname__torchr'   boolr*   inference_modeTensorrR   __classcell__r   r   r:   r   r$   '   s    
 r$   c                 C   s:   t | }|jdks|d}tt g}||d S )NRGB)N.)r   openmodeconvertr   r   ToTensor)r   imageimage_transformsr   r   r   load_imgN   s   


rb   c              	   C   s   ddl m} tdd}t| D ]<}td| d ttj| |}||}|d|	 d  d
tj}t|tj| tj|d  d	 qd S )
Nr   )	rearrangeT)r&   zrunning on z...g     o@zc h w -> h w cz-filtered.jpg)einopsrc   r$   r/   listdirrJ   rb   r   r0   rG   rH   r   uint8r   	fromarraysavesplitext)rootrc   filterr=   imgfiltered_imgr   r   r   testZ   s   

rn   __main__zdone.)r/   r,   rG   r   rV   torchvision.transforms
transformsr   PILr   r1   r   strr   rY   r#   objectr$   rb   rn   rS   fireFirerJ   r   r   r   r   <module>   s$    '
