o
    *j                     @   s   d dl Z d dlZd dlZd dlZdd Zdd Zdd Zdd	d
Zdd Z				dddZ
dddZeg deg ddfddZ			dddZdS )    Nc           
      C   s   t | d}t|D ]!\}}|| }|d|d |d |d |d |d |d f  q	|D ]}|d }	|d|	d |	d |	d f  q-|  d S )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_plus r   p/var/www/html/Deteccion_Ine/venv/lib/python3.10/site-packages/modelscope/models/cv/human_reconstruction/utils.pysave_obj_mesh_with_color   s   
&"r   c                 C   sz   t | d}t|D ]\}}|d|d |d |d f  q	|D ]}|d }|d|d |d |d f  q |  d S )Nr   zv %.4f %.4f %.4f
r   r   r   r   r   )r   r   r   r   r   r   r   r   r   r   r   save_obj_mesh   s   
""r   c                 C   sJ   t | jdkr| d d d d tjf } t| ddd } | d } | S )Nr   r   r   g     o@)lenshapenpZnewaxistorch
from_numpyZ	transposefloat)Zimgr   r   r   	to_tensor   s
   r   P  c           
         sl    fdd}t |||d}t|d\}}t|d dd df |j|d dddf  }	|	j}	|	|fS )Nc                    s\   t j| dd} t j| ddd} t|   }|   }|d }|	 
  S )Nr   Zaxisr   )r   Zexpand_dimsrepeatr   r   cudar   queryZ	get_predsdetachcpunumpy)pointsZsamplespredcalib_tensornetr   r   	eval_func(   s   z!reconstruction.<locals>.eval_funcnum_samplesg      ?      )	eval_gridmcubesZmarching_cubesr   matmulT)
r,   r+   coordsZmatr/   r-   sdfverticesr   r   r   r*   r   reconstruction&   s   	2r9   c                 C   s>   | j dd}|d }|D ]}|jjd |jjd kr|}q|S )NF)Zonly_watertightr   )splitr8   r   )Zmesh_bigZmesh_lstZ	keep_meshZmeshr   r   r   keep_largest8   s   r;   @   {Gz?   c                 C   sr  | j dd }t|}tj|td}tj|td}|d | }	|	dkr4d|d|d |	d|d |	d|d |	f< t||}
| d d |
f }t|||d||
< d||
< |	dkr[ntd|d |	 |	D ]}td|d |	 |	D ]}td|d |	 |	D ]}|||	d  ||	d  ||	d  f sq}||||f }|||||	 f }||||	 |f }||||	 ||	 f }|||	 ||f }|||	 |||	 f }|||	 ||	 |f }|||	 ||	 ||	 f }t||||||||g}|	 }|
 }|| |k r)|| d ||||	 |||	 |||	 f< d||||	 |||	 |||	 f< q}qqqe|	d }	|	dks%||S )	Nr   r1   dtyper   Tr   r.   F)r   r   zerosonesboollogical_and
batch_evalrangearrayminmaxreshape)r6   r-   Zinit_resolution	thresholdr/   
resolutionr7   ZdirtyZ	grid_maskZresoZ	test_maskr(   xyzZv0Zv1Zv2Zv3Zv4Zv5Zv6Zv7r   Zv_minZv_maxr   r   r   r2   A   sX   

&

&
!r2   c                 C   s   | j d }t|}|| }t|D ]}|| d d || || | f ||| || | < q|| rI|| d d || d f ||| d < |S )Nr   )r   r   rA   rF   )r(   r-   r/   Znum_ptsr7   Znum_batchesir   r   r   rE   p   s   

rE   )r   r   r   )r   r   r   c                 C   s  t jd | d | d | f }|dd}t d}|| }|d |  |d< |d |  |d< |d |  |d	< ||dddf< t |d dd df ||d dddf  }|d urwt |d dd df ||d dddf  }t ||}|d| | | }||fS )
Nr0   r1   r   )r   r   r   )r   r   r   )r   r   )r   ZmgridrJ   eyer4   )resZb_minZb_max	transformr6   Zcoords_matrixlengthr   r   r   create_grid~   s   
00rV   r   c                 C   s   | } |}|}|d ur1|j dkrtjt| td}d||< n|}tj||  dddd|k}n|d urF|j dkrDtjt|td}n|}|| }	tt	|	 }
dt
t| g }tdt|
||
< | |
 }||
 }||	 d	}	||	|||
fS )
NrC   r?   TrQ   r0   r   r!   r   Zint32)r@   r   rA   r   rC   sumZravelrJ   listsetrB   rF   Zastype)r   r   colorZverts_retainedZfaces_retainedZmin_vert_in_facer   Z	vert_maskZ
bool_facesZ	new_facesZ
vertex_idsZoldtonewZ	new_vertsZ
new_colorsr   r   r   get_submesh   s2   


r[   )r    )r<   r=   r>   )r>   )NNr   )osr3   r'   r   r   r   r   r   r9   r;   r2   rE   rG   rV   r[   r   r   r   r   <module>   s,    



/
