o
    *jK                     @   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 )FaceLivenessXcPipelinemodelc                    sX   t  jdd|i| t|tj}td|  | |\| _	| _
| _td dS )a|  
        FaceLivenessXcPipeline can judge the input face is a real or fake face.
        use `model` to create a face lievness ir pipeline for prediction
        Args:
            model: model id on modelscope hub.
        ```python
        >>> from modelscope.pipelines import pipeline
        >>> fl_xc = pipeline('face_liveness', 'damo/cv_manual_face-liveness_flxc')
        >>> fl_xc("https://modelscope.oss-cn-beijing.aliyuncs.com/test/images/face_liveness_xc.png")
        {'scores': [0.03821974992752075], 'boxes': [[12.569677352905273, 6.428711891174316,
            94.17887115478516, 106.74441528320312]]}
        ```
        r   zloading model from zload model doneN )super__init__ospjoinr   ZONNX_MODEL_FILEloggerinfoload_onnx_modelsessinput_node_nameout_node_name)selfr   kwargs	onnx_path	__class__r   r/var/www/html/Deteccion_Ine/venv/lib/python3.10/site-packages/modelscope/pipelines/cv/face_liveness_xc_pipeline.pyr       s   zFaceLivenessXcPipeline.__init__c                 C   sX   t j|ddgd}g }g }| D ]}||j q| D ]}||j q|||fS )NZCUDAExecutionProviderZCPUExecutionProvider)	providers)onnxruntimeZInferenceSessionZget_outputsappendnameZ
get_inputs)r    r"   r   r   r   noder   r   r%   r   5   s   
z&FaceLivenessXcPipeline.load_onnx_modelinputreturnc                    s   t  |}|d u ri }d |d< |S |d }|d d }t|d }tj||||gdd}tj|dd	tj}||d< |S )
Ninput_tensorimgg     _@g      ?r      )Zaxis)r   r/   r      )Zaxes)	r   
preprocessnpZexpand_dimscopyZconcatenateZ	transposeZastypeZfloat32)r    r+   resultZrtn_dictr.   r-   r#   r   r%   r1   C   s    z!FaceLivenessXcPipeline.preprocessc                 C   s   |d d u rt jd t jd iS i }|d   || jd < | jj| j|d}|d d d 	 g}|d   t
jd d f 	 }t j|t j|iS )Nr-   r   )
input_feedZbbox)r   ZSCORESZBOXEScpunumpyr   r   runr   tolistr2   Znewaxis)r    r+   r5   r4   ZscoresZboxesr   r   r%   forwardR   s   "zFaceLivenessXcPipeline.forwardinputsc                 C   s   |S )Nr   )r    r;   r   r   r%   postprocess^   s   z"FaceLivenessXcPipeline.postprocess)__name__
__module____qualname__strr   r   r	   r   r   r1   r:   r<   __classcell__r   r   r#   r%   r      s    "*r   )-Zos.pathpathr   typingr   r   Zcv2r7   r2   r'   ZPILZtorchZtorch.nn.functionalnnZ
functionalFZmodelscope.metainfor   Z0modelscope.models.cv.face_recognition.align_facer   Z/modelscope.models.cv.facial_landmark_confidencer   Zmodelscope.outputsr   Zmodelscope.pipelinesr   Zmodelscope.pipelines.baser	   r
   Zmodelscope.pipelines.builderr   Zmodelscope.preprocessorsr   Zmodelscope.utils.constantr   r   Zmodelscope.utils.loggerr    r   r   Zregister_moduleZface_livenessZface_liveness_xcr   r   r   r   r%   <module>   s0   