o
    *j                     @   sP  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
Z
d dlZd dlm  mZ d dlm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"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. e. Z/dddZ0dddZ1e%j2e,j3ej3dG dd de#Z4dS )    N)AnyDict)	OmegaConf)Image)
save_image)	Pipelines)
add_margininstantiate_from_config)
OutputKeys)InputPipeline)	PIPELINES)	LoadImage)Config)	ModelFileTasks)
get_loggerTc                 C   sV   t | }t|j}td| d tj|ddd}|j|d |d |  }|S )Nzloading model from z ...cpuT)Zmap_locationZweights_onlyZ
state_dict)strict)	r   loadr	   modelprinttorchZload_state_dictcudaeval)cfgckptr   configr    r   m/var/www/html/Deteccion_Ine/venv/lib/python3.10/site-packages/modelscope/pipelines/cv/image_to_3d_pipeline.py
load_model)   s   

r       c                 C   s  | d d d d d df d d d d d d df | d d d d d df< t | } |dkrt| d d d d df }tt|dd d df }t|d\}}t|d\}}	| ||||	f}
|
j	|
j
}}|t|| }t|| t|| }}|
j||ft jd}
t|
|d} nt| t| j	| j
d} | j||ft jd} t| } | tjd } | d d d d dd f }| d d d d d df | d | | d d d d d df< | d d d d d df d	 d
 } t| tj} ttt|gtj}| |dS )N   r!      )r$   r   r   )Zresample)sizeg     o@       @      ?)Zinput_imageZinput_elevation)r   	fromarraynpZasarraystackZnonzerominmaxcropheightwidthintresizeZBICUBICr   astypeZfloat32r   Z
from_numpyZdeg2rad)Zimage_inputelevation_input	crop_size
image_sizeZalpha_npZcoordsZmin_xZmin_yZmax_xZmax_yZref_img_hwscaleZh_Zw_Zref_maskr   r   r   prepare_inputs4   sP   H


"
r9   )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e	
 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 )Image23DPipeliner   c                    s   t  j|d t| jtj}td|  t	
|| _tj r)td| _ntd| _|dd}t|dd|| j| _dS )	z
        use `model` to create a image-to-3d generation pipeline
        Args:
            model: model id on modelscope hub.
        )r   zloading config from r   r   zconfiguration.jsonzsyncdreamer-pretrain.ckptzsyncdreamer.yamlN)super__init__ospjoinr   r   ZCONFIGURATIONloggerinfor   	from_filer   r   r   Zis_availableZdeviceZ_devicereplacer    to)selfr   kwargsZconfig_pathr   	__class__r   r   r=   Y   s    

zImage23DPipeline.__init__inputreturnc                 C   s   t t|}tt| t|}|d d d d d df d d d d d d df |d d d d d df< t|dddd}|	 D ]\}}|
d ||< tj|| ddd	||< qC|S )
Nr#   r!   
      r"   )r3   r4   r5   r   r$   )dim)rembgremover   openr   typer)   arrayr9   itemsZ	unsqueezer   r   Zrepeat_interleave)rE   rI   resultZimgdatakvr   r   r   
preprocessp   s   
H
zImage23DPipeline.preprocessc                    s   | j |dd  j\}}}}}tj dddd d   ddd	d
d  d   t	j
  fddt|D }d|iS )Nr&      r'   g      )r,   r+   r$   g      ?r   r#            c                    s   g | ]}t  d |f qS )r   )r   r(   ).0niZx_sampler   r   
<listcomp>   s    z,Image23DPipeline.forward.<locals>.<listcomp>ZMViews)r   sampleshaper   clampZpermuter   numpyr2   r)   Zuint8range)rE   rI   BN_HWZshow_in_im2r   r_   r   forward   s   zImage23DPipeline.forwardinputsc                 C   s   |S )Nr   )rE   rl   r   r   r   postprocess   s   zImage23DPipeline.postprocess)__name__
__module____qualname__strr=   r   r   r   rX   r   Zno_gradrk   rm   __classcell__r   r   rG   r   r;   U   s    $*
r;   )T)r!   r"   )5Zos.pathpathr>   typingr   r   Zcv2rd   r)   ZPILrN   r   Ztorch.nn.functionalnnZ
functionalFZtorchvision.transformsZ
transformsTZ!torchvision.transforms.functionalZTFZ	omegaconfr   r   Ztorchvision.utilsr   Zmodelscope.metainfor   Z)modelscope.models.cv.image_to_3d.ldm.utilr   r	   Zmodelscope.outputsr
   Zmodelscope.pipelines.baser   r   Zmodelscope.pipelines.builderr   Zmodelscope.preprocessorsr   Zmodelscope.utils.configr   Zmodelscope.utils.constantr   r   Zmodelscope.utils.loggerr   r@   r    r9   Zregister_moduleZimage_to_3dr;   r   r   r   r   <module>   s:   

!