o
    ॵi                     @   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   model_revisionhair_texN)super__init__r    r   r   head_reconstructionhead_reconstructor)selfr   r   r    head_recon_model_id	__class__ a/home/ubuntu/.local/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+   r0   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renderFmeshzutf-8)encodingr0   )
getr   
OUTPUT_OBJ
OUTPUT_IMGOUTPUTioBytesIOr   encodewrite)
r%   inputskwargsr5   
output_objtexture_mapr3   mesh_str
mesh_bytesr.   r)   r)   r*   postprocessI   s   



zTextToHeadPipeline.postprocess)T)__name__
__module____qualname__strr"   r   r   r   r/   r4   rF   __classcell__r)   r)   r'   r*   r      s
    "r   )-r<   osshutiltypingr   r   numpyr1   modelscope.metainfor   .modelscope.models.cv.face_reconstruction.utilsr   r   r   r   r	   r
   r   r   r   r   r   modelscope.outputsr   modelscope.pipelinesr   modelscope.pipelines.baser   r   modelscope.pipelines.builderr   modelscope.preprocessorsr   modelscope.utils.constantr   r   modelscope.utils.devicer   r   modelscope.utils.loggerr   loggerregister_moduletext_to_headr   r)   r)   r)   r*   <module>   s(   4