
     h0                     >   d dl Z d dlZd dlZd dlZd dlmZ d dlm	Z
 de j                  d<   d dlZ	 d dlmZ  e        dZ e
j"                   e
j$                          e
j&                  dd      g      Zd	 Zej,                  fd
ZddZd ZddZy# e$ r dZY [w xY w)    N)exif_transpose1OPENCV_IO_ENABLE_OPENEXR)register_heif_openerTF)      ?r   r   c                 <    t        | t              rt        |       } | S N)
isinstancestr
imread_cv2)imgs    @/home/cameronsmith/repos/controll3r/dust3r/dust3r/utils/image.py
img_to_arrr      s    #soJ    c                     | j                  d      rt        j                  }t        j                  | |      }|t	        d|  d|      |j
                  dk(  r$t        j                  |t        j                        }|S )z5 Open an image or a depthmap with opencv-python.
    )z.exrEXRzCould not load image=z with options=   )endswithcv2IMREAD_ANYDEPTHimreadIOErrorndimcvtColorCOLOR_BGR2RGB)pathoptionsr   s      r   r   r      so     }}_%%%
**T7
#C
{-dV?'DEE
xx1}ll3 1 12Jr   c                    t        | t              r| D cg c]  }t        ||       c}S t        | t        j                        r,| j                         j                         j                         } | j                  dk(  r&| j                  d   dk(  r| j                  ddd      } n5| j                  dk(  r&| j                  d   dk(  r| j                  dddd      } ||\  }}| d |d |f   } | j                  t        j                  k(  rt        j                  |       dz  }n| dz  dz   }|j                  dd	      S c c}w )
N)
true_shaper   r               r   )minmax)r
   listrgbtorchTensordetachcpunumpyr   shape	transposedtypenpuint8float32clip)ftensorr   xHWr   s         r   r'   r'   ,   s    '4 7>?!A*-??'5<<(.."&&(..0||qW]]1-2##Aq!,		w}}Q/14##Aq!Q/1"1"bqb&/}} jj!C'}#88q8!! @s   D?c                    t        | j                        kD  rt        j                  j                  }nk  rt        j                  j
                  }t        fd| j                  D              }| j                  |      S )Nc              3   R   K   | ]  }t        t        |z  z                 y wr	   )intround).0r5   Slong_edge_sizes     r   	<genexpr>z$_resize_pil_image.<locals>.<genexpr>E   s%     FSq/123Fs   $')r%   sizePILImageLANCZOSBICUBICtupleresize)r   r>   interpnew_sizer=   s    `  @r   _resize_pil_imagerI   ?   sc    CHHA>""	
n	""FSXXFFH::h''r   c                 ~   t        | t              r1|rt        d|         | t        t	        j
                  |             }}nJt        | t              r|rt        dt        |        d       d| }}nt        d| dt        |        d      g d}t        r|d	d
gz  }t        |      }g }|D ]  }|j                         j                  |      s$t        t        j                   j#                  t        j$                  j'                  ||                  j)                  d      }	|	j*                  \  }
}|dk(  r)t-        |	t/        |t1        |
|z  ||
z        z              }	nt-        |	|      }	|	j*                  \  }}|dz  |dz  }}|dk(  r.t3        ||      }|	j5                  ||z
  ||z
  ||z   ||z   f      }	nFd|z  dz  dz  d|z  dz  dz  }}|s||k(  rd|z  dz  }|	j5                  ||z
  ||z
  ||z   ||z   f      }	|	j*                  \  }}|rt        d| d|
 d| d| d| 
       |j7                  t9        t;        |	      d   t=        j>                  |	j*                  ddd   g      t        |      t        t        |                          |s
J d|z          |rt        dt        |       d       |S )zW open and convert all images in a list or folder to proper input format for DUSt3R
    z>> Loading images from z>> Loading a list of z images zbad folder_or_list=z ())z.jpgz.jpegz.pngz.heicz.heifRGB   r!         r   r"   z
 - adding z with resolution r5   z --> N)r   r   idxinstancezno images foud at z (Found z images)) r
   r   printsortedoslistdirr&   len
ValueErrortypeheif_support_enabledrE   lowerr   r   rA   rB   openr   joinconvertr@   rI   r;   r%   r$   cropappenddictImgNormr0   int32)folder_or_listr@   	square_okverboserootfolder_contentsupported_images_extensionsimgsr   r   W1H1r7   r6   cxcyhalfhalfwhalfhW2H2s                        r   load_imagesru   I   s    .#&+N+;<=-vbjj6P/Qn	ND	))#n*=)>gFG!>n /043G2HJKK";#'99#"'(C"DD Hzz|$$%@ASYY^^BGGLLt,DEFNNuUB3;#Ctc"R%B6G/G)HIC $C.Cxx1Aq!tB3;r2;D((BtGRWbgr$w?@CrTBJ>QrTBJ>5E16%	((BuHbh5"U(CDCBJtf$5bT2$eB4qMNDWS\$/BHHXXdd^=#&t9s3t9~G 	H3H8 *%d**T8,-Kr   r	   )FT)rV   r(   r,   r0   	PIL.ImagerA   PIL.ImageOpsr   torchvision.transforms
transformstvfenvironr   pillow_heifr   r[   ImportErrorComposeToTensor	Normalizerc   r   IMREAD_COLORr   r'   rI   ru    r   r   <module>r      s    
    ' $),

% & 
!0 #++|s||~}s}}_o'VW
X
 !-- 
"&(5k  ! !s   B BB