o
    *j                     @   s  d dl Z d dlZd dlZd dlmZmZ d dlZd dlm	Z	 d dl
mZmZmZmZmZmZmZmZmZmZ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"m#Z# d dl$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)	Pipelines)align_for_lm	align_img	draw_lineenlarged_bboximage_warp_grid1	load_lm3dmesh_to_stringread_objresize_on_long_sidespread_flow	write_obj)
OutputKeys)pipeline)InputPipeline)	PIPELINES)	LoadImage)	ModelFileTasks)create_devicedevice_placement)
get_logger)module_namec                       sz   e Zd Zdde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 fddZ
  ZS )TextToHeadPipelineTmodeldevicec                    s2   t  j||d || _d}ttj|d|d| _dS )a  The inference pipeline for text-to-head task.

        Args:
            model (`str` or `Model` or module instance): A model instance or a model local dir
                or a model id in the model hub.
            device ('str'): device str, should be either cpu, cuda, gpu, gpu:X or cuda:X.

        Example:
            >>> from modelscope.pipelines import pipeline
            >>> from modelscope.models.cv.face_reconstruction.utils import write_obj
            >>> test_prompt = "a clown with red nose"
            >>> pipeline_textToHead = pipeline('text-to-head',
                model='damo/cv_HRN_text-to-head')
            >>> result = pipeline_textToHead(test_prompt)
            >>> mesh = result[OutputKeys.OUTPUT]['mesh']
            >>> texture_map = result[OutputKeys.OUTPUT_IMG]
            >>> mesh['texture_map'] = texture_map
            >>> write_obj('text_to_head.obj', mesh)
        )r   r   zdamo/cv_HRN_head-reconstructionzv0.1)r   Zmodel_revisionhair_texN)super__init__r   r   r   Zhead_reconstructionhead_reconstructor)selfr   r   r   Zhead_recon_model_id	__class__ n/var/www/html/Deteccion_Ine/venv/lib/python3.10/site-packages/modelscope/pipelines/cv/text_to_head_pipeline.pyr!      s   zTextToHeadPipeline.__init__inputreturnc                 C   s   d|i}|S )Ntextr&   )r#   r(   resultr&   r&   r'   
preprocess=   s   zTextToHeadPipeline.preprocessc                 C   s*   |  |}t|}| |}||d< |S )Nimage)r   nparrayr"   )r#   r(   r-   resultsr&   r&   r'   forwardA   s
   


zTextToHeadPipeline.forwardc           
   	   K   s   | dd}|tj }|tj }|tj }|r,t }t|d }|jdd}|	| tj|tj|tj|r8d n|d|d i}	|	S )NrenderFZmeshzutf-8)encodingr-   )
getr   Z
OUTPUT_OBJZ
OUTPUT_IMGZOUTPUTioBytesIOr   encodewrite)
r#   Zinputskwargsr2   Z
output_objZtexture_mapr0   Zmesh_strZ
mesh_bytesr+   r&   r&   r'   postprocessI   s   



zTextToHeadPipeline.postprocess)T)__name__
__module____qualname__strr!   r   r   r   r,   r1   r:   __classcell__r&   r&   r$   r'   r      s
    "r   )-r5   osshutiltypingr   r   numpyr.   Zmodelscope.metainfor   Z.modelscope.models.cv.face_reconstruction.utilsr   r   r   r   r	   r
   r   r   r   r   r   Zmodelscope.outputsr   Zmodelscope.pipelinesr   Zmodelscope.pipelines.baser   r   Zmodelscope.pipelines.builderr   Zmodelscope.preprocessorsr   Zmodelscope.utils.constantr   r   Zmodelscope.utils.devicer   r   Zmodelscope.utils.loggerr   loggerZregister_moduleZtext_to_headr   r&   r&   r&   r'   <module>   s(   4