U
    h+                     @   s   d dl Z d dlZd dlm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mZmZmZ d dlZd dlZd dlmZ ejddd dd	 Zd
d ZdddZdddZdddZdddZdddZdddZdS )     N   )DEVICENetiter_framesremove_many)PathspawnT)forcec              	      s   t d| d |d }|  t|}d }	 fddtt  D D ]}
|
sb q|
d }|kr~td qjfdd	|
D }|	d krtj	|tj
t|tjtd
}	t||	||< |
D ]
}|= q|7 }qVd S )NzWORKER z ONLINEr   c                 3   s>   | ]6}t t |   t |    V  qd S )N)listrangemin).0i)
base_indexgpu_batchsizetotal_framesworker_nodes M/var/www/html/venv/lib/python3.8/site-packages/backgroundremover/utilities.py	<genexpr>   s   zworker.<locals>.<genexpr>皙?c                    s   g | ]} | qS r   r   )r   index)frames_dictr   r   
<listcomp>)   s     zworker.<locals>.<listcomp>)ZdtypeZdevice)printr   r   mathceiltimesleeptorchZjittraceZ	as_tensornpstackZfloat32r   r   )r   Zworker_indexZresult_dict
model_namer   r   r   Zoutput_indexnetZ
script_netfilastZinput_framesZfdexr   )r   r   r   r   r   r   worker   s,    
r(   c                 C   sN   t d tt| D ]4\}}|||< t||kr<td q$||kr qJqd S )NzWORKER FRAMERIPPER ONLINEr   )r   	enumerater   lenr   r   )	file_pathr   Zprefetched_samplesr   idxframer   r   r   capture_frames6   s    r.   r      c                    s  t  }| |  t|}	ddddddddd	d
|g}
tj|
dd}t|dd |dkrnt	|t
dd |	d D d }|std|dd}|dkrtd|dkrtd| d tt|}td| d  t jt| | fd}|   fddtD }|D ]}|  q.d }d }d}tt D ]}tD ]
}| d | }|krtd q| }|= |D ]}|d krd d!d"d#d$d#d%|jd  d&d'd(d)| d*d+d,d$d-d.d/d0|  g}tj|tjd1}|j|  |d }|kr|  |D ]}|  q4|j  |  td2 d3    d S qqjq\|  |D ]}|  q|j  |  d S )4NZffprobez-verrorz-select_streamszv:0z-count_packetsz-show_entrieszstream=nb_read_packetsz-ofzcsv=p=0T)universal_newlines,r   r   c                 s   s   | ]}|d  dkr|V  qdS )Z
codec_typeZvideoNr   )r   sr   r   r   r   a   s      zmatte_key.<locals>.<genexpr>streamszCould not find video streamZr_frame_ratez0/0z#Could not detect framerate of videozFRAME RATE DETECTED: z/ (if this looks wrong, override the frame rate)zFRAME RATE: z TOTAL FRAMES: targetargsc                    s(   g | ] }t jt| fd qS )r5   )multiprocessingProcessr(   )r   Zwnr   r   r$   Zresults_dictr   r   r   r   r   u   s   zmatte_key.<locals>.<listcomp>r   r   ffmpeg-yz-fZrawvideoz-vcodecz-sZx320z-pix_fmtgrayz-r-i-z-anZmpeg4z-b:vZ2000kz%s)stdinzFINISHED ALL FRAMES (z)!) r8   Managerdictr;   Zprobespcheck_outputintsplitr   next	Exceptiongetr   r   r   evalr9   r.   startr   r   r   shapePopenPIPEr@   writetostringjoinclosewait)outputr+   r   r   r$   frame_limitprefetched_batches	frameratemanagerinfocmdZframerate_outputZvideo_streamZframe_rate_strpworkerswcommandprocZframe_counterr   ZwxZ
hash_indexframesr-   r   r:   r   	matte_key@   s    



        


ra   c              
   C   sl   t  }t|j}	tjtj|	d}
t|
||||||| ddd|d|
ddd| g
}t	
| td d S )	N	matte.mp4r;   r<   r>   -filter_complexzv[1][0]scale2ref[mask][main];[main][mask]alphamerge=shortest=1,fps=10,split[s0][s1];[s0]palettegen[p];[s1][p]paletteuse	-shortestProcess finished)tempfileTemporaryDirectoryr   nameospathabspathrQ   ra   rC   runr   rT   r+   r   r   r$   rU   rV   rW   temp_dir
tmpdirname	temp_filerZ   r   r   r   transparentgif   s2    
       
rq   c	                 C   s   t  }	t|	j}
tjtj|
d}t|||||||| t	d ddd|d|d|ddd| g}t
| t	d	 z|	  W n tk
r   Y nX d S )
Nrb   Starting alphamerger;   r<   r>   rc   z[1][0]scale2ref[mask][main];[main][mask]alphamerge=shortest=1[fg];[2][fg]overlay=(main_w-overlay_w)/2:(main_h-overlay_h)/2:format=auto,fps=10,split[s0][s1];[s0]palettegen[p];[s1][p]paletteuserd   re   rf   rg   r   rh   ri   rj   rk   rQ   ra   r   rC   rl   cleanupPermissionErrorrT   overlayr+   r   r   r$   rU   rV   rW   rn   ro   rp   rZ   r   r   r   transparentgifwithbackground   s@    
         
rx   c                 C   s   t  }t|j}	tjtj|	d}
t|
||||||| t	d ddd|d|
dddd	d
| g}t
| t	d z|  W n tk
r   Y nX d S )Nrb   rr   r;   r<   r>   rc   z=[1][0]scale2ref[mask][main];[main][mask]alphamerge=shortest=1z-c:vZqtrlerd   re   rs   rm   r   r   r   transparentvideo   s@    
          
ry   c	                 C   s   t  }	t|	j}
tjtj|
d}t|||||||| t	d ddd|d|d|dddd	d
| g}t
| t	d z|	  W n tk
r   Y nX d S )Nrb   rr   r;   r<   r>   rc   z~[1][0]scale2ref[mask][main];[main][mask]alphamerge=shortest=1[vid];[vid][2:v]scale2ref[fg][bg];[bg][fg]overlay=shortest=1[out]-map[out]rd   re   rs   rv   r   r   r   transparentvideoovervideo  sD    
            
r|   c	                 C   s   t  }	t|	j}
tjtj|
d}t|||||||| t	d tjd|
 }ddd|d|ddd	d
|g}t
| t	d ddd|d|d|ddddd| g}t
| t	d z|	  W n tk
r   Y nX d S )Nrb   zScale imagez
%s/new.jpgr;   r<   r>   rc   z/scale2ref[img][vid];[img]setsar=1;[vid]nullsinkz-q:v2rr   zk[0:v]scale2ref=oh*mdar:ih[bg];[1:v]scale2ref=oh*mdar:ih[fg];[bg][fg]overlay=(W-w)/2:(H-h)/2:shortest=1[out]rz   r{   rd   re   rs   )rT   rw   r+   r   r   r$   rU   rV   rW   rn   ro   rp   Z
temp_imagerZ   r   r   r   transparentvideooverimage-  sb    
         
           
r~   )r   r/   r   )r   r/   r   )r   r/   r   )r   r/   r   )r   r/   r   )r   r/   r   )ri   r   Ztorch.multiprocessingr8   
subprocessrC   r   r;   numpyr"   r    bgr   r   r   r   rf   requestspathlibr   Zset_start_methodr(   r.   ra   rq   rx   ry   r|   r~   r   r   r   r   <module>   sL   %   
t   
"   
$   
$   
#   