o
    ॵi
                     @   s   d dl mZ 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)OrderedDict)AnyDict)	Pipelines)
align_face)
iresnet286)
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 )MaskFaceRecognitionPipelinemodelc                    sp   t  jdd|i| t }tt|tj}| 	|}|j
|dd || j}|  || _td dS )z
        use `model` to create a mask face recognition pipeline for prediction
        Args:
            model: model id on modelscope hub.
        r   T)strictzface recognition model loaded!N )super__init__r   torchloadospjoinr   TORCH_MODEL_FILE_prefix_revisionload_state_dicttodeviceeval
face_modelloggerinfo)selfr   kwargsr$   
state_dictreviesed_state_dict	__class__r   j/home/ubuntu/.local/lib/python3.10/site-packages/modelscope/pipelines/cv/mask_face_recognition_pipeline.pyr      s   
z$MaskFaceRecognitionPipeline.__init__c                 C   s>   t  }| D ]\}}|dr|dd  }|||< q|}|S )Nzmodule.   )r   items
startswith)r'   r)   new_state_dictkvstater   r   r-   r   1   s   

z,MaskFaceRecognitionPipeline._prefix_revision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'   r5   result	align_imgface_imgr+   r   r-   r;   :   s   z&MaskFaceRecognitionPipeline.preprocessc                 C   s\   |d d usJ |d  d}| |   }|ttj|d ddd }tj	|iS )Nr7   r   r9   r8   T)keepdims)
	unsqueezer$   detachcpunumpyr<   sqrtsumr   IMG_EMBEDDING)r'   r5   r7   embr   r   r-   forwardD   s
   
z#MaskFaceRecognitionPipeline.forwardinputsc                 C   s   |S )Nr   )r'   rM   r   r   r-   postprocessK   s   z'MaskFaceRecognitionPipeline.postprocess)__name__
__module____qualname__strr   r   r
   r   r   r;   rL   rN   __classcell__r   r   r+   r-   r      s    	"
*r   )*os.pathpathr   collectionsr   typingr   r   cv2rG   r<   PILr   modelscope.metainfor   0modelscope.models.cv.face_recognition.align_facer   Imodelscope.models.cv.face_recognition.torchkit.backbone.facemask_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_recognitionmask_face_recognitionr   r   r   r   r-   <module>   s.   