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)FaceAttributeRecognition)
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 ) FaceAttributeRecognitionPipelinemodelc                    s   t  jdd|i| t|tj}td|  t	tj
 r&dd nd}t||d}|| _|| _	td dd	g}g d
}||g| _dS )z
        use `model` to create a face attribute recognition pipeline for prediction
        Args:
            model: model id on modelscope hub.
        r   zloading model from zcuda:r   cpu)
model_pathdevicezload model doneMaleFemale)	z0-2z3-9z10-19z20-29z30-39z40-49z50-59z60-69z70+N )super__init__ospjoinr   TORCH_MODEL_FILEloggerinfotorchr   cudais_availabler   fairfacemap_list)selfr   kwargs	ckpt_pathr   r%   	male_listage_list	__class__r   o/home/ubuntu/.local/lib/python3.10/site-packages/modelscope/pipelines/cv/face_attribute_recognition_pipeline.pyr      s   
z)FaceAttributeRecognitionPipeline.__init__inputreturnc                    s(   t  |}|d u ri }d |d< |S |S Nimg)r   
preprocess)r'   r/   resultrtn_dictr,   r   r.   r3   7   s   z+FaceAttributeRecognitionPipeline.preprocessc                 C   sH   |d d u rt jd t jd iS | |d }|d usJ t j|t j| jiS r1   )r   SCORESLABELSr%   r&   )r'   r/   scoresr   r   r.   forward?   s
   z(FaceAttributeRecognitionPipeline.forwardinputsc                 C   s   |S )Nr   )r'   r:   r   r   r.   postprocessF   s   z,FaceAttributeRecognitionPipeline.postprocess)__name__
__module____qualname__strr   r	   r   r   r3   r9   r;   __classcell__r   r   r,   r.   r      s
    "*r   )'os.pathpathr   typingr   r   cv2numpynpPILr"   modelscope.metainfor   /modelscope.models.cv.face_attribute_recognitionr   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_attribute_recognitionr   r   r   r   r.   <module>   s.   