o
    *Îjš&  ã                   @   s  d dl mZ d dlmZmZ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 d d	lmZmZ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& e&ƒ Z'ej(e$j)ej)dG dd„ deƒƒZ*dS )é    N)ÚAnyÚDictÚListÚUnion)ÚImage)Ú
transforms)Ú	Pipelines)ÚPedestrainAttribute)Ú
OutputKeys)Úpipeline)ÚInputÚModelÚPipelineÚTensor)Ú	PIPELINES)Ú	LoadImage)Ú	ModelFileÚTasks)Ú
get_logger)Úmodule_namec                       s  e Zd ZdZdef‡ fdd„Zddd„Zdd	„ Zd
ee	eee
jf f fdd„Zdedee	ef fdd„Zdd„ Zdee	e	f dee	ef fdd„Zdedee	eee
jf f fdd„Zde	dee	eee
jf f fdd„Zdee	eee
jf f defdd„Z‡  ZS )Ú&PedestrainAttributeRecognitionPipelineaÓ   Pedestrian attribute recognition Pipeline.

    Example:

    ```python
    >>> from modelscope.pipelines import pipeline
    >>> from modelscope.utils.constant import Tasks

    >>> model_id = 'damo/cv_resnet50_pedestrian-attribute-recognition_image'
    >>> handle = pipeline(Tasks.pedestrian_attribute_recognition, model=model_id)
    >>> output = handle('https://modelscope.oss-cn-beijing.aliyuncs.com/test/images/keypoints_detect/000000442836.jpg')
    ```
    Úmodelc                    sœ   t ƒ jdd|i|¤Ž 	 tdd| _tjt |tj	¡| j
dd}| j |¡ | j | j
¡| _| j ¡  ddg| _d| _d	| _ttj| j| d
d¡d| _d S )Nr   é'   )Znum_classesT)Zmap_locationZweights_onlyéÀ   i€  r   z(damo/cv_tinynas_human-detection_damoyoloÚtrust_remote_codeF)r   r   © )ÚsuperÚ__init__r	   Úattribute_modelÚtorchÚloadÚospÚjoinr   ZTORCH_MODEL_FILEÚdeviceZload_state_dictÚtoÚevalÚ
input_sizeÚbox_enlarge_ratioZhuman_detect_model_idr   r   Z domain_specific_object_detectionÚgetÚhuman_detector)Úselfr   ÚkwargsÚstate©Ú	__class__r   ú‚/var/www/html/Deteccion_Ine/venv/lib/python3.10/site-packages/modelscope/pipelines/cv/pedestrian_attribute_recognition_pipeline.pyr   -   s&   ý


ýz/PedestrainAttributeRecognitionPipeline.__init__ç      à?c                 C   s|  |d dd… }|d dd… }|d dd… }|d dd… }|d dd… }|d dd… }|d dd… }	|d dd	… }
|d d	d
… }|d d
d… }|d dd… }|d dd… }||krfdnd}t  |¡}t  |¡}||krxdnd}||kr€dnd}||krˆdnd}|	|krdnd}|
|kr˜dnd}t  |¡}t  |¡}t  |¡}t  |¡}||||||||||||g}|S )Nr   é   é   é   é   é	   é
   é   é   é   é   é   r   )ÚnpZargmax)r*   ÚoutputsZthresZgenderZageZorientZhatZglassZhand_bagZshoulder_bagZ	back_packZ
upper_wearZ
lower_wearZupper_colorZlower_colorZ	lb_genderZlb_ageZ	lb_orientZlb_hatZlb_glassZlb_hand_bagZlb_shoulder_bagZlb_back_packZlb_upper_wearZlb_lower_wearZlb_upper_colorZlb_lower_colorÚlabelsr   r   r/   Ú
get_labelsF   s:   





ýz1PedestrainAttributeRecognitionPipeline.get_labelsc                 C   sÞ   ddgg d¢g d¢ddgddgddgddgddgddgg d	¢g d
¢g d
¢g}ddgg d¢g d¢ddgddgddgddgddgddgg d¢g d¢g d¢g}g }g }t |ƒD ]\}}| || | ¡ | || | ¡ qT||fS )NZFemaleZMale)Z	AgeOver60zAge18-60Z	AgeLess18)ZFrontZSideZBackZYesZNoZShortSleeveZ
LongSleeve)ZTrousersZShortszSkirt&Dress)ÚblackZgreyÚblueÚgreenÚwhiteÚpurpleÚredZbrownÚyellowZpinkZorangeu   å¥³u   ç”·)u   å¤§äºŽ60å²u   18-60å²ä¹‹é—´u   å°äºŽ18å²)u   æ­£å‘u   ä¾§å‘u   èƒŒé¢u	   æˆ´å¸½å­u   ä¸æˆ´å¸½å­u	   æˆ´çœ¼é•œu   ä¸æˆ´çœ¼é•œu   æœ‰æ‰‹æåŒ…u   æ— æ‰‹æåŒ…u   æœ‰è‚©æŒŽåŒ…u   æ— è‚©æŒŽåŒ…u	   æœ‰èƒŒåŒ…u	   æ— èƒŒåŒ…u   çŸ­è¢–u   é•¿è¢–)u   é•¿è£¤u   çŸ­è£¤u   è£™å­)u   é»‘u   ç°u   è“u   ç»¿u   ç™½u   ç´«u   çº¢u   æ£•u   é»„u   ç²‰u   æ©™)Ú	enumerateÚappend)r*   r>   Znotes_enZnotes_cnZnotes_labels_enZnotes_labels_cnÚidxZlbr   r   r/   Úlabels_transformh   s@   ñôz7PedestrainAttributeRecognitionPipeline.labels_transformÚinputsc           
      K   s   g }g }t t|d ƒƒD ]7}|  |d |  ¡  ¡  ¡ ¡}|  |¡\}}t |d | d dd… ¡ 	dd¡}	| 
|¡ | 
|	 ¡ ¡ q||fS )Nr   r1   Ú	human_boxr2   é   )ÚrangeÚlenr?   ÚdetachÚcpuÚnumpyrJ   r<   ÚarrayÚreshaperH   Útolist)
r*   rK   r+   Zoutput_labelsZoutput_boxesÚir=   Zlabel_enZlabel_cnÚboxr   r   r/   Úget_results•   s   &
z2PedestrainAttributeRecognitionPipeline.get_resultsÚinputÚreturnc           	      C   sB  t |tƒrt |d¡d d …d d …dd…f }n<t |tjƒr<t|jƒdkr,t |tj	¡}n|}|d d …d d …dd…f }nt |t
jƒrS| ¡  ¡ d d …d d …dd…f }| jd }| jd }t |tj¡}t |||ftj¡}t |¡d }g d¢}g d¢}|| | }tjdd||gtjd	}| d
¡}||dd d …f< t
 |¡S )Néÿÿÿÿr   é   rM   r1   g     ào@)g
×£p=
ß?gÉv¾Ÿ/Ý?g–C‹lçûÙ?)gZd;ßOÍ?gyé&1¬Ì?gÍÌÌÌÌÌÌ?©Zdtype)rM   r   r1   )Ú
isinstanceÚstrÚcv2Zimreadr<   ÚndarrayrO   ÚshapeZcvtColorZCOLOR_GRAY2BGRr   r   rQ   rR   r&   ZCOLOR_BGR2RGBÚresizeZINTER_LINEARÚfloat32ZzerosZ	transposeZ
from_numpy)	r*   rY   ÚimageZw_newZh_newZ
img_resizeÚmeanZstdZ
input_datar   r   r/   Úimage_transform¤   s*   
$"



z6PedestrainAttributeRecognitionPipeline.image_transformc           	      C   s  |j \}}}|d |d  \}}|dd d …f  || j || j f8  < |dd d …f  || j || j f7  < tt|d dƒ|ƒ|d< tt|d dƒ|ƒ|d< tt|d dƒ|ƒ|d< tt|d dƒ|ƒ|d< |t|d d ƒt|d d ƒ…t|d d ƒt|d d ƒ…f }|S )Nr1   r   )r   r   g        )r   r1   )r1   r   )r1   r1   )rb   r'   ÚminÚmaxÚint)	r*   re   rW   ÚheightÚwidthÚ_ÚwÚhZcropped_imager   r   r/   Ú
crop_imageÁ   s   (( ÿz1PedestrainAttributeRecognitionPipeline.crop_imagec           
      C   sž   |d }|d }g }g }t t|ƒƒD ]8}t || dd… ¡ dd¡}|d  |d 7  < |  | ¡ |¡}i }	|  |¡}| |¡ ||	d< | |	¡ q||gS )Nr   r1   r2   rM   rL   )	rN   rO   r<   rS   rT   rp   Úclonerg   rH   )
r*   rY   Úbboxesre   Zlst_human_imagesZlst_metarV   rW   Zhuman_imageÚmetar   r   r/   Úprocess_imageÐ   s   

z4PedestrainAttributeRecognitionPipeline.process_imagec                 C   s8   |   |¡}t |¡}|d d …d d …g d¢f }||dœS )N)rM   r1   r   )re   Úoutput)r)   r   Zconvert_to_ndarray)r*   rY   ru   re   r   r   r/   Ú
preprocessâ   s   


z1PedestrainAttributeRecognitionPipeline.preprocessc                 C   s  |d }|d }g }t j|tj  ¡ t jd}t j|tj  ¡ t jd}t|ƒD ]#\}}|d |d |d |d  |d |d  || dg}	| |	¡ q(t	|ƒdkr[t
 d¡ d d gS |  ||g¡\}
}g }|
D ]}| j | | j¡¡}t |¡}| |¡ qh||gS )	Nre   ru   r]   r   r1   rM   r\   z cannot detect human in the image)r<   rS   r
   ZSCORESrQ   rd   ÚBOXESrG   rH   rO   ÚloggerÚerrorrt   r   Úforwardr$   r#   r   Zsigmoid)r*   rY   Zinput_imageru   rr   ZscoresÚboxesÚidrW   Zbox_tmpZhuman_imagesZmetasr=   re   r   r   r/   rz   ê   s&   0ÿ

z.PedestrainAttributeRecognitionPipeline.forwardc                 K   s†   |d d u s|d d u rt jg t jg iS |  |¡\}}g }|D ]}| |d d |d d |d d |d d g¡ qt j|t j|iS )Nr   r1   )r
   rw   ZLABELSrX   rH   )r*   rY   r+   r{   r>   Zresult_boxesrW   r   r   r/   Úpostprocess  s   4z2PedestrainAttributeRecognitionPipeline.postprocess)r0   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__r_   r   r?   rJ   r   r   r<   ra   rX   r   r   rg   rp   rt   r   rv   rz   r}   Ú__classcell__r   r   r-   r/   r      s    
" -"$$ÿr   )+Zos.pathÚpathr!   Útypingr   r   r   r   r`   ÚjsonrR   r<   r   ZPILr   Ztorchvisionr   Zmodelscope.metainfor   Z;modelscope.models.cv.pedestrian_attribute_recognition.modelr	   Zmodelscope.outputsr
   Zmodelscope.pipelinesr   Zmodelscope.pipelines.baser   r   r   r   Zmodelscope.pipelines.builderr   Zmodelscope.preprocessorsr   Zmodelscope.utils.constantr   r   Zmodelscope.utils.loggerr   rx   Zregister_moduleZ pedestrian_attribute_recognitionr   r   r   r   r/   Ú<module>   s.   þ