o
    ॵi                     @   s   d dl 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 d dlmZ d dlmZ d d	lmZmZ ejejejd
G dd deZdS )    N)AnyDict)	Pipelines)Model)
OutputKeys)InputPipeline)	PIPELINES)	LoadImage)	ModelFileTasks)module_namec                       s   e Zd ZdZdef fddZd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 )ImageDefrcnDetectionPipelinea`  
    Image DeFRCN few-shot detection Pipeline. Given a image, pipeline will return the detection results on the image.

    Examples:

        >>> from modelscope.pipelines import pipeline
        >>> detector = pipeline('image-fewshot-detection', 'damo/cv_resnet101_detection_fewshot-defrcn')
        >>> detector('/Path/Image')
        >>> {'scores': [0.8307567834854126, 0.1606406420469284],
        >>>  'labels': ['person', 'dog'],
        >>>  'boxes': [[27.391937255859375, 0.0, 353.0, 500.0],
        >>>            [64.22428131103516, 229.2884521484375, 213.90573120117188, 370.0657958984375]]}
    modelc                    sj   t  jd|dd| t| jtsJ dtj tj	| jj
tj}| | jj|| jjjj| j_dS )z8
            model: model id on modelscope hub.
        F)r   auto_collatez,please check whether model config exists in N )super__init__
isinstancer   r   r   CONFIGURATIONospathjoin	model_dirTORCH_MODEL_FILE_load_pretrained	model_cfgMODELDEVICE)selfr   kwargs
model_path	__class__r   i/home/ubuntu/.local/lib/python3.10/site-packages/modelscope/pipelines/cv/image_defrcn_fewshot_pipeline.pyr   $   s   
z%ImageDefrcnDetectionPipeline.__init__cudaTc                 C   sN   t j||d}d|v r|d= d|v r|d= d|v r|d= |j|d |d |S )N)map_location	scheduler	optimizer	iterationr   )strict)torchloadload_state_dict)r   net	load_pathdevicer*   load_netr   r   r$   r   3   s   z-ImageDefrcnDetectionPipeline._load_pretrainedinputreturnc                 C   sB   t |}|dd d df  }t|ddd}||d}|S )N.   r      )imageimage_numpy)r
   convert_to_ndarraycopyr+   Tensorpermute)r   r2   imgr7   timresultr   r   r$   
preprocess@   s
   

z'ImageDefrcnDetectionPipeline.preprocessc                 C   s   | j |}d|i}|S )Ndata)r   	inference)r   r2   outputsr?   r   r   r$   forwardJ   s   z$ImageDefrcnDetectionPipeline.forwardinputsc           	      C   s   |d d u rt jg t jg t jg i}|S |d d  }g g }}t|d |d D ]\}}|| jjjj	|  ||
  q)|d 
 }t j|t j|t j|i}|S )NrA   	instancespred_classes
pred_boxesscores)r   SCORESLABELSBOXES
get_fieldszipappendr   configclassestolist)	r   rE   rC   objectslabelsbboxeslabelboxrI   r   r   r$   postprocessP   s"   
z(ImageDefrcnDetectionPipeline.postprocess)r%   T)__name__
__module____qualname____doc__strr   r   r   r   r   r@   rD   rX   __classcell__r   r   r"   r$   r      s    
"
*r   )r   typingr   r   numpynpr+   modelscope.metainfor   !modelscope.models.base.base_modelr   modelscope.outputsr   modelscope.pipelines.baser   r   modelscope.pipelines.builderr	   modelscope.preprocessorsr
   modelscope.utils.constantr   r   register_moduleimage_fewshot_detectionr   r   r   r   r$   <module>   s    