o
    ॵi                     @   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   sT   t | }t|j}td| d tj|dd}|j|d |d |  }|S )Nzloading model from z ...cpu)map_location
state_dict)strict)	r   loadr	   modelprinttorchload_state_dictcudaeval)cfgckptr   configr    r!   `/home/ubuntu/.local/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   )resample)sizeg     o@       @      ?)input_imageinput_elevation)r   	fromarraynpasarraystacknonzerominmaxcropheightwidthintresizeBICUBICr   astypefloat32r   
from_numpydeg2rad)image_inputelevation_input	crop_size
image_sizealpha_npcoordsmin_xmin_ymax_xmax_yref_img_hwscaleh_w_ref_maskr!   r!   r"   prepare_inputs4   sP   H


"
rP   )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   CONFIGURATIONloggerinfor   	from_filer   r   r   is_availabledevice_devicereplacer#   to)selfr   kwargsconfig_pathr   	__class__r!   r"   rT   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%   )r@   rA   rB   r   r'   )dim)rembgremover   openr   typer/   arrayrP   items	unsqueezer   r   repeat_interleave)r`   re   result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      )r4   r3   r'   g      ?r   r&            c                    s   g | ]}t  d |f qS )r   )r   r.   ).0nix_sampler!   r"   
<listcomp>   s    z,Image23DPipeline.forward.<locals>.<listcomp>MViews)r   sampleshaper   clamppermuter   numpyr;   r/   uint8range)r`   re   BN_HWshow_in_im2r!   r~   r"   forward   s   zImage23DPipeline.forwardinputsc                 C   s   |S )Nr!   )r`   r   r!   r!   r"   postprocess   s   zImage23DPipeline.postprocess)__name__
__module____qualname__strrT   r   r   r   rw   r   no_gradr   r   __classcell__r!   r!   rc   r"   rR   U   s    $*
rR   )T)r$   r%   )5os.pathpathrU   typingr   r   cv2r   r/   PILrj   r   torch.nn.functionalnn
functionalFtorchvision.transforms
transformsT!torchvision.transforms.functionalTF	omegaconfr   r   torchvision.utilsr   modelscope.metainfor   )modelscope.models.cv.image_to_3d.ldm.utilr   r	   modelscope.outputsr
   modelscope.pipelines.baser   r   modelscope.pipelines.builderr   modelscope.preprocessorsr   modelscope.utils.configr   modelscope.utils.constantr   r   modelscope.utils.loggerr   rX   r#   rP   register_moduleimage_to_3drR   r!   r!   r!   r"   <module>   s:   

!