[cli] add possibility to give a .sfm as input with (optional) intrinsics

This commit is contained in:
Simone Gasparini 2018-12-19 17:55:31 +01:00
parent 863dde26f0
commit d1d93d337d
No known key found for this signature in database
GPG key ID: 82846D6BBE0A3362
2 changed files with 34 additions and 4 deletions

View file

@ -1,5 +1,8 @@
#!/usr/bin/env python
import argparse
import json
import os
import io
import meshroom
meshroom.setupEnvironment()
@ -43,6 +46,32 @@ if not args.input and not args.inputImages:
print('Nothing to compute. You need to set --input or --inputImages.')
exit(1)
if args.input and os.path.isfile(args.input):
# with open(args.input) as jsonFile:
with io.open(args.input, 'r', encoding='utf-8', errors='ignore') as jsonFile:
fileData = json.load(jsonFile)
intrinsics = fileData.get("intrinsics", [])
print(intrinsics)
intrinsics = [{k: v for k, v in item.items()} for item in fileData.get("intrinsics", [])]
for intrinsic in intrinsics:
pp = intrinsic['principalPoint']
intrinsic['principalPoint'] = {}
intrinsic['principalPoint']['x'] = pp[0]
intrinsic['principalPoint']['y'] = pp[1]
# convert empty string distortionParams (i.e: Pinhole model) to empty list
if intrinsic['distortionParams'] == '':
intrinsic['distortionParams'] = list()
print(intrinsics)
# views = fileData.get("views", [])
views = [{k: v for k, v in item.items()} for item in fileData.get("views", [])]
for view in views:
view['metadata'] = json.dumps(view['metadata']) # convert metadata to string
# print(views)
graph = multiview.photogrammetry(inputViewpoints=views, inputIntrinsics=intrinsics, inputImages=args.inputImages, output=args.output)
graph.findNode('DepthMap_1').downscale.value = args.scale
else:
graph = multiview.photogrammetry(inputFolder=args.input, inputImages=args.inputImages, output=args.output)
graph.findNode('DepthMap_1').downscale.value = args.scale
@ -62,4 +91,3 @@ if args.toNode:
toNodes = graph.findNodes(args.toNode)
meshroom.core.graph.executeGraph(graph, toNodes=toNodes, forceCompute=args.forceCompute, forceStatus=args.forceStatus)

View file

@ -20,7 +20,7 @@ def findFiles(folder, patterns):
return outFiles
def photogrammetry(inputFolder='', inputImages=(), inputViewpoints=(), output=''):
def photogrammetry(inputFolder='', inputImages=(), inputViewpoints=(), inputIntrinsics=(), output=''):
"""
Create a new Graph with a complete photogrammetry pipeline.
@ -44,6 +44,8 @@ def photogrammetry(inputFolder='', inputImages=(), inputViewpoints=(), output=''
cameraInit.viewpoints.extend([{'path': image} for image in inputImages])
if inputViewpoints:
cameraInit.viewpoints.extend(inputViewpoints)
if inputIntrinsics:
cameraInit.intrinsics.extend(inputIntrinsics)
if output:
texturing = mvsNodes[-1]