
    I g9'                     b   d dl Z d dlZd dlZ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Zd dlmZ d dlmZ d dlmZ dZdZd Zd	 Zd d
Zd Zd Zd dZ G d d      Z G d de
      Z G d d      Z G d d      Z G d d      Z G d d      Z  G d d      Z! G d d      Z" G d d      Z#y)!    N)ImageOnlyTransform)Image)Thread)EasyDict)5mp4avih264mkvmovflvwmvwebmtsm4vvob3gp3g2rmrmvbogvoggdrcgifgifvmngr   r   qtr   yuvr   r   asfamvr   m4pr   mpgmp2mpegmpempvr!   r#   m2vr   svir   r   mxfroqnsvr   f4vf4pf4af4b).jpgjpegbmppngppmpgmpbmpnmwebpsrrastifftifexrhdrpicdibjpejp2j2kjpfjpxjpmmj2jxrhdpwdpcuricoaniicnsbpgrA   rB   rC   rD   rE   rF   rG   rH   rI   rJ   rK   rL   rM   rN   c                  p   t        j                         } | j                  ddt        d       | j                  ddt        d d       | j                  d	d
t        dd       | j                  dddd       | j                  ddt        d d       | j                  ddt        dd       | j                  dddd       | j                  ddt        d d       | j                  dd t        d!d"       | j                  d#d$t        d d%       | j                  d&d't        d d(       | j	                         S ))Nz--sourcez-sz_Path to the source. Single image, video, directory of images, directory of videos is supported.)typehelpz--destz-dzRPath to destination. Results will be stored in current directory if not specified.)rP   defaultrQ   z--typez-trgbazSpecify output type. If not specified, output results will make the background transparent. Please refer to the documentation for other types.z	--reversez-R
store_truezYOutput will be reverse and foreground will be removed instead of background if specified.)actionrQ   z--formatz-fzSSpecify output format. If not specified, it will be saved with the format of input.z--resizez-rstaticzdSpecify resizing method. If not specified, static resize will be used. Choose from (static|dynamic).z--jitz-jzLSpeed up inference speed by using torchscript, but decreases output quality.z--devicez-DzBDesignate device. If not specified, it will find available device.z--modez-mbasezYchoose between base and fast mode. Also, use base-nightly for nightly release checkpoint.z--ckptz-czcDesignate checkpoint. If not specified, it will download or load pre-downloaded default checkpoint.z--thresholdz-thzDesignate threshold. If specified, it will output hard prediction above threshold. If not specified, it will output soft prediction.)argparseArgumentParseradd_argumentstr
parse_args)parsers    D/var/www/html/transparent-background/transparent_background/utils.pyr\   r\      s   $$&F

t3  Pq  r
t3  Pd  e
t3  P`  a
dL  Oj  k

t3  Pe  f

t3  Pv  w
t\  P^  _

t3  PT  U
t3  Pk  l
t3  Pu  v
u3  PV  W    c                      t         j                  j                         ryt         j                  j                  j                         ryy)Nzcuda:0zmps:0cpu)torchcudais_availablebackendsmps r_   r^   get_backendrh   $   s1    zz 				(	(	*r_   c                 ~    t        j                  t        |       t         j                        }|du rt	        |      }|S NT)yamlloadopen
FullLoaderr   )
config_direasycfgs      r^   load_configrr   ,   s0    
))D$doo
6Ct|smJr_   c                 6   t        | D cg c](  }|j                         j                  t              s'|* c}      }t        | D cg c](  }|j                         j                  t              s'|* c}      }||z  dk7  ry|dk7  ry|dk7  ryyc c}w c c}w )Nr    r   Video)lenlowerendswithIMG_EXTSVID_EXTS)sourcei	img_count	vid_counts       r^   
get_formatr   2   s    G1!'')*<*<X*FQGHIG1!'')*<*<X*FQGHI9!	a	a HGs   (BB(B0Bc                 .    d fd}t        | |      S )Nc                 X    | j                         rt        |       S | j                         S N)isdigitintrw   )texts    r^   <lambda>zsort.<locals>.<lambda>@   s    3t9 DJJL r_   c                 b    t        j                  d|       D cg c]
  } |       c}S c c}w )Nz([0-9]+))resplit)keycconverts     r^   r   zsort.<locals>.<lambda>A   s$    BHHZ4MNq
N Ns   ,)r   )sorted)xalphanum_keyr   s     @r^   sortr   ?   s    HGNL!&&r_   c           	         t         j                  j                  |      st        j                  |d       t         j                  j	                  t         j                  j                  ||             du rDt        j                  dj                  t         j                  j                  ||       |             nd|j                         v r|d   t        j                  t        t         j                  j                  ||       d      j                               j                         k7  rCt        j                  dj                  t         j                  j                  ||       |             |rt        j                  dj                  t         j                  j                  ||       |             t        j                  dj                  t         j                  j                  ||                    y y )	NT)exist_okFzwget -O {} {}md5rbzunzip -o {} -d {}zrm {})ospathisdirmakedirsisfilejoinsystemformatkeyshashlibr   rm   read	hexdigest)filenameurldestunzipkwargss        r^   download_and_unzipr   D   s6   77==
D4(	ww~~bggll423u<
		/((dH)EsKL	&++-	F5MW[[bggllSWYaFbdhAiAnAnAp5q5{5{5}$}
		/((dH)EsKL
		%,,RWW\\$-I4PQ
		'..dH!=>? r_   c                       e Zd ZddZd Zy)dynamic_resizec                     || _         y r   L)selfr   s     r^   __init__zdynamic_resize.__init__R   s	    r_   c                    t        |j                        }|d   |d   k\  r=|d   | j                  kD  r+|d   |d   | j                  z  z  |d<   | j                  |d<   nG|d   |d   kD  r<|d   | j                  kD  r*|d   |d   | j                  z  z  |d<   | j                  |d<   t        t	        |d   dz              dz  t        t	        |d   dz              dz  f}|j                  |t        j                        S )Nr          )listsizer   r   roundresizer   BILINEAR)r   imgr   s      r^   __call__zdynamic_resize.__call__U   s    CHH~GtAwDGdff$41ga466!12DGffDG1gQT!Wtvv%51ga466!12DGffDGE$q'B,'(2-s5a23F/G"/LMzz$//r_   N)   __name__
__module____qualname__r   r   rg   r_   r^   r   r   Q   s    
0r_   r   c                   ,     e Zd Zd fd	Zd Zd Z xZS )dynamic_resize_ac                 <    t         t        |   ||       || _        y r   )superr   r   r   )r   r   always_applyp	__class__s       r^   r   zdynamic_resize_a.__init__b   s    .|Q?r_   c                     t        |j                  d d       }|d   |d   k\  r=|d   | j                  kD  r+|d   |d   | j                  z  z  |d<   | j                  |d<   nG|d   |d   kD  r<|d   | j                  kD  r*|d   |d   | j                  z  z  |d<   | j                  |d<   t        t	        |d   dz              dz  t        t	        |d   dz              dz  f}t        j                  ||d   |d         S )N   r   r   r   )heightwidth)r   shaper   r   r   Ar   )r   r   paramsr   s       r^   applyzdynamic_resize_a.applyf   s    CIIbqM"GtAwDGdff$41ga466!12DGffDG1gQT!Wtvv%51ga466!12DGffDGE$q'B,'(2-s5a23F/G"/LMxxDG47;;r_   c                      y)Nr   rg   r   s    r^   get_transform_init_args_namesz.dynamic_resize_a.get_transform_init_args_namesr   s    r_   )r   F      ?)r   r   r   r   r   r   __classcell__)r   s   @r^   r   r   a   s    
<r_   r   c                        e Zd ZddgfdZd Zy)static_resizei   c                     || _         y r   r   )r   r   s     r^   r   zstatic_resize.__init__v   s	    	r_   c                 V    |j                  | j                  t        j                        S r   )r   r   r   r   r   r   s     r^   r   zstatic_resize.__call__y   s    zz$))U^^44r_   Nr   rg   r_   r^   r   r   u   s    !4L 5r_   r   c                       e Zd ZddZd Zy)	normalizeNc                 >    ||nd| _         ||nd| _        || _        y )Ng        r   )meanstddiv)r   r   r   r   s       r^   r   znormalize.__init__}   s$     ,D#	/3sr_   c                 `    || j                   z  }|| j                  z  }|| j                  z  }|S r   )r   r   r   r   s     r^   r   znormalize.__call__   s/    txxtyytxx
r_   )NN   r   rg   r_   r^   r   r   |   s    
r_   r   c                       e Zd Zd Zd Zy)tonumpyc                      y r   rg   r   s    r^   r   ztonumpy.__init__       r_   c                 P    t        j                  |t         j                        }|S )N)dtype)nparrayfloat32r   s     r^   r   ztonumpy.__call__   s    hhs"**-
r_   Nr   rg   r_   r^   r   r      s    r_   r   c                       e Zd Zd Zd Zy)totensorc                      y r   rg   r   s    r^   r   ztotensor.__init__   r   r_   c                 n    |j                  d      }t        j                  |      j                         }|S )N)r   r   r   )	transposerb   
from_numpyfloatr   s     r^   r   ztotensor.__call__   s.    mmI&s#))+
r_   Nr   rg   r_   r^   r   r      s    r_   r   c                   $    e Zd Zd Zd Zd Zd Zy)ImageLoaderc                    t         j                  j                  |      rt        j                  |      D cg c]B  }|j	                         j                  d      s#t         j                  j                  ||      D c}| _        t        | j                        | _        n't         j                  j                  |      r|g| _        t        | j                        | _        y c c}w )N)z.jpgz.pngz.jpeg)r   r   r   listdirrw   rx   r   imagesr   r   rv   r   r   rootfs      r^   r   zImageLoader.__init__   s    77==:<**T:J|QaggiN`N`azN{277<<a0|DKt{{+DKWW^^D!&DK$		 }s   $C#"C#c                     d| _         | S Nr   )indexr   s    r^   __iter__zImageLoader.__iter__   s    
r_   c                 Z   | j                   | j                  k(  rt        t        j                  | j
                  | j                            j                  d      }t        j                  j                  | j
                  | j                            d   }| xj                   dz  c_         ||fS )NRGBr   )
r   r   StopIterationr   rm   r   r   r   r   r   )r   r   names      r^   __next__zImageLoader.__next__   s{    ::"jjTZZ0199%@ww}}T[[45b9 	

a
Dyr_   c                     | j                   S r   r   r   s    r^   __len__zImageLoader.__len__       yyr_   Nr   r   r   r   r   r   r  rg   r_   r^   r   r      s    %	r_   r   c                   $    e Zd Zd Zd Zd Zd Zy)VideoLoaderc                    t         j                  j                  |      rgt        j                  |      D cg c]B  }|j	                         j                  d      s#t         j                  j                  ||      D c}| _        n't         j                  j                  |      r|g| _        t        | j                        | _
        y c c}w )N)z.mp4z.avir   )r   r   r   r   rw   rx   r   videosr   rv   r   r   s      r^   r   zVideoLoader.__init__   s    77==:<**T:JzQaggiN`N`axNy277<<a0zDKWW^^D!&DK$	 {s   $C	"C	c                 0    d| _         d | _        d | _        | S r   )r   capfpsr   s    r^   r   zVideoLoader.__iter__   s    
r_   c                    | j                   | j                  k(  rt        | j                  _t	        j
                  | j                  | j                            | _        | j                  j                  t        j                        | _	        | j                  j                         \  }}t        j                  j                  | j                  | j                            d   }|du r<| j                  j                          d | _        d }| xj                   dz  c_         ||fS t	        j                  |t        j                         }t#        j$                  |      j'                  d      }||fS )Nr   Fr   r   )r   r   r   r
  cv2VideoCapturer  getCAP_PROP_FPSr  r   r   r   r   releasecvtColorCOLOR_BGR2RGBr   	fromarrayr   )r   retframer   r   s        r^   r   zVideoLoader.__next__   s	   ::"88''DJJ(?@DHxx||C$4$45DHXX]]_
Uww}}T[[45b9%<HHDHCJJ!OJ Dy LL(9(9:E//%(007CDyr_   c                     | j                   S r   r   r   s    r^   r  zVideoLoader.__len__   r  r_   Nr  rg   r_   r^   r  r     s    %,r_   r  c                   *    e Zd Zd Zd Zd Zd Zd Zy)WebcamLoaderc                    t        |      | _        t        j                  | j                        | _        | j                  j                  t        j                  d       | j                  j                  t        j                  d       g | _        | j                  j                  | j                  j                         d          t        | j                  d      | _        | j                  j                          y )N    r   T)targetdaemon)r   IDr  r  r
  setCAP_PROP_FRAME_WIDTHCAP_PROP_FRAME_HEIGHTimgsappendr   r   updatethreadstart)r   r  s     r^   r   zWebcamLoader.__init__   s    b'##DGG,S--s3S..4			+,DKK=r_   c                     | j                   j                         rZ| j                   j                         \  }}|du r| j                  j	                  |       ny | j                   j                         rYy y rj   )r
  isOpenedr   r#  r$  )r   r  r  s      r^   r%  zWebcamLoader.update   sS    hh!JCd{		  ' hh!r_   c                     | S r   rg   r   s    r^   r   zWebcamLoader.__iter__   s    r_   c                 @   t        | j                        dkD  r| j                  d   }nEt        j                  t	        j
                  d      j                  t        j                              }| j                  j                         du s!t        j                  d      t        d      k(  rt        j                          t        t        j                  |t        j                         }t        j                  |      j#                  d      }| j                  d d= |d fS )Nr   r   )r  r     Fr   qr   )rv   r#  r   r  r   zerosastypeuint8r&  is_aliver  waitKeyorddestroyAllWindowsr   r  r  r   )r   r  s     r^   r   zWebcamLoader.__next__   s    tyy>AIIbMEOOBHH]$;$B$B288$LME;;!U*ckk!nC.H!!# LL(9(9:EOOE*2259EIIcrcNd{r_   c                      yr   rg   r   s    r^   r  zWebcamLoader.__len__  s    r_   N)r   r   r   r   r%  r   r   r  rg   r_   r^   r  r     s    "r_   r  )T)$r   r   r  rk   rb   r   rX   albumentationsr   (albumentations.core.transforms_interfacer   numpyr   PILr   	threadingr   easydictr   rz   ry   r\   rh   rr   r   r   r   r   r   r   r   r   r   r   r  r  rg   r_   r^   <module>r<     s    	 	 
      G     B R'
@0 0 ) (5 5    6% %N( (r_   