o
    *j>                     @   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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)Model)
align_face)
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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 )FaceRecognitionOodPipelinemodelc                    sD   t  jdd|i| | j}|| j}|  || _td dS )a-  
        use `model` to create a face recognition ood pipeline for prediction
        Args:
            model: model id on modelscope hub.

        Examples:

        >>> from modelscope.pipelines import pipeline
        >>> fr_ood= pipeline('face-recognition-ood', 'damo/cv_ir_face-recognition-ood_rts')
        >>> fr_ood("https://modelscope.oss-cn-beijing.aliyuncs.com/test/images/face_recognition_1.png")
        {{'img_embedding': array([[ 0.02276129, -0.00761525, ...,0.05735306]],
            dtype=float32, 'scores': [[0.7656678557395935]]}
        r   zface recognition model loaded!N )	super__init__r   toZdeviceeval
face_modelloggerinfo)selfr   kwargsr   	__class__r   v/var/www/html/Deteccion_Ine/venv/lib/python3.10/site-packages/modelscope/pipelines/cv/face_recognition_ood_pipeline.pyr      s   z#FaceRecognitionOodPipeline.__init__inputreturnc                    s~   t  |}|d u ri }d |d< |S |d }|d d d d d d df }tj|dd}|d d d }|tj}||d< |S )Nimg)   r   r   )Zaxesg     o@g      ?)r   
preprocessnpZ	transposeZastypeZfloat32)r   r"   resultZrtn_dictZ	align_imgZface_imgr   r   r!   r'   4   s   z%FaceRecognitionOodPipeline.preprocessc                 C   s   |d d u rt jd t jd iS |d d}| |}|d    }|t	tj
|d ddd }|d      }t j|t j|iS )Nr$   r   r&   r%   T)Zkeepdimsr   )r   ZIMG_EMBEDDINGZSCORESZ	unsqueezer   detachcpunumpyr(   sqrtsumexptolist)r   r"   r$   outputZembZscoresr   r   r!   forwardB   s   
z"FaceRecognitionOodPipeline.forwardinputsc                 C   s   |S )Nr   )r   r3   r   r   r!   postprocessL   s   z&FaceRecognitionOodPipeline.postprocess)__name__
__module____qualname__strr   r	   r   r   r'   r2   r4   __classcell__r   r   r   r!   r      s
    "*
r   )(Zos.pathpathZosptypingr   r   Zcv2r,   r(   ZPILZtorchZmodelscope.metainfor   Zmodelscope.modelsr   Z0modelscope.models.cv.face_recognition.align_facer   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_recognitionZface_recognition_oodr   r   r   r   r!   <module>   s,   