o
    2-:j                     @   s2  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 d dlm	Z	 d dl
mZ e je jeZe jedZe je jedZdZe jed	d
ZdZe jedd e Zeje	dgdgdgd G dd deZdd Zdd Zd%ddZdd Zdd Zdd  Z e!d!d"efd#d$Z"dS )&    N)FastAPI)HTTPException)CORSMiddleware)	BaseModelzsimple_extractor.pyoutputlipcheckpointszexp-schp-201908261155-lip.pth)z.gifz.jpegz.jpgz.pngz.webpT)exist_ok*POSTzContent-Type)allow_originsallow_methodsallow_headersc                   @   s   e Zd ZU eed< dS )GenerateRequestimageN)__name__
__module____qualname__str__annotations__ r   r   htdocs/OOTD3/SCHP/schp_api.pyr       s   
 r   c               	   C   sN   t dD ]} tjt| d}z
t| |W   S  ty"   Y qw td)Ni 05duB   사용 가능한 5자리 결과 폴더를 만들 수 없습니다.)rangeospathjoin
OUTPUT_DIRmakedirsFileExistsErrorRuntimeError)number
output_dirr   r   r   create_output_dir$   s   

r#   c                  C   s   t jt dt   } t jt dt   }t j| ddd t j|ddd t j }| |d< | |d< ||d< d	|d
< t j	t
jt j |dd |d< |S )Nschp_cache_schp_torch_extensions_i  T)moder	   HOMEXDG_CACHE_HOMETORCH_EXTENSIONS_DIRz8.9TORCH_CUDA_ARCH_LISTPATH )r   r   r   tempfile
gettempdirgetuidr   environcopydirnamesys
executablepathsepget)
cache_hometorch_extensions_direnvr   r   r   create_schp_env1   s   
$r:   Fc                 C   s   t jdd>}tj| }tj||}t| | tj	t
dtdtd|d|g
}td| td tj|d	tt ||d
 W d    d S 1 sGw   Y  d S )Nschp_inputs_)prefixz	--datasetz--model-restorez--input-dirz--output-dirzcmd: r,   T)checkcwdr9   capture_outputtext)r-   TemporaryDirectoryr   r   basenamer   shutilr1   r3   r4   SIMPLE_EXTRACTORDATASET
CHECKPOINTprint
subprocessrun
SCRIPT_DIRr:   )
image_pathr"   r?   	input_dir
image_nametarget_pathcmdr   r   r   run_schp@   s,   
	"rP   c                 C   sR   g }t t| D ]}tj| |}tj|r&| tr&|	t
| q	|S N)sortedr   listdirr   r   isfilelowerendswithIMAGE_EXTENSIONSappendrelative_output_path)r"   imagesfilenamer   r   r   r   output_images[   s   r\   c                 C   s   t j| tS rQ   )r   r   relpathrJ   r   r   r   r   rY   g   s   rY   c                 C   s   t j| r| S t jt| S rQ   )r   r   isabsr   rJ   r^   r   r   r   
input_pathk   s   r`   z	/generaterequestc              
   C   s   t | j}tj|stdd| j dt }zt||dd t|}W n2 t	j
yD } z|jp7|jp7t| }td|dd }~w tyW } ztdt|dd }~ww |s`tddddt||d	S )
Ni  u*   입력 파일을 찾을 수 없습니다: )status_codedetailT)r?   i  u$   생성된 이미지가 없습니다.success)statusr"   rZ   )r`   r   r   r   rT   r   r#   rP   r\   rH   CalledProcessErrorstderrstdoutr   strip	ExceptionrY   )ra   rK   r"   rZ   errormessager   r   r   generater   s*   
rm   )F)#r   rC   rH   r3   r-   fastapir   r   fastapi.middleware.corsr   pydanticr   r   r2   abspath__file__rJ   r   rD   r   rE   rF   rW   r   appadd_middlewarer   r#   r:   rP   r\   rY   r`   postrm   r   r   r   r   <module>   s@   
