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)_iresnet)
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 )ArcFaceRecognitionPipelinemodelc                    sl   t  jdd|i| tdg d}|tjt|tj	| j
d || j
}|  || _td dS )z
        use `model` to create a face recognition pipeline for prediction
        Args:
            model: model id on modelscope hub.
        r   arcface_i50)         r   )map_locationzface recognition model loaded!N )super__init__r   load_state_dicttorchloadospjoinr   TORCH_MODEL_FILEdevicetoeval
face_modelloggerinfo)selfr   kwargsr&   	__class__r   i/home/ubuntu/.local/lib/python3.10/site-packages/modelscope/pipelines/cv/arc_face_recognition_pipeline.pyr      s   z#ArcFaceRecognitionPipeline.__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-   r4   1   s   z%ArcFaceRecognitionPipeline.preprocessc                 C   sb   |d d u rt jd iS |d d}| |   }|ttj	|d ddd }t j|iS )Nr0   r   r2   r1   T)keepdims)
r   IMG_EMBEDDING	unsqueezer&   detachcpunumpyr5   sqrtsum)r)   r.   r0   embr   r   r-   forward?   s   

z"ArcFaceRecognitionPipeline.forwardinputsc                 C   s   |S )Nr   )r)   rG   r   r   r-   postprocessG   s   z&ArcFaceRecognitionPipeline.postprocess)__name__
__module____qualname__strr   r	   r   r   r4   rF   rH   __classcell__r   r   r+   r-   r      s
    "*r   )(os.pathpathr    typingr   r   cv2rB   r5   PILr   modelscope.metainfor   0modelscope.models.cv.face_recognition.align_facer   Hmodelscope.models.cv.face_recognition.torchkit.backbone.arcface_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arc_face_recognitionr   r   r   r   r-   <module>   s,   