o
    *j                     @   s,  d dl Z d dlZd dlZd dlmZ d dlZd dlZd dlm	Z	m
Z
 d dlmZm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mZmZmZ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& 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)defaultdictdeque)AnyDict)tqdm)	Pipelines)Model)LengthAdaptiveTokenizerVoPinit_transform_dict	load_dataload_frames_from_video)
OutputKeys)InputPipeline)	PIPELINES)
load_image)Config)	ModelFileTasks)
get_logger)module_namec                       s   e Zd Zdef fddZdedee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 )VopRetrievalPipelinemodelc                    s   t  jdd|i| td| j| _td || _	t
t|tj| _t| jjjd | _td tt|d dd}t| jj|| _td	 tt|d
| j| _td dS )z
        use `model` to create a vop pipeline for retrieval
        Args:
            model: model id on modelscope hub.
        r   zdamo/cv_vit-b32_retrieval_vopzload model doneZ	clip_testzload transform donezbpe_simple_vocab_16e6.txt.gzzutf-8
zload tokenizer donezVoP_msrvtt9k_features.pklzload database doneN )super__init__r   Zfrom_pretrainedtodevicer   loggerinfo	local_pthr   	from_fileospjoinr   ZCONFIGURATIONcfgr   
hyperparamZ	input_resimg_transformgzipopenreaddecodesplitr	   	tokenizerr   database)selfr   kwargsZbpe_path	__class__r   o/var/www/html/Deteccion_Ine/venv/lib/python3.10/site-packages/modelscope/pipelines/cv/vop_retrieval_pipeline.pyr   $   s2   



zVopRetrievalPipeline.__init__inputreturnc                    s   t |trfd|v r@g }|fD ]!}t j|}t| jjj jjj	\}} 
|}|| qtj|ddj jdd}d}n/ j|dddd}t |tjrX|j jdd}n fd	d
| D }d}n	tdt| ||d}|S )Nz.mp4r   )dimTZnon_blockingv2tpt)Zreturn_tensorspaddingZ
truncationc                    s"   i | ]\}}||j  jd dqS )Tr8   )r   r   ).0keyvalr0   r   r4   
<dictcomp>Y   s    z3VopRetrievalPipeline.preprocess.<locals>.<dictcomp>t2vz input should be a str,  but got )
input_datamode)
isinstancestrr$   r%   r"   r   r&   r'   Z
num_framesZvideo_sample_typer(   appendtorchstackr   r   r.   ZTensoritems	TypeErrortype)r0   r5   queryZ
video_pathZimgsZidxsrC   resultr   r?   r4   
preprocessD   s@   





zVopRetrievalPipeline.preprocessc                 C   s   | j \}}}}t h |d dkr8| j|d }||j }tj|| jjjddd 	 
 }t|| }	n+|d dkrc| j|d }||j }tj|| jjjddd 	 
 }t|| }	|	|d d}
|
W  d    S 1 svw   Y  d S )	NrC   rA   rB   )kr7      r9   )Zoutput_datarC   )r/   rG   Zno_gradr   Zget_text_featuresTZtopkr&   r'   cpunumpynparrayZget_video_features)r0   r5   Ztext_embedsZvid_embeds_pooledZvid_idsZtextsZquery_featsZscoreZretrieval_idxsresresultsr   r   r4   forwardd   s>   




$zVopRetrievalPipeline.forwardinputsc                 C   s   |S )Nr   )r0   rZ   r   r   r4   postprocessy   s   z VopRetrievalPipeline.postprocess)__name__
__module____qualname__rE   r   r   r   r   rN   rY   r[   __classcell__r   r   r2   r4   r       s
     " *r   )0r)   mathosZos.pathpathr$   picklerandomcollectionsr   r   typingr   r   rT   rU   rG   r   Zmodelscope.metainfor   Zmodelscope.modelsr   Z"modelscope.models.cv.vop_retrievalr	   r
   r   r   r   Zmodelscope.outputsr   Zmodelscope.pipelines.baser   r   Zmodelscope.pipelines.builderr   Zmodelscope.preprocessorsr   Zmodelscope.utils.configr   Zmodelscope.utils.constantr   r   Zmodelscope.utils.loggerr   r    Zregister_moduleZvop_retrievalr   r   r   r   r4   <module>   s4   