o
    *j                     @   s   d dl mZ d dl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mZ d d	lmZ d d
lmZ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)AnyDict)Image)
transforms)	Pipelines)resnet)
OutputKeys)InputPipeline)	PIPELINES)	LoadImage
load_image)	ModelFileTasks)
get_logger)module_namec                       s   e Zd Zde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 )GeneralRecognitionPipelinemodeldevicec                    s   t  j|d ddl}dd }dd   fdd	}d
}| j| _|jt| jtj	|dd}|dd| _|| j| t
d dS )z
        use `model` to create a general recognition pipeline for prediction
        Args:
            model: model id on modelscope hub.
        )r   r   Nc                  [   s0   t jt jg dfddddddddd| }|S )N)         r         @   TF)radixgroupsZbottleneck_widthZ	deep_stemZ
stem_widthZavg_downZavdZ	avd_first)r   ZResNetZ
Bottleneck)kwargsr    r   u/var/www/html/Deteccion_Ine/venv/lib/python3.10/site-packages/modelscope/pipelines/cv/general_recognition_pipeline.py
resnest101$   s   

z7GeneralRecognitionPipeline.__init__.<locals>.resnest101c                 S   s   g }|   D ]:\}}d|dd kr|dd  }dt| d vr(|dd}||v r@|| j|jkr@|| | || qd S )Nzmodule.r      z.module..)itemslistkeysreplaceshapeZcopy_append)
src_params	own_stateZcopied_keysnameparamr   r   r   filter_param2   s   
z9GeneralRecognitionPipeline.__init__.<locals>.filter_paramc                    s0   d|v r|d }|   } || | | d S )N
state_dict)r.   Zload_state_dict)r   r)   r*   r-   r   r   load_pretrained>   s
   
z<GeneralRecognitionPipeline.__init__.<locals>.load_pretrainedcpuT)Zweights_onlyiL  )Znum_classeszload model done)super__init__torchr   
local_pathloadospjoinr   ZTORCH_MODEL_FILEloggerinfo)selfr   r   r4   r    r0   r)   	__class__r/   r   r3      s   z#GeneralRecognitionPipeline.__init__inputreturnc                 C   sV   t |}tjg dg dd}ttdtdt |g}||}d|i}|S )N)g
ףp=
?gv/?gCl?)gZd;O?gy&1?g?)meanZstd      img)r   Zconvert_to_imgr   Z	NormalizeZComposeZResizeZ
CenterCropZToTensor)r;   r>   rC   	normalize	transformresultr   r   r   
preprocessP   s   
z%GeneralRecognitionPipeline.preprocessc                 C   s>   dd }d}|| j | |d }t|d}|  |}d|iS )Nc                 S   s   |r|    d S |   d S )N)traineval)r   is_trainr   r   r   	set_phase_   s   z5GeneralRecognitionPipeline.forward.<locals>.set_phaseFrC   r   outputs)r   r4   Z	unsqueeze)r;   r>   rK   rJ   rC   Z	input_imgrL   r   r   r   forward]   s   
z"GeneralRecognitionPipeline.forwardinputsc                 C   s   t | jd}t|ddd}| }W d    n1 sw   Y  t|d }tj|	 gtj
||d   dd gi}|S )Nzmeta_info.txtrzutf-8)encodingrL   	r   )r7   r8   r5   open	readlinesr4   maxr   ZSCORESitemZLABELSZargmaxsplit)r;   rN   Zlabel_mapping_pathfZlabel_mappingZscorer   r   r   postprocessl   s   
z&GeneralRecognitionPipeline.postprocess)__name__
__module____qualname__strr3   r	   r   r   rG   rM   rX   __classcell__r   r   r<   r   r      s
    5"*r   )%Zos.pathpathr7   typingr   r   Zcv2numpynpr4   ZPILr   Ztorchvisionr   Zmodelscope.metainfor   Z'modelscope.models.cv.animal_recognitionr   Zmodelscope.outputsr   Zmodelscope.pipelines.baser	   r
   Zmodelscope.pipelines.builderr   Zmodelscope.preprocessorsr   r   Zmodelscope.utils.constantr   r   Zmodelscope.utils.loggerr   r9   Zregister_moduleZgeneral_recognitionr   r   r   r   r   <module>   s(   