o
    *j                     @   s
  d dl Z d dlZd dlZd dlZd dlmZ d dlmZmZm	Z	m
Z
 d dlZd dlZd dlZd dlm  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  d
dl!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)OrderedDict)AnyDictListUnion)Models)Model)
TorchModel)MODELS)	ModelFileTasks)
get_logger   )HrnetSuperAndOcr)Unet)blend)module_namec                       sj   e Zd Z fddZdd Zdd Zdejdejd	ejd
ejdee	e
f f
ddZe dd Z  ZS )ImageSkychangec                    s   t  j|d|i| tj r td| _td| j ntd| _td| j d|t	j
}d|d}td tdi |d	 | _| | j| | j  td
 td tdi |d	 | _| | j| | j  td dS )z
        Args:
            model_dir (str): model directory to initialize some resource.
            refine_cfg: configuration of refine model.
            coarse_cfg: configuration of coarse model.
        	model_dircudazUse GPU: {}cpuzUse CPU: {}z{}/{}z unet_sky_matting_final_model.pklzK####################### load refine models ################################r   zL####################### load refine models done ############################zK####################### load coarse models ################################zL####################### load coarse models done ############################N )super__init__torchr   is_availabledeviceloggerinfoformatr   ZTORCH_MODEL_FILEr   refine_model
load_modelevalr   coarse_model)selfr   Z
refine_cfgZ
coarse_cfgargskwargsZcoarse_model_pathZrefine_model_path	__class__r   u/var/www/html/Deteccion_Ine/venv/lib/python3.10/site-packages/modelscope/models/cv/image_skychange/skychange_model.pyr      s<   


zImageSkychange.__init__c                 C   s   t j|std|  tdtj r/t	|}| 
|d }|| || j d S tj	|dd}| 
|d }|| d S )Nz9[checkModelPath]:model path dose not exits!!! model Path:z+[checkModelPath]:model path dose not exits!model_stater   )Zmap_location)ospathisfiler   error	Exceptionr   r   r   loadconvert_state_dictZload_state_dicttor   )r$   Z	seg_modelZinput_model_path
checkpointr*   r   r   r)   r!   F   s   


zImageSkychange.load_modelc           	      C   sz   t t|ds|S t }d}| D ]\}}|dr d}n|dr'd} | D ]\}}||d }|||< q,|S )zConverts a state dict saved from a dataParallel module to normal
        module state_dict inplace
        :param state_dict is the loaded DataParallel model_state
        zmodule.r   zmodule.model   module   N)nextiter
startswithr   items)	r$   Z
state_dictZnew_state_dictZsplit_indexZcur_keyZ	cur_valuekvnamer   r   r)   r1   W   s   


z!ImageSkychange.convert_state_dict	sky_imagesky_image_refinescene_imagescene_image_refine	img_metasc                 C   s   t   }|d |d |d }}}	| |||	}
| |||	}t   }td||  t   }|d }|
d }
t||||
}t   }td||  |S )a&  
        Args:
            sky_image (`torch.Tensor`): batched image tensor, shape is [1, 3, h', w'].
            sky_image_refine (`torch.Tensor`): batched image tensor, shape is [1, 3, refine_net_h, refine_net_w].
            scene_image (`torch.Tensor`): batched image tensor, shape is [1, 3, h, w].
            scene_image_refine (`torch.Tensor`): batched image tensor, shape is [1, 3, refine_net_h, refine_net_w].
            img_metas (`Dict[str, Any]`): image meta info.
        Return:
            `IMAGE: shape is [h, w, 3] (0~255)`
        sky_img_metasscene_img_metas
input_sizez3Time of inferencing mask of sky and scene images:{}   zTime of blending: {})timeinference_maskr   r   r   r   )r$   r>   r?   r@   rA   rB   startrC   rD   rE   Zsky_maskZ
scene_maskendresr   r   r)   forwardn   s6   
zImageSkychange.forwardc                 C   s  |    |d \}}|d }|d }|d }|d \}	}
tj||ddd}| |}t|ttfr5|d	 }tj||ddd
}tj|dd\}}|	d
|j}tj||gdd}~~~~tj  | |}~tj  t|dd}|   d }|j\}}||	ks||
krtj||	|
fddd
}||d |d |d  |d |d |d  f }t|||f}~tj  td |S )NZ	ori_shapepad_directioncoarse_input_sizerefine_input_sizeZrefine_shapeZbilinearT)modealign_corners)inputsizerP   rQ   r   )dimr   nearest      zget refine mask done)r"   FZinterpolater#   
isinstancetuplelistr   maxZ	unsqueezetypeZdtypecatr   Zempty_cacher    Zclipdetachr   numpyshapecv2resizeprint)r$   ZimgrB   rE   Zraw_hZraw_wrM   rN   rO   hwZresize_imagesZpred_scoresZscore_Zcoarse_predZ
cur_scoresphpwZvalid_cur_predr   r   r)   rH      sf   





zImageSkychange.inference_mask)__name__
__module____qualname__r   r!   r1   r   ZTensorr   strr   rL   Zno_gradrH   __classcell__r   r   r'   r)   r      s"    (

&r   ))mathr+   ZpdbrG   collectionsr   typingr   r   r   r   rc   jsonr   Ztorch.nn.functionalnnZ
functionalrY   Zmodelscope.metainfor   Zmodelscope.modelsr   Zmodelscope.models.baser	   Zmodelscope.models.builderr
   Zmodelscope.utils.constantr   r   Zmodelscope.utils.loggerr   Zptsemseg.hrnet_super_and_ocrr   Zptsemseg.unetr   Z	skychanger   r   Zregister_moduleZimage_skychanger   r   r   r   r)   <module>   s0    