a
    Adr'                     @   s   d dl Z d dlmZmZ d dlZd dlZd dlmZmZm	Z	m
Z
 d dlmZ d d
dZdd ZG dd dZd!edddZd"ddZdd ZeeedddZedddZd#ddZdS )$    N)ImageImageOps)pathssharedimages	deepbooru)autocropF      ?皙??333333?c                 C   s   zr|	rt j  |
rtj  t|||||||||	|
|||||||||||||| W |	rdt j  |
rtj  n|	rt j  |
rtj  0 d S N)	r   interrogatorloadr   modelstartpreprocess_worksend_blip_to_ramstop)id_taskprocess_srcprocess_dstprocess_widthprocess_heightpreprocess_txt_actionprocess_keep_original_sizeprocess_flipprocess_splitprocess_captionprocess_caption_deepboorusplit_thresholdoverlap_ratioprocess_focal_cropprocess_focal_crop_face_weight!process_focal_crop_entropy_weightprocess_focal_crop_edges_weightprocess_focal_crop_debugprocess_multicropprocess_multicrop_mindimprocess_multicrop_maxdimprocess_multicrop_minareaprocess_multicrop_maxareaprocess_multicrop_objectiveprocess_multicrop_threshold r.   L/var/www/html/stable-diffusion-webui/modules/textual_inversion/preprocess.py
preprocess
   s    

8

r0   c                 C   s
   t | S r   )oslistdir)dirnamer.   r.   r/   	listfiles   s    r4   c                   @   s(   e Zd ZdZdZdZdZdZdZdZ	dS )PreprocessParamsNr   F)
__name__
__module____qualname__srcdstdirsubindexflipr   r   r   r.   r.   r.   r/   r5   !   s   r5   )paramsc                 C   sL  d}|j r|tj| 7 }|jr<|r,|d7 }|tj| 7 }|j}t	j
|d }t	j
|}|dd|j d| }| t	j
|j| d |jdkr|r| d| }n0|jd	kr|r| d| }n|jd
kr|r|}| }|r:tt	j
|j| dddd}|| W d    n1 s00    Y  | jd7  _d S )N z, r   05-z.pngprepend appendcopy.txtwutf8encoding   )r   r   r   generate_captionr   r   r   	tag_multir9   r1   pathsplitextbasenamer;   savejoinr:   r   stripopenwrite)imageindexr=   existing_captioncaptionZfilename_partrO   filer.   r.   r/   save_pic_with_caption+   s.    "*rZ   c                 C   s0   t | |||d |jr,t t| |||d d S )NrW   )rZ   r<   r   mirror)rU   rV   r=   rW   r.   r.   r/   save_picM   s    r]   c                 c   s   |r| j | j }}|| }}n| j| j  }}|| }}|| | }	|rV| |	|f} n| ||	f} t|	||  |d|   }
|	| |
d  }t|
D ]H}t|| }|r| |d|| |f}n| d|||| f}|V  qd S )N      ?rJ   r   )heightwidthresizemathceilrangeintcrop)rU   
inverse_xyr`   r_   r!   Zfrom_wZfrom_hZto_wZto_hhZsplit_county_stepiysplittedr.   r.   r/   	split_picT   s"    
rm   )rU   rF   rh   c                 C   s   | j \}}|| || k rH|| | }|| d d||| d  |f}n,|| | }d|| d |||| d  f}| ||ftjj|S )N   r   )sizera   r   
ResamplingLANCZOS)rU   rF   rh   iwihswboxshr.   r.   r/   center_cropl   s    
" rw   )rU   c                    sh   | j \fdd t fddtd dD  fddd d}|oft| g|R  S )	Nc                    s   ddd   | |   S )NrJ   c                 S   s   | dk r| S d|  S )NrJ   r.   )xr.   r.   r/   <lambda>y       z1multicrop_pic.<locals>.<lambda>.<locals>.<lambda>r.   )rF   rh   )rs   rr   r.   r/   ry   y   rz   zmulticrop_pic.<locals>.<lambda>c                 3   sV   | ]N}t d  dD ]8}||   kr2krn q ||kr||fV  qqdS )rJ   @   N)rd   ).0rF   rh   )errmaxareamaxdimminareamindim	thresholdr.   r/   	<genexpr>z   s   *z multicrop_pic.<locals>.<genexpr>rJ   r{   c                    s0   | d | d   |   fd d dkr(dnd S )Nr   rJ   zMaximize arear.   )wh)r}   	objectiver.   r/   ry   |   rz   )keydefault)ro   maxrd   rw   )rU   r   r   r   r~   r   r   r   r.   )	r}   rs   rr   r~   r   r   r   r   r   r/   multicrop_picw   s    
(r   333333?c           0      C   s  |}|}t j| }t j|}tdtd|
}
tdtd|}||ksPJ dt j|dd t|}dtj_	dtj_
t|tj_t }||_||_||_|	|_||_t|}t|D ]\}} d	|_t j|| }!z"t|!}"t|"}"|"d
}"W n ty   Y qY n0 d| dt| d}#||# |#tj_
|!|_d }$t j|!d	  d}%t j |%rt|%ddd}&|&! }$W d    n1 s0    Y  tjj"r q|"j#|"j$kr|"j$| |"j#|  }'d}(n|"j#| |"j$|  }'d}(d})|r:|'dk r:|'|
kr:t%|"|(|||D ]}*t&|*|||$d qd})|r|"j#|"j$krd }+zt'(t jt)j*d}+W n0 ty }, zt+d|, W Y d },~,n
d },~,0 0 t'j,|||||||+d}-t'-|"|-D ]}.t&|.|||$d qd})|r8t.|"||||||}/|/d urt&|/|||$d n t+d|"j$ d|"j# d|! d d})|rRt&|"|||$d d})|)rxt/0d|"||}"t&|"|||$d tj1  qd S )Ng        r^   r   z2same directory specified as source and destinationT)exist_okr0   zPreprocessing...r   RGBzPreprocessing [Image /]rE   rrG   rH   Fr[   ZopencvzgUnable to load face detection model for auto crop selection. Falling back to lower quality haar method.)
crop_widthcrop_heightZface_points_weightZentropy_points_weightZcorner_points_weightZannotate_imagednn_model_pathzskipped rx   z image z2 (can't find suitable size within error threshold)rJ   )2r1   rM   abspathr   minmakedirsr4   r   statejobtextinfolen	job_countr5   r:   r<   r   r   r   tqdm	enumerater;   rQ   r   rS   r   exif_transposeconvert	Exceptionset_descriptionr9   rN   existsreadinterruptedr_   r`   rm   r]   r   Zdownload_and_cache_modelsr   models_pathprintSettingsZ
crop_imager   r   resize_imagenextjob)0r   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_   r9   dstfilesr=   pbarrV   Z	imagefilefilenameimgdescriptionrW   Zexisting_caption_filenamerY   ratiorg   Zprocess_default_resizerl   r   eZautocrop_settingsfocalcroppedr.   r.   r/   r      s    




(
 	
 r   )Fr	   r
   Fr   r   r	   FNNNNNNN)N)N)Fr	   r
   Fr   r   r	   FNNNNNNN)r1   PILr   r   rb   r   modulesr   r   r   r   Zmodules.textual_inversionr   r0   r4   r5   rZ   r]   rm   re   rw   r   r   r.   r.   r.   r/   <module>   s   

"
