U
    h                     @   s   d dl Z d dlmZ d dlZd dlZddlT ddlT ddlT ddl	m
Z
 ddlmZ ddlmZ dgZG d	d
 d
ejZG dd dZdd Zdd Zdd Zdd ZdS )    N   )*)	Attribute)	INSwapper   )download_onnx	get_modelc                       s,   e Zd Z fddZdd Zdd Z  ZS )PickableInferenceSessionc                    s   t  j|f| || _d S N)super__init__
model_path)selfr   kwargs	__class__ C/tmp/pip-unpacked-wheel-5oclok7i/insightface/model_zoo/model_zoo.pyr      s    z!PickableInferenceSession.__init__c                 C   s
   d| j iS Nr   )r   )r   r   r   r   __getstate__   s    z%PickableInferenceSession.__getstate__c                 C   s   |d }|  | d S r   )r   )r   valuesr   r   r   r   __setstate__   s    z%PickableInferenceSession.__setstate__)__name__
__module____qualname__r   r   r   __classcell__r   r   r   r   r	      s   r	   c                   @   s   e Zd Zdd Zdd ZdS )ModelRouterc                 C   s
   || _ d S r
   )	onnx_file)r   r   r   r   r   r   $   s    zModelRouter.__init__c                 K   s$  t | jf|}td|j d|j  | }|d }|j}| }t|dkr^t	| j|dS |d dkr|d dkrt
| j|dS |d d	kr|d d	krt| j|dS t|dkr|d d
kr|d d
krt| j|dS |d |d kr|d dkr|d d dkrt| j|dS d S d S )NzApplied providers: z, with options: r      )
model_filesessionr         `      p      )r	   r   printZ
_providersZ_provider_options
get_inputsshapeget_outputslenZ
RetinaFaceZLandmarkr   r   ZArcFaceONNX)r   r   r    inputsZ	input_cfgZinput_shapeoutputsr   r   r   r   '   s"    $2zModelRouter.get_modelN)r   r   r   r   r   r   r   r   r   r   #   s   r   c                 C   s>   t j| sd S td|  }t|dkr.d S t|}|d S )Nz	%s/*.onnxr   )ospathexistsglobr+   sorted)Zdir_pathpathsr   r   r   find_onnx_file=   s    r5   c                   C   s   ddgS )NZCUDAExecutionProviderZCPUExecutionProviderr   r   r   r   r   get_default_providersF   s    r6   c                   C   s   d S r
   r   r   r   r   r   get_default_provider_optionsI   s    r7   c                 K   s   | dd}tj|}t|d}| dd}| dd}| dsjtj|| }t|}|d krnd S n| }t|s|rt	d|||d}t|st
d	| t|st
d
| t|}| dt }	| dt }
|j|	|
d}|S )Nrootz~/.insightfacemodelsdownloadFdownload_zipz.onnx)r8   r;   zmodel_file %s should existzmodel_file %s should be a file	providersprovider_options)r<   r=   )getr/   r0   
expanduserospjoinendswithr5   r1   r   AssertionErrorisfiler   r6   r7   r   )namer   r8   Z
model_rootZallow_downloadr;   Z	model_dirr   Zrouterr<   r=   modelr   r   r   r   L   s(    
)r/   os.pathr0   r@   r2   ZonnxruntimeZarcface_onnxZ
retinafaceZlandmark	attributer   Z	inswapperr   utilsr   __all__ZInferenceSessionr	   r   r5   r6   r7   r   r   r   r   r   <module>   s    	