o
    *j0                     @   s   d dl Z d dlZd dlmZmZ d dlZd dlZd dlm	Z	m
Z
mZ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T d dlT d dlT d dlT d dlT d d	lmZ d d
lmZ d dlmZ ej ej!ej!dG dd deZ"dS )    N)AnyDict)ControlNetModelDiffusionPipelineEulerAncestralDiscreteSchedulerUniPCMultistepScheduler)Image)
TexturesUV)
transforms)	Pipelines)*)
OutputKeys)	PIPELINES)Tasks)module_namec                       s   e Zd ZdZdef fddZ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 )Tex2TexturePipelinea   Stable Diffusion for text_texture_generation Pipeline.
    Example:
    >>> import cv2
    >>> from modelscope.outputs import OutputKeys
    >>> from modelscope.pipelines import pipeline
    >>> from modelscope.utils.constant import Tasks
    >>> input = {'mesh_path':'data/test/mesh/mesh1.obj', 'prompt':'old backpage'}
    >>> model_id = 'damo/cv_diffuser_text-texture-generation'
    >>> txt2texture = pipeline(Tasks.text_texture_generation, model=model_id)
    >>> output = txt2texture(input)
    >>> print(output)
    modelc              
      s   t  jdd|i| tj rtd| _ntd t  |dd}z
|r-| j	j
  W n tyD } z
t| W Y d }~nd }~ww | j	j
  z
|rT| j	j  W n tyk } z
t| W Y d }~nd }~ww | j	j  d S )Nr   cudazno gpu avaiable*enable_xformers_memory_efficient_attentionT )super__init__torchr   Zis_availabledeviceprintexitgetr   piper   	ExceptionZenable_model_cpu_offloadinpaintmodel)selfr   kwargsr   e	__class__r   y/var/www/html/Deteccion_Ine/venv/lib/python3.10/site-packages/modelscope/pipelines/cv/text_texture_generation_pipeline.pyr   +   s4   
zTex2TexturePipeline.__init__returnc                 C   s  | dd }| j|\}}}}}}| dd }	| dd}
| dd}| dd}| d	d }|	d urBt|	d
||f}ntdd }tj	|d
d||f}|j
}tt |d dddd| j|jd |d d|_|
|||||||||d
}td |S )N	mesh_pathtexture_pathpromptcolorfuluvsizei   
image_size   
output_dirRGB)   r0         )r   N.r      r1      mapsZ	faces_uvs	verts_uvs)
r)   meshfacesr+   mesh_centerscaler8   r,   init_texturer.   zmesh load done)r   r   Zmesh_normalizedr   openconvertresizenpZones	fromarrayr8   r	   r
   ToTensorpermutetor   textures_idxtexturesr   )r    inputsr'   r9   Zvertsr:   Zauxr;   r<   r(   r)   r+   r,   r.   r=   Zzero_mapZnew_verts_uvsresultr   r   r%   
preprocessC   sR   
zTex2TexturePipeline.preprocessinputc           E      C   s  |d }|d }|d }|d }|d }|d }|d }|d }	|d	 }
|d
 }|d u r.d}t t||gtj| j}tj	
|d}tj|dd tj	
|d}tj|dd tj	
|d}tj|dd tj	
|d}tj|dd tj	
|d}tj|dd tj	
|d}tj|dd tj	
|d}tj|dd tj	
|d}tj|dd tj	
|d}tj|dd tj	
|d}tj|dd d}d}d}d}t|||dd\}}}}}t|||||||	|	d ||| j} tt|D ]<}!td|! ||! ||! ||! ||! f\}"}#}$}%d|%|}&t|"|#|$|!|!|| |||||	||||||| jddd d!\}'}(})}*}+},}-}.}/}0}1}2}3}4}5}6}7}8}9| jj|&|+|4|0d"d#}:t||||)|:|4|4|
||	d |d| j\}
};}tt |
d$ d%d&d'd| j|jd$ |d$ d(|_t|"|#|$|!|!|| |||||	d)|||||| jddd d!^}'}(})}*}+}<|!d&kr| jj|&|+|3|0d"d#}=t||||)|=|3|3|
||	d |d| j\}
};}tt |
d$ d%d&d'd| j|jd$ |d$ d(|_t||(^}>}<|>d%  }?|?d&d%d}?t |?d*}?|? tj	
|d+|! |d, }@t!"|@ # tj$d-}@|@ tj	
|d.|! qd|d d d d d d f  d%  }A|Ad&d%d}At |Ad-}A| jj%||+&d/|A&d/d0d0d1j'd% &||f}Bt t(|B| j}Ct t(|+| j}.d|d d d d d d f  }D|C|Dd%  |.d|Dd%    }.t!"|. # tj$d*}Bt)|d2||*  | |j+||j|B| j t,j-d3iS )4Nr)   r+   r9   r;   r<   r:   r8   r,   r=   r.   ZGen_texturegenerateT)exist_okupdateZ	renderingnormalmaskdepthZ
similarityZ	inpaintedZintermediateg      ?
   g        r5   F)Zuse_principle   z=> processing view {}...z the {} view of {}g?)Zsave_intermediateZsmooth_maskZview_thresholdg      ?)Zstrengthr3   r   r4   r1   r6   g       @r/   z{}.pngg     o@Lz{}_texture_mask.png)r-   r-   r-   )r)   image
mask_imageheightwidthzmesh_post.objDone).r   Z
from_numpyrA   ZzerosZastypeZfloat32rE   r   ospathjoinmakedirsZinit_viewpointsZ,build_similarity_texture_cache_for_all_viewsrangelenr   formatZrender_one_view_and_build_masksr   r   Zbackproject_from_imager	   r
   rC   rD   rF   rG   rendercpuZ
ToPILImager?   saver   rB   numpyZuint8r   r@   ZimagesarrayZsave_full_objZverts_packedZ	verts_idxr   ZOUTPUT)Er    rK   r)   r+   r9   r;   r<   r:   r8   r,   r=   r.   Zexist_textureZgenerate_dirZ
update_dirZinit_image_dirZnormal_map_dirZmask_image_dirZdepth_map_dirZsimilarity_map_dirZinpainted_image_dirZmesh_dirZ
interm_dirZ	init_distZ	init_elevZ	init_azimZ
fragment_kZ	dist_listZ	elev_listZ	azim_listZsector_listZview_punishmentsZpre_similarity_texture_cacheidxdistZelevZazimZsectorZprompt_viewZ
view_scorerendererZcameras	fragmentsZ
init_imageZ
normal_mapZ	depth_mapZinit_images_tensorZnormal_maps_tensorZdepth_maps_tensorZsimilarity_tensorZkeep_mask_imageZupdate_mask_imageZgenerate_mask_imageZkeep_mask_tensorZupdate_mask_tensorZgenerate_mask_tensorZall_mask_tensorZquad_mask_tensorZgenerate_imageZproject_mask_image_Zdiffused_imageZinter_images_tensorZinter_imageZexist_texture_imagerV   Zpost_textureZdiffused_image_tensorZmask_image_tensorr   r   r%   forwardi   s  






$


zTex2TexturePipeline.forwardrH   c                 C   s   |S )Nr   )r    rH   r   r   r%   postprocess6  s   zTex2TexturePipeline.postprocess)__name__
__module____qualname____doc__strr   r   r   rJ   rk   rl   __classcell__r   r   r#   r%   r      s    "& *Nr   )#rZ   randomtypingr   r   rd   rA   r   Z	diffusersr   r   r   r   ZPILr   Zpytorch3d.rendererr	   Ztorchvisionr
   Zmodelscope.metainfor   Z8modelscope.models.cv.text_texture_generation.lib2.cameraZ;modelscope.models.cv.text_texture_generation.lib2.init_viewZ<modelscope.models.cv.text_texture_generation.lib2.projectionZ8modelscope.models.cv.text_texture_generation.lib2.viuselZ2modelscope.models.cv.text_texture_generation.utilsZmodelscope.outputsr   Zmodelscope.pipelines.builderr   Zmodelscope.utils.constantr   Zregister_moduleZtext_texture_generationr   r   r   r   r%   <module>   s.   