Skip to content

Instantly share code, notes, and snippets.

@PolarNick239
Last active June 18, 2019 11:39
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 1 You must be signed in to fork a gist
  • Save PolarNick239/fd2931434c4796f53f26d03622649179 to your computer and use it in GitHub Desktop.
Save PolarNick239/fd2931434c4796f53f26d03622649179 to your computer and use it in GitHub Desktop.
Metashape benchmark for Dense Cloud and alignment
import Metashape
# wget https://www.dropbox.com/s/hh5yg0fmpr4bpn3/benchmarking_1.3.zip
# unzip benchmarking_1.3.zip
project = "benchmark2.psz"
Metashape.app.gpu_mask = (2 ** 16) - 1
Metashape.app.cpu_enable = False
Metashape.app.document.open(project, read_only=True)
chunk = Metashape.app.document.chunk
measurements = []
def simplify_quality(quality):
# Examples:
# Metashape.Quality.LowQuality -> Low
# Metashape.Accuracy.LowestAccuracy -> Lowest
quality = str(quality).split('.')[-1]
suffixes = ["Quality", "Accuracy"]
for suffix in suffixes:
if quality.endswith(suffix):
quality = quality[:-len(suffix)]
return quality
def format_time(t):
t = float(t)
if t > 60.0:
return "{} min {} sec".format(int(t / 60), int(t % 60))
else:
return "{} sec".format(int(t))
for quality in [Metashape.MediumQuality]:#[Metashape.HighQuality, Metashape.MediumQuality, Metashape.LowQuality]:
chunk.buildDepthMaps(quality=quality, filter=Metashape.AggressiveFiltering)
chunk.buildDenseCloud()
measurements.append("Depth maps {: <6s} in {}".format(simplify_quality(quality), format_time(chunk.dense_cloud.meta['BuildDepthMaps/duration'])))
measurements.append("Dense cloud {: <6s} in {}".format(simplify_quality(quality), format_time(chunk.dense_cloud.meta['BuildDenseCloud/duration'])))
for quality in [Metashape.HighAccuracy]:#[Metashape.HighAccuracy, Metashape.MediumAccuracy, Metashape.LowAccuracy]:
chunk.point_cloud = None
for c in chunk.cameras:
c.transform = None
chunk.matchPhotos(quality, keypoint_limit=40000, tiepoint_limit=10000)
chunk.alignCameras(adaptive_fitting=True)
measurements.append("Matching {: <6s} in {}".format(simplify_quality(quality), format_time(chunk.point_cloud.meta['MatchPhotos/duration'])))
measurements.append("Alignment {: <6s} in {}".format(simplify_quality(quality), format_time(chunk.meta['AlignCameras/duration'])))
print()
print("Build: {}".format(chunk.point_cloud.meta['Info/OriginalSoftwareVersion']))
print("GPU mask: {}".format(Metashape.app.gpu_mask))
gpu_devices = Metashape.app.enumGPUDevices()
print("{} GPU devices:".format(len(gpu_devices)))
for d in gpu_devices:
print(" - {}".format(d['name']))
print()
print("Measurements:")
for line in measurements:
print(line)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment