o
    ॵi>                     @   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   todeviceeval
face_modelloggerinfo)selfr   kwargsr   	__class__r   i/home/ubuntu/.local/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   )axesg     o@g      ?)r   
preprocessnp	transposeastypefloat32)r   r#   resultrtn_dict	align_img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)keepdimsr   )r   IMG_EMBEDDINGSCORES	unsqueezer   detachcpunumpyr*   sqrtsumexptolist)r   r#   r%   outputembscoresr   r   r"   forwardB   s   
z"FaceRecognitionOodPipeline.forwardinputsc                 C   s   |S )Nr   )r   rA   r   r   r"   postprocessL   s   z&FaceRecognitionOodPipeline.postprocess)__name__
__module____qualname__strr   r	   r   r   r)   r@   rB   __classcell__r   r   r    r"   r      s
    "*
r   )(os.pathpathosptypingr   r   cv2r8   r*   PILtorchmodelscope.metainfor   modelscope.modelsr   0modelscope.models.cv.face_recognition.align_facer   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_recognitionface_recognition_oodr   r   r   r   r"   <module>   s,   