o
    ॵiF                     @   s  d dl mZ d dlmZ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  mZ d dlmZ d dlmZ d dlmZ d dlmZ d dlmZ d dlmZmZ d d	lmZ d d
lm Z  d dl!m"Z"m#Z# d dl$m%Z% ddl&m'Z' e% Z(ej)e#j*ej+dG dd de'Z,dS )    N)AnyDict)	Pipelines)
align_face)FacialLandmarkConfidence)
OutputKeys)pipeline)InputPipeline)	PIPELINES)	LoadImage)	ModelFileTasks)
get_logger   )FaceProcessingBasePipeline)module_namec                       s   e Zd Zdef fddZdd Zdedeeef f fdd	Z	deeef deeef fd
dZ
deeef deeef fddZ  ZS )FaceLivenessIrPipelinemodelc                    sX   t  jdd|i| t|tj}td|  | |\| _	| _
| _td dS )z
        use `model` to create a face lievness ir pipeline for prediction
        Args:
            model: model id on modelscope hub.
        r   zloading model from zload model doneN )super__init__ospjoinr   ONNX_MODEL_FILEloggerinfoload_onnx_modelsessinput_node_nameout_node_name)selfr   kwargs	onnx_path	__class__r   e/home/ubuntu/.local/lib/python3.10/site-packages/modelscope/pipelines/cv/face_liveness_ir_pipeline.pyr       s   zFaceLivenessIrPipeline.__init__c                 C   sX   t j|ddgd}g }g }| D ]}||j q| D ]}||j q|||fS )NCUDAExecutionProviderCPUExecutionProvider)	providers)onnxruntimeInferenceSessionget_outputsappendname
get_inputs)r!   r#   r   r    r   noder   r   r&   r   -   s   
z&FaceLivenessIrPipeline.load_onnx_modelinputreturnc                    s   t  |}|d u ri }d |d< |S t|}|d d d d d d df }t t| ||d d}|jd dkrE|ddddd d f }|d	 d
 }|ddt	j
d d f }||d< |S )Ninput_tensorbbox   r   p      x   g     _@g      ?float32)   r   r   )r   
preprocessr   convert_to_ndarrayr   align_face_paddingshapeastype	transposenpnewaxis)r!   r1   resultrtn_dictorig_imgimgr3   r$   r   r&   r<   ;   s,   

z!FaceLivenessIrPipeline.preprocessc                 C   s   |d d u rt jd t jd iS i }|d   || jd < | jj| j|d}t	j
t|ddd d }|d us:J d|d   g}|d   tjd d f  }t j|t j|iS )Nr3   r   )
input_feedr4   )dimr   r5   )r   SCORESBOXEScpunumpyr   r   runr    FsoftmaxtorchFloatTensortolistrB   rC   )r!   r1   rH   rD   outscoresboxesr   r   r&   forwardN   s   "zFaceLivenessIrPipeline.forwardinputsc                 C   s   |S )Nr   )r!   rX   r   r   r&   postprocess[   s   z"FaceLivenessIrPipeline.postprocess)__name__
__module____qualname__strr   r   r	   r   r   r<   rW   rY   __classcell__r   r   r$   r&   r      s    "*r   )-os.pathpathr   typingr   r   cv2rM   rB   r*   PILrQ   torch.nn.functionalnn
functionalrO   modelscope.metainfor   0modelscope.models.cv.face_recognition.align_facer   /modelscope.models.cv.facial_landmark_confidencer   modelscope.outputsr   modelscope.pipelinesr   modelscope.pipelines.baser	   r
   modelscope.pipelines.builderr   modelscope.preprocessorsr   modelscope.utils.constantr   r   modelscope.utils.loggerr    r   r   register_moduleface_livenessface_liveness_irr   r   r   r   r&   <module>   s0   