
    9i                         S SK r S SKrS SKrS SKrS rS rS rSS jrS r	   SS jr
SS jr\R                  " / S	Q5      \R                  " / S
Q5      S4S jr   SS jrg)    Nc                     [        U S5      n[        U5       H5  u  pVX5   nUR                  SUS   US   US   US   US   US   4-  5        M7     U H(  nUS-   n	UR                  SU	S   U	S   U	S   4-  5        M*     UR                  5         g )Nwz v %.4f %.4f %.4f %.4f %.4f %.4f
r         f %d %d %d
open	enumeratewriteclose)
	mesh_pathvertsfacescolorsfileidxvcff_pluss
             o/var/www/html/land-doc-ocr/venv/lib/python3.13/site-packages/modelscope/models/cv/human_reconstruction/utils.pysave_obj_mesh_with_colorr      s    	3DE"K

6aD!A$!adAaD!A$78 	9 # Q

>VAYq	6!9$EEF  	JJL    c                     [        U S5      n[        U5       H%  u  pEUR                  SUS   US   US   4-  5        M'     U H(  nUS-   nUR                  SUS   US   US   4-  5        M*     UR                  5         g )Nr   zv %.4f %.4f %.4f
r   r   r   r   r   )r   r   r   r   r   r   r   r   s           r   save_obj_meshr      s    	3DE"

'1Q41qt*<<= #Q

>VAYq	6!9$EEF  	JJLr   c                     [        U R                  5      S:X  a  U S S 2S S 2[        R                  4   n [        R
                  " U R                  SSS5      5      R                  5       n U S-  n U $ )Nr   r   r   g     o@)lenshapenpnewaxistorch
from_numpy	transposefloat)imgs    r   	to_tensorr&      s[    
399~!Q

"#


3==Aq1
2
8
8
:C
*CJr   c                    ^ ^ UU 4S jn[        X%US9n[        R                  " US5      u  px[        R                  " US S2S S24   UR
                  5      US S2SS24   -   n	U	R
                  n	X4$ )Nc                 d  > [         R                  " U SS9n [         R                  " U SSS9n [        R                  " U 5      R                  5       R                  5       nTR                  UT5        TR                  5       nUS   nUR                  5       R                  5       R                  5       $ )Nr   axisr   )r   expand_dimsrepeatr!   r"   cudar$   query	get_predsdetachcpunumpy)pointssamplespredcalib_tensornets      r   	eval_func!reconstruction.<locals>.eval_func(   s    Q/611-""6*//1779		'<(}}Aw{{}  "((**r   num_samplesg      ?      )	eval_gridmcubesmarching_cubesr   matmulT)
r7   r6   coordsmatr;   r8   sdfverticesr   r   s
   ``        r   reconstructionrG   &   st    + F;
?C++C5OHIIc"1"bqb&k8::.RaR1W=EGGE<r   c                     U R                  SS9nUS   nU H;  nUR                  R                  S   UR                  R                  S   :  d  M9  UnM=     U$ )NF)only_watertightr   )splitrF   r   )mesh_bigmesh_lst	keep_meshmeshs       r   keep_largestrO   8   sZ    ~~e~4HI==q!I$6$6$<$<Q$??I  r   c                    U R                   SS n[        R                  " U5      n[        R                  " U[        S9n[        R                  " U[        S9nUS   U-  n	U	S:  Ga  SUSUS   U	2SUS   U	2SUS   U	24'   [        R
                  " X5      n
U S S 2U
4   n[        XUS9Xj'   SXz'   U	S::  a  GOE[        SUS   U	-
  U	5       GH  n[        SUS   U	-
  U	5       GH  n[        SUS   U	-
  U	5       H  nX|U	S-  -   XS-  -   XS-  -   4   (       d  M!  XlX4   nXlXU	-   4   nXlX-   U4   nXlX-   X-   4   nXlU	-   X4   nXlU	-   XU	-   4   nXlU	-   X-   U4   nXlU	-   X-   X-   4   n[        R                  " UUUUUUUU/5      nUR                  5       nUR                  5       nUU-
  U:  d  M  UU-   S-  XlX-   2XU	-   2XU	-   24'   SX|X-   2XU	-   2XU	-   24'   M     GM     GM"     U	S-  n	U	S:  a  GM  UR                  U5      $ )	Nr   r=   dtyper   Tr   r:   F)r   r   zerosonesboollogical_and
batch_evalrangearrayminmaxreshape)rC   r8   init_resolution	thresholdr;   
resolutionrE   dirty	grid_maskreso	test_maskr3   xyzv0v1v2v3v4v5v6v7r   v_minv_maxs                             r   r>   r>   A   s   
 a"J
((:
CGGJd+E40Ia=O+D
(*. 	!JqM$&*Q-(<JqM$&' 	(NN94	9%#F;O 19q*Q-$.5A1jmd2D9q*Q-$"6=A TQYAIq19}!LM WBt8^,B!^,B!(23BXq^,BXqd(23BXqx23BXqx9:B"b"b"b"b!ABAEEGEEEGE2+05=A*= ahJd(
$hJ' (DIj!H*aDj@A# > : 6( 	
? (B ;;z""r   c                    U R                   S   n[        R                  " U5      nX2-  n[        U5       H%  nU" U S S 2Xb-  Xb-  U-   24   5      XFU-  Xb-  U-   & M'     X2-  (       a  U" U S S 2UU-  S 24   5      XEU-  S & U$ )Nr   )r   r   rS   rX   )r3   r8   r;   num_ptsrE   num_batchesis          r   rW   rW   p   s    ll1oG
((7
C(K;=F1aoao&CCCD>FOAOk9:   *3F1k=H?I ?J <J 5K +L+%&'Jr   )r   r   r   )r   r   r   c                    [         R                  S U 2S U 2S U 24   nUR                  SS5      n[         R                  " S5      nX!-
  nUS   U -  US'   US   U -  US'   US   U -  US	'   XSS2S4'   [         R                  " US S2S S24   U5      US S2SS24   -   nUbB  [         R                  " US S2S S24   U5      US S2SS24   -   n[         R                  " X55      nUR                  SX U 5      nXE4$ )
Nr<   r=   r   )r   r   r   )r   r   r   )r   r   )r   mgridr\   eyerA   )resb_minb_max	transformrC   coords_matrixlengths          r   create_gridr   ~   s,    XXdsdDSD$3$&'F^^Ar"FFF1IM]F )c/M$ )c/M$ )c/M$!!A#q&YY}RaR!V,f5bqb!A#g8NNF9RaR!V,f5	"1"ac'8JJ		);^^As-F  r   c                 j   U n UnUnUbr  UR                   S:w  a'  [        R                  " [        U 5      [        S9nSXs'   OUn[        R
                  " XqR                  5          R                  SS5      SS9U:  nO8Ub5  UR                   S:w  a#  [        R                  " [        U5      [        S9nOUnUW   n	[        [        U	R                  5       5      5      n
S[        R                  " [        U 5      /5      -  n[        S[        U
5      5      X'   X
   nXj   nX   R                  S	5      n	XXU
4$ )
NrU   rQ   Trv   r<   r   r)   r   int32)rR   r   rS   r   rU   sumravelr\   listsetrT   rX   astype)r   r   colorverts_retainedfaces_retainedmin_vert_in_facer   	vert_mask
bool_faces	new_faces
vertex_idsoldtonew	new_verts
new_colorss                 r   get_submeshr      s$    EEF!6)U48I(,I%&IVVkkm$,,R3!=?OP
		#6)#n"5TBJ'Jj!Ic)//+,-JBGGSZL))H C
O4H!I#J#**73I**EEr   )iP  )@   g{Gz?   )r   )NNr   )osr?   r2   r   r!   r   r   r&   rG   rO   r>   rW   rY   r   r    r   r   <module>r      ss    	   	$ !)	,#^ hhy)hhy)!4  $#!"Fr   