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)
align_face)	get_model)
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 )FaceRecognitionPipelinemodelc                    s   t  jd
d|i| ttj rdd nd}|| _tdddg}|tjt	
|tj|d ||}|  || _td d	S )z
        use `model` to create a face recognition pipeline for prediction
        Args:
            model: model id on modelscope hub.
        r   zcuda:r   cpuIR_101p   )map_locationzface recognition model loaded!N )super__init__torchdevicecudais_availabler   load_state_dictloadospjoinr   TORCH_MODEL_BIN_FILEtoeval
face_modelloggerinfo)selfr   kwargsr   r'   	__class__r   e/home/ubuntu/.local/lib/python3.10/site-packages/modelscope/pipelines/cv/face_recognition_pipeline.pyr      s    
z FaceRecognitionPipeline.__init__inputreturnc                    sf   t  |}|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	align_imgface_imgr,   r   r.   r5   3   s   z"FaceRecognitionPipeline.preprocessc                 C   s\   |d d usJ |d  d}| |   }|ttj|d ddd }tj	|iS )Nr1   r   r3   r2   T)keepdims)
	unsqueezer'   detachr   numpyr6   sqrtsumr   IMG_EMBEDDING)r*   r/   r1   embr   r   r.   forward=   s
   
zFaceRecognitionPipeline.forwardinputsc                 C   s   |S )Nr   )r*   rF   r   r   r.   postprocessD   s   z#FaceRecognitionPipeline.postprocess)__name__
__module____qualname__strr   r	   r   r   r5   rE   rG   __classcell__r   r   r,   r.   r      s
    "
*r   )'os.pathpathr"   typingr   r   cv2r@   r6   PILr   modelscope.metainfor   0modelscope.models.cv.face_recognition.align_facer   7modelscope.models.cv.face_recognition.torchkit.backboner   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_recognitionr   r   r   r   r.   <module>   s,   