o
    *jv                     @   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" 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)batch_process)	LoadImage)	ModelFileTasks)
get_logger   )FaceProcessingBasePipeline)module_namec                       s   e Zd Zdef fddZ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 )FaceQualityAssessmentPipelinemodelc                    sX   t  jdd|i| t|tj}td|  | |\| _	| _
| _td dS )a  
        use `model` to create a face quality assessment pipeline for prediction
        Args:
            model: model id on modelscope hub.
        Example:
        FaceQualityAssessmentPipeline can measure the quality of an input face image,
        the higher output score represents the better quality

        ```python
        >>> from modelscope.pipelines import pipeline
        >>> fqa = pipeline('face-quality-assessment', 'damo/cv_manual_face-quality-assessment_fqa')
        >>> frfm("https://modelscope.oss-cn-beijing.aliyuncs.com/test/images/face_recognition_1.png")
        {'scores': [0.99949193], 'boxes': [[157.72341918945312, 67.5608139038086,
            305.8574523925781, 271.25555419921875]]}

        ```
        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   y/var/www/html/Deteccion_Ine/venv/lib/python3.10/site-packages/modelscope/pipelines/cv/face_quality_assessment_pipeline.pyr   "   s   z&FaceQualityAssessmentPipeline.__init__c                 C   s   t | j|S N)r   r   )r!   datar   r   r&   _batch;   s   z$FaceQualityAssessmentPipeline._batchc                 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   >   s   
z-FaceQualityAssessmentPipeline.load_onnx_modelinputreturnc                    s   t  |}|d u ri }d |d< |S |d }|d d d d d d df }|d d d }t|d }tj|dd}|tj}||d< |S )	Ninput_tensorZimgg     o@g      ?r   )r      r      )Zaxes)r   
preprocessnpZexpand_dimscopyZ	transposeZastypeZfloat32)r!   r/   resultZrtn_dictZ	align_imgZface_imgr$   r   r&   r5   L   s   z(FaceQualityAssessmentPipeline.preprocessc                 C   s   |d d u rt jd t jd iS i }|d   || jd < | jj| j|d}|d us,J t	
|d d g}|d   t	jd d f  }t j|t j|iS )Nr1   r   )
input_feedZbbox)r   ZSCORESZBOXEScpunumpyr   r   runr    r6   meanZnewaxistolist)r!   r/   r9   r8   ZscoresZboxesr   r   r&   forward[   s   "z%FaceQualityAssessmentPipeline.forwardinputsc                 C   s   |S r'   r   )r!   r@   r   r   r&   postprocessg   s   z)FaceQualityAssessmentPipeline.postprocess)__name__
__module____qualname__strr   r)   r   r	   r   r   r5   r?   rA   __classcell__r   r   r$   r&   r      s    "*r   ).Zos.pathpathr   typingr   r   Zcv2r;   r6   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.pipelines.utilr   Zmodelscope.preprocessorsr   Zmodelscope.utils.constantr   r   Zmodelscope.utils.loggerr    r   r   Zregister_moduleZface_quality_assessmentr   r   r   r   r&   <module>   s4   