a `§»e ã@sžddlZddlZddlZddlZddlmZddlmZddl m Z ddl m Z Gdd„dej ƒZdd „Zd d „Zd d „Zdd„Zdd„Zdd„Zdd„ZdS)éN)Úlog)Úfind_largest_photo_dims)Úgdal)Ú double_quotec@seZdZdd„ZdS)Ú NumpyEncodercCs"t|tjƒr| ¡Stj ||¡S©N)Ú isinstanceÚnpZndarrayÚtolistÚjsonÚ JSONEncoderÚdefault)ÚselfÚobj©rú/code/opendm/utils.pyr s zNumpyEncoder.defaultN)Ú__name__Ú __module__Ú __qualname__r rrrrr src CsŽt|ƒ}d}|dur||\}}t||ƒ}||d}d}|dkrDd}n |dkrPd}ddd d d d œ} t|t|| |j|ƒƒSt d ¡dSdS)Ni@g€„.Aéééé*gà?gÐ?gÀ?gHáz®G±?gHáz®G¡?)ÚultraÚhighÚmediumÚlowÚlowestzRCannot compute max image dimensions, going with default depthmap_resolution of 640i€)rÚmaxÚintÚ pc_qualityrÚ ODM_WARNING) ÚargsZphotosZmax_dimsZmin_dimÚwÚhZmax_dimZ megapixelsZ multiplierZpc_quality_scalerrrÚget_depthmap_resolutions(  û r%cCs`g}t |¡}t|jƒD]B}| |d¡}| dd¡}| |d|d|d|ddœ¡q|S)NrTrré)ÚminrÚmeanZstddev)rZOpenÚrangeZ RasterCountZ GetRasterBandZ GetStatisticsÚappend)ZgeotiffÚstatsZgtifÚbZsrcbandÚsrrrÚget_raster_stats-s  ü r.cCsgd¢S)N) Úodm_georeferencingÚodm_orthophotoÚodm_demÚ odm_reportZ odm_texturingZentwine_pointcloudZ dsm_tilesZ dtm_tilesZorthophoto_tilesÚ3d_tilesz images.jsonz cameras.jsonzlog.jsonrrrrrÚget_processing_results_paths=sr4c Cs tj |¡st |¡|D]þ}tj |¡}tj ||¡}|r¸z>tj |¡sXtj |¡rdt |¡ntj |¡rzt   |¡Wn:t y¶}z"t   d|t|ƒf¡WYd}~n d}~00tj |¡stj |¡rðt  d||f¡t  ||¡qtj |¡rt  ||¡t  d||f¡qdS)Nz&Cannot remove file %s: %s, skipping...zCopying %s --> %s)ÚosÚpathÚisdirÚmakedirsÚbasenameÚjoinÚisfileÚislinkÚremoveÚshutilÚrmtreeÚ Exceptionrr!ÚstrÚexistsÚODM_INFOÚcopyÚcopytree)ÚpathsÚ destinationÚrerunÚpr9Zdst_pathÚerrrÚ copy_pathsNs(      ,    rKcCs^z>tj |¡r&tj |¡s&t |¡ntj |¡rr?rBr=rr!)r6rrrÚrm_rgs  rLcCstj|tdS)N)Úcls)r Údumpsr)ZarrrrrÚ np_to_jsonpsrOcCst t |¡¡Sr)r Zasarrayr Úloads)Z json_dumprrrÚ np_from_jsonssrQ)r5r>Znumpyr r ÚopendmrZ opendm.photorZosgeorÚopendm.arghelpersrr rr%r.r4rKrLrOrQrrrrÚs