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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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)
BottleneckResNet)
OutputKeys)InputPipeline)	PIPELINES)	LoadImage)Devices	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 )AnimalRecognitionPipelinemodelc                    s   t  jdd|i| ddl}dd }dd   fdd	}| j| _|jt| jtj	t
jd
d}|dd| _|| j| td dS )z
        use `model` to create a animal recognition pipeline for prediction
        Args:
            model: model id on modelscope hub.
        r   r   Nc                  [   s,   t t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   r   )kwargsr    r   t/var/www/html/Deteccion_Ine/venv/lib/python3.10/site-packages/modelscope/pipelines/cv/animal_recognition_pipeline.py
resnest101$   s   
z6AnimalRecognitionPipeline.__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   
z8AnimalRecognitionPipeline.__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;AnimalRecognitionPipeline.__init__.<locals>.load_pretrainedT)Zweights_onlyi`   )Znum_classeszload model doner   )super__init__torchr   
local_pathloadospjoinr   ZTORCH_MODEL_FILEr   cpuloggerinfo)selfr   r   r3   r    r0   r)   	__class__r/   r   r2      s   z"AnimalRecognitionPipeline.__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   	normalizeZtest_transformsresultr   r   r   
preprocessN   s   
z$AnimalRecognitionPipeline.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   z4AnimalRecognitionPipeline.forward.<locals>.set_phaseFrC   r   outputs)r   r3   Z	unsqueeze)r;   r>   rJ   rI   rC   Z	input_imgrK   r   r   r   forward[   s   
z!AnimalRecognitionPipeline.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label_mapping.txtrzutf-8)encodingrK   	r   )r6   r7   r4   open	readlinesr3   maxr	   ZSCORESitemZLABELSZargmaxsplit)r;   rM   Zlabel_mapping_pathfZlabel_mappingZscorer   r   r   postprocessj   s   
z%AnimalRecognitionPipeline.postprocess)__name__
__module____qualname__strr2   r
   r   r   rF   rL   rW   __classcell__r   r   r<   r   r      s
    3"*r   )&Zos.pathpathr6   typingr   r   Zcv2numpynpr3   ZPILr   Ztorchvisionr   Zmodelscope.metainfor   Z'modelscope.models.cv.animal_recognitionr   r   Zmodelscope.outputsr	   Zmodelscope.pipelines.baser
   r   Zmodelscope.pipelines.builderr   Zmodelscope.preprocessorsr   Zmodelscope.utils.constantr   r   r   Zmodelscope.utils.loggerr   r9   Zregister_moduleZanimal_recognitionr   r   r   r   r   <module>   s(   