
    9i	                     X   S SK r S SKrS SKJrJr  S SKrS SKrS SKJ	r
  S SK	r	S SKrS SKJr  S SKJr  S SKJrJrJrJrJrJr  S SKJr  S SKJr  S SKJrJr  S S	KJr  S S
K J!r!  S SK"J#r#J$r$  S SK%J&r&  \&" 5       r'\RP                  " \$RR                  \RR                  S9 " S S\5      5       r*g)    N)AnyDict)	Pipelines)mesh_to_string)
projectionread_objrenderrotate_xrotate_y	translate)	MsDataset)
OutputKeys)ModelPipeline)	PIPELINES)is_model)InvokeTasks)
get_logger)module_namec                      ^  \ rS rSrSrSS\4U 4S jjjrS\\\4   S\\\4   4S jr	S r
S	 rSS
 jrS\\\4   S\\\4   4S jrS\\\4   4S jrSrU =r$ )Human3DRenderPipeline   a^  Human3D library render pipeline
Example:

```python
>>> from modelscope.pipelines import pipeline
>>> human3d = pipeline(Tasks.human3d_render,
            'damo/cv_3d-human-synthesis-library')
>>> human3d({
        'data_dir': '/data/human3d-syn-library', # data dir path (str)
        'case_id': '3f2a7538253e42a8', # case id (str)
    })
>>> #
```
modelc                 6   > [         TU ]  " SSU0UD6  Xl        g)z
use model to create a image sky change pipeline for image editing
Args:
    model (str or Model): model_id on modelscope hub
    device (str): only support gpu
r   N )super__init__	model_dir)selfr   devicekwargs	__class__s       o/var/www/html/land-doc-ocr/venv/lib/python3.13/site-packages/modelscope/pipelines/cv/human3d_render_pipeline.pyr   Human3DRenderPipeline.__init__.   s     	/u//    inputsreturnc                     U$ )Nr   )r    r'   s     r$   
preprocess Human3DRenderPipeline.preprocess8   s    r&   c                 $   [        U5      nUR                  SS5      n[        R                  R	                  U5      (       d$  [
        R                  " S[
        R                  S9nO[        R                  " U5      nUR                  5       US'   X$4$ )N.objz.png)   r.      )dtypetexture_map)r   replaceospathexistsnpzerosuint8cv2imreadcopy)r    	mesh_pathmeshtex_pathtexs        r$   load_3d_model#Human3DRenderPipeline.load_3d_model;   sk    	"$$VV4ww~~h''((=9C**X&C!hhj]yr&   c                    US   nUR                  SS9UR                  SS9-   S-  nX4-  nUS   nUR                  5       S:X  a  US-
  OUnUS   nUS   nUR                  5       S:X  a  US-
  OUn[        R                  " UR	                  [
        R                  5      5      R                  5       n[        R                  " UR	                  [
        R                  5      5      R                  5       n	[        R                  " UR	                  [
        R                  5      5      R                  5       n
[        R                  " UR	                  [
        R                  5      5      R                  5       nUS S S	2S S 2S S S	24   n[        R                  " UR	                  [
        R                  5      S
-  5      R                  5       nXXU4$ )Nverticesr   )axis   faces   uvsfaces_uv     o@)	maxmintorch
from_numpyastyper6   float32cudaint32)r    r=   r?   vertcenttrivert_uvtri_uvvtx_pospos_idxvtx_uvuv_idxs               r$   format_nvdiffrast_format.Human3DRenderPipeline.format_nvdiffrast_formatE   sk   Ja 4888#33q87macAgSu+j!%zz|q0!f""4;;rzz#:;@@B""3::bhh#78==?!!'.."<=BBD!!&--"9:??A$B$4R4- szz"**5=>CCE44r&   c                 (   [         R                  R                  U5      (       dD  [        R	                  SU-  5        [         R                  R                  U R                  SSS5      nU R                  U5      u  p4U R                  X45      u  pVpxn	[        R                  " 5       n
SnSnS[        R                  -  U-  n/ n/ n[        R                  " [        U5      5       GH  n[        SS	S
S9n[        R                   " [#        S5      [%        U5      5      n[        R                   " ['        SSS5      U5      n[        R                   " UU5      R)                  [        R*                  5      n[-        U
UUUUUU	USSS9
u  nnn[        R.                  " [        R0                  " US   R3                  5       R5                  5       R7                  5       S-  5      SS5      R)                  [        R8                  5      S S S2S S 2S S 24   n[        R.                  " [        R0                  " US   R3                  5       R5                  5       R7                  5       S-  5      SS5      R)                  [        R8                  5      S S S2S S 2S S 24   nUR;                  U5        UR;                  U5        X-   nGM     [        R	                  S[         R                  R=                  [         R                  R?                  U5      5      -  5        X>U4$ )Nz!can not found %s, use default onez	3D-assets3f2a7538253e42a8body.objg        P   rE   g?g      ?g      i@)xnfr   gF	   )
resolution
enable_mipmax_mip_levelrK      rJ   zrender case %s done) r3   r4   r5   loggerinfojoinr   r@   r]   drRasterizeCudaContextr6   pitqdmranger   matmulr
   r   r   rP   rQ   r	   cliprintdetachcpunumpyr8   appendbasenamedirname)r    r<   rg   r=   texturerY   rZ   r[   r\   r?   glctxangframe_lengthstepframes_colorframes_normalsiproja_rota_mvr_mvppred_img	pred_masknormalcolornormalss                             r$   render_scene"Human3DRenderPipeline.render_sceneV   s   ww~~i((KK;iGHT^^[%7EI **95040M0M1-&# '')255y<'5./Ase4DIIhsmXc];E99Yq!T2E:DIIdD)00<E*0% 
+!'Hi GG**,00288:UBCQVBHH%ddAqj2E ggq	((*..06685@A1VBHH%ddAqj2G &!!'**C1 04 	)gg&&rwwy'ABC 	D >11r&   inputc                    US   nUS   nSU;   a  US   nOSnUR                  S5      (       a  UnOUR                  S5      S   nUR                  S5      S   n[        R                  " XgUS	9R                  S
   S   n[
        R                  R                  X5      n	[
        R                  R                  U	S5      nU R                  XT5      u  pnU
UUS.n[        R                  S [        R                  U0$ )N
dataset_idcase_idrg      r-   /rJ   r   )	namespacesubset_namesplit_configtestra   )r=   r   frames_normal)endswithsplitr   loadconfig_kwargsr3   r4   rm   r   r   
OUTPUT_OBJOUTPUT)r    r   r   r   rg   r<   dataset_name	user_namedata_dircase_dirr=   colorsr   resultss                 r$   forwardHuman3DRenderPipeline.forward   s   <(
	"5 |,JJF##I%++C04L"((-a0I ~~#%%2]>CCIKH ww||H6HXz:I $ 1 1) Hg "$

 %%tZ->->HHr&   c                 f   UR                  SS5      nU[        R                     nU[        R                     nU(       aC  [        R
                  " 5       n[        US   5      nUR                  SS9nUR                  U5        [        R                  U[        R                  U(       a  S 0nU$ U0nU$ )Nr	   Fr=   zutf-8)encoding)	getr   r   r   ioBytesIOr   encodewrite)	r    r'   r"   r	   
output_objr   mesh_str
mesh_bytesresults	            r$   postprocess!Human3DRenderPipeline.postprocess   s    He,J112
**+J%gfo6H!':JZ( !!:vt
  4;
 r&   )r   )gpu)r   )__name__
__module____qualname____firstlineno____doc__strr   r   r   r*   r@   r]   r   r   r   __static_attributes____classcell__)r#   s   @r$   r   r      s    c  c3h DcN 5"-2^IT#s(^ IS#X I6tCH~  r&   r   )+r   r3   typingr   r   r9   rx   r6   nvdiffrast.torchrN   rn   rq   modelscope.metainfor   .modelscope.models.cv.face_reconstruction.utilsr   &modelscope.models.cv.human3d_animationr   r   r	   r
   r   r   modelscope.msdatasetsr   modelscope.outputsr   modelscope.pipelines.baser   r   modelscope.pipelines.builderr   modelscope.pipelines.utilr   modelscope.utils.constantr   r   modelscope.utils.loggerr   rk   register_modulehuman3d_renderr   r   r&   r$   <module>r      s    	 	  
     ) I? ? , ) 5 2 . 3 .	 	i&>&>@QH Q@Qr&   