mirror of
https://github.com/alicevision/Meshroom.git
synced 2025-06-05 20:31:56 +02:00
refactoring: function readSfMData() to read sfm files
This commit is contained in:
parent
e1c5a6c5e7
commit
c0eb556eea
2 changed files with 36 additions and 43 deletions
|
@ -8,6 +8,7 @@ import meshroom
|
||||||
meshroom.setupEnvironment()
|
meshroom.setupEnvironment()
|
||||||
|
|
||||||
import meshroom.core.graph
|
import meshroom.core.graph
|
||||||
|
from meshroom.nodes.aliceVision.CameraInit import readSfMData
|
||||||
from meshroom import multiview
|
from meshroom import multiview
|
||||||
|
|
||||||
parser = argparse.ArgumentParser(description='Launch the full photogrammetry pipeline.')
|
parser = argparse.ArgumentParser(description='Launch the full photogrammetry pipeline.')
|
||||||
|
@ -47,27 +48,9 @@ if not args.input and not args.inputImages:
|
||||||
exit(1)
|
exit(1)
|
||||||
|
|
||||||
if args.input and os.path.isfile(args.input):
|
if args.input and os.path.isfile(args.input):
|
||||||
# with open(args.input) as jsonFile:
|
views, intrinsics = readSfMData(args.input)
|
||||||
with io.open(args.input, 'r', encoding='utf-8', errors='ignore') as jsonFile:
|
print(views)
|
||||||
fileData = json.load(jsonFile)
|
|
||||||
intrinsics = fileData.get("intrinsics", [])
|
|
||||||
print(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 = multiview.photogrammetry(inputViewpoints=views, inputIntrinsics=intrinsics, inputImages=args.inputImages, output=args.output)
|
||||||
graph.findNode('DepthMap_1').downscale.value = args.scale
|
graph.findNode('DepthMap_1').downscale.value = args.scale
|
||||||
|
|
|
@ -45,6 +45,38 @@ Intrinsic = [
|
||||||
value=False, uid=[0]),
|
value=False, uid=[0]),
|
||||||
]
|
]
|
||||||
|
|
||||||
|
def readSfMData(sfmFile):
|
||||||
|
""" Read views and intrinsics from a .sfm file
|
||||||
|
|
||||||
|
Args:
|
||||||
|
sfmFile: the .sfm file containing views and intrinsics
|
||||||
|
|
||||||
|
Returns:
|
||||||
|
The views and intrinsics of the .sfm as two separate lists
|
||||||
|
"""
|
||||||
|
import io # use io.open for Python2/3 compatibility (allow to specify encoding + errors handling)
|
||||||
|
# skip decoding errors to avoid potential exceptions due to non utf-8 characters in images metadata
|
||||||
|
with io.open(sfmFile, 'r', encoding='utf-8', errors='ignore') as f:
|
||||||
|
data = json.load(f)
|
||||||
|
|
||||||
|
intrinsicsKeys = [i.name for i in Intrinsic]
|
||||||
|
|
||||||
|
intrinsics = [{k: v for k, v in item.items() if k in intrinsicsKeys} for item in data.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:', intrinsics)
|
||||||
|
viewsKeys = [v.name for v in Viewpoint]
|
||||||
|
views = [{k: v for k, v in item.items() if k in viewsKeys} for item in data.get("views", [])]
|
||||||
|
for view in views:
|
||||||
|
view['metadata'] = json.dumps(view['metadata']) # convert metadata to string
|
||||||
|
print('views:', views)
|
||||||
|
return views, intrinsics
|
||||||
|
|
||||||
class CameraInit(desc.CommandLineNode):
|
class CameraInit(desc.CommandLineNode):
|
||||||
commandLine = 'aliceVision_cameraInit {allParams} --allowSingleView 1' # don't throw an error if there is only one image
|
commandLine = 'aliceVision_cameraInit {allParams} --allowSingleView 1' # don't throw an error if there is only one image
|
||||||
|
@ -134,28 +166,7 @@ class CameraInit(desc.CommandLineNode):
|
||||||
|
|
||||||
# Reload result of aliceVision_cameraInit
|
# Reload result of aliceVision_cameraInit
|
||||||
cameraInitSfM = node.output.value
|
cameraInitSfM = node.output.value
|
||||||
import io # use io.open for Python2/3 compatibility (allow to specify encoding + errors handling)
|
return readSfMData(cameraInitSfM)
|
||||||
# skip decoding errors to avoid potential exceptions due to non utf-8 characters in images metadata
|
|
||||||
with io.open(cameraInitSfM, 'r', encoding='utf-8', errors='ignore') as f:
|
|
||||||
data = json.load(f)
|
|
||||||
|
|
||||||
intrinsicsKeys = [i.name for i in Intrinsic]
|
|
||||||
intrinsics = [{k: v for k, v in item.items() if k in intrinsicsKeys} for item in data.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:', intrinsics)
|
|
||||||
viewsKeys = [v.name for v in Viewpoint]
|
|
||||||
views = [{k: v for k, v in item.items() if k in viewsKeys} for item in data.get("views", [])]
|
|
||||||
for view in views:
|
|
||||||
view['metadata'] = json.dumps(view['metadata']) # convert metadata to string
|
|
||||||
# print('views:', views)
|
|
||||||
return views, intrinsics
|
|
||||||
|
|
||||||
except Exception:
|
except Exception:
|
||||||
raise
|
raise
|
||||||
|
@ -198,4 +209,3 @@ class CameraInit(desc.CommandLineNode):
|
||||||
def processChunk(self, chunk):
|
def processChunk(self, chunk):
|
||||||
self.createViewpointsFile(chunk.node)
|
self.createViewpointsFile(chunk.node)
|
||||||
desc.CommandLineNode.processChunk(self, chunk)
|
desc.CommandLineNode.processChunk(self, chunk)
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue