kopia lustrzana https://github.com/OpenDroneMap/ODM
Handle large images with GPU_SIFT, update OpenMVS
rodzic
b8cf083020
commit
70face0492
|
@ -52,7 +52,7 @@ ExternalProject_Add(${_proj_name}
|
|||
#--Download step--------------
|
||||
DOWNLOAD_DIR ${SB_DOWNLOAD_DIR}
|
||||
GIT_REPOSITORY https://github.com/OpenDroneMap/openMVS
|
||||
GIT_TAG 268
|
||||
GIT_TAG 270
|
||||
#--Update/Patch step----------
|
||||
UPDATE_COMMAND ""
|
||||
#--Configure step-------------
|
||||
|
|
|
@ -19,7 +19,7 @@ ExternalProject_Add(${_proj_name}
|
|||
#--Download step--------------
|
||||
DOWNLOAD_DIR ${SB_DOWNLOAD_DIR}
|
||||
GIT_REPOSITORY https://github.com/OpenDroneMap/OpenSfM/
|
||||
GIT_TAG 268
|
||||
GIT_TAG 270
|
||||
#--Update/Patch step----------
|
||||
UPDATE_COMMAND git submodule update --init --recursive
|
||||
#--Configure step-------------
|
||||
|
|
|
@ -8,10 +8,13 @@ def gpu_disabled_by_user():
|
|||
return bool(os.environ.get('ODM_NO_GPU'))
|
||||
|
||||
@lru_cache(maxsize=None)
|
||||
def has_popsift():
|
||||
def has_popsift_and_can_handle_texsize(width, height):
|
||||
try:
|
||||
from opensfm import pypopsift
|
||||
return True
|
||||
fits = pypopsift.fits_texture(width, height)
|
||||
if not fits:
|
||||
log.ODM_WARNING("Image size (%sx%spx) would not fit in GPU memory, falling back to CPU" % (width, height))
|
||||
return fits
|
||||
except:
|
||||
return False
|
||||
|
||||
|
|
|
@ -14,14 +14,14 @@ from opendm import context
|
|||
from opendm import camera
|
||||
from opendm import location
|
||||
from opendm.utils import get_depthmap_resolution
|
||||
from opendm.photo import find_largest_photo_dim
|
||||
from opendm.photo import find_largest_photo_dim, find_largest_photo
|
||||
from opensfm.large import metadataset
|
||||
from opensfm.large import tools
|
||||
from opensfm.actions import undistort
|
||||
from opensfm.dataset import DataSet
|
||||
from opensfm import report
|
||||
from opendm.multispectral import get_photos_by_band
|
||||
from opendm.gpu import has_popsift, has_gpu
|
||||
from opendm.gpu import has_popsift_and_can_handle_texsize, has_gpu
|
||||
from opensfm import multiview, exif
|
||||
from opensfm.actions.export_geocoords import _transform
|
||||
|
||||
|
@ -201,9 +201,19 @@ class OSFMContext:
|
|||
config.append("matcher_type: %s" % osfm_matchers[matcher_type])
|
||||
|
||||
# GPU acceleration?
|
||||
if has_gpu() and has_popsift() and feature_type == "SIFT":
|
||||
log.ODM_INFO("Using GPU for extracting SIFT features")
|
||||
feature_type = "SIFT_GPU"
|
||||
if has_gpu():
|
||||
max_photo = find_largest_photo(photos)
|
||||
w, h = max_photo.width, max_photo.height
|
||||
if w > h:
|
||||
h = (h / w) * feature_process_size
|
||||
w = feature_process_size
|
||||
else:
|
||||
w = (w / h) * feature_process_size
|
||||
h = feature_process_size
|
||||
|
||||
if has_popsift_and_can_handle_texsize(w, h) and feature_type == "SIFT":
|
||||
log.ODM_INFO("Using GPU for extracting SIFT features")
|
||||
feature_type = "SIFT_GPU"
|
||||
|
||||
config.append("feature_type: %s" % feature_type)
|
||||
|
||||
|
|
|
@ -41,6 +41,20 @@ def find_largest_photo_dim(photos):
|
|||
|
||||
return max_dim
|
||||
|
||||
def find_largest_photo(photos):
|
||||
max_p = None
|
||||
max_area = 0
|
||||
for p in photos:
|
||||
if p.width is None:
|
||||
continue
|
||||
area = p.width * p.height
|
||||
|
||||
if area > max_area:
|
||||
max_area = area
|
||||
max_p = p
|
||||
|
||||
return p
|
||||
|
||||
def get_mm_per_unit(resolution_unit):
|
||||
"""Length of a resolution unit in millimeters.
|
||||
|
||||
|
|
Ładowanie…
Reference in New Issue