U
    !?h 
                     @   s\   d dl Z d dlmZ d dlZd dlZd dlmZ d dlmZ	 ddl
mZ G dd deZdS )    N)List)Image   )BaseSessionc                   @   sD   e Zd ZdZdd Zeee dddZedd Z	ed	d
 Z
dS )BiRefNetSessionGeneralz_
    This class represents a BiRefNet-General session, which is a subclass of BaseSession.
    c                 C   s   ddt |   S )Nr   )npexp)selfZmat r
   Q/var/www/html/venv/lib/python3.8/site-packages/rembg/sessions/birefnet_general.pysigmoid   s    zBiRefNetSessionGeneral.sigmoid)imgreturnc           	   	   O   s   | j d| |ddd}| |d dddddddf }t|}t|}|| ||  }t|}tj	|d 
ddd	}||jtjj}|gS )
aJ  
        Predicts the output masks for the input image using the inner session.

        Parameters:
            img (PILImage): The input image.
            *args: Additional positional arguments.
            **kwargs: Additional keyword arguments.

        Returns:
            List[PILImage]: The list of output masks.
        N)g
ףp=
?gv/?gCl?)gZd;O?gy&1?g?)   r   r      Zuint8L)mode)Zinner_sessionrun	normalizer   r   maxminZsqueezer   Z	fromarrayZastyperesizesizeZ
ResamplingZLANCZOS)	r	   r   argskwargsZort_outspredmamimaskr
   r
   r   predict   s"       &


zBiRefNetSessionGeneral.predictc                 O   sT   | j || d}tjd| j||r(dnd|| j||dd tj| j|||S )a$  
        Downloads the BiRefNet-General model file from a specific URL and saves it.

        Parameters:
            *args: Additional positional arguments.
            **kwargs: Additional keyword arguments.

        Returns:
            str: The path to the downloaded model file.
        z.onnxz]https://github.com/danielgatis/rembg/releases/download/v0.0.0/BiRefNet-general-epoch_244.onnxNz$md5:7a35a0141cbbc80de11d9c9a28f52697T)fnamepathZprogressbar)namepoochretrieveZchecksum_disabledZ
u2net_homeosr!   join)clsr   r   r    r
   r
   r   download_models4   s    

z&BiRefNetSessionGeneral.download_modelsc                 O   s   dS )z
        Returns the name of the BiRefNet-General session.

        Parameters:
            *args: Additional positional arguments.
            **kwargs: Additional keyword arguments.

        Returns:
            str: The name of the session.
        zbirefnet-generalr
   )r'   r   r   r
   r
   r   r"   O   s    zBiRefNetSessionGeneral.nameN)__name__
__module____qualname____doc__r   PILImager   r   classmethodr(   r"   r
   r
   r
   r   r      s    
r   )r%   typingr   numpyr   r#   ZPILr   Z	PIL.Imager-   baser   r   r
   r
   r
   r   <module>   s   