o
    ॵi                     @   s   d dl Z d dlmZ d dlmZmZ d dlZd dlm	Z	 d dl
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 ejeje	j!dG dd deZ"dS )    N)AnyDict)	Pipelines)BaseVideoModelPatchShiftTransformer)
OutputKeys)InputPipeline)	PIPELINES)ReadVideoData)Config)	ModelFileTasks)
get_logger)module_namec                          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	e
 dddZdeeef deeef fddZ  ZS )ActionRecognitionPipelinemodelc                    s   t  jd	d|i| t| jtj}td|  t| jtj	}td|  t
|| _t| jd| j| _| j  | jtj|| jdd  | jj| _td dS )
z
        use `model` to create a action recognition pipeline for prediction
        Args:
            model: model id on modelscope hub.
        r   loading model from loading config from )cfgmap_locationmodel_stateload model doneN )super__init__ospjoinr   r   TORCH_MODEL_FILEloggerinfoCONFIGURATIONr   	from_filer   r   todeviceinfer_modelevalload_state_dicttorchloadlabel_mappingselfr   kwargs
model_pathconfig_path	__class__r   g/home/ubuntu/.local/lib/python3.10/site-packages/modelscope/pipelines/cv/action_recognition_pipeline.pyr      s   

z"ActionRecognitionPipeline.__init__inputreturnc                 C   >   t |trt| j|| j}n	tdt| d|i}|S Nz input should be a str,  but got 
video_data
isinstancestrr   r   r%   r&   	TypeErrortyper.   r5   video_input_dataresultr   r   r4   
preprocess/      
z$ActionRecognitionPipeline.preprocessc                 C   &   |  |d }| jt| }tj|iS Nr9   perform_inferencer,   r<   r   LABELSr.   r5   predoutput_labelr   r   r4   forward8      
z!ActionRecognitionPipeline.forward   c              	   C   sp   t |d| }g }t|D ]}|| ||| |d |  d  qtj|dd}|jdd	 
 S Nr      )dimmathceilsizerangeappendr'   r*   catmeanargmaxitemr.   datamax_bsziter_num
preds_listirJ   r   r   r4   rG   =   s    z+ActionRecognitionPipeline.perform_inferenceinputsc                 C      |S Nr   r.   rb   r   r   r4   postprocessG      z%ActionRecognitionPipeline.postprocessrN   __name__
__module____qualname__r<   r   r   r   r   rB   rL   r*   no_gradrG   rf   __classcell__r   r   r2   r4   r      s    "	*	r   c                       r   )PSTActionRecognitionPipeliner   c                    s   t  jdd|i| t| jtj}td|  t| jtj	}td|  t
|| _t|| j| _| j  | jtj|| jdd  | jj| _td dS )	z
        use `model` to create a PST action recognition pipeline for prediction
        Args:
            model: model id on modelscope hub.
        r   r   r   r   
state_dictr   Nr   )r   r   r   r   r   r   r    r!   r"   r#   r   r$   r   r   r%   r&   r'   r(   r)   r*   r+   r,   r-   r2   r   r4   r   O   s   

z%PSTActionRecognitionPipeline.__init__r5   r6   c                 C   r7   r8   r:   r?   r   r   r4   rB   b   rC   z'PSTActionRecognitionPipeline.preprocessc                 C   rD   rE   rF   rI   r   r   r4   rL   k   rM   z$PSTActionRecognitionPipeline.forwardrN   c              	   C   sl   t |d| }g }t|D ]}|| ||| |d |   qtj|dd}|jdd	 
 S rO   rR   r\   r   r   r4   rG   p   s   z.PSTActionRecognitionPipeline.perform_inferencerb   c                 C   rc   rd   r   re   r   r   r4   rf   z   rg   z(PSTActionRecognitionPipeline.postprocessrh   ri   r   r   r2   r4   ro   K   s    "	*	ro   )#rS   os.pathpathr   typingr   r   r*   modelscope.metainfor   'modelscope.models.cv.action_recognitionr   r   modelscope.outputsr   modelscope.pipelines.baser   r	   modelscope.pipelines.builderr
   modelscope.preprocessorsr   modelscope.utils.configr   modelscope.utils.constantr   r   modelscope.utils.loggerr   r!   register_moduleaction_recognitionr   pst_action_recognitionro   r   r   r   r4   <module>   s,   2