o
    *j$                     @   s<  d dl mZ d dlZd dlZd dlmZmZm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 d d
lmZmZmZmZ d dl m!Z! e! Z"dd Z#G dd dZ$dd Z%G dd deZ&ej'ej(ej)dG dd de&Z*ej'ej+ej,dG dd de&Z-dS )    N)AnyDictOptional)Image)BertTokenizer)snapshot_download)	Pipelines)Pipeline)	PIPELINES)
load_image)DEFAULT_MODEL_REVISION
FrameworksInvokeTasks)
get_loggerc                 C   s   d | | d S )Nz{:.2f}msi  )format)endbegin r   r/var/www/html/Deteccion_Ine/venv/lib/python3.10/site-packages/modelscope/pipelines/multi_modal/gridvlp_pipeline.pycost   s   r   c                   @   sp   e Zd ZdZejg dejdddejejf Zejg dejdddejejf Z	e
dZe
dZdZdS )Configgp?)g
ףp=
?gv/?gCl?ZdtypeN)gZd;O?gy&1?g?      )__name__
__module____qualname__SCALEnprequirefloat32ZnewaxisMEANSTDintZRESIZE_HEIGHTRESIZE_WIDTH	CROP_SIZEr   r   r   r   r      s    r   c                 C   s6  |  d} | j\}}||kr|tjks||kr|tjkr| } ||k r8tj}ttj| | }| ||ftj} ntj}ttj| | }| ||ftj} | j\}}tt|tj	 d }tt|tj	 d }| 
|||tj	 |tj	 f} tj| tjd}tj|dtjd}|tj9 }|tj8 }|tj }|S )NRGBg       @r   )   r      )convertsizer   r%   r$   resizer   ZBILINEARroundr&   cropr   arrayr!   r    Z	transposer   r"   r#   )imgwhowZohZcrop_topZ	crop_leftZ_imgr   r   r   pre_processor,   s0   





r4   c                   @   s6   e Zd ZdZdefddZd
deeef fddZd	S )GridVlpPipelinez> Pipeline for gridvlp, including classification and embedding.model_name_or_pathc                 K   s   t d|  t|r|}ndtjtjf }t|t|d}|| _	t d|  t
jt|d| _tj
| _d| _d| _d| _t d	|  t|| _d
S )z Pipeline for gridvlp, including classification and embedding.
        Args:
            model: path to local model directory.
        z load checkpoint from modelscope z%s/%s)
user_agentzload model from zpytorch_model.ptcpuTFzload tokenizer from N)loggerinfoospexistsr   ZKEYZPIPELINEr   r   local_model_dirtorchZjitloadjoinmodelr   Z	frameworkZdevice_nameZ_model_prepareZ_auto_collater   Zfrom_pretrained	tokenizer)selfr6   kwargsr=   Z
invoked_byr   r   r   __init__K   s(   

zGridVlpPipeline.__init__1   inputsc              
   C   s(  | dd}| dd}t }zt|}t }t|}t }	W n  tyB   tjdtjd}t }t }	t	t
  Y nw |d u sO| sO| sVt	d d}| j|dd|d	}t }
t	d
| d|  t	dt|| dt|	| dt|
|	  ||d |d |d d}|S )Nimage text)   r   r   r   ztext is empty!
max_lengthT)paddingZ
truncationrL   zexample. text: z image: zpreprocess. Img_Download:z
, Img_Pre:z
, Txt_Pre:	input_idsZattention_maskZtoken_type_ids)rH   rN   
input_masksegment_ids)gettimer   r4   	Exceptionr   zerosr!   r9   r:   	traceback	print_excisspacestriprB   r   )rC   rG   Zmax_seq_lengthrH   rJ   s1r0   s2Z
image_dataZs3s4Z
input_dictr   r   r   
preprocessi   sD   
&zGridVlpPipeline.preprocessN)rF   )	r   r   r   __doc__strrE   r   r   r\   r   r   r   r   r5   H   s    r5   )module_namec                       sj   e Zd ZdZde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 )GridVlpClassificationPipelineu   Pipeline for gridvlp classification, including cate classification and
    brand classification.

    Example:

    ```python
    >>> from modelscope.pipelines.multi_modal.gridvlp_pipeline import     GridVlpClassificationPipeline

    >>> pipeline = GridVlpClassificationPipeline('rgtjf1/multi-modal_gridvlp_classification_chinese-base-ecom-cate')
    >>> output = pipeline({'text': '女装快干弹力轻型短裤448575',        'image':'https://yejiabo-public.oss-cn-zhangjiakou.aliyuncs.com/alinlp/clothes.png'})
    >>> output['text'][0]
    {'label': {'cate_name': '休闲裤', 'cate_path': '女装>>裤子>>休闲裤>>休闲裤'}, 'score': 0.4146, 'rank': 0}

    ```
    r6   c                    sD   t  j|fi | td| j  ttt	| jd| _
dS )z Pipeline for gridvlp classification, including cate classification and
    brand classification.
        Args:
            model: path to local model directory.
        zload label mapping from zlabel_mapping.jsonN)superrE   r9   r:   r=   jsonr?   openr;   r@   label_mapping)rC   r6   rD   	__class__r   r   rE      s
   
z&GridVlpClassificationPipeline.__init__rG   returnc              
   C   s   t   }tjdtjd}| t|d d|dtj|d tjddtj|d tjddtj|d tjdd}|d  	 }t   }t
dt||  |S )	Nr)   r   rH   r   rN   rO   rP   forward. Infer:rR   r>   rT   r!   rA   ZtensorZ	unsqueezelongdetachnumpyr9   r:   r   )rC   rG   r[   
box_tensoroutputs5r   r   r   forward   s   z%GridVlpClassificationPipeline.forwardc           
      C   s   t   }|}t| }|| }g }ttdt| jD ]}| jt||  }||t	t
|| d|d qt   }	tdt|	|  d|iS )N
      )labelZscorerankzpostprocess. Post: rJ   )rR   r   Zargsortrangeminlenrd   r^   appendr-   floatr9   r:   r   )
rC   rG   ro   rn   indexZout_sortZtop_kirs   s6r   r   r   postprocess   s   
z)GridVlpClassificationPipeline.postprocess)r   r   r   r]   r^   rE   r   r   rp   r}   __classcell__r   r   re   r   r`      s
    "*r`   c                   @   sT   e Zd Z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dS )	GridVlpEmbeddingPipelineum   Pipeline for gridvlp embedding. These only generate unified multi-modal
    embeddings and output it in `text_embedding` or `img_embedding`.

    Example:

    ```python
    >>> from modelscope.pipelines.multi_modal.gridvlp_pipeline import     GridVlpEmbeddingPipeline

    >>> pipeline = GridVlpEmbeddingPipeline('rgtjf1/multi-modal_gridvlp_classification_chinese-base-ecom-embedding')
    >>> outputs = pipeline({'text': '女装快干弹力轻型短裤448575',        'image':'https://yejiabo-public.oss-cn-zhangjiakou.aliyuncs.com/alinlp/clothes.png'})
    >>> outputs["text_embedding"].shape
    (768,)

    ```
    rG   rg   c              
   C   s   t   }tjdtjd}| t|d d|dtj|d tjddtj|d tjddtj|d tjdd}t   }|d  	 }t   }t
dt|| d	t||  |S )
Nr)   r   rH   r   rN   rO   rP   rh   z, Post: ri   )rC   rG   r[   rm   rn   ro   r|   r   r   r   rp      s   "z GridVlpEmbeddingPipeline.forwardc                 C   s   ||d}|S )N)Zimg_embeddingZtext_embeddingr   )rC   rG   Zoutputsr   r   r   r}     s   z$GridVlpEmbeddingPipeline.postprocessN)	r   r   r   r]   r   r^   r   rp   r}   r   r   r   r   r      s    "&r   ).Zos.pathpathr;   rR   rU   typingr   r   r   rb   rl   r   r>   ZPILr   Ztransformersr   Z modelscope.hub.snapshot_downloadr   Zmodelscope.metainfor   Zmodelscope.pipelinesr	   Zmodelscope.pipelines.builderr
   Zmodelscope.preprocessors.imager   Zmodelscope.utils.constantr   r   r   r   Zmodelscope.utils.loggerr   r9   r   r   r4   r5   Zregister_moduleZvisual_question_answeringZ"gridvlp_multi_modal_classificationr`   Zmulti_modal_embeddingZgridvlp_multi_modal_embeddingr   r   r   r   r   <module>   s>   RH