o
    *j                     @   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   Zauto_collatez,please check whether model config exists in N )super__init__
isinstancer   r   r   ZCONFIGURATIONospathjoinZ	model_dirZTORCH_MODEL_FILE_load_pretrainedZ	model_cfgZMODELZDEVICE)selfr   kwargsZ
model_path	__class__r   v/var/www/html/Deteccion_Ine/venv/lib/python3.10/site-packages/modelscope/pipelines/cv/image_defrcn_fewshot_pipeline.pyr   $   s   
z%ImageDefrcnDetectionPipeline.__init__cudaTc                 C   sP   t j||dd}d|v r|d= d|v r|d= d|v r|d= |j|d |d |S )NT)Zmap_locationZweights_onlyZ	schedulerZ	optimizer	iterationr   )strict)torchloadZload_state_dict)r   netZ	load_pathZdevicer   Z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      )imageZimage_numpy)r
   Zconvert_to_ndarraycopyr    ZTensorZpermute)r   r#   Zimgr(   Ztimresultr   r   r   
preprocessA   s
   

z'ImageDefrcnDetectionPipeline.preprocessc                 C   s   | j |}d|i}|S )Ndata)r   Z	inference)r   r#   outputsr*   r   r   r   forwardK   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 )Nr,   Z	instancesZpred_classesZ
pred_boxesscores)r   ZSCORESZLABELSZBOXESZ
get_fieldszipappendr   configclassestolist)	r   r/   r-   objectslabelsZbboxeslabelboxr0   r   r   r   postprocessQ   s"   
z(ImageDefrcnDetectionPipeline.postprocess)r   T)__name__
__module____qualname____doc__strr   r   r   r   r   r+   r.   r:   __classcell__r   r   r   r   r      s    
"
*r   )r   typingr   r   numpynpr    Zmodelscope.metainfor   Z!modelscope.models.base.base_modelr   Zmodelscope.outputsr   Zmodelscope.pipelines.baser   r   Zmodelscope.pipelines.builderr	   Zmodelscope.preprocessorsr
   Zmodelscope.utils.constantr   r   Zregister_moduleZimage_fewshot_detectionr   r   r   r   r   <module>   s    